From 91c4047afd0e04e470182e092ed72b432d9f984a Mon Sep 17 00:00:00 2001 From: Pratapa Lakshmi Date: Tue, 17 Jun 2025 12:47:00 +0530 Subject: [PATCH 001/130] refactor: optimize Dockerfile for web and space applications by refining COPY commands for static assets --- space/Dockerfile.space | 10 +++++----- web/Dockerfile.web | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/space/Dockerfile.space b/space/Dockerfile.space index ecb3fbec78d..68090381455 100644 --- a/space/Dockerfile.space +++ b/space/Dockerfile.space @@ -56,10 +56,10 @@ WORKDIR /app COPY --from=installer /app/space/next.config.js . COPY --from=installer /app/space/package.json . -COPY --from=installer /app/space/.next/standalone ./ - -COPY --from=installer /app/space/.next ./space/.next -COPY --from=installer /app/space/public ./space/public +# Only bring in what's needed for standalone runtime +COPY --from=installer /app/space/.next/standalone ./ +COPY --from=installer /app/space/.next/static ./.next/static +COPY --from=installer /app/space/public ./public ARG NEXT_PUBLIC_API_BASE_URL="" ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL @@ -82,4 +82,4 @@ ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL ENV NEXT_TELEMETRY_DISABLED 1 ENV TURBO_TELEMETRY_DISABLED 1 -EXPOSE 3000 +EXPOSE 3000 \ No newline at end of file diff --git a/web/Dockerfile.web b/web/Dockerfile.web index 56f931adc17..ab36fb9f16a 100644 --- a/web/Dockerfile.web +++ b/web/Dockerfile.web @@ -73,7 +73,7 @@ COPY --from=installer /app/web/package.json . # Automatically leverage output traces to reduce image size # https://nextjs.org/docs/advanced-features/output-file-tracing COPY --from=installer /app/web/.next/standalone ./ -COPY --from=installer /app/web/.next ./web/.next +COPY --from=installer /app/web/.next/static ./web/.next/static COPY --from=installer /app/web/public ./web/public ARG NEXT_PUBLIC_API_BASE_URL="" @@ -103,4 +103,4 @@ ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL ENV NEXT_TELEMETRY_DISABLED 1 ENV TURBO_TELEMETRY_DISABLED 1 -EXPOSE 3000 +EXPOSE 3000 \ No newline at end of file From 6fd448ddace1250df27e514714d5ec9b0cdbab8e Mon Sep 17 00:00:00 2001 From: Pratapa Lakshmi Date: Tue, 17 Jun 2025 15:15:26 +0530 Subject: [PATCH 002/130] refactor: update Dockerfile for space and web applications to correct asset paths and improve structure --- space/Dockerfile.space | 4 ++-- web/Dockerfile.web | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/space/Dockerfile.space b/space/Dockerfile.space index 68090381455..a52f84f714a 100644 --- a/space/Dockerfile.space +++ b/space/Dockerfile.space @@ -56,10 +56,10 @@ WORKDIR /app COPY --from=installer /app/space/next.config.js . COPY --from=installer /app/space/package.json . -# Only bring in what's needed for standalone runtime COPY --from=installer /app/space/.next/standalone ./ + COPY --from=installer /app/space/.next/static ./.next/static -COPY --from=installer /app/space/public ./public +COPY --from=installer /app/space/public ./space/public ARG NEXT_PUBLIC_API_BASE_URL="" ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL diff --git a/web/Dockerfile.web b/web/Dockerfile.web index ab36fb9f16a..037f552c8ed 100644 --- a/web/Dockerfile.web +++ b/web/Dockerfile.web @@ -73,6 +73,7 @@ COPY --from=installer /app/web/package.json . # Automatically leverage output traces to reduce image size # https://nextjs.org/docs/advanced-features/output-file-tracing COPY --from=installer /app/web/.next/standalone ./ + COPY --from=installer /app/web/.next/static ./web/.next/static COPY --from=installer /app/web/public ./web/public From 59a682f6d9de214ac7399060907f3187378c46e4 Mon Sep 17 00:00:00 2001 From: Pratapa Lakshmi Date: Tue, 17 Jun 2025 15:58:43 +0530 Subject: [PATCH 003/130] fix: update Dockerfile for space application to correct static asset path --- space/Dockerfile.space | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/space/Dockerfile.space b/space/Dockerfile.space index a52f84f714a..03a2b317f92 100644 --- a/space/Dockerfile.space +++ b/space/Dockerfile.space @@ -58,7 +58,7 @@ COPY --from=installer /app/space/package.json . COPY --from=installer /app/space/.next/standalone ./ -COPY --from=installer /app/space/.next/static ./.next/static +COPY --from=installer /app/space/.next/static ./space/.next/static COPY --from=installer /app/space/public ./space/public ARG NEXT_PUBLIC_API_BASE_URL="" From f36d0691fe7f25eb69f6adef3737c99ae28502e5 Mon Sep 17 00:00:00 2001 From: Dheeraj Kumar Ketireddy Date: Tue, 1 Jul 2025 12:36:27 +0530 Subject: [PATCH 004/130] Chore: replace relation choices with TextChoices in IssueRelation model (#7295) --- apiserver/plane/db/models/issue.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/apiserver/plane/db/models/issue.py b/apiserver/plane/db/models/issue.py index dad7aab3f56..17ec0c60de8 100644 --- a/apiserver/plane/db/models/issue.py +++ b/apiserver/plane/db/models/issue.py @@ -271,15 +271,15 @@ def __str__(self): return f"{self.block.name} {self.blocked_by.name}" -class IssueRelation(ProjectBaseModel): - RELATION_CHOICES = ( - ("duplicate", "Duplicate"), - ("relates_to", "Relates To"), - ("blocked_by", "Blocked By"), - ("start_before", "Start Before"), - ("finish_before", "Finish Before"), - ) +class IssueRelationChoices(models.TextChoices): + DUPLICATE = "duplicate", "Duplicate" + RELATES_TO = "relates_to", "Relates To" + BLOCKED_BY = "blocked_by", "Blocked By" + START_BEFORE = "start_before", "Start Before" + FINISH_BEFORE = "finish_before", "Finish Before" + +class IssueRelation(ProjectBaseModel): issue = models.ForeignKey( Issue, related_name="issue_relation", on_delete=models.CASCADE ) @@ -288,9 +288,9 @@ class IssueRelation(ProjectBaseModel): ) relation_type = models.CharField( max_length=20, - choices=RELATION_CHOICES, + choices=IssueRelationChoices.choices, verbose_name="Issue Relation Type", - default="blocked_by", + default=IssueRelationChoices.BLOCKED_BY, ) class Meta: From b03844ee2de2ecf380b3b0ec3ad9e405155e2bc5 Mon Sep 17 00:00:00 2001 From: Aaron Date: Tue, 1 Jul 2025 00:24:39 -0700 Subject: [PATCH 005/130] [WEB-4417] chore: optimize package imports instead of transpile #7292 --- admin/next.config.js | 28 +++++++++++++++------------- space/next.config.js | 28 +++++++++++++++------------- web/next.config.js | 24 +++++++++++------------- 3 files changed, 41 insertions(+), 39 deletions(-) diff --git a/admin/next.config.js b/admin/next.config.js index 421f645e8b1..c848e0b9255 100644 --- a/admin/next.config.js +++ b/admin/next.config.js @@ -9,19 +9,21 @@ const nextConfig = { unoptimized: true, }, basePath: process.env.NEXT_PUBLIC_ADMIN_BASE_PATH || "", - transpilePackages: [ - "@plane/constants", - "@plane/editor", - "@plane/hooks", - "@plane/i18n", - "@plane/logger", - "@plane/propel", - "@plane/services", - "@plane/shared-state", - "@plane/types", - "@plane/ui", - "@plane/utils", - ], + experimental: { + optimizePackageImports: [ + "@plane/constants", + "@plane/editor", + "@plane/hooks", + "@plane/i18n", + "@plane/logger", + "@plane/propel", + "@plane/services", + "@plane/shared-state", + "@plane/types", + "@plane/ui", + "@plane/utils", + ], + }, }; module.exports = nextConfig; diff --git a/space/next.config.js b/space/next.config.js index 2d3e4e788b8..a736f4f6452 100644 --- a/space/next.config.js +++ b/space/next.config.js @@ -23,19 +23,21 @@ const nextConfig = { ], unoptimized: true, }, - transpilePackages: [ - "@plane/constants", - "@plane/editor", - "@plane/hooks", - "@plane/i18n", - "@plane/logger", - "@plane/propel", - "@plane/services", - "@plane/shared-state", - "@plane/types", - "@plane/ui", - "@plane/utils", - ], + experimental: { + optimizePackageImports: [ + "@plane/constants", + "@plane/editor", + "@plane/hooks", + "@plane/i18n", + "@plane/logger", + "@plane/propel", + "@plane/services", + "@plane/shared-state", + "@plane/types", + "@plane/ui", + "@plane/utils", + ], + }, }; module.exports = nextConfig; diff --git a/web/next.config.js b/web/next.config.js index 34c3c3a7fca..a429bf91cf7 100644 --- a/web/next.config.js +++ b/web/next.config.js @@ -31,21 +31,19 @@ const nextConfig = { "lodash", "clsx", "tailwind-merge", + "@plane/constants", + "@plane/editor", + "@plane/hooks", + "@plane/i18n", + "@plane/logger", + "@plane/propel", + "@plane/services", + "@plane/shared-state", + "@plane/types", + "@plane/ui", + "@plane/utils", ], }, - transpilePackages: [ - "@plane/constants", - "@plane/editor", - "@plane/hooks", - "@plane/i18n", - "@plane/logger", - "@plane/propel", - "@plane/services", - "@plane/shared-state", - "@plane/types", - "@plane/ui", - "@plane/utils", - ], async redirects() { return [ { From fa9c63716ccafc77e1d28f4504b7d50c2ecab5f5 Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Tue, 1 Jul 2025 19:19:44 +0530 Subject: [PATCH 006/130] fix: circular dependencies between packages (#7277) --- admin/package.json | 2 +- live/.babelrc | 23 - live/package.json | 13 +- live/src/core/helpers/logger.ts | 3 +- live/tsup.config.ts | 19 +- packages/constants/src/analytics/common.ts | 3 +- packages/constants/src/chart.ts | 33 +- packages/constants/src/intake.ts | 34 +- packages/constants/src/issue/common.ts | 23 +- packages/constants/src/issue/filter.ts | 3 +- packages/constants/src/payment.ts | 13 +- packages/constants/src/profile.ts | 16 +- packages/constants/src/state.ts | 33 +- packages/constants/src/user.ts | 12 - packages/constants/src/views.ts | 5 +- packages/constants/src/workspace.ts | 3 +- packages/decorators/README.md | 2 +- packages/editor/package.json | 3 + packages/logger/package.json | 12 +- packages/types/package.json | 4 +- .../types/src/{activity.d.ts => activity.ts} | 0 packages/types/src/{ai.d.ts => ai.ts} | 3 +- .../src/{analytics.d.ts => analytics.ts} | 39 +- .../src/{api_token.d.ts => api_token.ts} | 0 packages/types/src/{auth.d.ts => auth.ts} | 0 .../types/src/{calendar.d.ts => calendar.ts} | 0 .../src/charts/{common.d.ts => common.ts} | 0 .../types/src/charts/{index.d.ts => index.ts} | 2 +- ...ommand-palette.d.ts => command-palette.ts} | 0 packages/types/src/{common.d.ts => common.ts} | 0 .../current-user/{profile.d.ts => profile.ts} | 0 .../types/src/cycle/{cycle.d.ts => cycle.ts} | 3 +- .../{cycle_filters.d.ts => cycle_filters.ts} | 0 .../types/src/cycle/{index.d.ts => index.ts} | 0 .../src/{dashboard.d.ts => dashboard.ts} | 6 +- .../types/src/{de-dupe.d.ts => de-dupe.ts} | 0 ...on_version.d.ts => description_version.ts} | 0 packages/types/src/{epics.d.ts => epics.ts} | 0 .../types/src/{estimate.d.ts => estimate.ts} | 0 .../favorite/{favorite.d.ts => favorite.ts} | 0 .../src/favorite/{index.d.ts => index.ts} | 0 packages/types/src/{file.d.ts => file.ts} | 0 packages/types/src/{home.d.ts => home.ts} | 0 ...ithub-importer.d.ts => github-importer.ts} | 0 .../src/importer/{index.d.ts => index.ts} | 0 .../{jira-importer.d.ts => jira-importer.ts} | 2 +- packages/types/src/{inbox.d.ts => inbox.ts} | 36 +- packages/types/src/{index.d.ts => index.ts} | 0 .../types/src/instance/{ai.d.ts => ai.ts} | 0 .../types/src/instance/{auth.d.ts => auth.ts} | 2 +- .../types/src/instance/{base.d.ts => base.ts} | 0 .../src/instance/{email.d.ts => email.ts} | 0 .../src/instance/{image.d.ts => image.ts} | 0 .../src/instance/{index.d.ts => index.ts} | 0 .../instance/{workspace.d.ts => workspace.ts} | 0 .../src/{integration.d.ts => integration.ts} | 2 +- packages/types/src/{issues.d.ts => issues.ts} | 59 +- .../issues/activity/{base.d.ts => base.ts} | 2 +- ...{issue_activity.d.ts => issue_activity.ts} | 3 +- .../{issue_comment.d.ts => issue_comment.ts} | 52 + ...eaction.d.ts => issue_comment_reaction.ts} | 0 .../types/src/issues/{base.d.ts => base.ts} | 3 - .../types/src/issues/{issue.d.ts => issue.ts} | 30 +- ...ue_attachment.d.ts => issue_attachment.ts} | 0 .../issues/{issue_link.d.ts => issue_link.ts} | 0 ...{issue_reaction.d.ts => issue_reaction.ts} | 0 ...{issue_relation.d.ts => issue_relation.ts} | 5 +- ...ue_sub_issues.d.ts => issue_sub_issues.ts} | 0 ...ubscription.d.ts => issue_subscription.ts} | 0 .../types/src/layout/{gantt.d.ts => gantt.ts} | 0 .../types/src/module/{index.d.ts => index.ts} | 0 ...{module_filters.d.ts => module_filters.ts} | 0 .../src/module/{modules.d.ts => modules.ts} | 4 +- .../types/src/page/{core.d.ts => core.ts} | 0 .../src/page/{extended.d.ts => extended.ts} | 0 .../types/src/page/{index.d.ts => index.ts} | 0 .../types/src/{payment.d.ts => payment.ts} | 8 +- .../src/{pragmatic.d.ts => pragmatic.ts} | 0 ...roject_filters.d.ts => project_filters.ts} | 0 .../{project_link.d.ts => project_link.ts} | 0 .../project/{projects.d.ts => projects.ts} | 14 +- .../types/src/{publish.d.ts => publish.ts} | 15 +- .../types/src/{reaction.d.ts => reaction.ts} | 0 packages/types/src/{search.d.ts => search.ts} | 0 packages/types/src/{state.d.ts => state.ts} | 2 - packages/types/src/stickies.d copy.ts | 8 - .../types/src/{stickies.d.ts => stickies.ts} | 0 .../types/src/{timezone.d.ts => timezone.ts} | 0 packages/types/src/{users.d.ts => users.ts} | 19 +- packages/types/src/{utils.d.ts => utils.ts} | 0 .../src/{view-props.d.ts => view-props.ts} | 12 - packages/types/src/{views.d.ts => views.ts} | 6 +- .../types/src/{waitlist.d.ts => waitlist.ts} | 0 .../types/src/{webhook.d.ts => webhook.ts} | 0 .../{base.d.ts => base.ts} | 0 ...ations.d.ts => workspace-notifications.ts} | 0 ...orkspace-views.d.ts => workspace-views.ts} | 4 +- .../src/{workspace.d.ts => workspace.ts} | 13 +- packages/ui/package.json | 1 - packages/utils/package.json | 5 + packages/utils/src/calendar.ts | 3 +- packages/utils/src/distribution-update.ts | 30 +- packages/utils/src/permission/role.ts | 3 +- packages/utils/src/subscription.ts | 3 +- space/core/store/profile.store.ts | 3 +- space/core/store/user.store.ts | 4 +- space/core/types/issue.d.ts | 53 +- .../(projects)/browse/[workItem]/page.tsx | 2 +- .../(projects)/drafts/header.tsx | 3 +- .../(projects)/extended-sidebar.tsx | 3 +- .../profile/[userId]/mobile-header.tsx | 16 +- .../(detail)/[projectId]/archives/header.tsx | 2 +- .../[projectId]/cycles/(detail)/header.tsx | 2 +- .../cycles/(detail)/mobile-header.tsx | 13 +- .../[projectId]/cycles/(list)/page.tsx | 4 +- .../[projectId]/draft-issues/header.tsx | 9 +- .../(detail)/[projectId]/intake/page.tsx | 4 +- .../issues/(list)/mobile-header.tsx | 13 +- .../[projectId]/modules/(detail)/header.tsx | 2 +- .../modules/(detail)/mobile-header.tsx | 13 +- .../[projectId]/modules/(list)/page.tsx | 4 +- .../[projectId]/pages/(list)/page.tsx | 4 +- .../views/(detail)/[viewId]/header.tsx | 4 +- .../[projectId]/views/(list)/page.tsx | 4 +- .../(projects)/workspace-views/header.tsx | 15 +- .../settings/(workspace)/layout.tsx | 3 +- .../settings/(workspace)/sidebar.tsx | 10 +- .../command-palette/modals/issue-level.tsx | 3 +- web/ce/components/inbox/source-pill.tsx | 2 +- web/ce/components/issues/header.tsx | 7 +- .../issues/issue-modal/provider.tsx | 2 +- .../license/modal/upgrade-modal.tsx | 2 +- .../billing/comparison/frequency-toggle.tsx | 3 +- .../billing/comparison/plan-detail.tsx | 3 +- .../workspace/billing/comparison/root.tsx | 3 +- web/ce/components/workspace/billing/root.tsx | 8 +- web/ce/hooks/use-notification-preview.tsx | 3 +- web/ce/services/project/view.service.ts | 4 +- web/ce/services/workspace.service.ts | 3 +- .../issue/issue-details/activity.store.ts | 3 +- web/ce/store/member/project-member.store.ts | 2 +- .../analytics/analytics-filter-actions.tsx | 2 +- .../analytics/select/analytics-params.tsx | 5 +- .../analytics/select/select-x-axis.tsx | 2 +- .../analytics/select/select-y-axis.tsx | 3 +- .../components/analytics/total-insights.tsx | 2 +- .../work-items/customized-insights.tsx | 3 +- .../analytics/work-items/priority-chart.tsx | 13 +- .../components/analytics/work-items/utils.ts | 3 +- .../work-items/workitems-insight-table.tsx | 9 +- web/core/components/chart/utils.ts | 4 +- .../actions/issue-actions/actions-list.tsx | 3 +- .../actions/issue-actions/change-assignee.tsx | 3 +- .../actions/issue-actions/change-priority.tsx | 4 +- .../actions/issue-actions/change-state.tsx | 3 +- .../components/common/breadcrumb-link.tsx | 2 +- .../core/modals/bulk-delete-issues-modal.tsx | 3 +- .../cycles/active-cycle/cycle-stats.tsx | 3 +- .../cycles/active-cycle/use-cycles-details.ts | 4 +- .../analytics-sidebar/issue-progress.tsx | 4 +- .../dropdowns/estimate-type-dropdown.tsx | 2 +- .../cycles/transfer-issues-modal.tsx | 2 +- web/core/components/dropdowns/date.tsx | 1 - .../components/gantt-chart/chart/root.tsx | 1 - web/core/components/gantt-chart/data/index.ts | 3 +- .../components/gantt-chart/views/week-view.ts | 3 +- .../global/product-updates/modal.tsx | 2 +- .../components/home/widgets/recents/issue.tsx | 4 +- .../inbox/content/inbox-issue-header.tsx | 4 +- .../components/inbox/content/issue-root.tsx | 4 +- .../inbox-filter/applied-filters/status.tsx | 3 +- .../inbox/inbox-filter/filters/status.tsx | 3 +- .../components/inbox/inbox-status-icon.tsx | 2 +- web/core/components/inbox/root.tsx | 2 +- web/core/components/inbox/sidebar/root.tsx | 4 +- .../issues/archived-issues-header.tsx | 4 +- .../attachment/attachment-item-list.tsx | 3 +- .../attachment/attachment-list-item.tsx | 3 +- .../attachment/delete-attachment-modal.tsx | 4 +- web/core/components/issues/filters.tsx | 4 +- .../attachments/content.tsx | 3 +- .../attachments/helper.tsx | 3 +- .../attachments/title.tsx | 3 +- .../relations/content.tsx | 3 +- .../issue-detail-widgets/relations/helper.tsx | 4 +- .../issue-detail-widgets/relations/title.tsx | 3 +- .../sub-issues/content.tsx | 3 +- .../issue-detail-widgets/sub-issues/helper.ts | 3 +- .../sub-issues/issues-list/list-group.tsx | 4 +- .../sub-issues/issues-list/list-item.tsx | 3 +- .../sub-issues/issues-list/root.tsx | 10 +- .../sub-issues/title-actions.tsx | 3 +- .../issue-detail-widgets/sub-issues/title.tsx | 3 +- .../activity/actions/default.tsx | 2 +- .../issue-detail-quick-actions.tsx | 2 +- .../issues/issue-detail/label/root.tsx | 3 +- .../label/select/label-select.tsx | 4 +- .../issues/issue-detail/links/link-item.tsx | 5 +- .../issues/issue-detail/links/root.tsx | 3 +- .../issues/issue-detail/main-content.tsx | 3 +- .../components/issues/issue-detail/root.tsx | 4 +- .../issues/issue-detail/subscription.tsx | 3 +- .../calendar/base-calendar-root.tsx | 4 +- .../issue-layouts/calendar/calendar.tsx | 5 +- .../calendar/roots/cycle-root.tsx | 2 +- .../calendar/roots/module-root.tsx | 2 +- .../issue-layouts/calendar/week-header.tsx | 2 +- .../empty-states/archived-issues.tsx | 4 +- .../issue-layouts/empty-states/cycle.tsx | 4 +- .../empty-states/global-view.tsx | 3 +- .../issue-layouts/empty-states/index.tsx | 2 +- .../issue-layouts/empty-states/module.tsx | 4 +- .../empty-states/project-issues.tsx | 4 +- .../empty-states/project-view.tsx | 3 +- .../applied-filters/roots/archived-issue.tsx | 4 +- .../applied-filters/roots/cycle-root.tsx | 4 +- .../applied-filters/roots/draft-issue.tsx | 4 +- .../roots/global-view-root.tsx | 11 +- .../applied-filters/roots/module-root.tsx | 4 +- .../roots/profile-issues-root.tsx | 4 +- .../applied-filters/roots/project-root.tsx | 4 +- .../roots/project-view-root.tsx | 10 +- .../issue-layouts/gantt/base-gantt-root.tsx | 10 +- .../issue-layouts/kanban/base-kanban-root.tsx | 3 +- .../issues/issue-layouts/kanban/block.tsx | 3 +- .../issue-layouts/kanban/roots/cycle-root.tsx | 3 +- .../kanban/roots/module-root.tsx | 2 +- .../issue-layouts/list/base-list-root.tsx | 10 +- .../issues/issue-layouts/list/block-root.tsx | 3 +- .../issues/issue-layouts/list/block.tsx | 3 +- .../issue-layouts/list/roots/cycle-root.tsx | 3 +- .../issue-layouts/list/roots/module-root.tsx | 2 +- .../properties/label-dropdown.tsx | 4 +- .../quick-action-dropdowns/all-issue.tsx | 4 +- .../quick-action-dropdowns/archived-issue.tsx | 3 +- .../quick-action-dropdowns/cycle-issue.tsx | 4 +- .../quick-action-dropdowns/draft-issue.tsx | 4 +- .../quick-action-dropdowns/helper.tsx | 3 +- .../quick-action-dropdowns/module-issue.tsx | 4 +- .../quick-action-dropdowns/project-issue.tsx | 4 +- .../roots/all-issue-layout-root.tsx | 7 +- .../roots/archived-issue-layout-root.tsx | 2 +- .../issue-layouts/roots/cycle-layout-root.tsx | 3 +- .../roots/draft-issue-layout-root.tsx | 3 +- .../roots/module-layout-root.tsx | 3 +- .../roots/project-layout-root.tsx | 3 +- .../roots/project-view-layout-root.tsx | 3 +- .../spreadsheet/base-spreadsheet-root.tsx | 4 +- .../issue-layouts/spreadsheet/issue-row.tsx | 4 +- .../spreadsheet/roots/workspace-root.tsx | 4 +- .../components/issues/issue-layouts/utils.tsx | 3 +- .../components/issues/issue-modal/base.tsx | 9 +- .../components/issues/issue-modal/form.tsx | 5 +- .../components/issues/issue-modal/modal.tsx | 3 +- .../components/issues/peek-overview/root.tsx | 14 +- .../components/issues/peek-overview/view.tsx | 4 +- .../issues/relations/issue-list-item.tsx | 3 +- .../issues/relations/issue-list.tsx | 3 +- .../issues/relations/properties.tsx | 3 +- .../workspace-draft/draft-issue-block.tsx | 4 +- .../issues/workspace-draft/empty-state.tsx | 3 +- .../issues/workspace-draft/root.tsx | 3 +- .../modal/card/base-paid-plan-card.tsx | 3 +- .../license/modal/card/checkout-button.tsx | 3 +- .../license/modal/card/discount-info.tsx | 3 +- .../license/modal/card/plan-upgrade.tsx | 4 +- .../license/modal/card/talk-to-sales.tsx | 3 +- .../analytics-sidebar/issue-progress.tsx | 4 +- .../components/modules/modules-list-view.tsx | 3 +- .../pages/pages-list-main-content.tsx | 4 +- .../profile/profile-issues-filter.tsx | 4 +- .../components/profile/profile-issues.tsx | 2 +- .../profile/start-of-week-preference.tsx | 3 +- web/core/components/project-states/root.tsx | 4 +- web/core/components/project/member-select.tsx | 2 +- .../project/settings/member-columns.tsx | 4 +- .../components/settings/sidebar/nav-item.tsx | 2 +- .../stickies/layout/stickies-list.tsx | 3 +- .../views/applied-filters/access.tsx | 2 +- .../components/views/applied-filters/root.tsx | 3 +- .../views/filters/filter-selection.tsx | 3 +- web/core/components/views/form.tsx | 17 +- .../views/view-list-item-action.tsx | 4 +- web/core/components/views/views-list.tsx | 3 +- .../billing/comparison/feature-detail.tsx | 2 +- .../workspace/billing/subscription.ts | 2 +- .../workspace/sidebar/project-navigation.tsx | 3 +- .../workspace/sidebar/user-menu-item.tsx | 3 +- .../workspace/sidebar/user-menu.tsx | 2 +- .../sidebar/workspace-menu-header.tsx | 3 +- .../workspace/sidebar/workspace-menu-item.tsx | 3 +- .../workspace/sidebar/workspace-menu.tsx | 2 +- web/core/components/workspace/views/form.tsx | 10 +- web/core/constants/calendar.ts | 3 +- web/core/constants/plans.tsx | 2 +- web/core/hooks/store/use-issue-detail.ts | 3 +- web/core/hooks/store/use-issues.ts | 4 +- web/core/hooks/use-group-dragndrop.ts | 3 +- web/core/hooks/use-issue-layout-store.ts | 2 +- .../use-issue-peek-overview-redirection.tsx | 4 +- web/core/hooks/use-issues-actions.tsx | 3 +- .../services/inbox/inbox-issue.service.ts | 4 +- web/core/services/issue/issue.service.ts | 3 +- .../services/issue/issue_activity.service.ts | 4 +- .../services/issue/issue_archive.service.ts | 4 +- .../issue/issue_attachment.service.ts | 4 +- .../services/issue/issue_comment.service.ts | 6 +- .../services/issue/issue_reaction.service.ts | 9 +- .../issue/work_item_version.service.ts | 3 +- web/core/store/analytics.store.ts | 3 +- web/core/store/base-command-palette.store.ts | 2 +- web/core/store/global-view.store.ts | 6 +- web/core/store/inbox/inbox-issue.store.ts | 10 +- web/core/store/inbox/project-inbox.store.ts | 8 +- web/core/store/issue/archived/filter.store.ts | 3 +- web/core/store/issue/cycle/filter.store.ts | 3 +- web/core/store/issue/draft/filter.store.ts | 3 +- .../store/issue/helpers/base-issues.store.ts | 3 +- .../helpers/issue-filter-helper.store.ts | 2 +- .../store/issue/issue-details/issue.store.ts | 3 +- .../issue/issue-details/sub_issues.store.ts | 2 +- .../issue/issue-details/subscription.store.ts | 2 +- web/core/store/issue/module/filter.store.ts | 3 +- web/core/store/issue/profile/filter.store.ts | 3 +- .../store/issue/project-views/filter.store.ts | 3 +- web/core/store/issue/project/filter.store.ts | 3 +- web/core/store/issue/root.store.ts | 3 +- .../issue/workspace-draft/filter.store.ts | 3 +- .../store/issue/workspace/filter.store.ts | 3 +- .../store/member/base-project-member.store.ts | 4 +- web/core/store/pages/project-page.store.ts | 4 +- web/core/store/project-view.store.ts | 3 +- web/core/store/user/base-permissions.store.ts | 10 +- web/core/store/user/profile.store.ts | 3 +- web/helpers/views.helper.ts | 3 +- yarn.lock | 6434 ++++++++--------- 336 files changed, 3658 insertions(+), 4403 deletions(-) delete mode 100644 live/.babelrc rename packages/types/src/{activity.d.ts => activity.ts} (100%) rename packages/types/src/{ai.d.ts => ai.ts} (65%) rename packages/types/src/{analytics.d.ts => analytics.ts} (58%) rename packages/types/src/{api_token.d.ts => api_token.ts} (100%) rename packages/types/src/{auth.d.ts => auth.ts} (100%) rename packages/types/src/{calendar.d.ts => calendar.ts} (100%) rename packages/types/src/charts/{common.d.ts => common.ts} (100%) rename packages/types/src/charts/{index.d.ts => index.ts} (98%) rename packages/types/src/{command-palette.d.ts => command-palette.ts} (100%) rename packages/types/src/{common.d.ts => common.ts} (100%) rename packages/types/src/current-user/{profile.d.ts => profile.ts} (100%) rename packages/types/src/cycle/{cycle.d.ts => cycle.ts} (97%) rename packages/types/src/cycle/{cycle_filters.d.ts => cycle_filters.ts} (100%) rename packages/types/src/cycle/{index.d.ts => index.ts} (100%) rename packages/types/src/{dashboard.d.ts => dashboard.ts} (96%) rename packages/types/src/{de-dupe.d.ts => de-dupe.ts} (100%) rename packages/types/src/{description_version.d.ts => description_version.ts} (100%) rename packages/types/src/{epics.d.ts => epics.ts} (100%) rename packages/types/src/{estimate.d.ts => estimate.ts} (100%) rename packages/types/src/favorite/{favorite.d.ts => favorite.ts} (100%) rename packages/types/src/favorite/{index.d.ts => index.ts} (100%) rename packages/types/src/{file.d.ts => file.ts} (100%) rename packages/types/src/{home.d.ts => home.ts} (100%) rename packages/types/src/importer/{github-importer.d.ts => github-importer.ts} (100%) rename packages/types/src/importer/{index.d.ts => index.ts} (100%) rename packages/types/src/importer/{jira-importer.d.ts => jira-importer.ts} (96%) rename packages/types/src/{inbox.d.ts => inbox.ts} (74%) rename packages/types/src/{index.d.ts => index.ts} (100%) rename packages/types/src/instance/{ai.d.ts => ai.ts} (100%) rename packages/types/src/instance/{auth.d.ts => auth.ts} (95%) rename packages/types/src/instance/{base.d.ts => base.ts} (100%) rename packages/types/src/instance/{email.d.ts => email.ts} (100%) rename packages/types/src/instance/{image.d.ts => image.ts} (100%) rename packages/types/src/instance/{index.d.ts => index.ts} (100%) rename packages/types/src/instance/{workspace.d.ts => workspace.ts} (100%) rename packages/types/src/{integration.d.ts => integration.ts} (97%) rename packages/types/src/{issues.d.ts => issues.ts} (82%) rename packages/types/src/issues/activity/{base.d.ts => base.ts} (96%) rename packages/types/src/issues/activity/{issue_activity.d.ts => issue_activity.ts} (94%) rename packages/types/src/issues/activity/{issue_comment.d.ts => issue_comment.ts} (75%) rename packages/types/src/issues/activity/{issue_comment_reaction.d.ts => issue_comment_reaction.ts} (100%) rename packages/types/src/issues/{base.d.ts => base.ts} (89%) rename packages/types/src/issues/{issue.d.ts => issue.ts} (86%) rename packages/types/src/issues/{issue_attachment.d.ts => issue_attachment.ts} (100%) rename packages/types/src/issues/{issue_link.d.ts => issue_link.ts} (100%) rename packages/types/src/issues/{issue_reaction.d.ts => issue_reaction.ts} (100%) rename packages/types/src/issues/{issue_relation.d.ts => issue_relation.ts} (65%) rename packages/types/src/issues/{issue_sub_issues.d.ts => issue_sub_issues.ts} (100%) rename packages/types/src/issues/{issue_subscription.d.ts => issue_subscription.ts} (100%) rename packages/types/src/layout/{gantt.d.ts => gantt.ts} (100%) rename packages/types/src/module/{index.d.ts => index.ts} (100%) rename packages/types/src/module/{module_filters.d.ts => module_filters.ts} (100%) rename packages/types/src/module/{modules.d.ts => modules.ts} (95%) rename packages/types/src/page/{core.d.ts => core.ts} (100%) rename packages/types/src/page/{extended.d.ts => extended.ts} (100%) rename packages/types/src/page/{index.d.ts => index.ts} (100%) rename packages/types/src/{payment.d.ts => payment.ts} (84%) rename packages/types/src/{pragmatic.d.ts => pragmatic.ts} (100%) rename packages/types/src/project/{project_filters.d.ts => project_filters.ts} (100%) rename packages/types/src/project/{project_link.d.ts => project_link.ts} (100%) rename packages/types/src/project/{projects.d.ts => projects.ts} (91%) rename packages/types/src/{publish.d.ts => publish.ts} (72%) rename packages/types/src/{reaction.d.ts => reaction.ts} (100%) rename packages/types/src/{search.d.ts => search.ts} (100%) rename packages/types/src/{state.d.ts => state.ts} (92%) delete mode 100644 packages/types/src/stickies.d copy.ts rename packages/types/src/{stickies.d.ts => stickies.ts} (100%) rename packages/types/src/{timezone.d.ts => timezone.ts} (100%) rename packages/types/src/{users.d.ts => users.ts} (94%) rename packages/types/src/{utils.d.ts => utils.ts} (100%) rename packages/types/src/{view-props.d.ts => view-props.ts} (92%) rename packages/types/src/{views.d.ts => views.ts} (96%) rename packages/types/src/{waitlist.d.ts => waitlist.ts} (100%) rename packages/types/src/{webhook.d.ts => webhook.ts} (100%) rename packages/types/src/workspace-draft-issues/{base.d.ts => base.ts} (100%) rename packages/types/src/{workspace-notifications.d.ts => workspace-notifications.ts} (100%) rename packages/types/src/{workspace-views.d.ts => workspace-views.ts} (90%) rename packages/types/src/{workspace.d.ts => workspace.ts} (93%) diff --git a/admin/package.json b/admin/package.json index 0925e9d95c2..83c01a57e7c 100644 --- a/admin/package.json +++ b/admin/package.json @@ -33,7 +33,7 @@ "mobx-react": "^9.1.1", "next": "14.2.30", "next-themes": "^0.2.1", - "postcss": "^8.4.38", + "postcss": "^8.4.49", "react": "^18.3.1", "react-dom": "^18.3.1", "react-hook-form": "7.51.5", diff --git a/live/.babelrc b/live/.babelrc deleted file mode 100644 index fa0ee452ae5..00000000000 --- a/live/.babelrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "presets": [ - [ - "@babel/preset-env", - { - "modules": false - } - ], - "@babel/preset-typescript" - ], - "plugins": [ - [ - "module-resolver", - { - "root": ["./src"], - "alias": { - "@/core": "./src/core", - "@/plane-live": "./src/ce" - } - } - ] - ] -} diff --git a/live/package.json b/live/package.json index 7399de76185..fe7a45e6703 100644 --- a/live/package.json +++ b/live/package.json @@ -7,8 +7,8 @@ "private": true, "type": "module", "scripts": { - "dev": "PORT=3100 concurrently \"babel src --out-dir dist --extensions '.ts,.js' --watch\" \"nodemon dist/server.js\"", - "build": "babel src --out-dir dist --extensions \".ts,.js\"", + "dev": "tsup --watch --onSuccess 'node --env-file=.env dist/server.js'", + "build": "tsup", "start": "node dist/server.js", "lint": "eslint src --ext .ts,.tsx", "lint:errors": "eslint src --ext .ts,.tsx --quiet" @@ -21,7 +21,9 @@ "@hocuspocus/extension-redis": "^2.15.0", "@hocuspocus/server": "^2.15.0", "@plane/constants": "*", + "@plane/decorators": "*", "@plane/editor": "*", + "@plane/logger": "*", "@plane/types": "*", "@tiptap/core": "2.10.4", "@tiptap/html": "2.11.0", @@ -43,17 +45,14 @@ "yjs": "^13.6.20" }, "devDependencies": { - "@babel/cli": "^7.25.6", - "@babel/core": "^7.25.2", - "@babel/preset-env": "^7.25.4", - "@babel/preset-typescript": "^7.24.7", "@types/compression": "^1.7.5", "@types/cors": "^2.8.17", "@types/dotenv": "^8.2.0", "@types/express": "^4.17.21", "@types/express-ws": "^3.0.4", "@types/node": "^20.14.9", - "babel-plugin-module-resolver": "^5.0.2", + "@types/pino-http": "^5.8.4", + "@plane/typescript-config": "*", "concurrently": "^9.0.1", "nodemon": "^3.1.7", "ts-node": "^10.9.2", diff --git a/live/src/core/helpers/logger.ts b/live/src/core/helpers/logger.ts index cba3f7cd153..07efaea6e25 100644 --- a/live/src/core/helpers/logger.ts +++ b/live/src/core/helpers/logger.ts @@ -1,4 +1,5 @@ import { pinoHttp } from "pino-http"; +import { Logger } from "pino"; const transport = { target: "pino-pretty", @@ -35,4 +36,4 @@ export const logger = pinoHttp({ }, }); -export const manualLogger = logger.logger; +export const manualLogger: Logger = logger.logger; diff --git a/live/tsup.config.ts b/live/tsup.config.ts index 1e5d4f58df8..ac79b760826 100644 --- a/live/tsup.config.ts +++ b/live/tsup.config.ts @@ -2,10 +2,19 @@ import { defineConfig, Options } from "tsup"; export default defineConfig((options: Options) => ({ entry: ["src/server.ts"], - format: ["cjs", "esm"], - dts: true, - clean: false, - external: ["react"], - injectStyle: true, + format: ["esm"], + dts: false, + clean: true, + target: "node18", + sourcemap: true, + splitting: false, + bundle: true, + outDir: "dist", + esbuildOptions(options) { + options.alias = { + "@/core": "./src/core", + "@/plane-live": "./src/ce" + }; + }, ...options, })); diff --git a/packages/constants/src/analytics/common.ts b/packages/constants/src/analytics/common.ts index 4ac8995238e..4192cef8cc4 100644 --- a/packages/constants/src/analytics/common.ts +++ b/packages/constants/src/analytics/common.ts @@ -1,5 +1,4 @@ -import { TAnalyticsTabsBase } from "@plane/types"; -import { ChartXAxisProperty, ChartYAxisMetric } from "../chart"; +import { ChartXAxisProperty, ChartYAxisMetric, TAnalyticsTabsBase } from "@plane/types"; export interface IInsightField { key: string; diff --git a/packages/constants/src/chart.ts b/packages/constants/src/chart.ts index be736d80749..42f7f96eae3 100644 --- a/packages/constants/src/chart.ts +++ b/packages/constants/src/chart.ts @@ -1,40 +1,9 @@ -import { TChartColorScheme } from "@plane/types"; +import { ChartXAxisProperty, TChartColorScheme } from "@plane/types"; export const LABEL_CLASSNAME = "uppercase text-custom-text-300/60 text-sm tracking-wide"; export const AXIS_LABEL_CLASSNAME = "uppercase text-custom-text-300/60 text-sm tracking-wide"; -export enum ChartXAxisProperty { - STATES = "STATES", - STATE_GROUPS = "STATE_GROUPS", - LABELS = "LABELS", - ASSIGNEES = "ASSIGNEES", - ESTIMATE_POINTS = "ESTIMATE_POINTS", - CYCLES = "CYCLES", - MODULES = "MODULES", - PRIORITY = "PRIORITY", - START_DATE = "START_DATE", - TARGET_DATE = "TARGET_DATE", - CREATED_AT = "CREATED_AT", - COMPLETED_AT = "COMPLETED_AT", - CREATED_BY = "CREATED_BY", - WORK_ITEM_TYPES = "WORK_ITEM_TYPES", - PROJECTS = "PROJECTS", - EPICS = "EPICS", -} - -export enum ChartYAxisMetric { - WORK_ITEM_COUNT = "WORK_ITEM_COUNT", - ESTIMATE_POINT_COUNT = "ESTIMATE_POINT_COUNT", - PENDING_WORK_ITEM_COUNT = "PENDING_WORK_ITEM_COUNT", - COMPLETED_WORK_ITEM_COUNT = "COMPLETED_WORK_ITEM_COUNT", - IN_PROGRESS_WORK_ITEM_COUNT = "IN_PROGRESS_WORK_ITEM_COUNT", - WORK_ITEM_DUE_THIS_WEEK_COUNT = "WORK_ITEM_DUE_THIS_WEEK_COUNT", - WORK_ITEM_DUE_TODAY_COUNT = "WORK_ITEM_DUE_TODAY_COUNT", - BLOCKED_WORK_ITEM_COUNT = "BLOCKED_WORK_ITEM_COUNT", -} - - export enum ChartXAxisDateGrouping { DAY = "DAY", WEEK = "WEEK", diff --git a/packages/constants/src/intake.ts b/packages/constants/src/intake.ts index be8c6ffe379..6bf211b505b 100644 --- a/packages/constants/src/intake.ts +++ b/packages/constants/src/intake.ts @@ -1,36 +1,4 @@ -import { TInboxDuplicateIssueDetails, TIssue } from "@plane/types"; - -export enum EInboxIssueCurrentTab { - OPEN = "open", - CLOSED = "closed", -} - -export enum EInboxIssueStatus { - PENDING = -2, - DECLINED = -1, - SNOOZED = 0, - ACCEPTED = 1, - DUPLICATE = 2, -} - -export enum EInboxIssueSource { - IN_APP = "IN_APP", - FORMS = "FORMS", - EMAIL = "EMAIL", -} - -export type TInboxIssueCurrentTab = EInboxIssueCurrentTab; -export type TInboxIssueStatus = EInboxIssueStatus; -export type TInboxIssue = { - id: string; - status: TInboxIssueStatus; - snoozed_till: Date | null; - duplicate_to: string | undefined; - source: EInboxIssueSource | undefined; - issue: TIssue; - created_by: string; - duplicate_issue_detail: TInboxDuplicateIssueDetails | undefined; -}; +import { EInboxIssueStatus, TInboxIssueStatus } from "@plane/types"; export const INBOX_STATUS: { key: string; diff --git a/packages/constants/src/issue/common.ts b/packages/constants/src/issue/common.ts index c182cb17e04..0f47e767cd0 100644 --- a/packages/constants/src/issue/common.ts +++ b/packages/constants/src/issue/common.ts @@ -4,6 +4,7 @@ import { IIssueDisplayProperties, IIssueFilterOptions, TIssue, + EIssuesStoreType, } from "@plane/types"; export const ALL_ISSUES = "All Issues"; @@ -44,28 +45,6 @@ export enum EIssueGroupBYServerToProperty { "created_by" = "created_by", } -export enum EIssueServiceType { - ISSUES = "issues", - EPICS = "epics", - WORK_ITEMS = "work-items", -} - -export enum EIssuesStoreType { - GLOBAL = "GLOBAL", - PROFILE = "PROFILE", - TEAM = "TEAM", - PROJECT = "PROJECT", - CYCLE = "CYCLE", - MODULE = "MODULE", - TEAM_VIEW = "TEAM_VIEW", - PROJECT_VIEW = "PROJECT_VIEW", - ARCHIVED = "ARCHIVED", - DRAFT = "DRAFT", - DEFAULT = "DEFAULT", - WORKSPACE_DRAFT = "WORKSPACE_DRAFT", - EPIC = "EPIC", -} - export enum EIssueCommentAccessSpecifier { EXTERNAL = "EXTERNAL", INTERNAL = "INTERNAL", diff --git a/packages/constants/src/issue/filter.ts b/packages/constants/src/issue/filter.ts index 46275d75199..7e9059195ab 100644 --- a/packages/constants/src/issue/filter.ts +++ b/packages/constants/src/issue/filter.ts @@ -1,8 +1,7 @@ -import { ILayoutDisplayFiltersOptions, TIssueActivityComment } from "@plane/types"; +import { EIssuesStoreType, ILayoutDisplayFiltersOptions, TIssueActivityComment } from "@plane/types"; import { TIssueFilterPriorityObject, ISSUE_DISPLAY_PROPERTIES_KEYS, - EIssuesStoreType, SUB_ISSUES_DISPLAY_PROPERTIES_KEYS, } from "./common"; diff --git a/packages/constants/src/payment.ts b/packages/constants/src/payment.ts index 6fc554a5b5d..c65043fc032 100644 --- a/packages/constants/src/payment.ts +++ b/packages/constants/src/payment.ts @@ -1,15 +1,4 @@ -import { IPaymentProduct, TBillingFrequency, TProductBillingFrequency } from "@plane/types"; - -/** - * Enum representing different product subscription types - */ -export enum EProductSubscriptionEnum { - FREE = "FREE", - ONE = "ONE", - PRO = "PRO", - BUSINESS = "BUSINESS", - ENTERPRISE = "ENTERPRISE", -} +import { EProductSubscriptionEnum, IPaymentProduct, TBillingFrequency, TProductBillingFrequency } from "@plane/types"; /** * Default billing frequency for each product subscription type diff --git a/packages/constants/src/profile.ts b/packages/constants/src/profile.ts index 983a787d473..cb90d62d3b3 100644 --- a/packages/constants/src/profile.ts +++ b/packages/constants/src/profile.ts @@ -1,3 +1,5 @@ +import { EStartOfTheWeek } from "@plane/types"; + export const PROFILE_SETTINGS = { profile: { key: "profile", @@ -103,20 +105,6 @@ export const PREFERENCE_OPTIONS: { }, ]; -/** - * @description The start of the week for the user - * @enum {number} - */ -export enum EStartOfTheWeek { - SUNDAY = 0, - MONDAY = 1, - TUESDAY = 2, - WEDNESDAY = 3, - THURSDAY = 4, - FRIDAY = 5, - SATURDAY = 6, -} - /** * @description The options for the start of the week * @type {Array<{value: EStartOfTheWeek, label: string}>} diff --git a/packages/constants/src/state.ts b/packages/constants/src/state.ts index af79710232e..ba7ddd12dd2 100644 --- a/packages/constants/src/state.ts +++ b/packages/constants/src/state.ts @@ -1,6 +1,4 @@ -"use client" - -export type TStateGroups = "backlog" | "unstarted" | "started" | "completed" | "cancelled"; +import { TStateGroups } from "@plane/types"; export type TDraggableData = { groupKey: TStateGroups; @@ -56,6 +54,34 @@ export const PENDING_STATE_GROUPS = [ STATE_GROUPS.cancelled.key, ]; +export const STATE_DISTRIBUTION = { + [STATE_GROUPS.backlog.key]: { + key: STATE_GROUPS.backlog.key, + issues: "backlog_issues", + points: "backlog_estimate_points", + }, + [STATE_GROUPS.unstarted.key]: { + key: STATE_GROUPS.unstarted.key, + issues: "unstarted_issues", + points: "unstarted_estimate_points", + }, + [STATE_GROUPS.started.key]: { + key: STATE_GROUPS.started.key, + issues: "started_issues", + points: "started_estimate_points", + }, + [STATE_GROUPS.completed.key]: { + key: STATE_GROUPS.completed.key, + issues: "completed_issues", + points: "completed_estimate_points", + }, + [STATE_GROUPS.cancelled.key]: { + key: STATE_GROUPS.cancelled.key, + issues: "cancelled_issues", + points: "cancelled_estimate_points", + }, +}; + export const PROGRESS_STATE_GROUPS_DETAILS = [ { key: "completed_issues", @@ -79,5 +105,4 @@ export const PROGRESS_STATE_GROUPS_DETAILS = [ }, ]; - export const DISPLAY_WORKFLOW_PRO_CTA = false; diff --git a/packages/constants/src/user.ts b/packages/constants/src/user.ts index 99675694996..2e2f3b162ad 100644 --- a/packages/constants/src/user.ts +++ b/packages/constants/src/user.ts @@ -25,18 +25,6 @@ export enum EUserPermissionsLevel { PROJECT = "PROJECT", } -export enum EUserWorkspaceRoles { - ADMIN = 20, - MEMBER = 15, - GUEST = 5, -} - -export enum EUserProjectRoles { - ADMIN = 20, - MEMBER = 15, - GUEST = 5, -} - export type TUserPermissionsLevel = EUserPermissionsLevel; export enum EUserPermissions { diff --git a/packages/constants/src/views.ts b/packages/constants/src/views.ts index 8ac837de807..7e9e141ecfe 100644 --- a/packages/constants/src/views.ts +++ b/packages/constants/src/views.ts @@ -1,7 +1,4 @@ -export enum EViewAccess { - PRIVATE, - PUBLIC, -} +import { EViewAccess } from "@plane/types"; export const VIEW_ACCESS_SPECIFIERS: { key: EViewAccess; diff --git a/packages/constants/src/workspace.ts b/packages/constants/src/workspace.ts index 25c942dfc64..03493253843 100644 --- a/packages/constants/src/workspace.ts +++ b/packages/constants/src/workspace.ts @@ -1,5 +1,4 @@ -import { TStaticViewTypes, IWorkspaceSearchResults } from "@plane/types"; -import { EUserWorkspaceRoles } from "./user"; +import { TStaticViewTypes, IWorkspaceSearchResults, EUserWorkspaceRoles } from "@plane/types"; export const ORGANIZATION_SIZE = [ "Just myself", // TODO: translate diff --git a/packages/decorators/README.md b/packages/decorators/README.md index e9c308e9e6a..e33086d5162 100644 --- a/packages/decorators/README.md +++ b/packages/decorators/README.md @@ -17,7 +17,7 @@ This package is part of the Plane workspace and can be used by adding it to your ```json { "dependencies": { - "@plane/decorators": "*" + "@plane/decorators": "workspace:*" } } ``` diff --git a/packages/editor/package.json b/packages/editor/package.json index c511d554f40..fe41a48f4c2 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -34,8 +34,11 @@ "react-dom": "18.3.1" }, "dependencies": { + "@floating-ui/dom": "^1.7.1", "@floating-ui/react": "^0.26.4", + "@headlessui/react": "^1.7.3", "@hocuspocus/provider": "^2.15.0", + "@plane/constants": "*", "@plane/types": "*", "@plane/ui": "*", "@plane/utils": "*", diff --git a/packages/logger/package.json b/packages/logger/package.json index c81c467c2c5..ca2a0dbe29f 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -11,20 +11,22 @@ "dist/**" ], "scripts": { - "build": "tsup", - "dev": "tsup --watch", + "build": "tsc", + "dev": "tsc --watch", "lint": "eslint src --ext .ts,.tsx", "lint:errors": "eslint src --ext .ts,.tsx --quiet", "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist" }, "dependencies": { - "winston": "^3.17.0", - "winston-daily-rotate-file": "^5.0.0" + "@types/express": "^4.17.21", + "express": "^4.21.2", + "winston-daily-rotate-file": "^5.0.0", + "winston": "^3.17.0" }, "devDependencies": { "@plane/eslint-config": "*", + "@plane/typescript-config": "*", "@types/node": "^22.5.4", - "tsup": "8.4.0", "typescript": "5.8.3" } } diff --git a/packages/types/package.json b/packages/types/package.json index 2249a9cecc0..b75745e6959 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -3,6 +3,6 @@ "version": "0.27.0", "license": "AGPL-3.0", "private": true, - "types": "./src/index.d.ts", - "main": "./src/index.d.ts" + "types": "./src/index.ts", + "main": "./src/index.ts" } diff --git a/packages/types/src/activity.d.ts b/packages/types/src/activity.ts similarity index 100% rename from packages/types/src/activity.d.ts rename to packages/types/src/activity.ts diff --git a/packages/types/src/ai.d.ts b/packages/types/src/ai.ts similarity index 65% rename from packages/types/src/ai.d.ts rename to packages/types/src/ai.ts index ce8bcbadb2f..d1c2d244120 100644 --- a/packages/types/src/ai.d.ts +++ b/packages/types/src/ai.ts @@ -1,4 +1,5 @@ -import { IProjectLite, IWorkspaceLite } from "@plane/types"; +import { IProjectLite } from "./project"; +import { IWorkspaceLite } from "./workspace"; export interface IGptResponse { response: string; diff --git a/packages/types/src/analytics.d.ts b/packages/types/src/analytics.ts similarity index 58% rename from packages/types/src/analytics.d.ts rename to packages/types/src/analytics.ts index 80c773fa2af..c40f7e7fdb7 100644 --- a/packages/types/src/analytics.d.ts +++ b/packages/types/src/analytics.ts @@ -1,6 +1,35 @@ -import { ChartXAxisProperty, ChartYAxisMetric } from "@plane/constants"; import { TChartData } from "./charts"; -import { Row } from "@tanstack/react-table"; + +export enum ChartXAxisProperty { + STATES = "STATES", + STATE_GROUPS = "STATE_GROUPS", + LABELS = "LABELS", + ASSIGNEES = "ASSIGNEES", + ESTIMATE_POINTS = "ESTIMATE_POINTS", + CYCLES = "CYCLES", + MODULES = "MODULES", + PRIORITY = "PRIORITY", + START_DATE = "START_DATE", + TARGET_DATE = "TARGET_DATE", + CREATED_AT = "CREATED_AT", + COMPLETED_AT = "COMPLETED_AT", + CREATED_BY = "CREATED_BY", + WORK_ITEM_TYPES = "WORK_ITEM_TYPES", + PROJECTS = "PROJECTS", + EPICS = "EPICS", +} + +export enum ChartYAxisMetric { + WORK_ITEM_COUNT = "WORK_ITEM_COUNT", + ESTIMATE_POINT_COUNT = "ESTIMATE_POINT_COUNT", + PENDING_WORK_ITEM_COUNT = "PENDING_WORK_ITEM_COUNT", + COMPLETED_WORK_ITEM_COUNT = "COMPLETED_WORK_ITEM_COUNT", + IN_PROGRESS_WORK_ITEM_COUNT = "IN_PROGRESS_WORK_ITEM_COUNT", + WORK_ITEM_DUE_THIS_WEEK_COUNT = "WORK_ITEM_DUE_THIS_WEEK_COUNT", + WORK_ITEM_DUE_TODAY_COUNT = "WORK_ITEM_DUE_TODAY_COUNT", + BLOCKED_WORK_ITEM_COUNT = "BLOCKED_WORK_ITEM_COUNT", +} + export type TAnalyticsTabsBase = "overview" | "work-items"; export type TAnalyticsGraphsBase = "projects" | "work-items" | "custom-work-items"; @@ -59,9 +88,3 @@ export interface IAnalyticsParams { y_axis: ChartYAxisMetric; group_by?: ChartXAxisProperty; } - -export type ExportConfig = { - key: string; - value: (row: Row) => string | number; - label?: string; -}; diff --git a/packages/types/src/api_token.d.ts b/packages/types/src/api_token.ts similarity index 100% rename from packages/types/src/api_token.d.ts rename to packages/types/src/api_token.ts diff --git a/packages/types/src/auth.d.ts b/packages/types/src/auth.ts similarity index 100% rename from packages/types/src/auth.d.ts rename to packages/types/src/auth.ts diff --git a/packages/types/src/calendar.d.ts b/packages/types/src/calendar.ts similarity index 100% rename from packages/types/src/calendar.d.ts rename to packages/types/src/calendar.ts diff --git a/packages/types/src/charts/common.d.ts b/packages/types/src/charts/common.ts similarity index 100% rename from packages/types/src/charts/common.d.ts rename to packages/types/src/charts/common.ts diff --git a/packages/types/src/charts/index.d.ts b/packages/types/src/charts/index.ts similarity index 98% rename from packages/types/src/charts/index.d.ts rename to packages/types/src/charts/index.ts index 685aed2145c..fb49c717291 100644 --- a/packages/types/src/charts/index.d.ts +++ b/packages/types/src/charts/index.ts @@ -21,7 +21,7 @@ export type TChartData = { [key in K]: string | number; } & Record; -type TChartProps = { +export type TChartProps = { data: TChartData[]; xAxis: { key: keyof TChartData; diff --git a/packages/types/src/command-palette.d.ts b/packages/types/src/command-palette.ts similarity index 100% rename from packages/types/src/command-palette.d.ts rename to packages/types/src/command-palette.ts diff --git a/packages/types/src/common.d.ts b/packages/types/src/common.ts similarity index 100% rename from packages/types/src/common.d.ts rename to packages/types/src/common.ts diff --git a/packages/types/src/current-user/profile.d.ts b/packages/types/src/current-user/profile.ts similarity index 100% rename from packages/types/src/current-user/profile.d.ts rename to packages/types/src/current-user/profile.ts diff --git a/packages/types/src/cycle/cycle.d.ts b/packages/types/src/cycle/cycle.ts similarity index 97% rename from packages/types/src/cycle/cycle.d.ts rename to packages/types/src/cycle/cycle.ts index 2182199145c..4bb66ff9b6f 100644 --- a/packages/types/src/cycle/cycle.d.ts +++ b/packages/types/src/cycle/cycle.ts @@ -1,4 +1,5 @@ -import type { TIssue, IIssueFilterOptions } from "@plane/types"; +import type { TIssue } from "../issues/issue"; +import type { IIssueFilterOptions } from "../view-props"; export type TCycleGroups = "current" | "upcoming" | "completed" | "draft"; diff --git a/packages/types/src/cycle/cycle_filters.d.ts b/packages/types/src/cycle/cycle_filters.ts similarity index 100% rename from packages/types/src/cycle/cycle_filters.d.ts rename to packages/types/src/cycle/cycle_filters.ts diff --git a/packages/types/src/cycle/index.d.ts b/packages/types/src/cycle/index.ts similarity index 100% rename from packages/types/src/cycle/index.d.ts rename to packages/types/src/cycle/index.ts diff --git a/packages/types/src/dashboard.d.ts b/packages/types/src/dashboard.ts similarity index 96% rename from packages/types/src/dashboard.d.ts rename to packages/types/src/dashboard.ts index 96efea00706..ac2339d1c03 100644 --- a/packages/types/src/dashboard.d.ts +++ b/packages/types/src/dashboard.ts @@ -2,7 +2,7 @@ import { EDurationFilters } from "./enums"; import { IIssueActivity, TIssuePriorities } from "./issues"; import { TIssue } from "./issues/issue"; import { TStateGroups } from "./state"; -import { TIssueRelationTypes } from "@/plane-web/types"; +import { TIssueRelationTypes } from "./issues/issue_relation"; export type TWidgetKeys = | "overview_stats" @@ -161,7 +161,7 @@ export type TWidgetStatsResponse = | TRecentCollaboratorsWidgetResponse[]; // dashboard -export type TDashboard = { +export type TDeprecatedDashboard = { created_at: string; created_by: string | null; description_html: string; @@ -176,6 +176,6 @@ export type TDashboard = { }; export type THomeDashboardResponse = { - dashboard: TDashboard; + dashboard: TDeprecatedDashboard; widgets: TWidget[]; }; diff --git a/packages/types/src/de-dupe.d.ts b/packages/types/src/de-dupe.ts similarity index 100% rename from packages/types/src/de-dupe.d.ts rename to packages/types/src/de-dupe.ts diff --git a/packages/types/src/description_version.d.ts b/packages/types/src/description_version.ts similarity index 100% rename from packages/types/src/description_version.d.ts rename to packages/types/src/description_version.ts diff --git a/packages/types/src/epics.d.ts b/packages/types/src/epics.ts similarity index 100% rename from packages/types/src/epics.d.ts rename to packages/types/src/epics.ts diff --git a/packages/types/src/estimate.d.ts b/packages/types/src/estimate.ts similarity index 100% rename from packages/types/src/estimate.d.ts rename to packages/types/src/estimate.ts diff --git a/packages/types/src/favorite/favorite.d.ts b/packages/types/src/favorite/favorite.ts similarity index 100% rename from packages/types/src/favorite/favorite.d.ts rename to packages/types/src/favorite/favorite.ts diff --git a/packages/types/src/favorite/index.d.ts b/packages/types/src/favorite/index.ts similarity index 100% rename from packages/types/src/favorite/index.d.ts rename to packages/types/src/favorite/index.ts diff --git a/packages/types/src/file.d.ts b/packages/types/src/file.ts similarity index 100% rename from packages/types/src/file.d.ts rename to packages/types/src/file.ts diff --git a/packages/types/src/home.d.ts b/packages/types/src/home.ts similarity index 100% rename from packages/types/src/home.d.ts rename to packages/types/src/home.ts diff --git a/packages/types/src/importer/github-importer.d.ts b/packages/types/src/importer/github-importer.ts similarity index 100% rename from packages/types/src/importer/github-importer.d.ts rename to packages/types/src/importer/github-importer.ts diff --git a/packages/types/src/importer/index.d.ts b/packages/types/src/importer/index.ts similarity index 100% rename from packages/types/src/importer/index.d.ts rename to packages/types/src/importer/index.ts diff --git a/packages/types/src/importer/jira-importer.d.ts b/packages/types/src/importer/jira-importer.ts similarity index 96% rename from packages/types/src/importer/jira-importer.d.ts rename to packages/types/src/importer/jira-importer.ts index cd9e31ad2a5..e9f4218fa7d 100644 --- a/packages/types/src/importer/jira-importer.d.ts +++ b/packages/types/src/importer/jira-importer.ts @@ -44,7 +44,7 @@ export interface IJiraResponseUser { accountId: string; accountType: string; emailAddress: string; - avatarUrls: AvatarUrls; + avatarUrls: IJiraResponseAvatarUrls; displayName: string; active: boolean; locale: string; diff --git a/packages/types/src/inbox.d.ts b/packages/types/src/inbox.ts similarity index 74% rename from packages/types/src/inbox.d.ts rename to packages/types/src/inbox.ts index e7065c6d0b3..d439f333a41 100644 --- a/packages/types/src/inbox.d.ts +++ b/packages/types/src/inbox.ts @@ -1,8 +1,40 @@ -// plane constants -import { TInboxIssue, TInboxIssueStatus } from "@plane/constants"; // plane types import { TPaginationInfo } from "./common"; import { TIssuePriorities } from "./issues"; +import { TIssue } from "./issues/issue"; + +export enum EInboxIssueCurrentTab { + OPEN = "open", + CLOSED = "closed", +} + +export type TInboxIssueCurrentTab = EInboxIssueCurrentTab; + +export enum EInboxIssueStatus { + PENDING = -2, + DECLINED = -1, + SNOOZED = 0, + ACCEPTED = 1, + DUPLICATE = 2, +} + +export enum EInboxIssueSource { + IN_APP = "IN_APP", + FORMS = "FORMS", + EMAIL = "EMAIL", +} + +export type TInboxIssueStatus = EInboxIssueStatus; +export type TInboxIssue = { + id: string; + status: TInboxIssueStatus; + snoozed_till: Date | null; + duplicate_to: string | undefined; + source: EInboxIssueSource | undefined; + issue: TIssue; + created_by: string; + duplicate_issue_detail: TInboxDuplicateIssueDetails | undefined; +}; // filters export type TInboxIssueFilterMemberKeys = "assignees" | "created_by"; diff --git a/packages/types/src/index.d.ts b/packages/types/src/index.ts similarity index 100% rename from packages/types/src/index.d.ts rename to packages/types/src/index.ts diff --git a/packages/types/src/instance/ai.d.ts b/packages/types/src/instance/ai.ts similarity index 100% rename from packages/types/src/instance/ai.d.ts rename to packages/types/src/instance/ai.ts diff --git a/packages/types/src/instance/auth.d.ts b/packages/types/src/instance/auth.ts similarity index 95% rename from packages/types/src/instance/auth.d.ts rename to packages/types/src/instance/auth.ts index 31d3a25829d..33c2c754767 100644 --- a/packages/types/src/instance/auth.d.ts +++ b/packages/types/src/instance/auth.ts @@ -29,7 +29,7 @@ export type TInstanceGitlabAuthenticationConfigurationKeys = | "GITLAB_CLIENT_ID" | "GITLAB_CLIENT_SECRET"; -type TInstanceAuthenticationConfigurationKeys = +export type TInstanceAuthenticationConfigurationKeys = | TInstanceGoogleAuthenticationConfigurationKeys | TInstanceGithubAuthenticationConfigurationKeys | TInstanceGitlabAuthenticationConfigurationKeys; diff --git a/packages/types/src/instance/base.d.ts b/packages/types/src/instance/base.ts similarity index 100% rename from packages/types/src/instance/base.d.ts rename to packages/types/src/instance/base.ts diff --git a/packages/types/src/instance/email.d.ts b/packages/types/src/instance/email.ts similarity index 100% rename from packages/types/src/instance/email.d.ts rename to packages/types/src/instance/email.ts diff --git a/packages/types/src/instance/image.d.ts b/packages/types/src/instance/image.ts similarity index 100% rename from packages/types/src/instance/image.d.ts rename to packages/types/src/instance/image.ts diff --git a/packages/types/src/instance/index.d.ts b/packages/types/src/instance/index.ts similarity index 100% rename from packages/types/src/instance/index.d.ts rename to packages/types/src/instance/index.ts diff --git a/packages/types/src/instance/workspace.d.ts b/packages/types/src/instance/workspace.ts similarity index 100% rename from packages/types/src/instance/workspace.d.ts rename to packages/types/src/instance/workspace.ts diff --git a/packages/types/src/integration.d.ts b/packages/types/src/integration.ts similarity index 97% rename from packages/types/src/integration.d.ts rename to packages/types/src/integration.ts index e2561bd18f9..a02dc725556 100644 --- a/packages/types/src/integration.d.ts +++ b/packages/types/src/integration.ts @@ -26,7 +26,7 @@ export interface IWorkspaceIntegration { created_by: string; id: string; integration: string; - integration_detail: IIntegrations; + integration_detail: IAppIntegration; metadata: any; updated_at: string; updated_by: string; diff --git a/packages/types/src/issues.d.ts b/packages/types/src/issues.ts similarity index 82% rename from packages/types/src/issues.d.ts rename to packages/types/src/issues.ts index fc7c14ed813..de64c3923d0 100644 --- a/packages/types/src/issues.d.ts +++ b/packages/types/src/issues.ts @@ -1,22 +1,18 @@ -import { ReactElement } from "react"; -import { KeyedMutator } from "swr"; -import type { - ICycle, - IModule, - IUserLite, - IProjectLite, - IWorkspaceLite, - IStateLite, - Properties, - IIssueDisplayFilterOptions, - TIssue, - IIssueFilterOptions, +import { ICycle } from "./cycle"; +import { TIssue } from "./issues/issue"; +import { IModule } from "./module"; +import { IProjectLite } from "./project"; +import { IStateLite } from "./state"; +import { IUserLite } from "./users"; +import { IIssueDisplayProperties, + IIssueFilterOptions, + TIssueExtraOptions, TIssueGroupByOptions, - TIssueOrderByOptions, TIssueGroupingFilters, - TIssueExtraOptions, -} from "@plane/types"; + TIssueOrderByOptions, +} from "./view-props"; +import { IWorkspaceLite, Properties } from "./workspace"; export interface IIssueCycle { id: string; @@ -70,17 +66,6 @@ export interface ILinkDetails { url: string; } -export type IssueRelationType = "duplicate" | "relates_to" | "blocked_by"; - -export interface IssueRelation { - id: string; - issue: string; - issue_detail: BlockeIssueDetail; - relation_type: IssueRelationType; - related_issue: string; - relation: "blocking" | null; -} - export interface ISubIssuesState { backlog: number; unstarted: number; @@ -186,20 +171,6 @@ export interface IIssueAttachment { workspace: string; } -export interface IIssueViewProps { - groupedIssues: { [key: string]: TIssue[] } | undefined; - displayFilters: IIssueDisplayFilterOptions | undefined; - isEmpty: boolean; - mutateIssues: KeyedMutator< - | TIssue[] - | { - [key: string]: TIssue[]; - } - >; - params: any; - properties: Properties; -} - export type TIssuePriorities = "urgent" | "high" | "medium" | "low" | "none"; export interface ViewFlags { @@ -220,7 +191,7 @@ export type GroupByColumnTypes = | "created_by" | "team_project"; -type TGetColumns = { +export type TGetColumns = { isWorkspaceLevel?: boolean; projectId?: string; }; @@ -228,7 +199,7 @@ type TGetColumns = { export interface IGroupByColumn { id: string; name: string; - icon?: ReactElement | undefined; + icon?: React.ReactElement | undefined; payload: Partial; isDropDisabled?: boolean; dropErrorMessage?: string; @@ -243,7 +214,7 @@ export interface IIssueListRow { groupId: string; type: "HEADER" | "NO_ISSUES" | "QUICK_ADD" | "ISSUE"; name?: string; - icon?: ReactElement | undefined; + icon?: React.ReactElement | undefined; payload?: Partial; } diff --git a/packages/types/src/issues/activity/base.d.ts b/packages/types/src/issues/activity/base.ts similarity index 96% rename from packages/types/src/issues/activity/base.d.ts rename to packages/types/src/issues/activity/base.ts index 7b5653aede9..7b649334958 100644 --- a/packages/types/src/issues/activity/base.d.ts +++ b/packages/types/src/issues/activity/base.ts @@ -2,7 +2,7 @@ export * from "./issue_activity"; export * from "./issue_comment"; export * from "./issue_comment_reaction"; -import { TIssuePriorities } from "../issues"; +import { TIssuePriorities } from "../../issues"; // root types export type TIssueActivityWorkspaceDetail = { diff --git a/packages/types/src/issues/activity/issue_activity.d.ts b/packages/types/src/issues/activity/issue_activity.ts similarity index 94% rename from packages/types/src/issues/activity/issue_activity.d.ts rename to packages/types/src/issues/activity/issue_activity.ts index 7ed0c35d6eb..15a37a4a733 100644 --- a/packages/types/src/issues/activity/issue_activity.d.ts +++ b/packages/types/src/issues/activity/issue_activity.ts @@ -1,5 +1,3 @@ -// plane imports -import { EInboxIssueSource } from "@plane/constants"; // local imports import { TIssueActivityWorkspaceDetail, @@ -7,6 +5,7 @@ import { TIssueActivityIssueDetail, TIssueActivityUserDetail, } from "./base"; +import { EInboxIssueSource } from "../../inbox"; export type TIssueActivity = { id: string; diff --git a/packages/types/src/issues/activity/issue_comment.d.ts b/packages/types/src/issues/activity/issue_comment.ts similarity index 75% rename from packages/types/src/issues/activity/issue_comment.d.ts rename to packages/types/src/issues/activity/issue_comment.ts index e61b35585ca..3cb76d39e99 100644 --- a/packages/types/src/issues/activity/issue_comment.d.ts +++ b/packages/types/src/issues/activity/issue_comment.ts @@ -7,6 +7,7 @@ import { import { EIssueCommentAccessSpecifier } from "../../enums"; import { TFileSignedURLResponse } from "../../file"; import { IUserLite } from "../../users"; +import { IWorkspaceLite } from "../../workspace"; export type TCommentReaction = { id: string; @@ -64,6 +65,57 @@ export type TIssueCommentIdMap = { [issue_id: string]: string[]; }; +export interface ActorDetail { + avatar_url?: string; + display_name?: string; + first_name?: string; + is_bot?: boolean; + id?: string; + last_name?: string; +} + +export interface IssueDetail { + id: string; + name: string; + description: Description; + description_html: string; + priority: string; + start_date: null; + target_date: null; + sequence_id: number; + sort_order: number; +} + +export interface Description { + type: string; + content: DescriptionContent[]; +} + +export interface DescriptionContent { + type: string; + attrs?: Attrs; + content: ContentContent[]; +} + +export interface Attrs { + level: number; +} + +export interface ContentContent { + text: string; + type: string; +} + +export interface ProjectDetail { + id: string; + identifier: string; + name: string; + cover_image: string; + icon_prop: null; + emoji: string; + description: string; +} + export type TIssuePublicComment = { actor_detail: ActorDetail; access: string; diff --git a/packages/types/src/issues/activity/issue_comment_reaction.d.ts b/packages/types/src/issues/activity/issue_comment_reaction.ts similarity index 100% rename from packages/types/src/issues/activity/issue_comment_reaction.d.ts rename to packages/types/src/issues/activity/issue_comment_reaction.ts diff --git a/packages/types/src/issues/base.d.ts b/packages/types/src/issues/base.ts similarity index 89% rename from packages/types/src/issues/base.d.ts rename to packages/types/src/issues/base.ts index 05f679cce28..b01bd3b7c08 100644 --- a/packages/types/src/issues/base.d.ts +++ b/packages/types/src/issues/base.ts @@ -1,6 +1,3 @@ -import { StateGroup } from "components/states"; -import { TIssuePriorities } from "../issues"; - // issues export * from "./issue"; export * from "./issue_reaction"; diff --git a/packages/types/src/issues/issue.d.ts b/packages/types/src/issues/issue.ts similarity index 86% rename from packages/types/src/issues/issue.d.ts rename to packages/types/src/issues/issue.ts index 01c0b2f3a58..6b5cc0638d3 100644 --- a/packages/types/src/issues/issue.d.ts +++ b/packages/types/src/issues/issue.ts @@ -1,11 +1,31 @@ -import { EIssueServiceType, EIssuesStoreType } from "@plane/constants"; import { TIssuePriorities } from "../issues"; import { TIssueAttachment } from "./issue_attachment"; import { TIssueLink } from "./issue_link"; import { TIssueReaction, IIssuePublicReaction, IPublicVote } from "./issue_reaction"; -import { TIssueRelationTypes, TIssuePublicComment } from "@/plane-web/types"; +import { TIssueRelationTypes } from "./issue_relation"; +import { TIssuePublicComment } from "./activity/issue_comment"; -// new issue structure types +export enum EIssueServiceType { + ISSUES = "issues", + EPICS = "epics", + WORK_ITEMS = "work-items", +} + +export enum EIssuesStoreType { + GLOBAL = "GLOBAL", + PROFILE = "PROFILE", + TEAM = "TEAM", + PROJECT = "PROJECT", + CYCLE = "CYCLE", + MODULE = "MODULE", + TEAM_VIEW = "TEAM_VIEW", + PROJECT_VIEW = "PROJECT_VIEW", + ARCHIVED = "ARCHIVED", + DRAFT = "DRAFT", + DEFAULT = "DEFAULT", + WORKSPACE_DRAFT = "WORKSPACE_DRAFT", + EPIC = "EPIC", +} export type TBaseIssue = { id: string; @@ -71,7 +91,7 @@ export type TIssueMap = { [issue_id: string]: TIssue; }; -type TIssueResponseResults = +export type TIssueResponseResults = | TBaseIssue[] | { [key: string]: { @@ -153,7 +173,7 @@ export interface IPublicIssue vote_items: IPublicVote[]; } -type TPublicIssueResponseResults = +export type TPublicIssueResponseResults = | IPublicIssue[] | { [key: string]: { diff --git a/packages/types/src/issues/issue_attachment.d.ts b/packages/types/src/issues/issue_attachment.ts similarity index 100% rename from packages/types/src/issues/issue_attachment.d.ts rename to packages/types/src/issues/issue_attachment.ts diff --git a/packages/types/src/issues/issue_link.d.ts b/packages/types/src/issues/issue_link.ts similarity index 100% rename from packages/types/src/issues/issue_link.d.ts rename to packages/types/src/issues/issue_link.ts diff --git a/packages/types/src/issues/issue_reaction.d.ts b/packages/types/src/issues/issue_reaction.ts similarity index 100% rename from packages/types/src/issues/issue_reaction.d.ts rename to packages/types/src/issues/issue_reaction.ts diff --git a/packages/types/src/issues/issue_relation.d.ts b/packages/types/src/issues/issue_relation.ts similarity index 65% rename from packages/types/src/issues/issue_relation.d.ts rename to packages/types/src/issues/issue_relation.ts index 378470a5869..53dc178f413 100644 --- a/packages/types/src/issues/issue_relation.d.ts +++ b/packages/types/src/issues/issue_relation.ts @@ -1,5 +1,4 @@ -import { TIssueRelationTypes } from "@/plane-web/types"; -import { TIssue } from "./issues"; +import { TIssue } from "./issue"; export type TIssueRelation = Record; @@ -8,3 +7,5 @@ export type TIssueRelationMap = { }; export type TIssueRelationIdMap = Record; + +export type TIssueRelationTypes = "blocking" | "blocked_by" | "duplicate" | "relates_to"; diff --git a/packages/types/src/issues/issue_sub_issues.d.ts b/packages/types/src/issues/issue_sub_issues.ts similarity index 100% rename from packages/types/src/issues/issue_sub_issues.d.ts rename to packages/types/src/issues/issue_sub_issues.ts diff --git a/packages/types/src/issues/issue_subscription.d.ts b/packages/types/src/issues/issue_subscription.ts similarity index 100% rename from packages/types/src/issues/issue_subscription.d.ts rename to packages/types/src/issues/issue_subscription.ts diff --git a/packages/types/src/layout/gantt.d.ts b/packages/types/src/layout/gantt.ts similarity index 100% rename from packages/types/src/layout/gantt.d.ts rename to packages/types/src/layout/gantt.ts diff --git a/packages/types/src/module/index.d.ts b/packages/types/src/module/index.ts similarity index 100% rename from packages/types/src/module/index.d.ts rename to packages/types/src/module/index.ts diff --git a/packages/types/src/module/module_filters.d.ts b/packages/types/src/module/module_filters.ts similarity index 100% rename from packages/types/src/module/module_filters.d.ts rename to packages/types/src/module/module_filters.ts diff --git a/packages/types/src/module/modules.d.ts b/packages/types/src/module/modules.ts similarity index 95% rename from packages/types/src/module/modules.d.ts rename to packages/types/src/module/modules.ts index ce845e60de9..b428fc8b638 100644 --- a/packages/types/src/module/modules.d.ts +++ b/packages/types/src/module/modules.ts @@ -1,4 +1,6 @@ -import type { TIssue, IIssueFilterOptions, ILinkDetails } from "@plane/types"; +import type { TIssue } from "../issues/issue"; +import type { IIssueFilterOptions } from "../view-props"; +import type { ILinkDetails } from "../issues"; export type TModuleStatus = | "backlog" diff --git a/packages/types/src/page/core.d.ts b/packages/types/src/page/core.ts similarity index 100% rename from packages/types/src/page/core.d.ts rename to packages/types/src/page/core.ts diff --git a/packages/types/src/page/extended.d.ts b/packages/types/src/page/extended.ts similarity index 100% rename from packages/types/src/page/extended.d.ts rename to packages/types/src/page/extended.ts diff --git a/packages/types/src/page/index.d.ts b/packages/types/src/page/index.ts similarity index 100% rename from packages/types/src/page/index.d.ts rename to packages/types/src/page/index.ts diff --git a/packages/types/src/payment.d.ts b/packages/types/src/payment.ts similarity index 84% rename from packages/types/src/payment.d.ts rename to packages/types/src/payment.ts index bdbab7f32f5..21e22e6317b 100644 --- a/packages/types/src/payment.d.ts +++ b/packages/types/src/payment.ts @@ -1,4 +1,10 @@ -import { EProductSubscriptionEnum } from "@plane/constants"; +export enum EProductSubscriptionEnum { + FREE = "FREE", + ONE = "ONE", + PRO = "PRO", + BUSINESS = "BUSINESS", + ENTERPRISE = "ENTERPRISE", +} export type TBillingFrequency = "month" | "year"; diff --git a/packages/types/src/pragmatic.d.ts b/packages/types/src/pragmatic.ts similarity index 100% rename from packages/types/src/pragmatic.d.ts rename to packages/types/src/pragmatic.ts diff --git a/packages/types/src/project/project_filters.d.ts b/packages/types/src/project/project_filters.ts similarity index 100% rename from packages/types/src/project/project_filters.d.ts rename to packages/types/src/project/project_filters.ts diff --git a/packages/types/src/project/project_link.d.ts b/packages/types/src/project/project_link.ts similarity index 100% rename from packages/types/src/project/project_link.d.ts rename to packages/types/src/project/project_link.ts diff --git a/packages/types/src/project/projects.d.ts b/packages/types/src/project/projects.ts similarity index 91% rename from packages/types/src/project/projects.d.ts rename to packages/types/src/project/projects.ts index 9d6b03ab183..3de3c71ab91 100644 --- a/packages/types/src/project/projects.d.ts +++ b/packages/types/src/project/projects.ts @@ -1,6 +1,14 @@ -import { EUserProjectRoles } from "@plane/constants"; -import type { IUser, IUserLite, IWorkspace, TLogoProps, TStateGroups } from ".."; +import { TLogoProps } from "../common"; import { TUserPermissions } from "../enums"; +import { TStateGroups } from "../state"; +import type { IUser, IUserLite } from "../users"; +import type { IWorkspace } from "../workspace"; + +export enum EUserProjectRoles { + ADMIN = 20, + MEMBER = 15, + GUEST = 5, +} export interface IPartialProject { id: string; @@ -65,7 +73,7 @@ export interface IProjectLite { logo_props: TLogoProps; } -type ProjectPreferences = { +export type ProjectPreferences = { pages: { block_display: boolean; }; diff --git a/packages/types/src/publish.d.ts b/packages/types/src/publish.ts similarity index 72% rename from packages/types/src/publish.d.ts rename to packages/types/src/publish.ts index 83d21d90b5e..358d6e5dae9 100644 --- a/packages/types/src/publish.d.ts +++ b/packages/types/src/publish.ts @@ -1,13 +1,9 @@ -import { IProject, IProjectLite, IWorkspaceLite } from "@plane/types"; +import { IProject, IProjectLite } from "./project"; +import { IWorkspaceLite } from "./workspace"; export type TPublishEntityType = "project" | "page"; -export type TProjectPublishLayouts = - | "calendar" - | "gantt" - | "kanban" - | "list" - | "spreadsheet"; +export type TProjectPublishLayouts = "calendar" | "gantt" | "kanban" | "list" | "spreadsheet"; export type TProjectPublishViewProps = { calendar?: boolean; @@ -17,10 +13,9 @@ export type TProjectPublishViewProps = { spreadsheet?: boolean; }; -export type TProjectDetails = IProjectLite & - Pick; +export type TProjectDetails = IProjectLite & Pick; -type TPublishSettings = { +export type TPublishSettings = { anchor: string | undefined; created_at: string | undefined; created_by: string | undefined; diff --git a/packages/types/src/reaction.d.ts b/packages/types/src/reaction.ts similarity index 100% rename from packages/types/src/reaction.d.ts rename to packages/types/src/reaction.ts diff --git a/packages/types/src/search.d.ts b/packages/types/src/search.ts similarity index 100% rename from packages/types/src/search.d.ts rename to packages/types/src/search.ts diff --git a/packages/types/src/state.d.ts b/packages/types/src/state.ts similarity index 92% rename from packages/types/src/state.d.ts rename to packages/types/src/state.ts index 38d0abe125b..7392606e2e7 100644 --- a/packages/types/src/state.d.ts +++ b/packages/types/src/state.ts @@ -1,5 +1,3 @@ -import { IProject, IProjectLite, IWorkspaceLite } from "@plane/types"; - export type TStateGroups = "backlog" | "unstarted" | "started" | "completed" | "cancelled"; export interface IState { diff --git a/packages/types/src/stickies.d copy.ts b/packages/types/src/stickies.d copy.ts deleted file mode 100644 index 55f8b23c587..00000000000 --- a/packages/types/src/stickies.d copy.ts +++ /dev/null @@ -1,8 +0,0 @@ -export type TSticky = { - id: string; - name?: string; - description_html?: string; - color?: string; - createdAt?: Date; - updatedAt?: Date; -}; diff --git a/packages/types/src/stickies.d.ts b/packages/types/src/stickies.ts similarity index 100% rename from packages/types/src/stickies.d.ts rename to packages/types/src/stickies.ts diff --git a/packages/types/src/timezone.d.ts b/packages/types/src/timezone.ts similarity index 100% rename from packages/types/src/timezone.d.ts rename to packages/types/src/timezone.ts diff --git a/packages/types/src/users.d.ts b/packages/types/src/users.ts similarity index 94% rename from packages/types/src/users.d.ts rename to packages/types/src/users.ts index 7694c240646..3258d14dcdf 100644 --- a/packages/types/src/users.d.ts +++ b/packages/types/src/users.ts @@ -1,8 +1,21 @@ -import { EStartOfTheWeek } from "@plane/constants"; import { IIssueActivity, TIssuePriorities, TStateGroups } from "."; import { TUserPermissions } from "./enums"; -type TLoginMediums = "email" | "magic-code" | "github" | "gitlab" | "google"; +/** + * @description The start of the week for the user + * @enum {number} + */ +export enum EStartOfTheWeek { + SUNDAY = 0, + MONDAY = 1, + TUESDAY = 2, + WEDNESDAY = 3, + THURSDAY = 4, + FRIDAY = 5, + SATURDAY = 6, +} + +export type TLoginMediums = "email" | "magic-code" | "github" | "gitlab" | "google"; export interface IUserLite { avatar_url: string; @@ -19,7 +32,7 @@ export interface IUser extends IUserLite { cover_image_asset?: string | null; cover_image?: string | null; // only for rendering the cover image - cover_image_url: readonly (string | null); + cover_image_url: string | null; date_joined: string; email: string; is_active: boolean; diff --git a/packages/types/src/utils.d.ts b/packages/types/src/utils.ts similarity index 100% rename from packages/types/src/utils.d.ts rename to packages/types/src/utils.ts diff --git a/packages/types/src/view-props.d.ts b/packages/types/src/view-props.ts similarity index 92% rename from packages/types/src/view-props.d.ts rename to packages/types/src/view-props.ts index 509ee54957f..2a6b9f22bca 100644 --- a/packages/types/src/view-props.d.ts +++ b/packages/types/src/view-props.ts @@ -160,13 +160,6 @@ export interface IWorkspaceIssueFilterOptions { project?: string[] | null; } -export interface IWorkspaceGlobalViewDisplayFilterOptions { - order_by?: string | undefined; - type?: "active" | "backlog" | null; - sub_issue?: boolean; - layout?: TIssueViewOptions; -} - export interface IWorkspaceViewIssuesParams { assignees?: string | undefined; created_by?: string | undefined; @@ -193,11 +186,6 @@ export interface IWorkspaceViewProps { display_filters: IIssueDisplayFilterOptions | undefined; display_properties: IIssueDisplayProperties; } -export interface IWorkspaceGlobalViewProps { - filters: IWorkspaceIssueFilterOptions; - display_filters: IWorkspaceIssueDisplayFilterOptions | undefined; - display_properties: IIssueDisplayProperties; -} export interface IssuePaginationOptions { canGroup: boolean; diff --git a/packages/types/src/views.d.ts b/packages/types/src/views.ts similarity index 96% rename from packages/types/src/views.d.ts rename to packages/types/src/views.ts index 32b5889ca81..f7630422b60 100644 --- a/packages/types/src/views.d.ts +++ b/packages/types/src/views.ts @@ -1,4 +1,3 @@ -import { EViewAccess } from "@plane/constants"; import { TLogoProps } from "./common"; import { IIssueDisplayFilterOptions, @@ -6,6 +5,11 @@ import { IIssueFilterOptions, } from "./view-props"; +export enum EViewAccess { + PRIVATE, + PUBLIC, +} + export interface IProjectView { id: string; access: EViewAccess; diff --git a/packages/types/src/waitlist.d.ts b/packages/types/src/waitlist.ts similarity index 100% rename from packages/types/src/waitlist.d.ts rename to packages/types/src/waitlist.ts diff --git a/packages/types/src/webhook.d.ts b/packages/types/src/webhook.ts similarity index 100% rename from packages/types/src/webhook.d.ts rename to packages/types/src/webhook.ts diff --git a/packages/types/src/workspace-draft-issues/base.d.ts b/packages/types/src/workspace-draft-issues/base.ts similarity index 100% rename from packages/types/src/workspace-draft-issues/base.d.ts rename to packages/types/src/workspace-draft-issues/base.ts diff --git a/packages/types/src/workspace-notifications.d.ts b/packages/types/src/workspace-notifications.ts similarity index 100% rename from packages/types/src/workspace-notifications.d.ts rename to packages/types/src/workspace-notifications.ts diff --git a/packages/types/src/workspace-views.d.ts b/packages/types/src/workspace-views.ts similarity index 90% rename from packages/types/src/workspace-views.d.ts rename to packages/types/src/workspace-views.ts index eb207128d09..2554d63056e 100644 --- a/packages/types/src/workspace-views.d.ts +++ b/packages/types/src/workspace-views.ts @@ -1,10 +1,10 @@ -import { EViewAccess } from "@plane/constants"; import { IWorkspaceViewProps, IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, } from "./view-props"; +import { EViewAccess } from "./views"; export interface IWorkspaceView { id: string; @@ -16,7 +16,7 @@ export interface IWorkspaceView { updated_by: string; name: string; description: string; - filters: IIssueIIFilterOptions; + filters: IIssueFilterOptions; display_filters: IIssueDisplayFilterOptions; display_properties: IIssueDisplayProperties; query: any; diff --git a/packages/types/src/workspace.d.ts b/packages/types/src/workspace.ts similarity index 93% rename from packages/types/src/workspace.d.ts rename to packages/types/src/workspace.ts index 0b81e3b9103..09b05c62e01 100644 --- a/packages/types/src/workspace.d.ts +++ b/packages/types/src/workspace.ts @@ -1,6 +1,15 @@ -import type { ICycle, TProjectMembership, IUser, IUserLite, IWorkspaceViewProps, TPaginationInfo } from "@plane/types"; -import { EUserWorkspaceRoles } from "@plane/constants"; // TODO: check if importing this over here causes circular dependency +import type { TPaginationInfo } from "./common"; +import type { ICycle } from "./cycle"; import { TUserPermissions } from "./enums"; +import { TProjectMembership } from "./project"; +import type { IUser, IUserLite } from "./users"; +import type { IWorkspaceViewProps } from "./view-props"; + +export enum EUserWorkspaceRoles { + ADMIN = 20, + MEMBER = 15, + GUEST = 5, +} export interface IWorkspace { readonly id: string; diff --git a/packages/ui/package.json b/packages/ui/package.json index 5b3cab5cda4..bf388c8fb1a 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -67,7 +67,6 @@ "@types/react-color": "^3.0.9", "@types/react-dom": "^18.2.18", "autoprefixer": "^10.4.19", - "classnames": "^2.3.2", "postcss-cli": "^11.0.0", "postcss-nested": "^6.0.1", "storybook": "^8.1.1", diff --git a/packages/utils/package.json b/packages/utils/package.json index 255bbbfe8e5..ca53a18a066 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -16,18 +16,23 @@ "lint:errors": "eslint src --ext .ts,.tsx --quiet" }, "dependencies": { + "@plane/constants": "*", + "@plane/types": "*", "clsx": "^2.1.1", "date-fns": "^4.1.0", "isomorphic-dompurify": "^2.16.0", "lodash": "^4.17.21", "react": "^18.3.1", "tailwind-merge": "^2.5.5", + "uuid": "^10.0.0", "zxcvbn": "^4.4.2" }, "devDependencies": { "@plane/eslint-config": "*", + "@plane/typescript-config": "*", "@types/node": "^22.5.4", "@types/react": "^18.3.11", + "@types/uuid": "^9.0.8", "@types/zxcvbn": "^4.4.5", "tsup": "8.4.0", "typescript": "5.8.3" diff --git a/packages/utils/src/calendar.ts b/packages/utils/src/calendar.ts index f4217ea41b1..c982ff91cc9 100644 --- a/packages/utils/src/calendar.ts +++ b/packages/utils/src/calendar.ts @@ -1,6 +1,5 @@ // plane imports -import { EStartOfTheWeek } from "@plane/constants"; -import { ICalendarDate, ICalendarPayload } from "@plane/types"; +import { EStartOfTheWeek, ICalendarDate, ICalendarPayload } from "@plane/types"; // local imports import { getWeekNumberOfDate, renderFormattedPayloadDate } from "./datetime"; diff --git a/packages/utils/src/distribution-update.ts b/packages/utils/src/distribution-update.ts index d085aabdb0e..de9e254cc43 100644 --- a/packages/utils/src/distribution-update.ts +++ b/packages/utils/src/distribution-update.ts @@ -4,7 +4,7 @@ import { format } from "date-fns"; import get from "lodash/get"; import set from "lodash/set"; // plane imports -import { STATE_GROUPS, COMPLETED_STATE_GROUPS } from "@plane/constants"; +import { COMPLETED_STATE_GROUPS, STATE_DISTRIBUTION } from "@plane/constants"; import { ICycle, IEstimatePoint, IModule, IState, TIssue } from "@plane/types"; // helper import { getDate } from "./datetime"; @@ -33,34 +33,6 @@ export type DistributionUpdates = { labelUpdates: DistributionObjectUpdate[]; }; -const STATE_DISTRIBUTION = { - [STATE_GROUPS.backlog.key]: { - key: STATE_GROUPS.backlog.key, - issues: "backlog_issues", - points: "backlog_estimate_points", - }, - [STATE_GROUPS.unstarted.key]: { - key: STATE_GROUPS.unstarted.key, - issues: "unstarted_issues", - points: "unstarted_estimate_points", - }, - [STATE_GROUPS.started.key]: { - key: STATE_GROUPS.started.key, - issues: "started_issues", - points: "started_estimate_points", - }, - [STATE_GROUPS.completed.key]: { - key: STATE_GROUPS.completed.key, - issues: "completed_issues", - points: "completed_estimate_points", - }, - [STATE_GROUPS.cancelled.key]: { - key: STATE_GROUPS.cancelled.key, - issues: "cancelled_issues", - points: "cancelled_estimate_points", - }, -}; - /** * Get Distribution updates with the help of previous and next issue states * @param prevIssueState diff --git a/packages/utils/src/permission/role.ts b/packages/utils/src/permission/role.ts index 5e6bf02e117..3b6f73cf45a 100644 --- a/packages/utils/src/permission/role.ts +++ b/packages/utils/src/permission/role.ts @@ -1,5 +1,6 @@ // plane imports -import { EUserProjectRoles, EUserWorkspaceRoles, EUserPermissions } from "@plane/constants"; +import { EUserPermissions } from "@plane/constants"; +import { EUserProjectRoles, EUserWorkspaceRoles } from "@plane/types"; export const getUserRole = (role: EUserPermissions | EUserWorkspaceRoles | EUserProjectRoles) => { switch (role) { diff --git a/packages/utils/src/subscription.ts b/packages/utils/src/subscription.ts index 207f387b7b8..a03dbc2929b 100644 --- a/packages/utils/src/subscription.ts +++ b/packages/utils/src/subscription.ts @@ -1,7 +1,6 @@ import orderBy from "lodash/orderBy"; // plane imports -import { EProductSubscriptionEnum } from "@plane/constants"; -import { IPaymentProduct, TProductSubscriptionType, TSubscriptionPrice } from "@plane/types"; +import { EProductSubscriptionEnum, IPaymentProduct, TProductSubscriptionType, TSubscriptionPrice } from "@plane/types"; /** * Calculates the yearly discount percentage when switching from monthly to yearly billing diff --git a/space/core/store/profile.store.ts b/space/core/store/profile.store.ts index c032efba998..59feb088b29 100644 --- a/space/core/store/profile.store.ts +++ b/space/core/store/profile.store.ts @@ -1,9 +1,8 @@ import set from "lodash/set"; import { action, makeObservable, observable, runInAction } from "mobx"; // plane imports -import { EStartOfTheWeek } from "@plane/constants"; import { UserService } from "@plane/services"; -import { TUserProfile } from "@plane/types"; +import { EStartOfTheWeek, TUserProfile } from "@plane/types"; // store import { CoreRootStore } from "@/store/root.store"; diff --git a/space/core/store/user.store.ts b/space/core/store/user.store.ts index 6765961f54c..510545bd350 100644 --- a/space/core/store/user.store.ts +++ b/space/core/store/user.store.ts @@ -2,13 +2,11 @@ import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; // plane imports import { UserService } from "@plane/services"; -import { IUser } from "@plane/types"; +import { ActorDetail, IUser } from "@plane/types"; // store types import { ProfileStore, IProfileStore } from "@/store/profile.store"; // store import { CoreRootStore } from "@/store/root.store"; -// types -import { ActorDetail } from "@/types/issue"; type TUserErrorStatus = { status: string; diff --git a/space/core/types/issue.d.ts b/space/core/types/issue.d.ts index d57dd84de39..ac7549a8ae7 100644 --- a/space/core/types/issue.d.ts +++ b/space/core/types/issue.d.ts @@ -1,4 +1,4 @@ -import { IWorkspaceLite, TIssue, TIssuePriorities, TStateGroups, TIssuePublicComment } from "@plane/types"; +import { ActorDetail, TIssue, TIssuePriorities, TStateGroups, TIssuePublicComment } from "@plane/types"; export type TIssueLayout = "list" | "kanban" | "calendar" | "spreadsheet" | "gantt"; export type TIssueLayoutOptions = { @@ -111,57 +111,6 @@ export interface IIssueReaction { reaction: string; } -export interface ActorDetail { - avatar_url?: string; - display_name?: string; - first_name?: string; - is_bot?: boolean; - id?: string; - last_name?: string; -} - -export interface IssueDetail { - id: string; - name: string; - description: Description; - description_html: string; - priority: string; - start_date: null; - target_date: null; - sequence_id: number; - sort_order: number; -} - -export interface Description { - type: string; - content: DescriptionContent[]; -} - -export interface DescriptionContent { - type: string; - attrs?: Attrs; - content: ContentContent[]; -} - -export interface Attrs { - level: number; -} - -export interface ContentContent { - text: string; - type: string; -} - -export interface ProjectDetail { - id: string; - identifier: string; - name: string; - cover_image: string; - icon_prop: null; - emoji: string; - description: string; -} - export interface IIssueFilterOptions { state?: string[] | null; labels?: string[] | null; diff --git a/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx b/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx index 735474cd4d2..63c6aa2b760 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx @@ -6,8 +6,8 @@ import { useParams } from "next/navigation"; import { useTheme } from "next-themes"; import useSWR from "swr"; // plane imports -import { EIssueServiceType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { EIssueServiceType } from "@plane/types"; import { Loader } from "@plane/ui"; // components import { EmptyState } from "@/components/common"; diff --git a/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx index 92cdfb1c13e..84f60e9fc8d 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx @@ -3,9 +3,10 @@ import { useState } from "react"; import { observer } from "mobx-react"; import { PenSquare } from "lucide-react"; -import { EIssuesStoreType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; // ui +import { EIssuesStoreType } from "@plane/types"; import { Breadcrumbs, Button, Header } from "@plane/ui"; // components import { BreadcrumbLink, CountChip } from "@/components/common"; diff --git a/web/app/(all)/[workspaceSlug]/(projects)/extended-sidebar.tsx b/web/app/(all)/[workspaceSlug]/(projects)/extended-sidebar.tsx index baa41eb9fb9..4adfa4b8a8a 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/extended-sidebar.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/extended-sidebar.tsx @@ -4,7 +4,8 @@ import React, { useMemo, useRef } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { EUserWorkspaceRoles, WORKSPACE_SIDEBAR_DYNAMIC_NAVIGATION_ITEMS_LINKS } from "@plane/constants"; +import { WORKSPACE_SIDEBAR_DYNAMIC_NAVIGATION_ITEMS_LINKS } from "@plane/constants"; +import { EUserWorkspaceRoles } from "@plane/types"; import { cn } from "@plane/utils"; // hooks import { useAppTheme, useWorkspace } from "@/hooks/store"; diff --git a/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx index 60ee2c35151..7aed027b093 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx @@ -6,17 +6,17 @@ import { useParams } from "next/navigation"; // icons import { ChevronDown } from "lucide-react"; // plane constants -import { - EIssueLayoutTypes, - EIssueFilterType, - EIssuesStoreType, - ISSUE_LAYOUTS, - ISSUE_DISPLAY_FILTERS_BY_PAGE, -} from "@plane/constants"; +import { EIssueLayoutTypes, EIssueFilterType, ISSUE_LAYOUTS, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; // plane i18n import { useTranslation } from "@plane/i18n"; // types -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, TIssueLayouts } from "@plane/types"; +import { + EIssuesStoreType, + IIssueDisplayFilterOptions, + IIssueDisplayProperties, + IIssueFilterOptions, + TIssueLayouts, +} from "@plane/types"; // ui import { CustomMenu } from "@plane/ui"; // components diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx index 5a588457ac0..40f407d6a88 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx @@ -3,7 +3,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; -import { EIssuesStoreType } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; // ui import { ArchiveIcon, Breadcrumbs, Tooltip, Header, ContrastIcon, DiceIcon, LayersIcon } from "@plane/ui"; // components diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx index 5844c661bd0..ab7cde7829c 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx @@ -9,7 +9,6 @@ import { PanelRight } from "lucide-react"; import { EIssueFilterType, EIssueLayoutTypes, - EIssuesStoreType, EUserPermissions, EUserPermissionsLevel, EProjectFeatureKey, @@ -18,6 +17,7 @@ import { import { usePlatformOS } from "@plane/hooks"; import { useTranslation } from "@plane/i18n"; import { + EIssuesStoreType, ICustomSearchSelectOption, IIssueDisplayFilterOptions, IIssueDisplayProperties, diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/mobile-header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/mobile-header.tsx index fc98e941bf7..6d8c4ec0089 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/mobile-header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/mobile-header.tsx @@ -5,15 +5,14 @@ import { useParams } from "next/navigation"; // icons import { Calendar, ChevronDown, Kanban, List } from "lucide-react"; // plane imports +import { EIssueLayoutTypes, EIssueFilterType, ISSUE_LAYOUTS, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { - EIssueLayoutTypes, - EIssueFilterType, EIssuesStoreType, - ISSUE_LAYOUTS, - ISSUE_DISPLAY_FILTERS_BY_PAGE, -} from "@plane/constants"; -import { useTranslation } from "@plane/i18n"; -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; + IIssueDisplayFilterOptions, + IIssueDisplayProperties, + IIssueFilterOptions, +} from "@plane/types"; import { CustomMenu } from "@plane/ui"; import { isIssueFilterActive } from "@plane/utils"; // components diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx index edb4e1bcf1c..82192f61e61 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx @@ -4,9 +4,9 @@ import { useState } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { EUserPermissionsLevel, EUserProjectRoles } from "@plane/constants"; +import { EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TCycleFilters } from "@plane/types"; +import { EUserProjectRoles, TCycleFilters } from "@plane/types"; // components import { Header, EHeaderVariant } from "@plane/ui"; import { calculateTotalFilters } from "@plane/utils"; diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/header.tsx index 3c2796761bc..2b8b63691b4 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/header.tsx @@ -4,11 +4,16 @@ import { FC, useCallback } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane constants -import { EIssueLayoutTypes, EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; +import { EIssueLayoutTypes, EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; // i18n import { useTranslation } from "@plane/i18n"; // types -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; +import { + EIssuesStoreType, + IIssueDisplayFilterOptions, + IIssueDisplayProperties, + IIssueFilterOptions, +} from "@plane/types"; // ui import { Breadcrumbs, LayersIcon, Tooltip } from "@plane/ui"; // components diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/page.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/page.tsx index 48ab4d38b1f..1e6e2c54297 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/page.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/page.tsx @@ -1,10 +1,10 @@ "use client"; import { observer } from "mobx-react"; import { useParams, useSearchParams } from "next/navigation"; -import { EUserPermissionsLevel, EInboxIssueCurrentTab } from "@plane/constants"; +import { EUserPermissionsLevel } from "@plane/constants"; // components -import { EUserProjectRoles } from "@plane/constants/src/user"; import { useTranslation } from "@plane/i18n"; +import { EUserProjectRoles, EInboxIssueCurrentTab } from "@plane/types"; import { PageHead } from "@/components/core"; import { DetailedEmptyState } from "@/components/empty-state"; import { InboxIssueRoot } from "@/components/inbox"; diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx index 27a78ed3a75..d3d533b29fd 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx @@ -6,15 +6,14 @@ import { useParams } from "next/navigation"; // icons import { Calendar, ChevronDown, Kanban, List } from "lucide-react"; // plane imports +import { EIssueLayoutTypes, EIssueFilterType, ISSUE_LAYOUTS, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { - EIssueLayoutTypes, - EIssueFilterType, EIssuesStoreType, - ISSUE_LAYOUTS, - ISSUE_DISPLAY_FILTERS_BY_PAGE, -} from "@plane/constants"; -import { useTranslation } from "@plane/i18n"; -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; + IIssueDisplayFilterOptions, + IIssueDisplayProperties, + IIssueFilterOptions, +} from "@plane/types"; import { CustomMenu } from "@plane/ui"; import { isIssueFilterActive } from "@plane/utils"; // components diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx index 4ec808d7aad..32603684ce6 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx @@ -8,7 +8,6 @@ import { PanelRight } from "lucide-react"; // plane imports import { EIssueLayoutTypes, - EIssuesStoreType, EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_PAGE, EUserPermissions, @@ -16,6 +15,7 @@ import { EProjectFeatureKey, } from "@plane/constants"; import { + EIssuesStoreType, ICustomSearchSelectOption, IIssueDisplayFilterOptions, IIssueDisplayProperties, diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/mobile-header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/mobile-header.tsx index 71d2b78d4ab..0d2c2ff2a81 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/mobile-header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/mobile-header.tsx @@ -6,15 +6,14 @@ import { useParams } from "next/navigation"; // icons import { Calendar, ChevronDown, Kanban, List } from "lucide-react"; // plane imports +import { EIssueLayoutTypes, EIssueFilterType, ISSUE_LAYOUTS, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { - EIssueLayoutTypes, - EIssueFilterType, EIssuesStoreType, - ISSUE_LAYOUTS, - ISSUE_DISPLAY_FILTERS_BY_PAGE, -} from "@plane/constants"; -import { useTranslation } from "@plane/i18n"; -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; + IIssueDisplayFilterOptions, + IIssueDisplayProperties, + IIssueFilterOptions, +} from "@plane/types"; import { CustomMenu } from "@plane/ui"; import { isIssueFilterActive } from "@plane/utils"; // components diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/page.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/page.tsx index 1a2980760ab..f00c7b223e0 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/page.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/page.tsx @@ -4,9 +4,9 @@ import { useCallback } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // types -import { EUserPermissionsLevel, EUserProjectRoles } from "@plane/constants"; +import { EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TModuleFilters } from "@plane/types"; +import { EUserProjectRoles, TModuleFilters } from "@plane/types"; // components import { calculateTotalFilters } from "@plane/utils"; import { PageHead } from "@/components/core/page-title"; diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/page.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/page.tsx index 270faf985de..58b69809bf3 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/page.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/page.tsx @@ -3,9 +3,9 @@ import { observer } from "mobx-react"; import { useParams, useSearchParams } from "next/navigation"; // plane imports -import { EUserPermissionsLevel, EUserProjectRoles } from "@plane/constants"; +import { EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TPageNavigationTabs } from "@plane/types"; +import { EUserProjectRoles, TPageNavigationTabs } from "@plane/types"; // components import { PageHead } from "@/components/core"; import { DetailedEmptyState } from "@/components/empty-state"; diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx index 8e69ef88854..7169a3d9191 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx @@ -8,15 +8,15 @@ import { Layers, Lock } from "lucide-react"; import { EIssueLayoutTypes, EIssueFilterType, - EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_PAGE, - EViewAccess, EUserPermissions, EUserPermissionsLevel, EProjectFeatureKey, } from "@plane/constants"; // types import { + EIssuesStoreType, + EViewAccess, ICustomSearchSelectOption, IIssueDisplayFilterOptions, IIssueDisplayProperties, diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx index d9068966c4e..67895bcb96c 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx @@ -4,9 +4,9 @@ import { useCallback } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // components -import { EUserPermissionsLevel, EUserProjectRoles, EViewAccess } from "@plane/constants"; +import { EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TViewFilterProps } from "@plane/types"; +import { EUserProjectRoles, EViewAccess, TViewFilterProps } from "@plane/types"; import { Header, EHeaderVariant } from "@plane/ui"; import { calculateTotalFilters } from "@plane/utils"; import { PageHead } from "@/components/core/page-title"; diff --git a/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx index 399f9aab690..d53254f1f7f 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx @@ -4,26 +4,24 @@ import { useCallback, useMemo, useState } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Layers } from "lucide-react"; -// plane constants +// plane imports import { - DEFAULT_GLOBAL_VIEWS_LIST, EIssueFilterType, - EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_PAGE, - EIssueLayoutTypes + DEFAULT_GLOBAL_VIEWS_LIST, + EIssueLayoutTypes, } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -// types import { - ICustomSearchSelectOption, + EIssuesStoreType, IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, + ICustomSearchSelectOption, } from "@plane/types"; -// ui import { Breadcrumbs, Button, Header, BreadcrumbNavigationSearchDropdown } from "@plane/ui"; -// components import { isIssueFilterActive } from "@plane/utils"; +// components import { BreadcrumbLink, SwitcherLabel } from "@/components/common"; import { DisplayFiltersSelection, FiltersDropdown, FilterSelection } from "@/components/issues"; import { @@ -31,7 +29,6 @@ import { WorkspaceViewQuickActions, DefaultWorkspaceViewQuickActions, } from "@/components/workspace"; -// helpers // hooks import { useLabel, useMember, useIssues, useGlobalView } from "@/hooks/store"; import { useAppRouter } from "@/hooks/use-app-router"; diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx b/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx index bc3e69a7a87..011659090a1 100644 --- a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx +++ b/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx @@ -4,7 +4,8 @@ import { FC, ReactNode } from "react"; import { observer } from "mobx-react"; import { usePathname } from "next/navigation"; // constants -import { EUserWorkspaceRoles, WORKSPACE_SETTINGS_ACCESS } from "@plane/constants"; +import { WORKSPACE_SETTINGS_ACCESS } from "@plane/constants"; +import { EUserWorkspaceRoles } from "@plane/types"; // components import { NotAuthorizedView } from "@/components/auth-screens"; import { SettingsMobileNav } from "@/components/settings"; diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx b/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx index 8a97c8b050f..0f346f5d9a6 100644 --- a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx +++ b/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx @@ -1,13 +1,7 @@ import { useParams, usePathname } from "next/navigation"; import { ArrowUpToLine, Building, CreditCard, Users, Webhook } from "lucide-react"; -import { - EUserPermissionsLevel, - GROUPED_WORKSPACE_SETTINGS, - WORKSPACE_SETTINGS_CATEGORIES, - EUserWorkspaceRoles, - EUserPermissions, - WORKSPACE_SETTINGS_CATEGORY, -} from "@plane/constants"; +import { EUserPermissionsLevel, GROUPED_WORKSPACE_SETTINGS, WORKSPACE_SETTINGS_CATEGORIES, EUserPermissions, WORKSPACE_SETTINGS_CATEGORY } from "@plane/constants"; +import { EUserWorkspaceRoles } from "@plane/types"; import { SettingsSidebar } from "@/components/settings"; import { useUserPermissions } from "@/hooks/store/user"; import { shouldRenderSettingLink } from "@/plane-web/helpers/workspace.helper"; diff --git a/web/ce/components/command-palette/modals/issue-level.tsx b/web/ce/components/command-palette/modals/issue-level.tsx index f88908f2535..9f80727d3cc 100644 --- a/web/ce/components/command-palette/modals/issue-level.tsx +++ b/web/ce/components/command-palette/modals/issue-level.tsx @@ -2,8 +2,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { useParams, usePathname } from "next/navigation"; // plane imports -import { EIssueServiceType, EIssuesStoreType } from "@plane/constants"; -import { TIssue } from "@plane/types"; +import { EIssueServiceType, EIssuesStoreType, TIssue } from "@plane/types"; // components import { BulkDeleteIssuesModal } from "@/components/core"; import { CreateUpdateIssueModal, DeleteIssueModal } from "@/components/issues"; diff --git a/web/ce/components/inbox/source-pill.tsx b/web/ce/components/inbox/source-pill.tsx index 6e42f688027..07e72178075 100644 --- a/web/ce/components/inbox/source-pill.tsx +++ b/web/ce/components/inbox/source-pill.tsx @@ -1,4 +1,4 @@ -import { EInboxIssueSource } from "@plane/constants"; +import { EInboxIssueSource } from "@plane/types"; export type TInboxSourcePill = { source: EInboxIssueSource; diff --git a/web/ce/components/issues/header.tsx b/web/ce/components/issues/header.tsx index 3250ad4d5eb..fac54955bfa 100644 --- a/web/ce/components/issues/header.tsx +++ b/web/ce/components/issues/header.tsx @@ -4,17 +4,16 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // icons import { Circle, ExternalLink } from "lucide-react"; +// plane imports import { - EIssuesStoreType, - EProjectFeatureKey, EUserPermissions, EUserPermissionsLevel, SPACE_BASE_PATH, SPACE_BASE_URL, + EProjectFeatureKey, } from "@plane/constants"; -// plane constants import { useTranslation } from "@plane/i18n"; -// ui +import { EIssuesStoreType } from "@plane/types"; import { Breadcrumbs, Button, Tooltip, Header } from "@plane/ui"; // components import { CountChip } from "@/components/common"; diff --git a/web/ce/components/issues/issue-modal/provider.tsx b/web/ce/components/issues/issue-modal/provider.tsx index 788f1ae86be..b6e6b33af6e 100644 --- a/web/ce/components/issues/issue-modal/provider.tsx +++ b/web/ce/components/issues/issue-modal/provider.tsx @@ -1,5 +1,5 @@ import React, { useState } from "react"; -import { observer } from "mobx-react-lite"; +import { observer } from "mobx-react"; // plane imports import { ISearchIssueResponse, TIssue } from "@plane/types"; // components diff --git a/web/ce/components/license/modal/upgrade-modal.tsx b/web/ce/components/license/modal/upgrade-modal.tsx index 3b209198aff..531925c0401 100644 --- a/web/ce/components/license/modal/upgrade-modal.tsx +++ b/web/ce/components/license/modal/upgrade-modal.tsx @@ -6,13 +6,13 @@ import { observer } from "mobx-react"; import { BUSINESS_PLAN_FEATURES, ENTERPRISE_PLAN_FEATURES, - EProductSubscriptionEnum, PLANE_COMMUNITY_PRODUCTS, PRO_PLAN_FEATURES, SUBSCRIPTION_REDIRECTION_URLS, SUBSCRIPTION_WEBPAGE_URLS, TALK_TO_SALES_URL, } from "@plane/constants"; +import { EProductSubscriptionEnum } from "@plane/types"; import { EModalWidth, ModalCore } from "@plane/ui"; import { cn } from "@plane/utils"; // components diff --git a/web/ce/components/workspace/billing/comparison/frequency-toggle.tsx b/web/ce/components/workspace/billing/comparison/frequency-toggle.tsx index 622c4d5ceff..fdec58a34fc 100644 --- a/web/ce/components/workspace/billing/comparison/frequency-toggle.tsx +++ b/web/ce/components/workspace/billing/comparison/frequency-toggle.tsx @@ -1,8 +1,7 @@ import { FC } from "react"; // plane imports import { observer } from "mobx-react"; -import { EProductSubscriptionEnum } from "@plane/constants"; -import { TBillingFrequency } from "@plane/types"; +import { EProductSubscriptionEnum, TBillingFrequency } from "@plane/types"; import { calculateYearlyDiscount, cn } from "@plane/utils"; // plane web imports import { getDiscountPillStyle, getSubscriptionBackgroundColor } from "@/components/workspace/billing/subscription"; diff --git a/web/ce/components/workspace/billing/comparison/plan-detail.tsx b/web/ce/components/workspace/billing/comparison/plan-detail.tsx index 5b22e79ccc8..38715972b43 100644 --- a/web/ce/components/workspace/billing/comparison/plan-detail.tsx +++ b/web/ce/components/workspace/billing/comparison/plan-detail.tsx @@ -2,13 +2,12 @@ import { FC } from "react"; import { observer } from "mobx-react"; // plane imports import { - EProductSubscriptionEnum, SUBSCRIPTION_REDIRECTION_URLS, SUBSCRIPTION_WITH_BILLING_FREQUENCY, TALK_TO_SALES_URL, } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TBillingFrequency } from "@plane/types"; +import { EProductSubscriptionEnum, TBillingFrequency } from "@plane/types"; import { getButtonStyling } from "@plane/ui"; import { cn, getSubscriptionName } from "@plane/utils"; // components diff --git a/web/ce/components/workspace/billing/comparison/root.tsx b/web/ce/components/workspace/billing/comparison/root.tsx index 469b9806dae..cf8f3dec522 100644 --- a/web/ce/components/workspace/billing/comparison/root.tsx +++ b/web/ce/components/workspace/billing/comparison/root.tsx @@ -1,7 +1,6 @@ import { observer } from "mobx-react"; // plane imports -import { EProductSubscriptionEnum } from "@plane/constants"; -import { TBillingFrequency } from "@plane/types"; +import { EProductSubscriptionEnum, TBillingFrequency } from "@plane/types"; // components import { PlansComparisonBase, shouldRenderPlanDetail } from "@/components/workspace/billing/comparison/base"; import { PLANE_PLANS, TPlanePlans } from "@/constants/plans"; diff --git a/web/ce/components/workspace/billing/root.tsx b/web/ce/components/workspace/billing/root.tsx index c61b1964370..dd432842033 100644 --- a/web/ce/components/workspace/billing/root.tsx +++ b/web/ce/components/workspace/billing/root.tsx @@ -1,13 +1,9 @@ import { useState } from "react"; import { observer } from "mobx-react"; // plane imports -import { - DEFAULT_PRODUCT_BILLING_FREQUENCY, - EProductSubscriptionEnum, - SUBSCRIPTION_WITH_BILLING_FREQUENCY, -} from "@plane/constants"; +import { DEFAULT_PRODUCT_BILLING_FREQUENCY, SUBSCRIPTION_WITH_BILLING_FREQUENCY } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TBillingFrequency, TProductBillingFrequency } from "@plane/types"; +import { EProductSubscriptionEnum, TBillingFrequency, TProductBillingFrequency } from "@plane/types"; import { cn } from "@plane/utils"; // components import { SettingsHeading } from "@/components/settings"; diff --git a/web/ce/hooks/use-notification-preview.tsx b/web/ce/hooks/use-notification-preview.tsx index b0c18d5542d..d4299915836 100644 --- a/web/ce/hooks/use-notification-preview.tsx +++ b/web/ce/hooks/use-notification-preview.tsx @@ -1,5 +1,4 @@ -import { EIssueServiceType } from "@plane/constants"; -import { IWorkItemPeekOverview } from "@plane/types"; +import { EIssueServiceType, IWorkItemPeekOverview } from "@plane/types"; import { IssuePeekOverview } from "@/components/issues"; import { useIssueDetail } from "@/hooks/store"; import { TPeekIssue } from "@/store/issue/issue-details/root.store"; diff --git a/web/ce/services/project/view.service.ts b/web/ce/services/project/view.service.ts index 475cb3124cf..5ab65a1b6b1 100644 --- a/web/ce/services/project/view.service.ts +++ b/web/ce/services/project/view.service.ts @@ -1,5 +1,5 @@ -import { EViewAccess, API_BASE_URL } from "@plane/constants"; -import { TPublishViewSettings } from "@plane/types"; +import { API_BASE_URL } from "@plane/constants"; +import { EViewAccess, TPublishViewSettings } from "@plane/types"; import { ViewService as CoreViewService } from "@/services/view.service"; export class ViewService extends CoreViewService { diff --git a/web/ce/services/workspace.service.ts b/web/ce/services/workspace.service.ts index e5e99b65d06..d1e175c8105 100644 --- a/web/ce/services/workspace.service.ts +++ b/web/ce/services/workspace.service.ts @@ -1,4 +1,5 @@ -import { EViewAccess, API_BASE_URL } from "@plane/constants"; +import { API_BASE_URL } from "@plane/constants"; +import { EViewAccess } from "@plane/types"; import { WorkspaceService as CoreWorkspaceService } from "@/services/workspace.service"; export class WorkspaceService extends CoreWorkspaceService { diff --git a/web/ce/store/issue/issue-details/activity.store.ts b/web/ce/store/issue/issue-details/activity.store.ts index 93b925aba9d..377cc6ff9ee 100644 --- a/web/ce/store/issue/issue-details/activity.store.ts +++ b/web/ce/store/issue/issue-details/activity.store.ts @@ -8,8 +8,9 @@ import update from "lodash/update"; import { action, makeObservable, observable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; // plane package imports -import { EIssueServiceType, E_SORT_ORDER, EActivityFilterType } from "@plane/constants"; +import { E_SORT_ORDER, EActivityFilterType } from "@plane/constants"; import { + EIssueServiceType, TIssueActivityComment, TIssueActivity, TIssueActivityMap, diff --git a/web/ce/store/member/project-member.store.ts b/web/ce/store/member/project-member.store.ts index 1b90c9c1179..717da465906 100644 --- a/web/ce/store/member/project-member.store.ts +++ b/web/ce/store/member/project-member.store.ts @@ -1,6 +1,6 @@ import { computedFn } from "mobx-utils"; +import { EUserProjectRoles } from "@plane/types"; // plane imports -import { EUserProjectRoles } from "@plane/constants"; // plane web imports import { RootStore } from "@/plane-web/store/root.store"; // store diff --git a/web/core/components/analytics/analytics-filter-actions.tsx b/web/core/components/analytics/analytics-filter-actions.tsx index 13019063b8c..3b4014ea1b9 100644 --- a/web/core/components/analytics/analytics-filter-actions.tsx +++ b/web/core/components/analytics/analytics-filter-actions.tsx @@ -1,5 +1,5 @@ // plane web components -import { observer } from "mobx-react-lite"; +import { observer } from "mobx-react"; // hooks import { useProject } from "@/hooks/store"; import { useAnalytics } from "@/hooks/store/use-analytics"; diff --git a/web/core/components/analytics/select/analytics-params.tsx b/web/core/components/analytics/select/analytics-params.tsx index f4ef0d9eb52..f3af96a5953 100644 --- a/web/core/components/analytics/select/analytics-params.tsx +++ b/web/core/components/analytics/select/analytics-params.tsx @@ -3,9 +3,8 @@ import { observer } from "mobx-react"; import { Control, Controller, UseFormSetValue } from "react-hook-form"; import { Calendar, SlidersHorizontal } from "lucide-react"; // plane package imports -import { ANALYTICS_X_AXIS_VALUES, ANALYTICS_Y_AXIS_VALUES, ChartYAxisMetric } from "@plane/constants"; -import { useTranslation } from "@plane/i18n"; -import { IAnalyticsParams } from "@plane/types"; +import { ANALYTICS_X_AXIS_VALUES, ANALYTICS_Y_AXIS_VALUES } from "@plane/constants"; +import { ChartYAxisMetric, IAnalyticsParams } from "@plane/types"; import { cn } from "@plane/utils"; // plane web components import { SelectXAxis } from "./select-x-axis"; diff --git a/web/core/components/analytics/select/select-x-axis.tsx b/web/core/components/analytics/select/select-x-axis.tsx index a655c9a13de..1be296ff39b 100644 --- a/web/core/components/analytics/select/select-x-axis.tsx +++ b/web/core/components/analytics/select/select-x-axis.tsx @@ -1,6 +1,6 @@ "use client"; // plane package imports -import { ChartXAxisProperty } from "@plane/constants"; +import { ChartXAxisProperty } from "@plane/types"; import { CustomSelect } from "@plane/ui"; type Props = { diff --git a/web/core/components/analytics/select/select-y-axis.tsx b/web/core/components/analytics/select/select-y-axis.tsx index 931b1976d72..4982f8fb0eb 100644 --- a/web/core/components/analytics/select/select-y-axis.tsx +++ b/web/core/components/analytics/select/select-y-axis.tsx @@ -3,7 +3,8 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Briefcase } from "lucide-react"; -import { ChartYAxisMetric, EEstimateSystem } from "@plane/constants"; +import { EEstimateSystem } from "@plane/constants"; +import { ChartYAxisMetric } from "@plane/types"; // plane package imports import { CustomSelect } from "@plane/ui"; // hooks diff --git a/web/core/components/analytics/total-insights.tsx b/web/core/components/analytics/total-insights.tsx index e85c9c68a21..258ac11e1eb 100644 --- a/web/core/components/analytics/total-insights.tsx +++ b/web/core/components/analytics/total-insights.tsx @@ -1,5 +1,5 @@ // plane package imports -import { observer } from "mobx-react-lite"; +import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import useSWR from "swr"; import { IInsightField, ANALYTICS_INSIGHTS_FIELDS } from "@plane/constants"; diff --git a/web/core/components/analytics/work-items/customized-insights.tsx b/web/core/components/analytics/work-items/customized-insights.tsx index 6574658227f..bafd0d8ef47 100644 --- a/web/core/components/analytics/work-items/customized-insights.tsx +++ b/web/core/components/analytics/work-items/customized-insights.tsx @@ -2,9 +2,8 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { useForm } from "react-hook-form"; // plane package imports -import { ChartXAxisProperty, ChartYAxisMetric } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { IAnalyticsParams } from "@plane/types"; +import { ChartXAxisProperty, ChartYAxisMetric, IAnalyticsParams } from "@plane/types"; import { cn } from "@plane/utils"; // plane web components import AnalyticsSectionWrapper from "../analytics-section-wrapper"; diff --git a/web/core/components/analytics/work-items/priority-chart.tsx b/web/core/components/analytics/work-items/priority-chart.tsx index 5c00699783c..61ae19b8c2b 100644 --- a/web/core/components/analytics/work-items/priority-chart.tsx +++ b/web/core/components/analytics/work-items/priority-chart.tsx @@ -1,6 +1,5 @@ import { useMemo } from "react"; -import { ColumnDef, RowData, Table } from "@tanstack/react-table"; -import { mkConfig } from "export-to-csv"; +import { ColumnDef, Row, RowData, Table } from "@tanstack/react-table"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { useTheme } from "next-themes"; @@ -12,13 +11,11 @@ import { ANALYTICS_Y_AXIS_VALUES, CHART_COLOR_PALETTES, ChartXAxisDateGrouping, - ChartXAxisProperty, - ChartYAxisMetric, EChartModels, } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { BarChart } from "@plane/propel/charts/bar-chart"; -import { ExportConfig } from "@plane/types"; +import { ChartXAxisProperty, ChartYAxisMetric } from "@plane/types"; import { TBarItem, TChart, TChartDatum } from "@plane/types/src/charts"; // plane web components import { Button } from "@plane/ui"; @@ -36,7 +33,11 @@ import { generateBarColor } from "./utils"; declare module "@tanstack/react-table" { interface ColumnMeta { - export: ExportConfig; + export: { + key: string; + value: (row: Row) => string | number; + label?: string; + }; } } diff --git a/web/core/components/analytics/work-items/utils.ts b/web/core/components/analytics/work-items/utils.ts index 6e0b47a440d..37c74ec8124 100644 --- a/web/core/components/analytics/work-items/utils.ts +++ b/web/core/components/analytics/work-items/utils.ts @@ -1,6 +1,5 @@ // plane package imports -import { ChartXAxisProperty, ChartYAxisMetric } from "@plane/constants"; -import { IState } from "@plane/types"; +import { ChartXAxisProperty, ChartYAxisMetric, IState } from "@plane/types"; interface ParamsProps { x_axis: ChartXAxisProperty; diff --git a/web/core/components/analytics/work-items/workitems-insight-table.tsx b/web/core/components/analytics/work-items/workitems-insight-table.tsx index 98935271f53..480c72b6c5f 100644 --- a/web/core/components/analytics/work-items/workitems-insight-table.tsx +++ b/web/core/components/analytics/work-items/workitems-insight-table.tsx @@ -6,7 +6,7 @@ import useSWR from "swr"; import { Briefcase, UserRound } from "lucide-react"; // plane package imports import { useTranslation } from "@plane/i18n"; -import { WorkItemInsightColumns, AnalyticsTableDataMap, ExportConfig } from "@plane/types"; +import { AnalyticsTableDataMap, WorkItemInsightColumns } from "@plane/types"; // plane web components import { Avatar } from "@plane/ui"; import { getFileURL } from "@plane/utils"; @@ -21,9 +21,14 @@ import { InsightTable } from "../insight-table"; const analyticsService = new AnalyticsService(); + declare module "@tanstack/react-table" { interface ColumnMeta { - export: ExportConfig; + export: { + key: string; + value: (row: Row) => string | number; + label?: string; + }; } } diff --git a/web/core/components/chart/utils.ts b/web/core/components/chart/utils.ts index 092cc2c21c2..bbdc06f4751 100644 --- a/web/core/components/chart/utils.ts +++ b/web/core/components/chart/utils.ts @@ -1,6 +1,6 @@ import { getWeekOfMonth, isValid } from "date-fns"; -import { CHART_X_AXIS_DATE_PROPERTIES, ChartXAxisDateGrouping, ChartXAxisProperty, TO_CAPITALIZE_PROPERTIES } from "@plane/constants"; -import { TChart, TChartDatum } from "@plane/types"; +import { CHART_X_AXIS_DATE_PROPERTIES, ChartXAxisDateGrouping, TO_CAPITALIZE_PROPERTIES } from "@plane/constants"; +import { ChartXAxisProperty, TChart, TChartDatum } from "@plane/types"; import { capitalizeFirstLetter, hexToHsl, hslToHex, renderFormattedDate, renderFormattedDateWithoutYear } from "@plane/utils"; // diff --git a/web/core/components/command-palette/actions/issue-actions/actions-list.tsx b/web/core/components/command-palette/actions/issue-actions/actions-list.tsx index 812ffd9845e..e03d6363a9f 100644 --- a/web/core/components/command-palette/actions/issue-actions/actions-list.tsx +++ b/web/core/components/command-palette/actions/issue-actions/actions-list.tsx @@ -4,8 +4,7 @@ import { Command } from "cmdk"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { LinkIcon, Signal, Trash2, UserMinus2, UserPlus2, Users } from "lucide-react"; -import { EIssueServiceType } from "@plane/constants"; -import { TIssue } from "@plane/types"; +import { EIssueServiceType, TIssue } from "@plane/types"; // hooks import { DoubleCircleIcon, TOAST_TYPE, setToast } from "@plane/ui"; // helpers diff --git a/web/core/components/command-palette/actions/issue-actions/change-assignee.tsx b/web/core/components/command-palette/actions/issue-actions/change-assignee.tsx index f4a3b09512d..d442afde925 100644 --- a/web/core/components/command-palette/actions/issue-actions/change-assignee.tsx +++ b/web/core/components/command-palette/actions/issue-actions/change-assignee.tsx @@ -4,9 +4,8 @@ import { Command } from "cmdk"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Check } from "lucide-react"; -import { EIssueServiceType } from "@plane/constants"; // plane types -import { TIssue } from "@plane/types"; +import { EIssueServiceType, TIssue } from "@plane/types"; // plane ui import { Avatar } from "@plane/ui"; // helpers diff --git a/web/core/components/command-palette/actions/issue-actions/change-priority.tsx b/web/core/components/command-palette/actions/issue-actions/change-priority.tsx index 53bada187bd..84f8ef2870c 100644 --- a/web/core/components/command-palette/actions/issue-actions/change-priority.tsx +++ b/web/core/components/command-palette/actions/issue-actions/change-priority.tsx @@ -5,9 +5,9 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Check } from "lucide-react"; // plane constants -import { EIssueServiceType, ISSUE_PRIORITIES } from "@plane/constants"; +import { ISSUE_PRIORITIES } from "@plane/constants"; // plane types -import { TIssue, TIssuePriorities } from "@plane/types"; +import { EIssueServiceType, TIssue, TIssuePriorities } from "@plane/types"; // mobx store import { PriorityIcon } from "@plane/ui"; import { useIssueDetail } from "@/hooks/store"; diff --git a/web/core/components/command-palette/actions/issue-actions/change-state.tsx b/web/core/components/command-palette/actions/issue-actions/change-state.tsx index b89264ec14d..7abc9326e09 100644 --- a/web/core/components/command-palette/actions/issue-actions/change-state.tsx +++ b/web/core/components/command-palette/actions/issue-actions/change-state.tsx @@ -3,8 +3,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { EIssueServiceType } from "@plane/constants"; -import { TIssue } from "@plane/types"; +import { EIssueServiceType, TIssue } from "@plane/types"; // store hooks import { useIssueDetail } from "@/hooks/store"; // plane web imports diff --git a/web/core/components/common/breadcrumb-link.tsx b/web/core/components/common/breadcrumb-link.tsx index 1dc85e3e2ae..a0fda7c1471 100644 --- a/web/core/components/common/breadcrumb-link.tsx +++ b/web/core/components/common/breadcrumb-link.tsx @@ -1,7 +1,7 @@ "use client"; import React, { ReactNode, useMemo, FC } from "react"; -import { observer } from "mobx-react-lite"; +import { observer } from "mobx-react"; import Link from "next/link"; import { Breadcrumbs } from "@plane/ui"; import { usePlatformOS } from "@/hooks/use-platform-os"; diff --git a/web/core/components/core/modals/bulk-delete-issues-modal.tsx b/web/core/components/core/modals/bulk-delete-issues-modal.tsx index 642a59bbc72..c44885d2d61 100644 --- a/web/core/components/core/modals/bulk-delete-issues-modal.tsx +++ b/web/core/components/core/modals/bulk-delete-issues-modal.tsx @@ -7,9 +7,8 @@ import { SubmitHandler, useForm } from "react-hook-form"; import { Search } from "lucide-react"; import { Combobox, Dialog, Transition } from "@headlessui/react"; // plane imports -import { EIssuesStoreType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { ISearchIssueResponse, IUser } from "@plane/types"; +import { EIssuesStoreType, ISearchIssueResponse, IUser } from "@plane/types"; import { Button, Loader, TOAST_TYPE, setToast } from "@plane/ui"; // components import { SimpleEmptyState } from "@/components/empty-state"; diff --git a/web/core/components/cycles/active-cycle/cycle-stats.tsx b/web/core/components/cycles/active-cycle/cycle-stats.tsx index 77e36f33464..4f31e06d706 100644 --- a/web/core/components/cycles/active-cycle/cycle-stats.tsx +++ b/web/core/components/cycles/active-cycle/cycle-stats.tsx @@ -7,9 +7,8 @@ import { CalendarCheck } from "lucide-react"; // headless ui import { Tab } from "@headlessui/react"; // plane imports -import { EIssuesStoreType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { ICycle, IIssueFilterOptions } from "@plane/types"; +import { EIssuesStoreType, ICycle, IIssueFilterOptions } from "@plane/types"; // ui import { Tooltip, Loader, PriorityIcon, Avatar } from "@plane/ui"; import { cn, renderFormattedDate, renderFormattedDateWithoutYear, getFileURL } from "@plane/utils"; diff --git a/web/core/components/cycles/active-cycle/use-cycles-details.ts b/web/core/components/cycles/active-cycle/use-cycles-details.ts index e0f48869a2d..447df1eb067 100644 --- a/web/core/components/cycles/active-cycle/use-cycles-details.ts +++ b/web/core/components/cycles/active-cycle/use-cycles-details.ts @@ -2,8 +2,8 @@ import { useCallback } from "react"; import isEqual from "lodash/isEqual"; import { useRouter } from "next/navigation"; import useSWR from "swr"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; -import { IIssueFilterOptions } from "@plane/types"; +import { EIssueFilterType } from "@plane/constants"; +import { EIssuesStoreType, IIssueFilterOptions } from "@plane/types"; import { CYCLE_ISSUES_WITH_PARAMS } from "@/constants/fetch-keys"; import { useCycle, useIssues } from "@/hooks/store"; diff --git a/web/core/components/cycles/analytics-sidebar/issue-progress.tsx b/web/core/components/cycles/analytics-sidebar/issue-progress.tsx index 3b2c29250ba..90586d33130 100644 --- a/web/core/components/cycles/analytics-sidebar/issue-progress.tsx +++ b/web/core/components/cycles/analytics-sidebar/issue-progress.tsx @@ -7,9 +7,9 @@ import { observer } from "mobx-react"; import { useSearchParams } from "next/navigation"; import { ChevronUp, ChevronDown } from "lucide-react"; import { Disclosure, Transition } from "@headlessui/react"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; +import { EIssueFilterType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { ICycle, IIssueFilterOptions, TCyclePlotType, TProgressSnapshot } from "@plane/types"; +import { EIssuesStoreType, ICycle, IIssueFilterOptions, TCyclePlotType, TProgressSnapshot } from "@plane/types"; // components import { getDate } from "@plane/utils"; import { CycleProgressStats } from "@/components/cycles"; diff --git a/web/core/components/cycles/dropdowns/estimate-type-dropdown.tsx b/web/core/components/cycles/dropdowns/estimate-type-dropdown.tsx index 2899b7ca3af..e3276b7326a 100644 --- a/web/core/components/cycles/dropdowns/estimate-type-dropdown.tsx +++ b/web/core/components/cycles/dropdowns/estimate-type-dropdown.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { observer } from "mobx-react-lite"; +import { observer } from "mobx-react"; import { TCycleEstimateType } from "@plane/types"; import { EEstimateSystem } from "@plane/types/src/enums"; import { CustomSelect } from "@plane/ui"; diff --git a/web/core/components/cycles/transfer-issues-modal.tsx b/web/core/components/cycles/transfer-issues-modal.tsx index 33a94bb2e6e..84dfe99bbf5 100644 --- a/web/core/components/cycles/transfer-issues-modal.tsx +++ b/web/core/components/cycles/transfer-issues-modal.tsx @@ -5,10 +5,10 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { AlertCircle, Search, X } from "lucide-react"; import { Dialog, Transition } from "@headlessui/react"; +import { EIssuesStoreType } from "@plane/types"; // hooks // ui //icons -import { EIssuesStoreType } from "@plane/constants"; import { ContrastIcon, TransferIcon, TOAST_TYPE, setToast } from "@plane/ui"; import { useCycle, useIssues } from "@/hooks/store"; //icons diff --git a/web/core/components/dropdowns/date.tsx b/web/core/components/dropdowns/date.tsx index bab9ff2f8bc..1dd0105ad17 100644 --- a/web/core/components/dropdowns/date.tsx +++ b/web/core/components/dropdowns/date.tsx @@ -6,7 +6,6 @@ import { usePopper } from "react-popper"; import { CalendarDays, X } from "lucide-react"; import { Combobox } from "@headlessui/react"; // ui -import { EStartOfTheWeek } from "@plane/constants"; import { ComboDropDown, Calendar } from "@plane/ui"; import { cn, renderFormattedDate, getDate } from "@plane/utils"; // helpers diff --git a/web/core/components/gantt-chart/chart/root.tsx b/web/core/components/gantt-chart/chart/root.tsx index b69254cae6c..e10a1f73e0f 100644 --- a/web/core/components/gantt-chart/chart/root.tsx +++ b/web/core/components/gantt-chart/chart/root.tsx @@ -1,7 +1,6 @@ import { FC, useEffect, useState } from "react"; import { observer } from "mobx-react"; // plane imports -import { EStartOfTheWeek } from "@plane/constants"; // components import type { ChartDataType, IBlockUpdateData, IBlockUpdateDependencyData, TGanttViews } from "@plane/types"; import { cn } from "@plane/utils"; diff --git a/web/core/components/gantt-chart/data/index.ts b/web/core/components/gantt-chart/data/index.ts index 1871278f8bf..897af9ebd34 100644 --- a/web/core/components/gantt-chart/data/index.ts +++ b/web/core/components/gantt-chart/data/index.ts @@ -1,6 +1,5 @@ // types -import { EStartOfTheWeek } from "@plane/constants"; -import type { WeekMonthDataType, ChartDataType, TGanttViews } from "@plane/types"; +import { EStartOfTheWeek, WeekMonthDataType, ChartDataType, TGanttViews } from "@plane/types"; // constants export const generateWeeks = (startOfWeek: EStartOfTheWeek = EStartOfTheWeek.SUNDAY): WeekMonthDataType[] => [ diff --git a/web/core/components/gantt-chart/views/week-view.ts b/web/core/components/gantt-chart/views/week-view.ts index c7b4ce6f4e4..a1e2b9db7a4 100644 --- a/web/core/components/gantt-chart/views/week-view.ts +++ b/web/core/components/gantt-chart/views/week-view.ts @@ -1,6 +1,5 @@ // -import { EStartOfTheWeek } from "@plane/constants"; -import type { ChartDataType } from "@plane/types"; +import { EStartOfTheWeek, ChartDataType } from "@plane/types"; import { months, generateWeeks } from "../data"; import { getNumberOfDaysBetweenTwoDates, getWeekNumberByDate } from "./helpers"; export interface IDayBlock { diff --git a/web/core/components/global/product-updates/modal.tsx b/web/core/components/global/product-updates/modal.tsx index b8982ce4959..74bea07a5af 100644 --- a/web/core/components/global/product-updates/modal.tsx +++ b/web/core/components/global/product-updates/modal.tsx @@ -1,5 +1,5 @@ import { FC } from "react"; -import { observer } from "mobx-react-lite"; +import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; // ui import { EModalPosition, EModalWidth, ModalCore } from "@plane/ui"; diff --git a/web/core/components/home/widgets/recents/issue.tsx b/web/core/components/home/widgets/recents/issue.tsx index 33778b64149..25fafa05965 100644 --- a/web/core/components/home/widgets/recents/issue.tsx +++ b/web/core/components/home/widgets/recents/issue.tsx @@ -1,8 +1,6 @@ import { observer } from "mobx-react"; -// plane constants -import { EIssueServiceType } from "@plane/constants"; // plane types -import { TActivityEntityData, TIssueEntityData } from "@plane/types"; +import { EIssueServiceType, TActivityEntityData, TIssueEntityData } from "@plane/types"; // plane ui import { LayersIcon, PriorityIcon, StateGroupIcon, Tooltip } from "@plane/ui"; import { calculateTimeAgo, generateWorkItemLink } from "@plane/utils"; diff --git a/web/core/components/inbox/content/inbox-issue-header.tsx b/web/core/components/inbox/content/inbox-issue-header.tsx index 16e4835cfc6..19e32a822c1 100644 --- a/web/core/components/inbox/content/inbox-issue-header.tsx +++ b/web/core/components/inbox/content/inbox-issue-header.tsx @@ -15,9 +15,9 @@ import { MoveRight, Copy, } from "lucide-react"; -import { EUserPermissions, EUserPermissionsLevel, EInboxIssueStatus } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TNameDescriptionLoader } from "@plane/types"; +import { EInboxIssueStatus, TNameDescriptionLoader } from "@plane/types"; import { Button, ControlLink, CustomMenu, Row, TOAST_TYPE, setToast } from "@plane/ui"; import { copyUrlToClipboard, findHowManyDaysLeft, generateWorkItemLink } from "@plane/utils"; // components diff --git a/web/core/components/inbox/content/issue-root.tsx b/web/core/components/inbox/content/issue-root.tsx index 7f6558cbb6f..cff4211f66e 100644 --- a/web/core/components/inbox/content/issue-root.tsx +++ b/web/core/components/inbox/content/issue-root.tsx @@ -4,9 +4,9 @@ import { Dispatch, SetStateAction, useEffect, useMemo, useRef } from "react"; import { observer } from "mobx-react"; import { usePathname } from "next/navigation"; // plane imports -import { EInboxIssueSource, WORK_ITEM_TRACKER_EVENTS } from "@plane/constants"; +import { WORK_ITEM_TRACKER_EVENTS } from "@plane/constants"; import { EditorRefApi } from "@plane/editor"; -import { TIssue, TNameDescriptionLoader } from "@plane/types"; +import { EInboxIssueSource, TIssue, TNameDescriptionLoader } from "@plane/types"; import { Loader, TOAST_TYPE, setToast } from "@plane/ui"; // components import { getTextContent } from "@plane/utils"; diff --git a/web/core/components/inbox/inbox-filter/applied-filters/status.tsx b/web/core/components/inbox/inbox-filter/applied-filters/status.tsx index 990f04dced4..d19c80a2297 100644 --- a/web/core/components/inbox/inbox-filter/applied-filters/status.tsx +++ b/web/core/components/inbox/inbox-filter/applied-filters/status.tsx @@ -1,8 +1,9 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { X } from "lucide-react"; -import { INBOX_STATUS, TInboxIssueStatus } from "@plane/constants"; +import { INBOX_STATUS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { TInboxIssueStatus } from "@plane/types"; // constants import { Tag } from "@plane/ui"; // hooks diff --git a/web/core/components/inbox/inbox-filter/filters/status.tsx b/web/core/components/inbox/inbox-filter/filters/status.tsx index 730581e5f28..98b12fa7d45 100644 --- a/web/core/components/inbox/inbox-filter/filters/status.tsx +++ b/web/core/components/inbox/inbox-filter/filters/status.tsx @@ -1,8 +1,9 @@ import { FC, useState } from "react"; import { observer } from "mobx-react"; // types -import { INBOX_STATUS, TInboxIssueStatus } from "@plane/constants"; +import { INBOX_STATUS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { TInboxIssueStatus } from "@plane/types"; // components import { FilterHeader, FilterOption } from "@/components/issues"; // constants diff --git a/web/core/components/inbox/inbox-status-icon.tsx b/web/core/components/inbox/inbox-status-icon.tsx index 492ee504fcb..8cf91df0c33 100644 --- a/web/core/components/inbox/inbox-status-icon.tsx +++ b/web/core/components/inbox/inbox-status-icon.tsx @@ -1,5 +1,5 @@ import { AlertTriangle, CheckCircle2, Clock, Copy, XCircle } from "lucide-react"; -import { TInboxIssueStatus, EInboxIssueStatus } from "@plane/constants"; +import { TInboxIssueStatus, EInboxIssueStatus } from "@plane/types"; import { cn } from "@plane/utils"; export const ICON_PROPERTIES = { diff --git a/web/core/components/inbox/root.tsx b/web/core/components/inbox/root.tsx index 17e8aefefec..7016da40d0c 100644 --- a/web/core/components/inbox/root.tsx +++ b/web/core/components/inbox/root.tsx @@ -2,8 +2,8 @@ import { FC, useEffect, useState } from "react"; import { observer } from "mobx-react"; import { PanelLeft } from "lucide-react"; // plane imports -import { EInboxIssueCurrentTab } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { EInboxIssueCurrentTab } from "@plane/types"; import { Intake } from "@plane/ui"; // components import { cn } from "@plane/utils"; diff --git a/web/core/components/inbox/sidebar/root.tsx b/web/core/components/inbox/sidebar/root.tsx index 15c0410f0f4..d5f05e0be7a 100644 --- a/web/core/components/inbox/sidebar/root.tsx +++ b/web/core/components/inbox/sidebar/root.tsx @@ -2,9 +2,9 @@ import { FC, useCallback, useEffect, useRef, useState } from "react"; import { observer } from "mobx-react"; -import { TInboxIssueCurrentTab, EInboxIssueCurrentTab } from "@plane/constants"; -// plane imports import { useTranslation } from "@plane/i18n"; +import { TInboxIssueCurrentTab, EInboxIssueCurrentTab } from "@plane/types"; +// plane imports import { Header, Loader, EHeaderVariant } from "@plane/ui"; // components import { cn } from "@plane/utils"; diff --git a/web/core/components/issues/archived-issues-header.tsx b/web/core/components/issues/archived-issues-header.tsx index 28bc63e0896..41929b564cd 100644 --- a/web/core/components/issues/archived-issues-header.tsx +++ b/web/core/components/issues/archived-issues-header.tsx @@ -2,11 +2,11 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane constants -import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; +import { EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; // i18n import { useTranslation } from "@plane/i18n"; // types -import type { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; +import { EIssuesStoreType, IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; // components import { isIssueFilterActive } from "@plane/utils"; import { ArchiveTabsList } from "@/components/archives"; diff --git a/web/core/components/issues/attachment/attachment-item-list.tsx b/web/core/components/issues/attachment/attachment-item-list.tsx index 5df3f49c21f..e5fdd26268b 100644 --- a/web/core/components/issues/attachment/attachment-item-list.tsx +++ b/web/core/components/issues/attachment/attachment-item-list.tsx @@ -2,9 +2,8 @@ import { FC, useCallback, useState } from "react"; import { observer } from "mobx-react"; import { FileRejection, useDropzone } from "react-dropzone"; import { UploadCloud } from "lucide-react"; -import { EIssueServiceType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssueServiceType } from "@plane/types"; // hooks import { TOAST_TYPE, setToast } from "@plane/ui"; import { useIssueDetail } from "@/hooks/store"; diff --git a/web/core/components/issues/attachment/attachment-list-item.tsx b/web/core/components/issues/attachment/attachment-list-item.tsx index e7df230a25a..bdae008f4f3 100644 --- a/web/core/components/issues/attachment/attachment-list-item.tsx +++ b/web/core/components/issues/attachment/attachment-list-item.tsx @@ -3,9 +3,8 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { Trash } from "lucide-react"; -import { EIssueServiceType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssueServiceType } from "@plane/types"; // ui import { CustomMenu, Tooltip } from "@plane/ui"; import { convertBytesToSize, getFileExtension, getFileName, getFileURL, renderFormattedDate } from "@plane/utils"; diff --git a/web/core/components/issues/attachment/delete-attachment-modal.tsx b/web/core/components/issues/attachment/delete-attachment-modal.tsx index 046b90a5d1b..838c2669693 100644 --- a/web/core/components/issues/attachment/delete-attachment-modal.tsx +++ b/web/core/components/issues/attachment/delete-attachment-modal.tsx @@ -1,11 +1,9 @@ import { FC, useState } from "react"; import { observer } from "mobx-react"; -// constants -import { EIssueServiceType } from "@plane/constants"; // plane-i18n import { useTranslation } from "@plane/i18n"; // types -import { TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssueServiceType } from "@plane/types"; // ui import { AlertModalCore } from "@plane/ui"; // helper diff --git a/web/core/components/issues/filters.tsx b/web/core/components/issues/filters.tsx index 8be85a07df5..510a6ee85ba 100644 --- a/web/core/components/issues/filters.tsx +++ b/web/core/components/issues/filters.tsx @@ -3,11 +3,11 @@ import { useCallback, useState } from "react"; import { observer } from "mobx-react"; // plane constants -import { EIssueLayoutTypes, EIssueFilterType, EIssuesStoreType, ISSUE_STORE_TO_FILTERS_MAP } from "@plane/constants"; +import { EIssueLayoutTypes, EIssueFilterType, ISSUE_STORE_TO_FILTERS_MAP } from "@plane/constants"; // i18n import { useTranslation } from "@plane/i18n"; // types -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; +import { EIssuesStoreType, IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; import { Button } from "@plane/ui"; // components import { isIssueFilterActive } from "@plane/utils"; diff --git a/web/core/components/issues/issue-detail-widgets/attachments/content.tsx b/web/core/components/issues/issue-detail-widgets/attachments/content.tsx index 7441ad42f20..1a3169104ee 100644 --- a/web/core/components/issues/issue-detail-widgets/attachments/content.tsx +++ b/web/core/components/issues/issue-detail-widgets/attachments/content.tsx @@ -1,8 +1,7 @@ "use client"; import React, { FC } from "react"; import { observer } from "mobx-react"; -import { EIssueServiceType } from "@plane/constants"; -import { TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssueServiceType } from "@plane/types"; // components import { IssueAttachmentItemList } from "@/components/issues/attachment"; // helper diff --git a/web/core/components/issues/issue-detail-widgets/attachments/helper.tsx b/web/core/components/issues/issue-detail-widgets/attachments/helper.tsx index 28684ac9986..430e4cec940 100644 --- a/web/core/components/issues/issue-detail-widgets/attachments/helper.tsx +++ b/web/core/components/issues/issue-detail-widgets/attachments/helper.tsx @@ -1,7 +1,6 @@ "use client"; import { useMemo } from "react"; -import { EIssueServiceType } from "@plane/constants"; -import { TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssueServiceType } from "@plane/types"; // plane ui import { TOAST_TYPE, setPromiseToast, setToast } from "@plane/ui"; // hooks diff --git a/web/core/components/issues/issue-detail-widgets/attachments/title.tsx b/web/core/components/issues/issue-detail-widgets/attachments/title.tsx index c96b6ffb8df..4eb61fabd04 100644 --- a/web/core/components/issues/issue-detail-widgets/attachments/title.tsx +++ b/web/core/components/issues/issue-detail-widgets/attachments/title.tsx @@ -1,9 +1,8 @@ "use client"; import React, { FC, useMemo } from "react"; import { observer } from "mobx-react"; -import { EIssueServiceType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssueServiceType } from "@plane/types"; import { CollapsibleButton } from "@plane/ui"; // components import { IssueAttachmentActionButton } from "@/components/issues/issue-detail-widgets"; diff --git a/web/core/components/issues/issue-detail-widgets/relations/content.tsx b/web/core/components/issues/issue-detail-widgets/relations/content.tsx index a80d59cc0e1..08d694a34f7 100644 --- a/web/core/components/issues/issue-detail-widgets/relations/content.tsx +++ b/web/core/components/issues/issue-detail-widgets/relations/content.tsx @@ -2,9 +2,8 @@ import { FC, useState } from "react"; import { observer } from "mobx-react"; // plane imports -import { EIssueServiceType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssue, TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssue, TIssueServiceType } from "@plane/types"; import { Collapsible } from "@plane/ui"; // components import { RelationIssueList } from "@/components/issues"; diff --git a/web/core/components/issues/issue-detail-widgets/relations/helper.tsx b/web/core/components/issues/issue-detail-widgets/relations/helper.tsx index 6e68be0d469..e42025fd4d5 100644 --- a/web/core/components/issues/issue-detail-widgets/relations/helper.tsx +++ b/web/core/components/issues/issue-detail-widgets/relations/helper.tsx @@ -2,9 +2,9 @@ import { useMemo } from "react"; import { usePathname } from "next/navigation"; // plane imports -import { EIssueServiceType, WORK_ITEM_TRACKER_EVENTS } from "@plane/constants"; +import { WORK_ITEM_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssue, TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssue, TIssueServiceType } from "@plane/types"; import { TOAST_TYPE, setToast } from "@plane/ui"; import { copyUrlToClipboard } from "@plane/utils"; // hooks diff --git a/web/core/components/issues/issue-detail-widgets/relations/title.tsx b/web/core/components/issues/issue-detail-widgets/relations/title.tsx index f1284eb47d0..32b9318eb8d 100644 --- a/web/core/components/issues/issue-detail-widgets/relations/title.tsx +++ b/web/core/components/issues/issue-detail-widgets/relations/title.tsx @@ -1,9 +1,8 @@ "use client"; import React, { FC, useMemo } from "react"; import { observer } from "mobx-react"; -import { EIssueServiceType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssueServiceType } from "@plane/types"; import { CollapsibleButton } from "@plane/ui"; // components import { RelationActionButton } from "@/components/issues/issue-detail-widgets"; diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx b/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx index 6000959f22d..00abc3799f8 100644 --- a/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx +++ b/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx @@ -1,8 +1,7 @@ "use client"; import React, { FC, useEffect, useState, useCallback } from "react"; import { observer } from "mobx-react"; -import { EIssueServiceType, EIssuesStoreType } from "@plane/constants"; -import { TIssue, TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, EIssuesStoreType, TIssue, TIssueServiceType } from "@plane/types"; // components import { DeleteIssueModal } from "@/components/issues/delete-issue-modal"; import { CreateUpdateIssueModal } from "@/components/issues/issue-modal"; diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts b/web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts index 564e72c0531..e6d44d7a89c 100644 --- a/web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts +++ b/web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts @@ -3,9 +3,8 @@ import { useMemo } from "react"; import { useParams, usePathname } from "next/navigation"; // plane imports -import { EIssueServiceType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssueServiceType, TSubIssueOperations } from "@plane/types"; +import { EIssueServiceType, TIssueServiceType, TSubIssueOperations } from "@plane/types"; import { TOAST_TYPE, setToast } from "@plane/ui"; import { copyUrlToClipboard } from "@plane/utils"; // hooks diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx b/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx index b860646bab0..7bee0f5139a 100644 --- a/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx +++ b/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx @@ -1,8 +1,8 @@ import { FC, useState } from "react"; import { observer } from "mobx-react"; import { ChevronRight, CircleDashed } from "lucide-react"; -import { ALL_ISSUES, EIssuesStoreType } from "@plane/constants"; -import { IGroupByColumn, TIssue, TIssueServiceType, TSubIssueOperations } from "@plane/types"; +import { ALL_ISSUES } from "@plane/constants"; +import { EIssuesStoreType, IGroupByColumn, TIssue, TIssueServiceType, TSubIssueOperations } from "@plane/types"; import { Collapsible } from "@plane/ui"; import { cn } from "@plane/utils"; import { SubIssuesListItem } from "./list-item"; diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx b/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx index 73e5b29f02c..cb0a9c75f8f 100644 --- a/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx +++ b/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx @@ -3,9 +3,8 @@ import { observer } from "mobx-react"; import { ChevronRight, X, Pencil, Trash, Link as LinkIcon, Loader } from "lucide-react"; // plane imports -import { EIssueServiceType, EIssuesStoreType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssue, TIssueServiceType, TSubIssueOperations } from "@plane/types"; +import { EIssueServiceType, EIssuesStoreType, TIssue, TIssueServiceType, TSubIssueOperations } from "@plane/types"; import { ControlLink, CustomMenu, Tooltip } from "@plane/ui"; import { cn, generateWorkItemLink } from "@plane/utils"; // helpers diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx b/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx index c99f9908642..a95a10fa760 100644 --- a/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx +++ b/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx @@ -2,9 +2,15 @@ import { useCallback, useMemo } from "react"; import { observer } from "mobx-react"; // plane imports import { ListFilter } from "lucide-react"; -import { EIssueServiceType, EIssuesStoreType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { GroupByColumnTypes, TIssue, TIssueServiceType, TSubIssueOperations } from "@plane/types"; +import { + EIssueServiceType, + EIssuesStoreType, + GroupByColumnTypes, + TIssue, + TIssueServiceType, + TSubIssueOperations, +} from "@plane/types"; // hooks import { Button, Loader } from "@plane/ui"; import { SectionEmptyState } from "@/components/empty-state"; diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx b/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx index e9e4393ed74..b01dac11ec3 100644 --- a/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx +++ b/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx @@ -1,8 +1,9 @@ import { FC, useCallback } from "react"; import cloneDeep from "lodash/cloneDeep"; import { observer } from "mobx-react"; -import { EIssueFilterType, EIssueServiceType, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; +import { EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; import { + EIssueServiceType, IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx b/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx index 041f0ca234b..c38a398cb78 100644 --- a/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx +++ b/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx @@ -3,9 +3,8 @@ import { FC } from "react"; import { observer } from "mobx-react"; // plane imports -import { EIssueServiceType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssueServiceType } from "@plane/types"; import { CircularProgressIndicator, CollapsibleButton } from "@plane/ui"; // hooks import { useIssueDetail } from "@/hooks/store"; diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/default.tsx b/web/core/components/issues/issue-detail/issue-activity/activity/actions/default.tsx index b9a1f4bbe9e..3d227075020 100644 --- a/web/core/components/issues/issue-detail/issue-activity/activity/actions/default.tsx +++ b/web/core/components/issues/issue-detail/issue-activity/activity/actions/default.tsx @@ -3,7 +3,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; // plane imports -import { EInboxIssueSource } from "@plane/constants"; +import { EInboxIssueSource } from "@plane/types"; import { LayersIcon } from "@plane/ui"; // hooks import { capitalizeFirstLetter } from "@plane/utils"; diff --git a/web/core/components/issues/issue-detail/issue-detail-quick-actions.tsx b/web/core/components/issues/issue-detail/issue-detail-quick-actions.tsx index 4be7686c2ca..5ba71d96263 100644 --- a/web/core/components/issues/issue-detail/issue-detail-quick-actions.tsx +++ b/web/core/components/issues/issue-detail/issue-detail-quick-actions.tsx @@ -6,12 +6,12 @@ import { usePathname } from "next/navigation"; import { ArchiveIcon, ArchiveRestoreIcon, LinkIcon, Trash2 } from "lucide-react"; import { ARCHIVABLE_STATE_GROUPS, - EIssuesStoreType, EUserPermissions, EUserPermissionsLevel, WORK_ITEM_TRACKER_EVENTS, } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { EIssuesStoreType } from "@plane/types"; import { TOAST_TYPE, Tooltip, setToast } from "@plane/ui"; import { cn, generateWorkItemLink, copyTextToClipboard } from "@plane/utils"; // components diff --git a/web/core/components/issues/issue-detail/label/root.tsx b/web/core/components/issues/issue-detail/label/root.tsx index ba31a81d078..89670dbb3b0 100644 --- a/web/core/components/issues/issue-detail/label/root.tsx +++ b/web/core/components/issues/issue-detail/label/root.tsx @@ -2,9 +2,8 @@ import { FC, useMemo } from "react"; import { observer } from "mobx-react"; -import { EIssueServiceType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { IIssueLabel, TIssue, TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, IIssueLabel, TIssue, TIssueServiceType } from "@plane/types"; // components import { TOAST_TYPE, setToast } from "@plane/ui"; // hooks diff --git a/web/core/components/issues/issue-detail/label/select/label-select.tsx b/web/core/components/issues/issue-detail/label/select/label-select.tsx index 509b0a5ca85..a2ad09307ad 100644 --- a/web/core/components/issues/issue-detail/label/select/label-select.tsx +++ b/web/core/components/issues/issue-detail/label/select/label-select.tsx @@ -4,9 +4,9 @@ import { usePopper } from "react-popper"; import { Check, Loader, Search, Tag } from "lucide-react"; import { Combobox } from "@headlessui/react"; // plane imports -import { EUserPermissionsLevel, EUserProjectRoles, getRandomLabelColor } from "@plane/constants"; +import { EUserPermissionsLevel, getRandomLabelColor } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { IIssueLabel } from "@plane/types"; +import { EUserProjectRoles, IIssueLabel } from "@plane/types"; // helpers import { getTabIndex } from "@plane/utils"; // hooks diff --git a/web/core/components/issues/issue-detail/links/link-item.tsx b/web/core/components/issues/issue-detail/links/link-item.tsx index 526336c732c..107c6ef430c 100644 --- a/web/core/components/issues/issue-detail/links/link-item.tsx +++ b/web/core/components/issues/issue-detail/links/link-item.tsx @@ -3,12 +3,11 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { Pencil, Trash2, Copy, Link } from "lucide-react"; -import { EIssueServiceType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssueServiceType } from "@plane/types"; // ui import { Tooltip, TOAST_TYPE, setToast, CustomMenu } from "@plane/ui"; -import { calculateTimeAgo, getIconForLink, copyTextToClipboard } from "@plane/utils"; +import { calculateTimeAgo, copyTextToClipboard } from "@plane/utils"; // helpers // hooks import { useIssueDetail } from "@/hooks/store"; diff --git a/web/core/components/issues/issue-detail/links/root.tsx b/web/core/components/issues/issue-detail/links/root.tsx index e37f1cadc58..4512eb30bd6 100644 --- a/web/core/components/issues/issue-detail/links/root.tsx +++ b/web/core/components/issues/issue-detail/links/root.tsx @@ -3,8 +3,7 @@ import { FC, useCallback, useMemo, useState } from "react"; import { Plus } from "lucide-react"; // plane imports -import { EIssueServiceType } from "@plane/constants"; -import { TIssueLink } from "@plane/types"; +import { EIssueServiceType, TIssueLink } from "@plane/types"; import { TOAST_TYPE, setToast } from "@plane/ui"; // hooks import { useIssueDetail } from "@/hooks/store"; diff --git a/web/core/components/issues/issue-detail/main-content.tsx b/web/core/components/issues/issue-detail/main-content.tsx index 175f03f1ede..29a22c9c485 100644 --- a/web/core/components/issues/issue-detail/main-content.tsx +++ b/web/core/components/issues/issue-detail/main-content.tsx @@ -3,9 +3,8 @@ import { useEffect, useRef, useState } from "react"; import { observer } from "mobx-react"; // plane imports -import { EIssueServiceType } from "@plane/constants"; import { EditorRefApi } from "@plane/editor"; -import { TNameDescriptionLoader } from "@plane/types"; +import { EIssueServiceType, TNameDescriptionLoader } from "@plane/types"; // components import { getTextContent } from "@plane/utils"; import { DescriptionVersionsRoot } from "@/components/core/description-versions"; diff --git a/web/core/components/issues/issue-detail/root.tsx b/web/core/components/issues/issue-detail/root.tsx index cbd67904590..6a8b35d5fc0 100644 --- a/web/core/components/issues/issue-detail/root.tsx +++ b/web/core/components/issues/issue-detail/root.tsx @@ -4,9 +4,9 @@ import { FC, useMemo } from "react"; import { observer } from "mobx-react"; import { usePathname } from "next/navigation"; // types -import { EIssuesStoreType, EUserPermissions, EUserPermissionsLevel, WORK_ITEM_TRACKER_EVENTS } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel, WORK_ITEM_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssue } from "@plane/types"; +import { EIssuesStoreType, TIssue } from "@plane/types"; // ui import { TOAST_TYPE, setPromiseToast, setToast } from "@plane/ui"; // components diff --git a/web/core/components/issues/issue-detail/subscription.tsx b/web/core/components/issues/issue-detail/subscription.tsx index 8239d08ac0a..504b625f647 100644 --- a/web/core/components/issues/issue-detail/subscription.tsx +++ b/web/core/components/issues/issue-detail/subscription.tsx @@ -5,9 +5,10 @@ import isNil from "lodash/isNil"; import { observer } from "mobx-react"; import { Bell, BellOff } from "lucide-react"; // plane-i18n -import { EUserPermissions, EUserPermissionsLevel, EIssueServiceType } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; // UI +import { EIssueServiceType } from "@plane/types"; import { Button, Loader, TOAST_TYPE, setToast } from "@plane/ui"; // hooks import { useIssueDetail, useUserPermissions } from "@/hooks/store"; diff --git a/web/core/components/issues/issue-layouts/calendar/base-calendar-root.tsx b/web/core/components/issues/issue-layouts/calendar/base-calendar-root.tsx index 092ac047c8c..9ca5d12f8bc 100644 --- a/web/core/components/issues/issue-layouts/calendar/base-calendar-root.tsx +++ b/web/core/components/issues/issue-layouts/calendar/base-calendar-root.tsx @@ -3,8 +3,8 @@ import { FC, useCallback, useEffect } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; -import { EIssueGroupByToServerOptions, EIssuesStoreType,EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; -import { TGroupedIssues } from "@plane/types"; +import { EIssueGroupByToServerOptions, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EIssuesStoreType, TGroupedIssues } from "@plane/types"; // components import { TOAST_TYPE, setToast } from "@plane/ui"; import { CalendarChart } from "@/components/issues"; diff --git a/web/core/components/issues/issue-layouts/calendar/calendar.tsx b/web/core/components/issues/issue-layouts/calendar/calendar.tsx index 428beafc0d8..3b081cffdb2 100644 --- a/web/core/components/issues/issue-layouts/calendar/calendar.tsx +++ b/web/core/components/issues/issue-layouts/calendar/calendar.tsx @@ -5,9 +5,10 @@ import { combine } from "@atlaskit/pragmatic-drag-and-drop/combine"; import { autoScrollForElements } from "@atlaskit/pragmatic-drag-and-drop-auto-scroll/element"; import { observer } from "mobx-react"; // plane constants -import { EIssueLayoutTypes, EIssueFilterType, EIssuesStoreType } from "@plane/constants"; +import { EIssueLayoutTypes, EIssueFilterType } from "@plane/constants"; // types -import type { +import { + EIssuesStoreType, IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, diff --git a/web/core/components/issues/issue-layouts/calendar/roots/cycle-root.tsx b/web/core/components/issues/issue-layouts/calendar/roots/cycle-root.tsx index ba85fb80fbf..d10e28b2302 100644 --- a/web/core/components/issues/issue-layouts/calendar/roots/cycle-root.tsx +++ b/web/core/components/issues/issue-layouts/calendar/roots/cycle-root.tsx @@ -1,8 +1,8 @@ import { useCallback } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; +import { EIssuesStoreType } from "@plane/types"; //hooks -import { EIssuesStoreType } from "@plane/constants"; import { CycleIssueQuickActions } from "@/components/issues"; import { useCycle, useIssues } from "@/hooks/store"; // components diff --git a/web/core/components/issues/issue-layouts/calendar/roots/module-root.tsx b/web/core/components/issues/issue-layouts/calendar/roots/module-root.tsx index 296b4c5a3b5..0e1038e2fe7 100644 --- a/web/core/components/issues/issue-layouts/calendar/roots/module-root.tsx +++ b/web/core/components/issues/issue-layouts/calendar/roots/module-root.tsx @@ -1,9 +1,9 @@ import { useCallback } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; +import { EIssuesStoreType } from "@plane/types"; // hooks // components -import { EIssuesStoreType } from "@plane/constants"; import { ModuleIssueQuickActions } from "@/components/issues"; // types // constants diff --git a/web/core/components/issues/issue-layouts/calendar/week-header.tsx b/web/core/components/issues/issue-layouts/calendar/week-header.tsx index dc2c9fbcf89..d1164d1a59c 100644 --- a/web/core/components/issues/issue-layouts/calendar/week-header.tsx +++ b/web/core/components/issues/issue-layouts/calendar/week-header.tsx @@ -1,5 +1,5 @@ import { observer } from "mobx-react"; -import { EStartOfTheWeek } from "@plane/constants"; +import { EStartOfTheWeek } from "@plane/types"; import { getOrderedDays } from "@plane/utils"; import { DAYS_LIST } from "@/constants/calendar"; // helpers diff --git a/web/core/components/issues/issue-layouts/empty-states/archived-issues.tsx b/web/core/components/issues/issue-layouts/empty-states/archived-issues.tsx index f9aca06f2ba..73d138fcf6b 100644 --- a/web/core/components/issues/issue-layouts/empty-states/archived-issues.tsx +++ b/web/core/components/issues/issue-layouts/empty-states/archived-issues.tsx @@ -2,9 +2,9 @@ import size from "lodash/size"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { EIssueFilterType, EIssuesStoreType, EUserPermissionsLevel, EUserProjectRoles } from "@plane/constants"; +import { EIssueFilterType, EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { IIssueFilterOptions } from "@plane/types"; +import { EIssuesStoreType, EUserProjectRoles, IIssueFilterOptions } from "@plane/types"; // components import { DetailedEmptyState } from "@/components/empty-state"; // hooks diff --git a/web/core/components/issues/issue-layouts/empty-states/cycle.tsx b/web/core/components/issues/issue-layouts/empty-states/cycle.tsx index a29a4f2802f..6c5f7b30463 100644 --- a/web/core/components/issues/issue-layouts/empty-states/cycle.tsx +++ b/web/core/components/issues/issue-layouts/empty-states/cycle.tsx @@ -6,9 +6,9 @@ import size from "lodash/size"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { EIssueFilterType, EIssuesStoreType, EUserPermissionsLevel, EUserProjectRoles } from "@plane/constants"; +import { EIssueFilterType, EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { IIssueFilterOptions, ISearchIssueResponse } from "@plane/types"; +import { EIssuesStoreType, EUserProjectRoles, IIssueFilterOptions, ISearchIssueResponse } from "@plane/types"; import { TOAST_TYPE, setToast } from "@plane/ui"; // components import { ExistingIssuesListModal } from "@/components/core"; diff --git a/web/core/components/issues/issue-layouts/empty-states/global-view.tsx b/web/core/components/issues/issue-layouts/empty-states/global-view.tsx index 03d4c62ed97..ec81d968407 100644 --- a/web/core/components/issues/issue-layouts/empty-states/global-view.tsx +++ b/web/core/components/issues/issue-layouts/empty-states/global-view.tsx @@ -1,8 +1,9 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { EIssuesStoreType, EUserPermissionsLevel, EUserWorkspaceRoles } from "@plane/constants"; +import { EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { EIssuesStoreType, EUserWorkspaceRoles } from "@plane/types"; // components import { ComicBoxButton, DetailedEmptyState } from "@/components/empty-state"; // hooks diff --git a/web/core/components/issues/issue-layouts/empty-states/index.tsx b/web/core/components/issues/issue-layouts/empty-states/index.tsx index decf0e40297..e51fa932d77 100644 --- a/web/core/components/issues/issue-layouts/empty-states/index.tsx +++ b/web/core/components/issues/issue-layouts/empty-states/index.tsx @@ -1,5 +1,5 @@ -import { EIssuesStoreType } from "@plane/constants"; // plane web components +import { EIssuesStoreType } from "@plane/types"; import { TeamEmptyState, TeamViewEmptyState } from "@/plane-web/components/issues/issue-layouts/empty-states"; // components import { ProjectArchivedEmptyState } from "./archived-issues"; diff --git a/web/core/components/issues/issue-layouts/empty-states/module.tsx b/web/core/components/issues/issue-layouts/empty-states/module.tsx index 55edda7fe36..691df228f1d 100644 --- a/web/core/components/issues/issue-layouts/empty-states/module.tsx +++ b/web/core/components/issues/issue-layouts/empty-states/module.tsx @@ -5,9 +5,9 @@ import size from "lodash/size"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { EIssueFilterType, EIssuesStoreType, EUserPermissionsLevel, EUserProjectRoles } from "@plane/constants"; +import { EIssueFilterType, EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { IIssueFilterOptions, ISearchIssueResponse } from "@plane/types"; +import { EIssuesStoreType, EUserProjectRoles, IIssueFilterOptions, ISearchIssueResponse } from "@plane/types"; import { TOAST_TYPE, setToast } from "@plane/ui"; // components import { ExistingIssuesListModal } from "@/components/core"; diff --git a/web/core/components/issues/issue-layouts/empty-states/project-issues.tsx b/web/core/components/issues/issue-layouts/empty-states/project-issues.tsx index 109b67c28d8..d314ee81a69 100644 --- a/web/core/components/issues/issue-layouts/empty-states/project-issues.tsx +++ b/web/core/components/issues/issue-layouts/empty-states/project-issues.tsx @@ -2,9 +2,9 @@ import size from "lodash/size"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { EIssueFilterType, EIssuesStoreType, EUserPermissionsLevel, EUserProjectRoles } from "@plane/constants"; +import { EIssueFilterType, EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { IIssueFilterOptions } from "@plane/types"; +import { EIssuesStoreType, EUserProjectRoles, IIssueFilterOptions } from "@plane/types"; // components import { ComicBoxButton, DetailedEmptyState } from "@/components/empty-state"; // hooks diff --git a/web/core/components/issues/issue-layouts/empty-states/project-view.tsx b/web/core/components/issues/issue-layouts/empty-states/project-view.tsx index dd17604522b..9e2c729ab70 100644 --- a/web/core/components/issues/issue-layouts/empty-states/project-view.tsx +++ b/web/core/components/issues/issue-layouts/empty-states/project-view.tsx @@ -1,7 +1,8 @@ import { observer } from "mobx-react"; import { PlusIcon } from "lucide-react"; // components -import { EIssuesStoreType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; import { EmptyState } from "@/components/common"; // constants // hooks diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx index 91d7207764b..b27328a82fd 100644 --- a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx +++ b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx @@ -1,7 +1,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; -import { IIssueFilterOptions } from "@plane/types"; +import { EIssueFilterType } from "@plane/constants"; +import { EIssuesStoreType, IIssueFilterOptions } from "@plane/types"; // hooks import { AppliedFiltersList } from "@/components/issues"; import { useIssues, useLabel, useProjectState } from "@/hooks/store"; diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx index 2628fe41daa..d7af6e899af 100644 --- a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx +++ b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx @@ -1,7 +1,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; -import { IIssueFilterOptions } from "@plane/types"; +import { EIssueFilterType } from "@plane/constants"; +import { EIssuesStoreType, IIssueFilterOptions } from "@plane/types"; // hooks import { Header, EHeaderVariant } from "@plane/ui"; import { AppliedFiltersList, SaveFilterView } from "@/components/issues"; diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx index a596b4248c0..b774d2d3474 100644 --- a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx +++ b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx @@ -1,7 +1,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; -import { IIssueFilterOptions } from "@plane/types"; +import { EIssueFilterType } from "@plane/constants"; +import { EIssuesStoreType, IIssueFilterOptions } from "@plane/types"; // hooks import { AppliedFiltersList } from "@/components/issues"; import { useIssues, useLabel, useProjectState } from "@/hooks/store"; diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx index 6bf8ed36160..a0fe5f7b5f0 100644 --- a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx +++ b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx @@ -5,26 +5,21 @@ import cloneDeep from "lodash/cloneDeep"; import isEmpty from "lodash/isEmpty"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; -// types +// Plane imports import { DEFAULT_GLOBAL_VIEWS_LIST, EIssueFilterType, - EIssuesStoreType, - EViewAccess, EUserPermissions, EUserPermissionsLevel, GLOBAL_VIEW_TOUR_TRACKER_EVENTS, } from "@plane/constants"; -import { IIssueFilterOptions, TStaticViewTypes } from "@plane/types"; -//ui -// components +import { EIssuesStoreType, EViewAccess, IIssueFilterOptions, TStaticViewTypes } from "@plane/types"; import { Header, EHeaderVariant, Loader } from "@plane/ui"; import { cn } from "@plane/utils"; +// components import { AppliedFiltersList } from "@/components/issues"; import { UpdateViewComponent } from "@/components/views/update-view-component"; import { CreateUpdateWorkspaceViewModal } from "@/components/workspace"; -// constants -// helpers // hooks import { useEventTracker, useGlobalView, useIssues, useLabel, useUser, useUserPermissions } from "@/hooks/store"; import { getAreFiltersEqual } from "../../../utils"; diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx index 10820d35416..4e43a730aab 100644 --- a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx +++ b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx @@ -1,7 +1,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; -import { IIssueFilterOptions } from "@plane/types"; +import { EIssueFilterType } from "@plane/constants"; +import { EIssuesStoreType, IIssueFilterOptions } from "@plane/types"; // hooks import { Header, EHeaderVariant } from "@plane/ui"; import { AppliedFiltersList, SaveFilterView } from "@/components/issues"; diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx index eebf4fd9d1e..cbd41be9e5e 100644 --- a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx +++ b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx @@ -1,7 +1,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; -import { IIssueFilterOptions } from "@plane/types"; +import { EIssueFilterType } from "@plane/constants"; +import { EIssuesStoreType, IIssueFilterOptions } from "@plane/types"; // hooks // components import { AppliedFiltersList } from "@/components/issues"; diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx index 90652c129f5..f20c9613fb7 100644 --- a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx +++ b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx @@ -1,8 +1,8 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // types -import { EIssueFilterType, EIssuesStoreType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; -import { IIssueFilterOptions } from "@plane/types"; +import { EIssueFilterType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EIssuesStoreType, IIssueFilterOptions } from "@plane/types"; // ui import { Header, EHeaderVariant } from "@plane/ui"; // components diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx index 6812c811916..beeecf9bb07 100644 --- a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx +++ b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx @@ -6,14 +6,8 @@ import isEmpty from "lodash/isEmpty"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // types -import { - EIssueFilterType, - EIssuesStoreType, - EViewAccess, - EUserPermissions, - EUserPermissionsLevel, -} from "@plane/constants"; -import { IIssueFilterOptions } from "@plane/types"; +import { EIssueFilterType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EIssuesStoreType, EViewAccess, IIssueFilterOptions } from "@plane/types"; // components import { Header, EHeaderVariant } from "@plane/ui"; import { AppliedFiltersList } from "@/components/issues"; diff --git a/web/core/components/issues/issue-layouts/gantt/base-gantt-root.tsx b/web/core/components/issues/issue-layouts/gantt/base-gantt-root.tsx index 594bcd2fad5..74dea055b02 100644 --- a/web/core/components/issues/issue-layouts/gantt/base-gantt-root.tsx +++ b/web/core/components/issues/issue-layouts/gantt/base-gantt-root.tsx @@ -2,15 +2,9 @@ import React, { useCallback, useEffect } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane constants -import { - ALL_ISSUES, - EIssueLayoutTypes, - EIssuesStoreType, - EUserPermissions, - EUserPermissionsLevel, -} from "@plane/constants"; +import { ALL_ISSUES, EIssueLayoutTypes, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import type { IBlockUpdateData, TIssue } from "@plane/types"; +import { EIssuesStoreType, IBlockUpdateData, TIssue } from "@plane/types"; import { setToast, TOAST_TYPE } from "@plane/ui"; // hooks import { renderFormattedPayloadDate } from "@plane/utils"; diff --git a/web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx b/web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx index d4b29a35d76..e1dfe0a9540 100644 --- a/web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx +++ b/web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx @@ -8,13 +8,12 @@ import { observer } from "mobx-react"; import { useParams, usePathname } from "next/navigation"; import { EIssueLayoutTypes, - EIssueServiceType, EIssueFilterType, - EIssuesStoreType, EUserPermissions, EUserPermissionsLevel, WORK_ITEM_TRACKER_EVENTS, } from "@plane/constants"; +import { EIssueServiceType, EIssuesStoreType } from "@plane/types"; import { DeleteIssueModal } from "@/components/issues"; //constants //hooks diff --git a/web/core/components/issues/issue-layouts/kanban/block.tsx b/web/core/components/issues/issue-layouts/kanban/block.tsx index 2347df96869..f0fe531dea9 100644 --- a/web/core/components/issues/issue-layouts/kanban/block.tsx +++ b/web/core/components/issues/issue-layouts/kanban/block.tsx @@ -7,10 +7,9 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane helpers import { MoreHorizontal } from "lucide-react"; -import { EIssueServiceType } from "@plane/constants"; import { useOutsideClickDetector } from "@plane/hooks"; // types -import { TIssue, IIssueDisplayProperties, IIssueMap } from "@plane/types"; +import { EIssueServiceType, TIssue, IIssueDisplayProperties, IIssueMap } from "@plane/types"; // ui import { ControlLink, DropIndicator, TOAST_TYPE, Tooltip, setToast } from "@plane/ui"; import { cn, generateWorkItemLink } from "@plane/utils"; diff --git a/web/core/components/issues/issue-layouts/kanban/roots/cycle-root.tsx b/web/core/components/issues/issue-layouts/kanban/roots/cycle-root.tsx index 0dce7e181fa..16f0990d9e2 100644 --- a/web/core/components/issues/issue-layouts/kanban/roots/cycle-root.tsx +++ b/web/core/components/issues/issue-layouts/kanban/roots/cycle-root.tsx @@ -2,7 +2,8 @@ import React, { useCallback } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // components -import { EIssuesStoreType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; import { CycleIssueQuickActions } from "@/components/issues"; // constants // hooks diff --git a/web/core/components/issues/issue-layouts/kanban/roots/module-root.tsx b/web/core/components/issues/issue-layouts/kanban/roots/module-root.tsx index 0e46fc50567..7944ffc7940 100644 --- a/web/core/components/issues/issue-layouts/kanban/roots/module-root.tsx +++ b/web/core/components/issues/issue-layouts/kanban/roots/module-root.tsx @@ -1,8 +1,8 @@ import React from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; +import { EIssuesStoreType } from "@plane/types"; // hook -import { EIssuesStoreType } from "@plane/constants"; import { ModuleIssueQuickActions } from "@/components/issues"; import { useIssues } from "@/hooks/store"; // components diff --git a/web/core/components/issues/issue-layouts/list/base-list-root.tsx b/web/core/components/issues/issue-layouts/list/base-list-root.tsx index ceccd87d2b4..4917740069d 100644 --- a/web/core/components/issues/issue-layouts/list/base-list-root.tsx +++ b/web/core/components/issues/issue-layouts/list/base-list-root.tsx @@ -2,15 +2,9 @@ import { FC, useCallback, useEffect } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane constants -import { - EIssueLayoutTypes, - EIssueFilterType, - EIssuesStoreType, - EUserPermissions, - EUserPermissionsLevel, -} from "@plane/constants"; +import { EIssueLayoutTypes, EIssueFilterType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; // types -import { GroupByColumnTypes, TGroupedIssues, TIssueKanbanFilters } from "@plane/types"; +import { EIssuesStoreType, GroupByColumnTypes, TGroupedIssues, TIssueKanbanFilters } from "@plane/types"; // constants // hooks import { useIssues, useUserPermissions } from "@/hooks/store"; diff --git a/web/core/components/issues/issue-layouts/list/block-root.tsx b/web/core/components/issues/issue-layouts/list/block-root.tsx index bcb2ef18956..ca5c4561635 100644 --- a/web/core/components/issues/issue-layouts/list/block-root.tsx +++ b/web/core/components/issues/issue-layouts/list/block-root.tsx @@ -5,11 +5,10 @@ import { combine } from "@atlaskit/pragmatic-drag-and-drop/combine"; import { dropTargetForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter"; import { attachInstruction, extractInstruction } from "@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item"; import { observer } from "mobx-react"; -import { EIssueServiceType } from "@plane/constants"; // plane helpers import { useOutsideClickDetector } from "@plane/hooks"; // types -import { IIssueDisplayProperties, TIssue, TIssueMap } from "@plane/types"; +import { EIssueServiceType, IIssueDisplayProperties, TIssue, TIssueMap } from "@plane/types"; // components import { DropIndicator } from "@plane/ui"; import RenderIfVisible from "@/components/core/render-if-visible-HOC"; diff --git a/web/core/components/issues/issue-layouts/list/block.tsx b/web/core/components/issues/issue-layouts/list/block.tsx index 67d282753a7..755d4629585 100644 --- a/web/core/components/issues/issue-layouts/list/block.tsx +++ b/web/core/components/issues/issue-layouts/list/block.tsx @@ -6,9 +6,8 @@ import { draggable } from "@atlaskit/pragmatic-drag-and-drop/element/adapter"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { ChevronRight } from "lucide-react"; -import { EIssueServiceType } from "@plane/constants"; // types -import { TIssue, IIssueDisplayProperties, TIssueMap } from "@plane/types"; +import { EIssueServiceType, TIssue, IIssueDisplayProperties, TIssueMap } from "@plane/types"; // ui import { Spinner, Tooltip, ControlLink, setToast, TOAST_TYPE, Row } from "@plane/ui"; import { cn, generateWorkItemLink } from "@plane/utils"; diff --git a/web/core/components/issues/issue-layouts/list/roots/cycle-root.tsx b/web/core/components/issues/issue-layouts/list/roots/cycle-root.tsx index 2d3eb4a8a55..a542537dc89 100644 --- a/web/core/components/issues/issue-layouts/list/roots/cycle-root.tsx +++ b/web/core/components/issues/issue-layouts/list/roots/cycle-root.tsx @@ -2,7 +2,8 @@ import React, { useCallback } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // components -import { EIssuesStoreType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; import { CycleIssueQuickActions } from "@/components/issues"; // constants // hooks diff --git a/web/core/components/issues/issue-layouts/list/roots/module-root.tsx b/web/core/components/issues/issue-layouts/list/roots/module-root.tsx index 257a6be977f..c04be1ac1b7 100644 --- a/web/core/components/issues/issue-layouts/list/roots/module-root.tsx +++ b/web/core/components/issues/issue-layouts/list/roots/module-root.tsx @@ -1,8 +1,8 @@ import React from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; +import { EIssuesStoreType } from "@plane/types"; // mobx store -import { EIssuesStoreType } from "@plane/constants"; import { ModuleIssueQuickActions } from "@/components/issues"; import { useIssues } from "@/hooks/store"; // components diff --git a/web/core/components/issues/issue-layouts/properties/label-dropdown.tsx b/web/core/components/issues/issue-layouts/properties/label-dropdown.tsx index 931d0f30c61..354567eaf54 100644 --- a/web/core/components/issues/issue-layouts/properties/label-dropdown.tsx +++ b/web/core/components/issues/issue-layouts/properties/label-dropdown.tsx @@ -5,11 +5,11 @@ import { usePopper } from "react-popper"; import { Check, ChevronDown, Loader, Search } from "lucide-react"; import { Combobox } from "@headlessui/react"; // plane imports -import { EUserPermissionsLevel, EUserProjectRoles, getRandomLabelColor } from "@plane/constants"; +import { EUserPermissionsLevel, getRandomLabelColor } from "@plane/constants"; import { useOutsideClickDetector } from "@plane/hooks"; import { useTranslation } from "@plane/i18n"; // types -import { IIssueLabel } from "@plane/types"; +import { EUserProjectRoles, IIssueLabel } from "@plane/types"; // components import { ComboDropDown } from "@plane/ui"; // hooks diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/all-issue.tsx b/web/core/components/issues/issue-layouts/quick-action-dropdowns/all-issue.tsx index d3524559df9..86229ef6c2e 100644 --- a/web/core/components/issues/issue-layouts/quick-action-dropdowns/all-issue.tsx +++ b/web/core/components/issues/issue-layouts/quick-action-dropdowns/all-issue.tsx @@ -5,8 +5,8 @@ import omit from "lodash/omit"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { ARCHIVABLE_STATE_GROUPS, EIssuesStoreType } from "@plane/constants"; -import { TIssue } from "@plane/types"; +import { ARCHIVABLE_STATE_GROUPS } from "@plane/constants"; +import { EIssuesStoreType, TIssue } from "@plane/types"; import { ContextMenu, CustomMenu } from "@plane/ui"; import { cn } from "@plane/utils"; // components diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx b/web/core/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx index b8b74764d3d..65b3bd816a4 100644 --- a/web/core/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx +++ b/web/core/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx @@ -4,7 +4,8 @@ import { useState } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // ui -import { EIssuesStoreType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; import { ContextMenu, CustomMenu } from "@plane/ui"; import { cn } from "@plane/utils"; // components diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx b/web/core/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx index 75bb8633a89..993200cf441 100644 --- a/web/core/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx +++ b/web/core/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx @@ -5,8 +5,8 @@ import omit from "lodash/omit"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { ARCHIVABLE_STATE_GROUPS, EIssuesStoreType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; -import { TIssue } from "@plane/types"; +import { ARCHIVABLE_STATE_GROUPS, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EIssuesStoreType, TIssue } from "@plane/types"; import { ContextMenu, CustomMenu } from "@plane/ui"; import { cn } from "@plane/utils"; // components diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx b/web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx index e3d89f8a285..45634cf8bbe 100644 --- a/web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx +++ b/web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx @@ -5,8 +5,8 @@ import omit from "lodash/omit"; import { observer } from "mobx-react"; import { useParams, usePathname } from "next/navigation"; // plane imports -import { EIssuesStoreType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; -import { TIssue } from "@plane/types"; +import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EIssuesStoreType, TIssue } from "@plane/types"; import { ContextMenu, CustomMenu } from "@plane/ui"; import { cn } from "@plane/utils"; // components diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/helper.tsx b/web/core/components/issues/issue-layouts/quick-action-dropdowns/helper.tsx index 3ebcc7e70fd..899861c4037 100644 --- a/web/core/components/issues/issue-layouts/quick-action-dropdowns/helper.tsx +++ b/web/core/components/issues/issue-layouts/quick-action-dropdowns/helper.tsx @@ -1,9 +1,8 @@ import { useMemo } from "react"; import { Copy, ExternalLink, Link, Pencil, Trash2, XCircle, ArchiveRestoreIcon } from "lucide-react"; // plane imports -import { EIssuesStoreType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssue } from "@plane/types"; +import { EIssuesStoreType, TIssue } from "@plane/types"; import { ArchiveIcon, TContextMenuItem, TOAST_TYPE, setToast } from "@plane/ui"; import { copyUrlToClipboard, generateWorkItemLink } from "@plane/utils"; // types diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx b/web/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx index e23ff7501be..a0f82548f77 100644 --- a/web/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx +++ b/web/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx @@ -5,8 +5,8 @@ import omit from "lodash/omit"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { ARCHIVABLE_STATE_GROUPS, EIssuesStoreType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; -import { TIssue } from "@plane/types"; +import { ARCHIVABLE_STATE_GROUPS, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EIssuesStoreType, TIssue } from "@plane/types"; import { ContextMenu, CustomMenu } from "@plane/ui"; import { cn } from "@plane/utils"; // components diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx b/web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx index 994648544ed..8b0bb8a8058 100644 --- a/web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx +++ b/web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx @@ -5,8 +5,8 @@ import omit from "lodash/omit"; import { observer } from "mobx-react"; import { useParams, usePathname } from "next/navigation"; // plane imports -import { ARCHIVABLE_STATE_GROUPS, EIssuesStoreType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; -import { TIssue } from "@plane/types"; +import { ARCHIVABLE_STATE_GROUPS, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EIssuesStoreType, TIssue } from "@plane/types"; import { ContextMenu, CustomMenu } from "@plane/ui"; import { cn } from "@plane/utils"; // components diff --git a/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx b/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx index 2bebdb96af5..ee465d27e56 100644 --- a/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx +++ b/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx @@ -2,12 +2,11 @@ import React, { useCallback } from "react"; import { isEmpty } from "lodash"; import { observer } from "mobx-react"; import { useParams, useSearchParams } from "next/navigation"; -// plane constants import useSWR from "swr"; -import { EIssueFilterType, EIssueLayoutTypes, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; -// hooks +// plane imports +import { EIssueFilterType, EIssueLayoutTypes, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; // components -// hooks import { EmptyState } from "@/components/common"; import { WorkspaceActiveLayout } from "@/components/views/helper"; import { useGlobalView, useIssues } from "@/hooks/store"; diff --git a/web/core/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx b/web/core/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx index 86f299ef280..b96afb59933 100644 --- a/web/core/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx +++ b/web/core/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx @@ -2,9 +2,9 @@ import React, { Fragment } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import useSWR from "swr"; +import { EIssuesStoreType } from "@plane/types"; // mobx store // components -import { EIssuesStoreType } from "@plane/constants"; import { LogoSpinner } from "@/components/common"; import { ArchivedIssueListLayout, ArchivedIssueAppliedFiltersRoot, IssuePeekOverview } from "@/components/issues"; // ui diff --git a/web/core/components/issues/issue-layouts/roots/cycle-layout-root.tsx b/web/core/components/issues/issue-layouts/roots/cycle-layout-root.tsx index a9c9fe0e88b..5de2675b9bc 100644 --- a/web/core/components/issues/issue-layouts/roots/cycle-layout-root.tsx +++ b/web/core/components/issues/issue-layouts/roots/cycle-layout-root.tsx @@ -4,7 +4,8 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import useSWR from "swr"; // plane constants -import { EIssueLayoutTypes, EIssuesStoreType } from "@plane/constants"; +import { EIssueLayoutTypes } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; // components import { LogoSpinner } from "@/components/common"; import { TransferIssues, TransferIssuesModal } from "@/components/cycles"; diff --git a/web/core/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx b/web/core/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx index 13597c5789b..8f3703c0db3 100644 --- a/web/core/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx +++ b/web/core/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx @@ -3,7 +3,8 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import useSWR from "swr"; // plane constants -import { EIssueLayoutTypes, EIssuesStoreType } from "@plane/constants"; +import { EIssueLayoutTypes } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; // components import { LogoSpinner } from "@/components/common"; import { IssuePeekOverview } from "@/components/issues/peek-overview"; diff --git a/web/core/components/issues/issue-layouts/roots/module-layout-root.tsx b/web/core/components/issues/issue-layouts/roots/module-layout-root.tsx index f64f28cc755..9494a463120 100644 --- a/web/core/components/issues/issue-layouts/roots/module-layout-root.tsx +++ b/web/core/components/issues/issue-layouts/roots/module-layout-root.tsx @@ -3,7 +3,8 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import useSWR from "swr"; // plane constants -import { EIssueLayoutTypes, EIssuesStoreType } from "@plane/constants"; +import { EIssueLayoutTypes } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; // components import { Row, ERowVariant } from "@plane/ui"; import { LogoSpinner } from "@/components/common"; diff --git a/web/core/components/issues/issue-layouts/roots/project-layout-root.tsx b/web/core/components/issues/issue-layouts/roots/project-layout-root.tsx index 4007468dc20..fbd3550a58a 100644 --- a/web/core/components/issues/issue-layouts/roots/project-layout-root.tsx +++ b/web/core/components/issues/issue-layouts/roots/project-layout-root.tsx @@ -5,7 +5,8 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import useSWR from "swr"; // plane constants -import { EIssueLayoutTypes, EIssuesStoreType } from "@plane/constants"; +import { EIssueLayoutTypes } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; // components import { Spinner } from "@plane/ui"; import { LogoSpinner } from "@/components/common"; diff --git a/web/core/components/issues/issue-layouts/roots/project-view-layout-root.tsx b/web/core/components/issues/issue-layouts/roots/project-view-layout-root.tsx index fd0a54a3191..126804a4a7a 100644 --- a/web/core/components/issues/issue-layouts/roots/project-view-layout-root.tsx +++ b/web/core/components/issues/issue-layouts/roots/project-view-layout-root.tsx @@ -3,7 +3,8 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import useSWR from "swr"; // plane constants -import { EIssueLayoutTypes, EIssuesStoreType } from "@plane/constants"; +import { EIssueLayoutTypes } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; // components import { LogoSpinner } from "@/components/common"; import { diff --git a/web/core/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx b/web/core/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx index f8d2f32c36a..eff96c1a240 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx @@ -2,8 +2,8 @@ import { FC, useCallback, useEffect } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { ALL_ISSUES, EIssueLayoutTypes, EIssuesStoreType, EIssueFilterType , EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; -import { IIssueDisplayFilterOptions } from "@plane/types"; +import { ALL_ISSUES, EIssueLayoutTypes, EIssueFilterType, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EIssuesStoreType, IIssueDisplayFilterOptions } from "@plane/types"; // hooks import { useIssues, useUserPermissions } from "@/hooks/store"; import { useIssueStoreType } from "@/hooks/use-issue-layout-store"; diff --git a/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx b/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx index a645bffe252..8594e72fae7 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx @@ -4,11 +4,11 @@ import { Dispatch, MouseEvent, MutableRefObject, SetStateAction, useRef, useStat import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { ChevronRight, MoreHorizontal } from "lucide-react"; -import { EIssueServiceType, SPREADSHEET_SELECT_GROUP } from "@plane/constants"; +import { SPREADSHEET_SELECT_GROUP } from "@plane/constants"; // plane helpers import { useOutsideClickDetector } from "@plane/hooks"; // types -import { IIssueDisplayProperties, TIssue } from "@plane/types"; +import { EIssueServiceType, IIssueDisplayProperties, TIssue } from "@plane/types"; // ui import { ControlLink, Row, Tooltip } from "@plane/ui"; import { cn, generateWorkItemLink } from "@plane/utils"; diff --git a/web/core/components/issues/issue-layouts/spreadsheet/roots/workspace-root.tsx b/web/core/components/issues/issue-layouts/spreadsheet/roots/workspace-root.tsx index caba1176dad..216634bdd48 100644 --- a/web/core/components/issues/issue-layouts/spreadsheet/roots/workspace-root.tsx +++ b/web/core/components/issues/issue-layouts/spreadsheet/roots/workspace-root.tsx @@ -5,12 +5,10 @@ import { ALL_ISSUES, EIssueLayoutTypes, EIssueFilterType, - EIssuesStoreType, EUserPermissions, EUserPermissionsLevel, } from "@plane/constants"; -import { IIssueDisplayFilterOptions } from "@plane/types"; -// hooks +import { IIssueDisplayFilterOptions, EIssuesStoreType } from "@plane/types"; // components import { SpreadsheetView } from "@/components/issues/issue-layouts"; import { AllIssueQuickActions } from "@/components/issues/issue-layouts/quick-action-dropdowns"; diff --git a/web/core/components/issues/issue-layouts/utils.tsx b/web/core/components/issues/issue-layouts/utils.tsx index 510fbf5a6e5..83943f84d45 100644 --- a/web/core/components/issues/issue-layouts/utils.tsx +++ b/web/core/components/issues/issue-layouts/utils.tsx @@ -11,8 +11,9 @@ import uniq from "lodash/uniq"; import scrollIntoView from "smooth-scroll-into-view-if-needed"; import { ContrastIcon } from "lucide-react"; // plane types -import { EIconSize, EIssuesStoreType, ISSUE_PRIORITIES, STATE_GROUPS } from "@plane/constants"; +import { EIconSize, ISSUE_PRIORITIES, STATE_GROUPS } from "@plane/constants"; import { + EIssuesStoreType, GroupByColumnTypes, IGroupByColumn, TCycleGroups, diff --git a/web/core/components/issues/issue-modal/base.tsx b/web/core/components/issues/issue-modal/base.tsx index 494eb80e795..ee34ee3faf4 100644 --- a/web/core/components/issues/issue-modal/base.tsx +++ b/web/core/components/issues/issue-modal/base.tsx @@ -3,14 +3,13 @@ import React, { useEffect, useRef, useState } from "react"; import { observer } from "mobx-react"; import { useParams, usePathname } from "next/navigation"; -import { EIssuesStoreType, WORK_ITEM_TRACKER_EVENTS } from "@plane/constants"; +// Plane imports +import { WORK_ITEM_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -// types -import type { TBaseIssue, TIssue } from "@plane/types"; -// ui +import { EIssuesStoreType, TBaseIssue, TIssue } from "@plane/types"; import { EModalPosition, EModalWidth, ModalCore, TOAST_TYPE, setToast } from "@plane/ui"; +// components import { CreateIssueToastActionItems, IssuesModalProps } from "@/components/issues"; -// constants // hooks import { useIssueModal } from "@/hooks/context/use-issue-modal"; import { useCycle } from "@/hooks/store/use-cycle"; diff --git a/web/core/components/issues/issue-modal/form.tsx b/web/core/components/issues/issue-modal/form.tsx index addf1917a62..f80d091be07 100644 --- a/web/core/components/issues/issue-modal/form.tsx +++ b/web/core/components/issues/issue-modal/form.tsx @@ -5,12 +5,11 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { FormProvider, useForm } from "react-hook-form"; // editor -import { ETabIndices, EIssuesStoreType, DEFAULT_WORK_ITEM_FORM_VALUES } from "@plane/constants"; +import { ETabIndices, DEFAULT_WORK_ITEM_FORM_VALUES } from "@plane/constants"; import { EditorRefApi } from "@plane/editor"; // i18n import { useTranslation } from "@plane/i18n"; -// types -import type { TIssue, TWorkspaceDraftIssue } from "@plane/types"; +import { EIssuesStoreType, TIssue, TWorkspaceDraftIssue } from "@plane/types"; // hooks import { Button, ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui"; import { convertWorkItemDataToSearchResponse, getUpdateFormDataForReset, cn, getTextContent, getChangedIssuefields, getTabIndex } from "@plane/utils"; diff --git a/web/core/components/issues/issue-modal/modal.tsx b/web/core/components/issues/issue-modal/modal.tsx index b87573808b4..303eac87d57 100644 --- a/web/core/components/issues/issue-modal/modal.tsx +++ b/web/core/components/issues/issue-modal/modal.tsx @@ -4,8 +4,7 @@ import React from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { EIssuesStoreType } from "@plane/constants"; -import type { TIssue } from "@plane/types"; +import { EIssuesStoreType, TIssue } from "@plane/types"; // components import { CreateUpdateIssueModalBase } from "@/components/issues"; // plane web imports diff --git a/web/core/components/issues/peek-overview/root.tsx b/web/core/components/issues/peek-overview/root.tsx index dfeedadce95..23ad3dbc13f 100644 --- a/web/core/components/issues/peek-overview/root.tsx +++ b/web/core/components/issues/peek-overview/root.tsx @@ -3,21 +3,13 @@ import { FC, useEffect, useState, useMemo, useCallback } from "react"; import { observer } from "mobx-react"; import { usePathname } from "next/navigation"; -// plane types -import { - EIssuesStoreType, - EUserPermissions, - EUserPermissionsLevel, - EIssueServiceType, - WORK_ITEM_TRACKER_EVENTS, -} from "@plane/constants"; +// Plane imports +import { EUserPermissions, EUserPermissionsLevel, WORK_ITEM_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssue, IWorkItemPeekOverview } from "@plane/types"; -// plane ui +import { EIssueServiceType, EIssuesStoreType, IWorkItemPeekOverview, TIssue } from "@plane/types"; import { TOAST_TYPE, setPromiseToast, setToast } from "@plane/ui"; // components import { IssueView, TIssueOperations } from "@/components/issues"; -// constants // hooks import { useEventTracker, useIssueDetail, useIssues, useUserPermissions } from "@/hooks/store"; import { useIssueStoreType } from "@/hooks/use-issue-layout-store"; diff --git a/web/core/components/issues/peek-overview/view.tsx b/web/core/components/issues/peek-overview/view.tsx index bcdf61d675d..c30a40fb54c 100644 --- a/web/core/components/issues/peek-overview/view.tsx +++ b/web/core/components/issues/peek-overview/view.tsx @@ -1,9 +1,7 @@ import { FC, useRef, useState } from "react"; import { observer } from "mobx-react"; -// constants -import { EIssueServiceType } from "@plane/constants"; // types -import { TNameDescriptionLoader } from "@plane/types"; +import { EIssueServiceType, TNameDescriptionLoader } from "@plane/types"; // components import { cn } from "@plane/utils"; import { diff --git a/web/core/components/issues/relations/issue-list-item.tsx b/web/core/components/issues/relations/issue-list-item.tsx index eeedabdf947..c09560b467b 100644 --- a/web/core/components/issues/relations/issue-list-item.tsx +++ b/web/core/components/issues/relations/issue-list-item.tsx @@ -4,9 +4,8 @@ import React, { FC } from "react"; import { observer } from "mobx-react"; import { X, Pencil, Trash, Link as LinkIcon } from "lucide-react"; // Plane -import { EIssueServiceType } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TIssue, TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssue, TIssueServiceType } from "@plane/types"; import { ControlLink, CustomMenu, Tooltip } from "@plane/ui"; // components import { generateWorkItemLink } from "@plane/utils"; diff --git a/web/core/components/issues/relations/issue-list.tsx b/web/core/components/issues/relations/issue-list.tsx index 56f00251c1f..e11ce476f6b 100644 --- a/web/core/components/issues/relations/issue-list.tsx +++ b/web/core/components/issues/relations/issue-list.tsx @@ -2,8 +2,7 @@ import React, { FC } from "react"; import { observer } from "mobx-react"; // Plane -import { EIssueServiceType } from "@plane/constants"; -import { TIssue, TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssue, TIssueServiceType } from "@plane/types"; // components import { RelationIssueListItem } from "@/components/issues/relations"; // Plane-web diff --git a/web/core/components/issues/relations/properties.tsx b/web/core/components/issues/relations/properties.tsx index b301c8b1f57..fae86a74362 100644 --- a/web/core/components/issues/relations/properties.tsx +++ b/web/core/components/issues/relations/properties.tsx @@ -1,9 +1,8 @@ "use client"; import React, { FC } from "react"; import { observer } from "mobx-react"; -import { EIssueServiceType } from "@plane/constants"; // components -import { TIssuePriorities, TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssuePriorities, TIssueServiceType } from "@plane/types"; import { PriorityDropdown, MemberDropdown, StateDropdown } from "@/components/dropdowns"; // hooks import { useIssueDetail } from "@/hooks/store"; diff --git a/web/core/components/issues/workspace-draft/draft-issue-block.tsx b/web/core/components/issues/workspace-draft/draft-issue-block.tsx index 423231c6c33..4c9a9736cfe 100644 --- a/web/core/components/issues/workspace-draft/draft-issue-block.tsx +++ b/web/core/components/issues/workspace-draft/draft-issue-block.tsx @@ -4,9 +4,7 @@ import { omit } from "lodash"; import { observer } from "mobx-react"; import { Copy, Pencil, SquareStackIcon, Trash2 } from "lucide-react"; // types -import { EIssuesStoreType } from "@plane/constants"; -import { TWorkspaceDraftIssue } from "@plane/types"; -// ui +import { EIssuesStoreType, TWorkspaceDraftIssue } from "@plane/types"; import { Row, TContextMenuItem, Tooltip } from "@plane/ui"; // constants // helper diff --git a/web/core/components/issues/workspace-draft/empty-state.tsx b/web/core/components/issues/workspace-draft/empty-state.tsx index 1c0b51fbb1d..cc637321e83 100644 --- a/web/core/components/issues/workspace-draft/empty-state.tsx +++ b/web/core/components/issues/workspace-draft/empty-state.tsx @@ -3,8 +3,9 @@ import { FC, Fragment, useState } from "react"; // components import { observer } from "mobx-react"; -import { EIssuesStoreType, EUserPermissionsLevel, EUserWorkspaceRoles } from "@plane/constants"; +import { EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { EIssuesStoreType, EUserWorkspaceRoles } from "@plane/types"; import { DetailedEmptyState } from "@/components/empty-state"; import { CreateUpdateIssueModal } from "@/components/issues"; // constants diff --git a/web/core/components/issues/workspace-draft/root.tsx b/web/core/components/issues/workspace-draft/root.tsx index 8f4577e8062..0c05ffe650e 100644 --- a/web/core/components/issues/workspace-draft/root.tsx +++ b/web/core/components/issues/workspace-draft/root.tsx @@ -5,8 +5,9 @@ import { observer } from "mobx-react"; import useSWR from "swr"; // plane imports import { EDraftIssuePaginationType } from "@plane/constants"; -import { EUserPermissionsLevel, EUserWorkspaceRoles } from "@plane/constants/src/user"; +import { EUserPermissionsLevel } from "@plane/constants/src/user"; import { useTranslation } from "@plane/i18n"; +import { EUserWorkspaceRoles } from "@plane/types"; // components import { cn } from "@plane/utils"; import { ComicBoxButton, DetailedEmptyState } from "@/components/empty-state"; diff --git a/web/core/components/license/modal/card/base-paid-plan-card.tsx b/web/core/components/license/modal/card/base-paid-plan-card.tsx index cfbb44fe6cc..ee9f93ed5b6 100644 --- a/web/core/components/license/modal/card/base-paid-plan-card.tsx +++ b/web/core/components/license/modal/card/base-paid-plan-card.tsx @@ -5,9 +5,8 @@ import { observer } from "mobx-react"; import { CheckCircle } from "lucide-react"; import { Tab } from "@headlessui/react"; // plane imports -import { EProductSubscriptionEnum } from "@plane/constants"; // helpers -import { TBillingFrequency, TSubscriptionPrice } from "@plane/types"; +import { EProductSubscriptionEnum, TBillingFrequency, TSubscriptionPrice } from "@plane/types"; import { cn, getBaseSubscriptionName, getSubscriptionName } from "@plane/utils"; // components import { diff --git a/web/core/components/license/modal/card/checkout-button.tsx b/web/core/components/license/modal/card/checkout-button.tsx index 71a5bebc93a..647d255180f 100644 --- a/web/core/components/license/modal/card/checkout-button.tsx +++ b/web/core/components/license/modal/card/checkout-button.tsx @@ -2,8 +2,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; // plane imports -import { EProductSubscriptionEnum } from "@plane/constants"; -import { IPaymentProduct, TSubscriptionPrice } from "@plane/types"; +import { EProductSubscriptionEnum, IPaymentProduct, TSubscriptionPrice } from "@plane/types"; import { getButtonStyling, Loader } from "@plane/ui"; import { cn } from "@plane/utils"; // components diff --git a/web/core/components/license/modal/card/discount-info.tsx b/web/core/components/license/modal/card/discount-info.tsx index 27ca7879671..3b5695ceed9 100644 --- a/web/core/components/license/modal/card/discount-info.tsx +++ b/web/core/components/license/modal/card/discount-info.tsx @@ -1,7 +1,6 @@ import { useTheme } from "next-themes"; // plane imports -import { EProductSubscriptionEnum } from "@plane/constants"; -import { TBillingFrequency } from "@plane/types"; +import { EProductSubscriptionEnum, TBillingFrequency } from "@plane/types"; import { cn } from "@plane/utils"; type TDiscountInfoProps = { diff --git a/web/core/components/license/modal/card/plan-upgrade.tsx b/web/core/components/license/modal/card/plan-upgrade.tsx index ef21459c612..9fdd604566b 100644 --- a/web/core/components/license/modal/card/plan-upgrade.tsx +++ b/web/core/components/license/modal/card/plan-upgrade.tsx @@ -3,8 +3,8 @@ import { FC } from "react"; import { observer } from "mobx-react"; // plane imports -import { EProductSubscriptionEnum, TALK_TO_SALES_URL } from "@plane/constants"; -import { IPaymentProduct, TSubscriptionPrice } from "@plane/types"; +import { TALK_TO_SALES_URL } from "@plane/constants"; +import { EProductSubscriptionEnum, IPaymentProduct, TSubscriptionPrice } from "@plane/types"; import { calculateYearlyDiscount, cn, getSubscriptionName, getSubscriptionPriceDetails } from "@plane/utils"; // components import { BasePaidPlanCard, TalkToSalesCard } from "@/components/license"; diff --git a/web/core/components/license/modal/card/talk-to-sales.tsx b/web/core/components/license/modal/card/talk-to-sales.tsx index cfd5e77441e..947682c6087 100644 --- a/web/core/components/license/modal/card/talk-to-sales.tsx +++ b/web/core/components/license/modal/card/talk-to-sales.tsx @@ -3,9 +3,8 @@ import { FC } from "react"; import { observer } from "mobx-react"; // types -import { EProductSubscriptionEnum } from "@plane/constants"; // plane imports -import { IPaymentProduct, TSubscriptionPrice } from "@plane/types"; +import { EProductSubscriptionEnum, IPaymentProduct, TSubscriptionPrice } from "@plane/types"; import { getButtonStyling, Loader } from "@plane/ui"; import { cn } from "@plane/utils"; // plane web imports diff --git a/web/core/components/modules/analytics-sidebar/issue-progress.tsx b/web/core/components/modules/analytics-sidebar/issue-progress.tsx index 81ee66a809a..13a491ab2a4 100644 --- a/web/core/components/modules/analytics-sidebar/issue-progress.tsx +++ b/web/core/components/modules/analytics-sidebar/issue-progress.tsx @@ -6,9 +6,9 @@ import { observer } from "mobx-react"; import { useSearchParams } from "next/navigation"; import { AlertCircle, ChevronUp, ChevronDown } from "lucide-react"; import { Disclosure, Transition } from "@headlessui/react"; -import { EIssueFilterType, EIssuesStoreType, EEstimateSystem } from "@plane/constants"; +import { EIssueFilterType, EEstimateSystem } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { IIssueFilterOptions, TModulePlotType } from "@plane/types"; +import { EIssuesStoreType, IIssueFilterOptions, TModulePlotType } from "@plane/types"; import { CustomSelect, Spinner } from "@plane/ui"; // components // constants diff --git a/web/core/components/modules/modules-list-view.tsx b/web/core/components/modules/modules-list-view.tsx index 1664772eefc..4f8e6b57844 100644 --- a/web/core/components/modules/modules-list-view.tsx +++ b/web/core/components/modules/modules-list-view.tsx @@ -2,8 +2,9 @@ import { observer } from "mobx-react"; import Image from "next/image"; import { useParams, useSearchParams } from "next/navigation"; // components -import { EUserPermissionsLevel, EUserProjectRoles } from "@plane/constants"; +import { EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { EUserProjectRoles } from "@plane/types"; import { ContentWrapper, Row, ERowVariant } from "@plane/ui"; import { ListLayout } from "@/components/core/list"; import { DetailedEmptyState, ComicBoxButton } from "@/components/empty-state"; diff --git a/web/core/components/pages/pages-list-main-content.tsx b/web/core/components/pages/pages-list-main-content.tsx index 660b0b461dc..26b6cc0c6dd 100644 --- a/web/core/components/pages/pages-list-main-content.tsx +++ b/web/core/components/pages/pages-list-main-content.tsx @@ -1,9 +1,9 @@ import { observer } from "mobx-react"; import Image from "next/image"; // plane imports -import { EUserPermissionsLevel, EUserProjectRoles, EPageAccess } from "@plane/constants"; +import { EUserPermissionsLevel, EPageAccess } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TPageNavigationTabs } from "@plane/types"; +import { EUserProjectRoles, TPageNavigationTabs } from "@plane/types"; // components import { DetailedEmptyState } from "@/components/empty-state"; import { PageLoader } from "@/components/pages"; diff --git a/web/core/components/profile/profile-issues-filter.tsx b/web/core/components/profile/profile-issues-filter.tsx index 70a76de95b3..7a44b9911ec 100644 --- a/web/core/components/profile/profile-issues-filter.tsx +++ b/web/core/components/profile/profile-issues-filter.tsx @@ -2,11 +2,11 @@ import { useCallback } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane constants -import { EIssueLayoutTypes, EIssuesStoreType, EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; +import { EIssueLayoutTypes, EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; // i18n import { useTranslation } from "@plane/i18n"; // types -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; +import { EIssuesStoreType, IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; // components import { isIssueFilterActive } from "@plane/utils"; import { DisplayFiltersSelection, FilterSelection, FiltersDropdown, LayoutSelection } from "@/components/issues"; diff --git a/web/core/components/profile/profile-issues.tsx b/web/core/components/profile/profile-issues.tsx index 428ccf8f98c..574f134bf23 100644 --- a/web/core/components/profile/profile-issues.tsx +++ b/web/core/components/profile/profile-issues.tsx @@ -2,8 +2,8 @@ import React, { useEffect } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import useSWR from "swr"; +import { EIssuesStoreType } from "@plane/types"; // components -import { EIssuesStoreType } from "@plane/constants"; import { IssuePeekOverview, ProfileIssuesAppliedFiltersRoot } from "@/components/issues"; import { ProfileIssuesKanBanLayout } from "@/components/issues/issue-layouts/kanban/roots/profile-issues-root"; import { ProfileIssuesListLayout } from "@/components/issues/issue-layouts/list/roots/profile-issues-root"; diff --git a/web/core/components/profile/start-of-week-preference.tsx b/web/core/components/profile/start-of-week-preference.tsx index 163fdf76e21..06ed171035b 100644 --- a/web/core/components/profile/start-of-week-preference.tsx +++ b/web/core/components/profile/start-of-week-preference.tsx @@ -3,7 +3,8 @@ import React from "react"; import { observer } from "mobx-react"; // plane imports -import { EStartOfTheWeek, START_OF_THE_WEEK_OPTIONS } from "@plane/constants"; +import { START_OF_THE_WEEK_OPTIONS } from "@plane/constants"; +import { EStartOfTheWeek } from "@plane/types"; import { CustomSelect, setToast, TOAST_TYPE } from "@plane/ui"; // hooks import { useUserProfile } from "@/hooks/store"; diff --git a/web/core/components/project-states/root.tsx b/web/core/components/project-states/root.tsx index c3cec90d608..909f3460605 100644 --- a/web/core/components/project-states/root.tsx +++ b/web/core/components/project-states/root.tsx @@ -4,8 +4,8 @@ import { FC, useMemo } from "react"; import { observer } from "mobx-react"; import useSWR from "swr"; // components -import { EUserProjectRoles, EUserPermissionsLevel } from "@plane/constants"; -import { IState, TStateOperationsCallbacks } from "@plane/types"; +import { EUserPermissionsLevel } from "@plane/constants"; +import { EUserProjectRoles, IState, TStateOperationsCallbacks } from "@plane/types"; import { ProjectStateLoader, GroupList } from "@/components/project-states"; // hooks import { useProjectState, useUserPermissions } from "@/hooks/store"; diff --git a/web/core/components/project/member-select.tsx b/web/core/components/project/member-select.tsx index 15aaee22443..8a61883e237 100644 --- a/web/core/components/project/member-select.tsx +++ b/web/core/components/project/member-select.tsx @@ -4,8 +4,8 @@ import React from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Ban } from "lucide-react"; +import { EUserProjectRoles } from "@plane/types"; // plane ui -import { EUserProjectRoles } from "@plane/constants"; import { Avatar, CustomSearchSelect } from "@plane/ui"; // helpers import { getFileURL } from "@plane/utils"; diff --git a/web/core/components/project/settings/member-columns.tsx b/web/core/components/project/settings/member-columns.tsx index 393a4012a60..ee0f7c61f79 100644 --- a/web/core/components/project/settings/member-columns.tsx +++ b/web/core/components/project/settings/member-columns.tsx @@ -4,8 +4,8 @@ import { Controller, useForm } from "react-hook-form"; import { CircleMinus } from "lucide-react"; import { Disclosure } from "@headlessui/react"; // plane imports -import { ROLE, EUserPermissions, EUserProjectRoles } from "@plane/constants"; -import { IUser, IWorkspaceMember, TProjectMembership } from "@plane/types"; +import { ROLE, EUserPermissions } from "@plane/constants"; +import { EUserProjectRoles, IUser, IWorkspaceMember, TProjectMembership } from "@plane/types"; import { CustomMenu, CustomSelect, TOAST_TYPE, setToast } from "@plane/ui"; import { getFileURL } from "@plane/utils"; // hooks diff --git a/web/core/components/settings/sidebar/nav-item.tsx b/web/core/components/settings/sidebar/nav-item.tsx index 53ebcc97a5f..6dcc36fa3af 100644 --- a/web/core/components/settings/sidebar/nav-item.tsx +++ b/web/core/components/settings/sidebar/nav-item.tsx @@ -4,8 +4,8 @@ import Link from "next/link"; import { useParams } from "next/navigation"; import { Disclosure } from "@headlessui/react"; // plane imports -import { EUserWorkspaceRoles } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { EUserWorkspaceRoles } from "@plane/types"; import { cn } from "@plane/utils"; // hooks import { useUserSettings } from "@/hooks/store"; diff --git a/web/core/components/stickies/layout/stickies-list.tsx b/web/core/components/stickies/layout/stickies-list.tsx index 47e6e669805..f0cfb865add 100644 --- a/web/core/components/stickies/layout/stickies-list.tsx +++ b/web/core/components/stickies/layout/stickies-list.tsx @@ -9,8 +9,9 @@ import { usePathname } from "next/navigation"; import Masonry from "react-masonry-component"; import { Plus } from "lucide-react"; // plane imports -import { EUserPermissionsLevel, EUserWorkspaceRoles } from "@plane/constants"; +import { EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { EUserWorkspaceRoles } from "@plane/types"; // components import { DetailedEmptyState, SimpleEmptyState } from "@/components/empty-state"; import { StickiesEmptyState } from "@/components/home/widgets/empty-states/stickies"; diff --git a/web/core/components/views/applied-filters/access.tsx b/web/core/components/views/applied-filters/access.tsx index ce46a800ab6..d328f61e1b1 100644 --- a/web/core/components/views/applied-filters/access.tsx +++ b/web/core/components/views/applied-filters/access.tsx @@ -2,9 +2,9 @@ import { observer } from "mobx-react"; // icons import { X } from "lucide-react"; // constants -import { EViewAccess } from "@plane/constants"; // helpers import { useTranslation } from "@plane/i18n"; +import { EViewAccess } from "@plane/types"; import { VIEW_ACCESS_SPECIFIERS } from "@/helpers/views.helper"; type Props = { diff --git a/web/core/components/views/applied-filters/root.tsx b/web/core/components/views/applied-filters/root.tsx index bb654338e65..18e7c04fd22 100644 --- a/web/core/components/views/applied-filters/root.tsx +++ b/web/core/components/views/applied-filters/root.tsx @@ -1,7 +1,6 @@ import { X } from "lucide-react"; -import { EViewAccess } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { TViewFilterProps } from "@plane/types"; +import { EViewAccess, TViewFilterProps } from "@plane/types"; // components import { Tag } from "@plane/ui"; import { replaceUnderscoreIfSnakeCase } from "@plane/utils"; diff --git a/web/core/components/views/filters/filter-selection.tsx b/web/core/components/views/filters/filter-selection.tsx index d2a32fb79de..9dd7d0a4dc8 100644 --- a/web/core/components/views/filters/filter-selection.tsx +++ b/web/core/components/views/filters/filter-selection.tsx @@ -1,8 +1,7 @@ import { useState } from "react"; import { observer } from "mobx-react"; import { Search, X } from "lucide-react"; -import { EViewAccess } from "@plane/constants"; -import { TViewFilterProps, TViewFilters } from "@plane/types"; +import { EViewAccess, TViewFilterProps, TViewFilters } from "@plane/types"; // components import { FilterCreatedBy, FilterCreatedDate } from "@/components/common/filters"; import { FilterOption } from "@/components/issues"; diff --git a/web/core/components/views/form.tsx b/web/core/components/views/form.tsx index 2b5e6ab9f5c..a540101137c 100644 --- a/web/core/components/views/form.tsx +++ b/web/core/components/views/form.tsx @@ -5,14 +5,25 @@ import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; import { Layers } from "lucide-react"; // plane constants -import { EIssueLayoutTypes, ETabIndices, EViewAccess, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; +import { EIssueLayoutTypes, ETabIndices, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; // i18n import { useTranslation } from "@plane/i18n"; // types -import { IProjectView, IIssueFilterOptions, IIssueDisplayProperties, IIssueDisplayFilterOptions } from "@plane/types"; +import { + EViewAccess, + IIssueDisplayFilterOptions, + IIssueDisplayProperties, + IIssueFilterOptions, + IProjectView, +} from "@plane/types"; // ui import { Button, EmojiIconPicker, EmojiIconPickerTypes, Input, TextArea } from "@plane/ui"; -import { convertHexEmojiToDecimal, getComputedDisplayFilters, getComputedDisplayProperties, getTabIndex } from "@plane/utils"; +import { + convertHexEmojiToDecimal, + getComputedDisplayFilters, + getComputedDisplayProperties, + getTabIndex, +} from "@plane/utils"; // components import { Logo } from "@/components/common"; import { AppliedFiltersList, DisplayFiltersSelection, FilterSelection, FiltersDropdown } from "@/components/issues"; diff --git a/web/core/components/views/view-list-item-action.tsx b/web/core/components/views/view-list-item-action.tsx index 1dbed08ac27..8a0ec89c378 100644 --- a/web/core/components/views/view-list-item-action.tsx +++ b/web/core/components/views/view-list-item-action.tsx @@ -3,9 +3,9 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Earth, Lock } from "lucide-react"; // types -import { EViewAccess, EUserPermissions, EUserPermissionsLevel, IS_FAVORITE_MENU_OPEN } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel, IS_FAVORITE_MENU_OPEN } from "@plane/constants"; import { useLocalStorage } from "@plane/hooks"; -import { IProjectView } from "@plane/types"; +import { EViewAccess, IProjectView } from "@plane/types"; // ui import { Tooltip, FavoriteStar } from "@plane/ui"; import { calculateTotalFilters, getPublishViewLink } from "@plane/utils"; diff --git a/web/core/components/views/views-list.tsx b/web/core/components/views/views-list.tsx index 29a0c4cb08f..6fa5e4b0585 100644 --- a/web/core/components/views/views-list.tsx +++ b/web/core/components/views/views-list.tsx @@ -1,8 +1,9 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { EUserPermissionsLevel, EUserProjectRoles } from "@plane/constants"; +import { EUserPermissionsLevel } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { EUserProjectRoles } from "@plane/types"; // components import { ListLayout } from "@/components/core/list"; import { ComicBoxButton, DetailedEmptyState, SimpleEmptyState } from "@/components/empty-state"; diff --git a/web/core/components/workspace/billing/comparison/feature-detail.tsx b/web/core/components/workspace/billing/comparison/feature-detail.tsx index 90b3d709e67..a54b6b03a70 100644 --- a/web/core/components/workspace/billing/comparison/feature-detail.tsx +++ b/web/core/components/workspace/billing/comparison/feature-detail.tsx @@ -1,7 +1,7 @@ import { FC } from "react"; import { CheckCircle2, Minus, MinusCircle } from "lucide-react"; +import { EProductSubscriptionEnum } from "@plane/types"; // plane imports -import { EProductSubscriptionEnum } from "@plane/constants"; import { cn } from "@plane/utils"; // constants import { getSubscriptionTextColor } from "@/components/workspace/billing/subscription"; diff --git a/web/core/components/workspace/billing/subscription.ts b/web/core/components/workspace/billing/subscription.ts index e895d7c9834..1853762a9de 100644 --- a/web/core/components/workspace/billing/subscription.ts +++ b/web/core/components/workspace/billing/subscription.ts @@ -1,5 +1,5 @@ // plane imports -import { EProductSubscriptionEnum } from "@plane/constants"; +import { EProductSubscriptionEnum } from "@plane/types"; import { cn } from "@plane/utils"; // --------------- NOTE ---------------- diff --git a/web/core/components/workspace/sidebar/project-navigation.tsx b/web/core/components/workspace/sidebar/project-navigation.tsx index f4add66e683..a6176bed834 100644 --- a/web/core/components/workspace/sidebar/project-navigation.tsx +++ b/web/core/components/workspace/sidebar/project-navigation.tsx @@ -5,8 +5,9 @@ import { observer } from "mobx-react"; import Link from "next/link"; import { useParams, usePathname } from "next/navigation"; import { FileText, Layers } from "lucide-react"; -import { EUserPermissionsLevel, EUserPermissions, EUserProjectRoles } from "@plane/constants"; +import { EUserPermissionsLevel, EUserPermissions } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { EUserProjectRoles } from "@plane/types"; // plane ui import { Tooltip, DiceIcon, ContrastIcon, LayersIcon, Intake } from "@plane/ui"; // components diff --git a/web/core/components/workspace/sidebar/user-menu-item.tsx b/web/core/components/workspace/sidebar/user-menu-item.tsx index 3f89dd6875b..4d9208685a7 100644 --- a/web/core/components/workspace/sidebar/user-menu-item.tsx +++ b/web/core/components/workspace/sidebar/user-menu-item.tsx @@ -3,9 +3,10 @@ import { observer } from "mobx-react"; import Link from "next/link"; import { useParams, usePathname } from "next/navigation"; // plane imports -import { EUserPermissionsLevel, EUserWorkspaceRoles, SIDEBAR_TRACKER_EVENTS } from "@plane/constants"; +import { EUserPermissionsLevel, SIDEBAR_TRACKER_EVENTS } from "@plane/constants"; import { usePlatformOS } from "@plane/hooks"; import { useTranslation } from "@plane/i18n"; +import { EUserWorkspaceRoles } from "@plane/types"; import { Tooltip } from "@plane/ui"; // components import { SidebarNavItem } from "@/components/sidebar"; diff --git a/web/core/components/workspace/sidebar/user-menu.tsx b/web/core/components/workspace/sidebar/user-menu.tsx index 5e3ee4b0a5d..762d55a3afe 100644 --- a/web/core/components/workspace/sidebar/user-menu.tsx +++ b/web/core/components/workspace/sidebar/user-menu.tsx @@ -4,8 +4,8 @@ import React from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Home, Inbox, PenSquare } from "lucide-react"; +import { EUserWorkspaceRoles } from "@plane/types"; // plane imports -import { EUserWorkspaceRoles } from "@plane/constants"; import { UserActivityIcon } from "@plane/ui"; // components import { cn } from "@plane/utils"; diff --git a/web/core/components/workspace/sidebar/workspace-menu-header.tsx b/web/core/components/workspace/sidebar/workspace-menu-header.tsx index 3367a2b347c..26e0951c909 100644 --- a/web/core/components/workspace/sidebar/workspace-menu-header.tsx +++ b/web/core/components/workspace/sidebar/workspace-menu-header.tsx @@ -5,9 +5,10 @@ import { useParams } from "next/navigation"; import { MoreHorizontal, ArchiveIcon, ChevronRight, Settings } from "lucide-react"; import { Disclosure } from "@headlessui/react"; // plane imports -import { EUserWorkspaceRoles, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissionsLevel } from "@plane/constants"; import { useOutsideClickDetector } from "@plane/hooks"; import { useTranslation } from "@plane/i18n"; +import { EUserWorkspaceRoles } from "@plane/types"; import { CustomMenu } from "@plane/ui"; import { cn } from "@plane/utils"; // store hooks diff --git a/web/core/components/workspace/sidebar/workspace-menu-item.tsx b/web/core/components/workspace/sidebar/workspace-menu-item.tsx index 6b06390e462..002f065da5f 100644 --- a/web/core/components/workspace/sidebar/workspace-menu-item.tsx +++ b/web/core/components/workspace/sidebar/workspace-menu-item.tsx @@ -3,9 +3,10 @@ import { observer } from "mobx-react"; import Link from "next/link"; import { useParams, usePathname } from "next/navigation"; // plane imports -import { EUserWorkspaceRoles, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissionsLevel } from "@plane/constants"; import { usePlatformOS } from "@plane/hooks"; import { useTranslation } from "@plane/i18n"; +import { EUserWorkspaceRoles } from "@plane/types"; import { Tooltip } from "@plane/ui"; import { cn } from "@plane/utils"; // components diff --git a/web/core/components/workspace/sidebar/workspace-menu.tsx b/web/core/components/workspace/sidebar/workspace-menu.tsx index 57582c6c83e..069b781def1 100644 --- a/web/core/components/workspace/sidebar/workspace-menu.tsx +++ b/web/core/components/workspace/sidebar/workspace-menu.tsx @@ -5,8 +5,8 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { BarChart2, Briefcase, Layers } from "lucide-react"; import { Disclosure, Transition } from "@headlessui/react"; +import { EUserWorkspaceRoles } from "@plane/types"; // ui -import { EUserWorkspaceRoles } from "@plane/constants"; import { ContrastIcon } from "@plane/ui"; // components import { cn } from "@plane/utils"; diff --git a/web/core/components/workspace/views/form.tsx b/web/core/components/workspace/views/form.tsx index 6761822165c..8bebf6adc49 100644 --- a/web/core/components/workspace/views/form.tsx +++ b/web/core/components/workspace/views/form.tsx @@ -4,11 +4,17 @@ import { useEffect } from "react"; import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; // constant -import { EIssueLayoutTypes, ISSUE_DISPLAY_FILTERS_BY_PAGE, EViewAccess } from "@plane/constants"; +import { EIssueLayoutTypes, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; // i18n import { useTranslation } from "@plane/i18n"; // types -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, IWorkspaceView } from "@plane/types"; +import { + EViewAccess, + IIssueDisplayFilterOptions, + IIssueDisplayProperties, + IIssueFilterOptions, + IWorkspaceView, +} from "@plane/types"; // ui import { Button, Input, TextArea } from "@plane/ui"; // components diff --git a/web/core/constants/calendar.ts b/web/core/constants/calendar.ts index 79db73ef7f1..9adcd420468 100644 --- a/web/core/constants/calendar.ts +++ b/web/core/constants/calendar.ts @@ -1,5 +1,4 @@ -import { EStartOfTheWeek } from "@plane/constants"; -import { TCalendarLayouts } from "@plane/types"; +import { EStartOfTheWeek, TCalendarLayouts } from "@plane/types"; export const MONTHS_LIST: { [monthNumber: number]: { diff --git a/web/core/constants/plans.tsx b/web/core/constants/plans.tsx index 9afc9701829..3946f1c2645 100644 --- a/web/core/constants/plans.tsx +++ b/web/core/constants/plans.tsx @@ -1,6 +1,6 @@ import { Mail, MessageCircle } from "lucide-react"; +import { EProductSubscriptionEnum } from "@plane/types"; // plane imports -import { EProductSubscriptionEnum } from "@plane/constants"; import { DiscordIcon } from "@plane/ui"; import { cn } from "@plane/utils"; diff --git a/web/core/hooks/store/use-issue-detail.ts b/web/core/hooks/store/use-issue-detail.ts index dd96ddf0568..8aabdb92a15 100644 --- a/web/core/hooks/store/use-issue-detail.ts +++ b/web/core/hooks/store/use-issue-detail.ts @@ -1,6 +1,5 @@ import { useContext } from "react"; -import { EIssueServiceType } from "@plane/constants"; -import { TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssueServiceType } from "@plane/types"; // mobx store import { StoreContext } from "@/lib/store-context"; // types diff --git a/web/core/hooks/store/use-issues.ts b/web/core/hooks/store/use-issues.ts index bdb442c5f3b..4ea9e54bf35 100644 --- a/web/core/hooks/store/use-issues.ts +++ b/web/core/hooks/store/use-issues.ts @@ -1,8 +1,6 @@ import { useContext } from "react"; import merge from "lodash/merge"; -import { EIssuesStoreType } from "@plane/constants"; -import { TIssueMap } from "@plane/types"; -// mobx store +import { EIssuesStoreType, TIssueMap } from "@plane/types"; import { StoreContext } from "@/lib/store-context"; // plane web types import { IProjectEpics, IProjectEpicsFilter } from "@/plane-web/store/issue/epic"; diff --git a/web/core/hooks/use-group-dragndrop.ts b/web/core/hooks/use-group-dragndrop.ts index c98520c8694..e52d6ea9e83 100644 --- a/web/core/hooks/use-group-dragndrop.ts +++ b/web/core/hooks/use-group-dragndrop.ts @@ -1,8 +1,7 @@ "use client"; import { useParams } from "next/navigation"; -import { EIssuesStoreType } from "@plane/constants"; -import { TIssue, TIssueGroupByOptions, TIssueOrderByOptions } from "@plane/types"; +import { EIssuesStoreType, TIssue, TIssueGroupByOptions, TIssueOrderByOptions } from "@plane/types"; import { TOAST_TYPE, setToast } from "@plane/ui"; import { GroupDropLocation, handleGroupDragDrop } from "@/components/issues/issue-layouts/utils"; import { ISSUE_FILTER_DEFAULT_DATA } from "@/store/issue/helpers/base-issues.store"; diff --git a/web/core/hooks/use-issue-layout-store.ts b/web/core/hooks/use-issue-layout-store.ts index 2f443d129dd..df419cec9d0 100644 --- a/web/core/hooks/use-issue-layout-store.ts +++ b/web/core/hooks/use-issue-layout-store.ts @@ -1,6 +1,6 @@ import { createContext, useContext } from "react"; import { useParams } from "next/navigation"; -import { EIssuesStoreType } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; import { useIssues } from "./store"; export const IssuesStoreContext = createContext(undefined); diff --git a/web/core/hooks/use-issue-peek-overview-redirection.tsx b/web/core/hooks/use-issue-peek-overview-redirection.tsx index 9b980fe329e..68d7e233269 100644 --- a/web/core/hooks/use-issue-peek-overview-redirection.tsx +++ b/web/core/hooks/use-issue-peek-overview-redirection.tsx @@ -1,8 +1,6 @@ import { useRouter } from "next/navigation"; -// constants -import { EIssueServiceType } from "@plane/constants"; // types -import { TIssue } from "@plane/types"; +import { EIssueServiceType, TIssue } from "@plane/types"; // helpers import { generateWorkItemLink } from "@plane/utils"; // hooks diff --git a/web/core/hooks/use-issues-actions.tsx b/web/core/hooks/use-issues-actions.tsx index 660627d0045..848accc34c5 100644 --- a/web/core/hooks/use-issues-actions.tsx +++ b/web/core/hooks/use-issues-actions.tsx @@ -1,8 +1,9 @@ import { useCallback, useMemo } from "react"; // types import { useParams } from "next/navigation"; -import { EIssueFilterType, EIssuesStoreType, EDraftIssuePaginationType } from "@plane/constants"; +import { EIssueFilterType, EDraftIssuePaginationType } from "@plane/constants"; import { + EIssuesStoreType, IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, diff --git a/web/core/services/inbox/inbox-issue.service.ts b/web/core/services/inbox/inbox-issue.service.ts index bccb6b22424..2214012d989 100644 --- a/web/core/services/inbox/inbox-issue.service.ts +++ b/web/core/services/inbox/inbox-issue.service.ts @@ -1,6 +1,6 @@ // plane imports -import { EInboxIssueSource, TInboxIssue, API_BASE_URL } from "@plane/constants"; -import type { TIssue, TInboxIssueWithPagination } from "@plane/types"; +import { API_BASE_URL } from "@plane/constants"; +import { EInboxIssueSource, TInboxIssue, TIssue, TInboxIssueWithPagination } from "@plane/types"; // helpers // services import { APIService } from "@/services/api.service"; diff --git a/web/core/services/issue/issue.service.ts b/web/core/services/issue/issue.service.ts index 88df42b893f..784a8bdb8e9 100644 --- a/web/core/services/issue/issue.service.ts +++ b/web/core/services/issue/issue.service.ts @@ -1,6 +1,7 @@ // types -import { EIssueServiceType, API_BASE_URL } from "@plane/constants"; +import { API_BASE_URL } from "@plane/constants"; import { + EIssueServiceType, TIssueParams, type IIssueDisplayProperties, type TBulkOperationsPayload, diff --git a/web/core/services/issue/issue_activity.service.ts b/web/core/services/issue/issue_activity.service.ts index 4eb5e90b0f4..0294c159ce1 100644 --- a/web/core/services/issue/issue_activity.service.ts +++ b/web/core/services/issue/issue_activity.service.ts @@ -1,5 +1,5 @@ -import { EIssueServiceType, API_BASE_URL } from "@plane/constants"; -import { TIssueActivity, TIssueServiceType } from "@plane/types"; +import { API_BASE_URL } from "@plane/constants"; +import { EIssueServiceType, TIssueActivity, TIssueServiceType } from "@plane/types"; import { APIService } from "@/services/api.service"; // types // helper diff --git a/web/core/services/issue/issue_archive.service.ts b/web/core/services/issue/issue_archive.service.ts index ae4eefd6300..dd3764d596d 100644 --- a/web/core/services/issue/issue_archive.service.ts +++ b/web/core/services/issue/issue_archive.service.ts @@ -1,5 +1,5 @@ -import { EIssueServiceType, API_BASE_URL } from "@plane/constants"; -import { TIssue, TIssueServiceType } from "@plane/types"; +import { API_BASE_URL } from "@plane/constants"; +import { EIssueServiceType, TIssue, TIssueServiceType } from "@plane/types"; import { APIService } from "@/services/api.service"; // types // constants diff --git a/web/core/services/issue/issue_attachment.service.ts b/web/core/services/issue/issue_attachment.service.ts index 46ef780c21b..740843791e1 100644 --- a/web/core/services/issue/issue_attachment.service.ts +++ b/web/core/services/issue/issue_attachment.service.ts @@ -1,7 +1,7 @@ import { AxiosRequestConfig } from "axios"; -import { EIssueServiceType, API_BASE_URL } from "@plane/constants"; +import { API_BASE_URL } from "@plane/constants"; // plane types -import { TIssueAttachment, TIssueAttachmentUploadResponse, TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssueAttachment, TIssueAttachmentUploadResponse, TIssueServiceType } from "@plane/types"; // helpers import { generateFileUploadPayload, getFileMetaDataForUpload } from "@plane/utils"; // services diff --git a/web/core/services/issue/issue_comment.service.ts b/web/core/services/issue/issue_comment.service.ts index dc559c69a30..f973f017f25 100644 --- a/web/core/services/issue/issue_comment.service.ts +++ b/web/core/services/issue/issue_comment.service.ts @@ -1,8 +1,6 @@ // plane types -import { EIssueServiceType, API_BASE_URL } from "@plane/constants"; -import { TFileSignedURLResponse, TIssueComment, TIssueServiceType } from "@plane/types"; -// helpers -import { generateFileUploadPayload, getFileMetaDataForUpload } from "@plane/utils"; +import { API_BASE_URL } from "@plane/constants"; +import { EIssueServiceType, TIssueComment, TIssueServiceType } from "@plane/types"; // services import { APIService } from "@/services/api.service"; import { FileUploadService } from "@/services/file-upload.service"; diff --git a/web/core/services/issue/issue_reaction.service.ts b/web/core/services/issue/issue_reaction.service.ts index 2cd6e9f7f2a..67112dfb3db 100644 --- a/web/core/services/issue/issue_reaction.service.ts +++ b/web/core/services/issue/issue_reaction.service.ts @@ -1,5 +1,10 @@ -import { EIssueServiceType, API_BASE_URL } from "@plane/constants"; -import { type TIssueCommentReaction, type TIssueReaction, type TIssueServiceType } from "@plane/types"; +import { API_BASE_URL } from "@plane/constants"; +import { + EIssueServiceType, + type TIssueCommentReaction, + type TIssueReaction, + type TIssueServiceType, +} from "@plane/types"; // services import { APIService } from "@/services/api.service"; // types diff --git a/web/core/services/issue/work_item_version.service.ts b/web/core/services/issue/work_item_version.service.ts index 84a03412460..3e593a4126a 100644 --- a/web/core/services/issue/work_item_version.service.ts +++ b/web/core/services/issue/work_item_version.service.ts @@ -1,6 +1,7 @@ // plane imports -import { EIssueServiceType, API_BASE_URL } from "@plane/constants"; +import { API_BASE_URL } from "@plane/constants"; import { + EIssueServiceType, type TDescriptionVersionsListResponse, type TDescriptionVersionDetails, type TIssueServiceType, diff --git a/web/core/store/analytics.store.ts b/web/core/store/analytics.store.ts index a78c4971089..828a131b17c 100644 --- a/web/core/store/analytics.store.ts +++ b/web/core/store/analytics.store.ts @@ -1,7 +1,6 @@ import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import { ANALYTICS_DURATION_FILTER_OPTIONS, EIssuesStoreType } from "@plane/constants"; +import { ANALYTICS_DURATION_FILTER_OPTIONS } from "@plane/constants"; import { TAnalyticsTabsBase } from "@plane/types"; -import { CoreRootStore } from "./root.store"; type DurationType = (typeof ANALYTICS_DURATION_FILTER_OPTIONS)[number]["value"]; diff --git a/web/core/store/base-command-palette.store.ts b/web/core/store/base-command-palette.store.ts index 9c7273a5f91..f9e309814a7 100644 --- a/web/core/store/base-command-palette.store.ts +++ b/web/core/store/base-command-palette.store.ts @@ -1,12 +1,12 @@ import { observable, action, makeObservable } from "mobx"; import { computedFn } from "mobx-utils"; import { - EIssuesStoreType, TCreateModalStoreTypes, DEFAULT_CREATE_PAGE_MODAL_DATA, EPageAccess, TCreatePageModal, } from "@plane/constants"; +import { EIssuesStoreType } from "@plane/types"; export interface ModalData { store: EIssuesStoreType; diff --git a/web/core/store/global-view.store.ts b/web/core/store/global-view.store.ts index c9840b4c8f0..76fad297177 100644 --- a/web/core/store/global-view.store.ts +++ b/web/core/store/global-view.store.ts @@ -4,8 +4,8 @@ import isEqual from "lodash/isEqual"; import set from "lodash/set"; import { observable, action, makeObservable, runInAction, computed } from "mobx"; import { computedFn } from "mobx-utils"; -import { EIssueFilterType, EViewAccess } from "@plane/constants"; -import { IIssueFilterOptions, IWorkspaceView } from "@plane/types"; +import { EIssueFilterType } from "@plane/constants"; +import { EViewAccess, IIssueFilterOptions, IWorkspaceView } from "@plane/types"; // constants // services import { WorkspaceService } from "@/plane-web/services"; @@ -172,7 +172,7 @@ export class GlobalViewStore implements IGlobalViewStore { // applying the filters in the global view if (!isEqual(currentViewData?.filters || {}, currentView?.filters || {})) { - if (isEmpty(currentView?.filters)) { + if (!currentView?.filters || isEmpty(currentView?.filters)) { const currentGlobalViewFilters: IIssueFilterOptions = this.rootStore.issue.workspaceIssuesFilter.filters[ viewId ].filters as IIssueFilterOptions; diff --git a/web/core/store/inbox/inbox-issue.store.ts b/web/core/store/inbox/inbox-issue.store.ts index 40421c30c47..e352452239f 100644 --- a/web/core/store/inbox/inbox-issue.store.ts +++ b/web/core/store/inbox/inbox-issue.store.ts @@ -1,8 +1,14 @@ import clone from "lodash/clone"; import set from "lodash/set"; import { makeObservable, observable, runInAction, action } from "mobx"; -import { TInboxIssue, TInboxIssueStatus, EInboxIssueSource, EInboxIssueStatus } from "@plane/constants"; -import { TIssue, TInboxDuplicateIssueDetails } from "@plane/types"; +import { + TInboxIssue, + TInboxIssueStatus, + EInboxIssueSource, + EInboxIssueStatus, + TIssue, + TInboxDuplicateIssueDetails, +} from "@plane/types"; // helpers // local db import { addIssueToPersistanceLayer } from "@/local-db/utils/utils"; diff --git a/web/core/store/inbox/project-inbox.store.ts b/web/core/store/inbox/project-inbox.store.ts index 33e974e4e1f..0235445f90d 100644 --- a/web/core/store/inbox/project-inbox.store.ts +++ b/web/core/store/inbox/project-inbox.store.ts @@ -4,15 +4,19 @@ import omit from "lodash/omit"; import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; -import { TInboxIssue, TInboxIssueCurrentTab, EInboxIssueCurrentTab, EInboxIssueStatus, EPastDurationFilters } from "@plane/constants"; +import { EPastDurationFilters } from "@plane/constants"; // types import { + EInboxIssueCurrentTab, + EInboxIssueStatus, + TInboxIssue, + TInboxIssueCurrentTab, TInboxIssueFilter, TInboxIssueSorting, TInboxIssuePaginationInfo, TInboxIssueSortingOrderByQueryParam, } from "@plane/types"; -import { getCustomDates} from "@plane/utils"; +import { getCustomDates } from "@plane/utils"; // helpers // services import { InboxIssueService } from "@/services/inbox"; diff --git a/web/core/store/issue/archived/filter.store.ts b/web/core/store/issue/archived/filter.store.ts index 3c171add164..f48b8b3a113 100644 --- a/web/core/store/issue/archived/filter.store.ts +++ b/web/core/store/issue/archived/filter.store.ts @@ -5,8 +5,9 @@ import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class import { computedFn } from "mobx-utils"; -import { EIssuesStoreType, EIssueFilterType } from "@plane/constants"; +import { EIssueFilterType } from "@plane/constants"; import { + EIssuesStoreType, IIssueFilterOptions, IIssueDisplayFilterOptions, IIssueDisplayProperties, diff --git a/web/core/store/issue/cycle/filter.store.ts b/web/core/store/issue/cycle/filter.store.ts index c335c5a53f9..239ca2ece03 100644 --- a/web/core/store/issue/cycle/filter.store.ts +++ b/web/core/store/issue/cycle/filter.store.ts @@ -3,8 +3,9 @@ import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class import { computedFn } from "mobx-utils"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; +import { EIssueFilterType } from "@plane/constants"; import { + EIssuesStoreType, IIssueFilterOptions, IIssueDisplayFilterOptions, IIssueDisplayProperties, diff --git a/web/core/store/issue/draft/filter.store.ts b/web/core/store/issue/draft/filter.store.ts index 45e0855c8b3..bfde23bc05e 100644 --- a/web/core/store/issue/draft/filter.store.ts +++ b/web/core/store/issue/draft/filter.store.ts @@ -5,8 +5,9 @@ import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class import { computedFn } from "mobx-utils"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; +import { EIssueFilterType } from "@plane/constants"; import { + EIssuesStoreType, IIssueFilterOptions, IIssueDisplayFilterOptions, IIssueDisplayProperties, diff --git a/web/core/store/issue/helpers/base-issues.store.ts b/web/core/store/issue/helpers/base-issues.store.ts index 7c84d848b92..ef6323af29f 100644 --- a/web/core/store/issue/helpers/base-issues.store.ts +++ b/web/core/store/issue/helpers/base-issues.store.ts @@ -13,9 +13,10 @@ import update from "lodash/update"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; // plane constants -import { EIssueLayoutTypes, ALL_ISSUES, EIssueServiceType, ISSUE_PRIORITIES } from "@plane/constants"; +import { EIssueLayoutTypes, ALL_ISSUES, ISSUE_PRIORITIES } from "@plane/constants"; // types import { + EIssueServiceType, TIssue, TIssueGroupByOptions, TIssueOrderByOptions, diff --git a/web/core/store/issue/helpers/issue-filter-helper.store.ts b/web/core/store/issue/helpers/issue-filter-helper.store.ts index 6284cfe10c3..e597725d0c3 100644 --- a/web/core/store/issue/helpers/issue-filter-helper.store.ts +++ b/web/core/store/issue/helpers/issue-filter-helper.store.ts @@ -4,11 +4,11 @@ import { EIssueGroupByToServerOptions, EServerGroupByToFilterOptions, EIssueLayoutTypes, - EIssuesStoreType, EIssueFilterType, ENABLE_ISSUE_DEPENDENCIES, } from "@plane/constants"; import { + EIssuesStoreType, IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, diff --git a/web/core/store/issue/issue-details/issue.store.ts b/web/core/store/issue/issue-details/issue.store.ts index 16fb7b858f4..21e879b307f 100644 --- a/web/core/store/issue/issue-details/issue.store.ts +++ b/web/core/store/issue/issue-details/issue.store.ts @@ -1,8 +1,7 @@ import { makeObservable, observable } from "mobx"; import { computedFn } from "mobx-utils"; -import { EIssueServiceType } from "@plane/constants"; // types -import { TIssue, TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, TIssue, TIssueServiceType } from "@plane/types"; // local import { persistence } from "@/local-db/storage.sqlite"; // services diff --git a/web/core/store/issue/issue-details/sub_issues.store.ts b/web/core/store/issue/issue-details/sub_issues.store.ts index a8be50f886e..2043db8b175 100644 --- a/web/core/store/issue/issue-details/sub_issues.store.ts +++ b/web/core/store/issue/issue-details/sub_issues.store.ts @@ -5,9 +5,9 @@ import uniq from "lodash/uniq"; import update from "lodash/update"; import { action, makeObservable, observable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; -import { EIssueServiceType } from "@plane/constants"; // types import { + EIssueServiceType, TIssue, TIssueSubIssues, TIssueSubIssuesStateDistributionMap, diff --git a/web/core/store/issue/issue-details/subscription.store.ts b/web/core/store/issue/issue-details/subscription.store.ts index da3b2e6bfaa..7c33eb72c3a 100644 --- a/web/core/store/issue/issue-details/subscription.store.ts +++ b/web/core/store/issue/issue-details/subscription.store.ts @@ -1,7 +1,7 @@ import set from "lodash/set"; import { action, makeObservable, observable, runInAction } from "mobx"; // services -import { EIssueServiceType } from "@plane/constants"; +import { EIssueServiceType } from "@plane/types"; import { IssueService } from "@/services/issue/issue.service"; // types import { IIssueDetail } from "./root.store"; diff --git a/web/core/store/issue/module/filter.store.ts b/web/core/store/issue/module/filter.store.ts index 8516af7f3dc..58e4f2a1ef0 100644 --- a/web/core/store/issue/module/filter.store.ts +++ b/web/core/store/issue/module/filter.store.ts @@ -3,8 +3,9 @@ import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class import { computedFn } from "mobx-utils"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; +import { EIssueFilterType } from "@plane/constants"; import { + EIssuesStoreType, IIssueFilterOptions, IIssueDisplayFilterOptions, IIssueDisplayProperties, diff --git a/web/core/store/issue/profile/filter.store.ts b/web/core/store/issue/profile/filter.store.ts index 4938c9c695b..65b6ec7a6d2 100644 --- a/web/core/store/issue/profile/filter.store.ts +++ b/web/core/store/issue/profile/filter.store.ts @@ -3,8 +3,9 @@ import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class import { computedFn } from "mobx-utils"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; +import { EIssueFilterType } from "@plane/constants"; import { + EIssuesStoreType, IIssueFilterOptions, IIssueDisplayFilterOptions, IIssueDisplayProperties, diff --git a/web/core/store/issue/project-views/filter.store.ts b/web/core/store/issue/project-views/filter.store.ts index a8ccbfa3e00..63b45c793a0 100644 --- a/web/core/store/issue/project-views/filter.store.ts +++ b/web/core/store/issue/project-views/filter.store.ts @@ -3,8 +3,9 @@ import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class import { computedFn } from "mobx-utils"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; +import { EIssueFilterType } from "@plane/constants"; import { + EIssuesStoreType, IIssueFilterOptions, IIssueDisplayFilterOptions, IIssueDisplayProperties, diff --git a/web/core/store/issue/project/filter.store.ts b/web/core/store/issue/project/filter.store.ts index 31dd56612f3..eeaea46770b 100644 --- a/web/core/store/issue/project/filter.store.ts +++ b/web/core/store/issue/project/filter.store.ts @@ -3,8 +3,9 @@ import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class import { computedFn } from "mobx-utils"; -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; +import { EIssueFilterType } from "@plane/constants"; import { + EIssuesStoreType, IIssueFilterOptions, IIssueDisplayFilterOptions, IIssueDisplayProperties, diff --git a/web/core/store/issue/root.store.ts b/web/core/store/issue/root.store.ts index 33710fae15f..112f3b41f5b 100644 --- a/web/core/store/issue/root.store.ts +++ b/web/core/store/issue/root.store.ts @@ -1,8 +1,7 @@ import isEmpty from "lodash/isEmpty"; import { autorun, makeObservable, observable } from "mobx"; // types -import { EIssueServiceType } from "@plane/constants"; -import { ICycle, IIssueLabel, IModule, IProject, IState, IUserLite, TIssueServiceType } from "@plane/types"; +import { EIssueServiceType, ICycle, IIssueLabel, IModule, IProject, IState, IUserLite, TIssueServiceType } from "@plane/types"; // plane web store import { IProjectEpics, IProjectEpicsFilter, ProjectEpics, ProjectEpicsFilter } from "@/plane-web/store/issue/epic"; import { IIssueDetail, IssueDetail } from "@/plane-web/store/issue/issue-details/root.store"; diff --git a/web/core/store/issue/workspace-draft/filter.store.ts b/web/core/store/issue/workspace-draft/filter.store.ts index 05e5ea51171..922931291fe 100644 --- a/web/core/store/issue/workspace-draft/filter.store.ts +++ b/web/core/store/issue/workspace-draft/filter.store.ts @@ -4,8 +4,9 @@ import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class import { computedFn } from "mobx-utils"; -import { EIssuesStoreType, EIssueFilterType } from "@plane/constants"; +import { EIssueFilterType } from "@plane/constants"; import { + EIssuesStoreType, IIssueFilterOptions, IIssueDisplayFilterOptions, IIssueDisplayProperties, diff --git a/web/core/store/issue/workspace/filter.store.ts b/web/core/store/issue/workspace/filter.store.ts index 71ce319d315..c19c29ecc89 100644 --- a/web/core/store/issue/workspace/filter.store.ts +++ b/web/core/store/issue/workspace/filter.store.ts @@ -5,9 +5,10 @@ import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; // plane constants import { computedFn } from "mobx-utils"; -import { EIssueLayoutTypes, EIssueFilterType, EIssuesStoreType } from "@plane/constants"; +import { EIssueLayoutTypes, EIssueFilterType } from "@plane/constants"; // base class import { + EIssuesStoreType, IIssueFilterOptions, IIssueDisplayFilterOptions, IIssueDisplayProperties, diff --git a/web/core/store/member/base-project-member.store.ts b/web/core/store/member/base-project-member.store.ts index ceba44c9e5f..d197851b7a1 100644 --- a/web/core/store/member/base-project-member.store.ts +++ b/web/core/store/member/base-project-member.store.ts @@ -6,8 +6,8 @@ import update from "lodash/update"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; // plane imports -import { EUserPermissions, EUserProjectRoles } from "@plane/constants"; -import { IProjectBulkAddFormData, TProjectMembership, IUserLite } from "@plane/types"; +import { EUserPermissions } from "@plane/constants"; +import { EUserProjectRoles, IProjectBulkAddFormData, IUserLite, TProjectMembership } from "@plane/types"; // plane web imports import { RootStore } from "@/plane-web/store/root.store"; // services diff --git a/web/core/store/pages/project-page.store.ts b/web/core/store/pages/project-page.store.ts index 4f519a583cc..02dfda5479a 100644 --- a/web/core/store/pages/project-page.store.ts +++ b/web/core/store/pages/project-page.store.ts @@ -3,8 +3,8 @@ import unset from "lodash/unset"; import { makeObservable, observable, runInAction, action, reaction, computed } from "mobx"; import { computedFn } from "mobx-utils"; // types -import { EUserPermissions, EUserProjectRoles } from "@plane/constants"; -import { TPage, TPageFilters, TPageNavigationTabs } from "@plane/types"; +import { EUserPermissions } from "@plane/constants"; +import { EUserProjectRoles, TPage, TPageFilters, TPageNavigationTabs } from "@plane/types"; // helpers import { filterPagesByPageType, getPageName, orderPages, shouldFilterPage } from "@plane/utils"; // plane web constants diff --git a/web/core/store/project-view.store.ts b/web/core/store/project-view.store.ts index 9e30308d7b8..4ed4b78cbc3 100644 --- a/web/core/store/project-view.store.ts +++ b/web/core/store/project-view.store.ts @@ -2,8 +2,7 @@ import { set } from "lodash"; import { observable, action, makeObservable, runInAction, computed } from "mobx"; import { computedFn } from "mobx-utils"; // types -import { EViewAccess } from "@plane/constants"; -import { IProjectView, TPublishViewDetails, TPublishViewSettings, TViewFilters } from "@plane/types"; +import { EViewAccess, IProjectView, TPublishViewDetails, TPublishViewSettings, TViewFilters } from "@plane/types"; // constants // helpers import { getValidatedViewFilters, getViewName, orderViews, shouldFilterView } from "@plane/utils"; diff --git a/web/core/store/user/base-permissions.store.ts b/web/core/store/user/base-permissions.store.ts index 4d54ce140e7..a224fbfff7a 100644 --- a/web/core/store/user/base-permissions.store.ts +++ b/web/core/store/user/base-permissions.store.ts @@ -4,15 +4,19 @@ import { action, makeObservable, observable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; // plane imports import { - EUserProjectRoles, - EUserWorkspaceRoles, EUserPermissions, EUserPermissionsLevel, TUserPermissions, TUserPermissionsLevel, WORKSPACE_SIDEBAR_DYNAMIC_NAVIGATION_ITEMS_LINKS, } from "@plane/constants"; -import { TProjectMembership, IUserProjectsRole, IWorkspaceMemberMe } from "@plane/types"; +import { + EUserProjectRoles, + EUserWorkspaceRoles, + IUserProjectsRole, + IWorkspaceMemberMe, + TProjectMembership, +} from "@plane/types"; // plane web imports import { WorkspaceService } from "@/plane-web/services/workspace.service"; import { RootStore } from "@/plane-web/store/root.store"; diff --git a/web/core/store/user/profile.store.ts b/web/core/store/user/profile.store.ts index d5e796be668..b478f100253 100644 --- a/web/core/store/user/profile.store.ts +++ b/web/core/store/user/profile.store.ts @@ -2,8 +2,7 @@ import cloneDeep from "lodash/cloneDeep"; import set from "lodash/set"; import { action, makeObservable, observable, runInAction } from "mobx"; // types -import { EStartOfTheWeek } from "@plane/constants"; -import { IUserTheme, TUserProfile } from "@plane/types"; +import { EStartOfTheWeek, IUserTheme, TUserProfile } from "@plane/types"; // services import { UserService } from "@/services/user.service"; // store diff --git a/web/helpers/views.helper.ts b/web/helpers/views.helper.ts index 8ce430aaf6b..ef79b2775fd 100644 --- a/web/helpers/views.helper.ts +++ b/web/helpers/views.helper.ts @@ -1,5 +1,6 @@ import { Globe2, Lock, LucideIcon } from "lucide-react"; -import { EViewAccess, VIEW_ACCESS_SPECIFIERS as VIEW_ACCESS_SPECIFIERS_CONSTANTS } from "@plane/constants"; +import { VIEW_ACCESS_SPECIFIERS as VIEW_ACCESS_SPECIFIERS_CONSTANTS } from "@plane/constants"; +import { EViewAccess } from "@plane/types"; const VIEW_ACCESS_ICONS = { [EViewAccess.PUBLIC]: Globe2, diff --git a/yarn.lock b/yarn.lock index e8fcdc11c2e..70ac5e62455 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,919 +3,210 @@ "@adobe/css-tools@^4.4.0": - version "4.4.1" - resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.1.tgz#2447a230bfe072c1659e6815129c03cf170710e3" - integrity sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ== + version "4.4.3" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.3.tgz#beebbefb0264fdeb32d3052acae0e0d94315a9a2" + integrity sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA== "@alloc/quick-lru@^5.2.0": version "5.2.0" - resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" + resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== "@ampproject/remapping@^2.2.0": version "2.3.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@asamuzakjp/css-color@^2.8.2": - version "2.8.3" - resolved "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.3.tgz#665f0f5e8edb95d8f543847529e30fe5cc437ef7" - integrity sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw== +"@asamuzakjp/css-color@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@asamuzakjp/css-color/-/css-color-3.2.0.tgz#cc42f5b85c593f79f1fa4f25d2b9b321e61d1794" + integrity sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw== dependencies: - "@csstools/css-calc" "^2.1.1" - "@csstools/css-color-parser" "^3.0.7" + "@csstools/css-calc" "^2.1.3" + "@csstools/css-color-parser" "^3.0.9" "@csstools/css-parser-algorithms" "^3.0.4" "@csstools/css-tokenizer" "^3.0.3" lru-cache "^10.4.3" "@atlaskit/pragmatic-drag-and-drop-auto-scroll@^1.3.0": version "1.4.0" - resolved "https://registry.npmjs.org/@atlaskit/pragmatic-drag-and-drop-auto-scroll/-/pragmatic-drag-and-drop-auto-scroll-1.4.0.tgz#99be18a428c93996b2cde3b97e88db85753aa5a5" + resolved "https://registry.yarnpkg.com/@atlaskit/pragmatic-drag-and-drop-auto-scroll/-/pragmatic-drag-and-drop-auto-scroll-1.4.0.tgz#99be18a428c93996b2cde3b97e88db85753aa5a5" integrity sha512-5GoikoTSW13UX76F9TDeWB8x3jbbGlp/Y+3aRkHe1MOBMkrWkwNpJ42MIVhhX/6NSeaZiPumP0KbGJVs2tOWSQ== dependencies: "@atlaskit/pragmatic-drag-and-drop" "^1.2.0" "@babel/runtime" "^7.0.0" "@atlaskit/pragmatic-drag-and-drop-hitbox@^1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@atlaskit/pragmatic-drag-and-drop-hitbox/-/pragmatic-drag-and-drop-hitbox-1.0.3.tgz#fcce42f5e2c5a26007f4422397acad29608d3784" - integrity sha512-/Sbu/HqN2VGLYBhnsG7SbRNg98XKkbF6L7XDdBi+izRybfaK1FeMfodPpm/xnBHPJzwYMdkE0qtLyv6afhgMUA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/@atlaskit/pragmatic-drag-and-drop-hitbox/-/pragmatic-drag-and-drop-hitbox-1.1.0.tgz#3a031ac295513a394eff116f9b75869e64d3e559" + integrity sha512-JWt6eVp6Br2FPHRM8s0dUIHQk/jFInGP1f3ti5CdtM1Ji5/pt8Akm44wDC063Gv2i5RGseixtbW0z/t6RYtbdg== dependencies: - "@atlaskit/pragmatic-drag-and-drop" "^1.1.0" + "@atlaskit/pragmatic-drag-and-drop" "^1.6.0" "@babel/runtime" "^7.0.0" -"@atlaskit/pragmatic-drag-and-drop@^1.1.0", "@atlaskit/pragmatic-drag-and-drop@^1.1.10", "@atlaskit/pragmatic-drag-and-drop@^1.1.3", "@atlaskit/pragmatic-drag-and-drop@^1.2.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@atlaskit/pragmatic-drag-and-drop/-/pragmatic-drag-and-drop-1.5.0.tgz#d49979bfac99030b43196d05223989eee0c0030c" - integrity sha512-VnHcgOBALm+mbL9CoJPI6wBNQeB0is+CkejdfAlaP8RfBoELe+0sQtE8j4Z4fPRqDzo11OEqUYKHkmx4Ttzozg== +"@atlaskit/pragmatic-drag-and-drop@^1.1.10", "@atlaskit/pragmatic-drag-and-drop@^1.1.3", "@atlaskit/pragmatic-drag-and-drop@^1.2.0", "@atlaskit/pragmatic-drag-and-drop@^1.6.0": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@atlaskit/pragmatic-drag-and-drop/-/pragmatic-drag-and-drop-1.7.4.tgz#d90f833c036e62119fb2acf7fd84c851b6af2a52" + integrity sha512-lZHnO9BJdHPKnwB0uvVUCyDnIhL+WAHzXQ2EXX0qacogOsnvIUiCgY0BLKhBqTCWln3/f/Ox5jU54MKO6ayh9A== dependencies: "@babel/runtime" "^7.0.0" bind-event-listener "^3.0.0" raf-schd "^4.0.3" -"@babel/cli@^7.25.6": - version "7.26.4" - resolved "https://registry.npmjs.org/@babel/cli/-/cli-7.26.4.tgz#4101ff8ee5de8447a6c395397a97921056411d20" - integrity sha512-+mORf3ezU3p3qr+82WvJSnQNE1GAYeoCfEv4fik6B5/2cvKZ75AX8oawWQdXtM9MmndooQj15Jr9kelRFWsuRw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.25" - commander "^6.2.0" - convert-source-map "^2.0.0" - fs-readdir-recursive "^1.1.0" - glob "^7.2.0" - make-dir "^2.1.0" - slash "^2.0.0" - optionalDependencies: - "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" - chokidar "^3.6.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.26.2": - version "7.26.2" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: - "@babel/helper-validator-identifier" "^7.25.9" + "@babel/helper-validator-identifier" "^7.27.1" js-tokens "^4.0.0" - picocolors "^1.0.0" + picocolors "^1.1.1" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.5", "@babel/compat-data@^7.26.8": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" - integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== +"@babel/compat-data@^7.27.2": + version "7.27.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.5.tgz#7d0658ec1a8420fc866d1df1b03bea0e79934c82" + integrity sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg== -"@babel/core@^7.18.9", "@babel/core@^7.25.2": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.8.tgz#7742f11c75acea6b08a8e24c5c0c8c89e89bf53e" - integrity sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ== +"@babel/core@^7.18.9": + version "7.27.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.4.tgz#cc1fc55d0ce140a1828d1dd2a2eba285adbfb3ce" + integrity sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.8" - "@babel/helper-compilation-targets" "^7.26.5" - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.7" - "@babel/parser" "^7.26.8" - "@babel/template" "^7.26.8" - "@babel/traverse" "^7.26.8" - "@babel/types" "^7.26.8" - "@types/gensync" "^1.0.0" + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.27.3" + "@babel/helpers" "^7.27.4" + "@babel/parser" "^7.27.4" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.27.4" + "@babel/types" "^7.27.3" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.8.tgz#f9c5e770309e12e3099ad8271e52f6caa15442ab" - integrity sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA== +"@babel/generator@^7.27.3": + version "7.27.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.5.tgz#3eb01866b345ba261b04911020cbe22dd4be8c8c" + integrity sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw== dependencies: - "@babel/parser" "^7.26.8" - "@babel/types" "^7.26.8" + "@babel/parser" "^7.27.5" + "@babel/types" "^7.27.3" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" -"@babel/helper-annotate-as-pure@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" - integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== +"@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== dependencies: - "@babel/types" "^7.25.9" - -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" - integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== - dependencies: - "@babel/compat-data" "^7.26.5" - "@babel/helper-validator-option" "^7.25.9" + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" - integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/traverse" "^7.25.9" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": - version "7.26.3" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" - integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - regexpu-core "^6.2.0" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.3": - version "0.6.3" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21" - integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-member-expression-to-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" - integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" - integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-optimise-call-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" - integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== - dependencies: - "@babel/types" "^7.25.9" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5": - version "7.26.5" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" - integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== - -"@babel/helper-remap-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" - integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-wrap-function" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-replace-supers@^7.25.9": - version "7.26.5" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d" - integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/traverse" "^7.26.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" - integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - -"@babel/helper-validator-option@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" - integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== - -"@babel/helper-wrap-function@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" - integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== - dependencies: - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helpers@7.26.10", "@babel/helpers@^7.26.7": - version "7.26.10" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384" - integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g== - dependencies: - "@babel/template" "^7.26.9" - "@babel/types" "^7.26.10" - -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.8.tgz#deca2b4d99e5e1b1553843b99823f118da6107c2" - integrity sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw== - dependencies: - "@babel/types" "^7.26.8" - -"@babel/parser@^7.26.9": - version "7.26.10" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749" - integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA== - dependencies: - "@babel/types" "^7.26.10" - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" - integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" - integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" - integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" - integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" - integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-import-assertions@^7.26.0": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" - integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-import-attributes@^7.26.0": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" - integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-jsx@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" - integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-typescript@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" - integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" - integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-async-generator-functions@^7.26.8": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8" - integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-remap-async-to-generator" "^7.25.9" - "@babel/traverse" "^7.26.8" - -"@babel/plugin-transform-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" - integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-remap-async-to-generator" "^7.25.9" - -"@babel/plugin-transform-block-scoped-functions@^7.26.5": - version "7.26.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e" - integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-block-scoping@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" - integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-class-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" - integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-class-static-block@^7.26.0": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" - integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-classes@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" - integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - "@babel/traverse" "^7.25.9" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" - integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/template" "^7.25.9" - -"@babel/plugin-transform-destructuring@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" - integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-dotall-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" - integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-duplicate-keys@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" - integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" - integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-dynamic-import@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" - integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-exponentiation-operator@^7.26.3": - version "7.26.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" - integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" -"@babel/plugin-transform-export-namespace-from@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" - integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== +"@babel/helper-module-transforms@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz#db0bbcfba5802f9ef7870705a7ef8788508ede02" + integrity sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.3" -"@babel/plugin-transform-for-of@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" - integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-function-name@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" - integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-json-strings@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" - integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" - integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-logical-assignment-operators@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" - integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-member-expression-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" - integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-amd@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" - integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-commonjs@^7.25.9", "@babel/plugin-transform-modules-commonjs@^7.26.3": - version "7.26.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" - integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== - dependencies: - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-systemjs@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" - integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-modules-umd@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" - integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" - integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-new-target@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" - integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": - version "7.26.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe" - integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-numeric-separator@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" - integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-object-rest-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" - integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - -"@babel/plugin-transform-object-super@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" - integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - -"@babel/plugin-transform-optional-catch-binding@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" - integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/plugin-transform-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" - integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-parameters@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" - integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== -"@babel/plugin-transform-private-methods@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" - integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-private-property-in-object@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" - integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== -"@babel/plugin-transform-property-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" - integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-regenerator@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" - integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-regexp-modifiers@^7.26.0": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" - integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-reserved-words@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" - integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-shorthand-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" - integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" - integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-sticky-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" - integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-template-literals@^7.26.8": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5" - integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-typeof-symbol@^7.26.7": - version "7.26.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz#d0e33acd9223744c1e857dbd6fa17bd0a3786937" - integrity sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-typescript@^7.25.9": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz#2e9caa870aa102f50d7125240d9dbf91334b0950" - integrity sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/plugin-syntax-typescript" "^7.25.9" - -"@babel/plugin-transform-unicode-escapes@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" - integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-property-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" - integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" - integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-sets-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" - integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/preset-env@^7.25.4": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.8.tgz#7af0090829b606d2046db99679004731e1dc364d" - integrity sha512-um7Sy+2THd697S4zJEfv/U5MHGJzkN2xhtsR3T/SWRbVSic62nbISh51VVfU9JiO/L/Z97QczHTaFVkOU8IzNg== - dependencies: - "@babel/compat-data" "^7.26.8" - "@babel/helper-compilation-targets" "^7.26.5" - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.26.0" - "@babel/plugin-syntax-import-attributes" "^7.26.0" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.25.9" - "@babel/plugin-transform-async-generator-functions" "^7.26.8" - "@babel/plugin-transform-async-to-generator" "^7.25.9" - "@babel/plugin-transform-block-scoped-functions" "^7.26.5" - "@babel/plugin-transform-block-scoping" "^7.25.9" - "@babel/plugin-transform-class-properties" "^7.25.9" - "@babel/plugin-transform-class-static-block" "^7.26.0" - "@babel/plugin-transform-classes" "^7.25.9" - "@babel/plugin-transform-computed-properties" "^7.25.9" - "@babel/plugin-transform-destructuring" "^7.25.9" - "@babel/plugin-transform-dotall-regex" "^7.25.9" - "@babel/plugin-transform-duplicate-keys" "^7.25.9" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-dynamic-import" "^7.25.9" - "@babel/plugin-transform-exponentiation-operator" "^7.26.3" - "@babel/plugin-transform-export-namespace-from" "^7.25.9" - "@babel/plugin-transform-for-of" "^7.25.9" - "@babel/plugin-transform-function-name" "^7.25.9" - "@babel/plugin-transform-json-strings" "^7.25.9" - "@babel/plugin-transform-literals" "^7.25.9" - "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" - "@babel/plugin-transform-member-expression-literals" "^7.25.9" - "@babel/plugin-transform-modules-amd" "^7.25.9" - "@babel/plugin-transform-modules-commonjs" "^7.26.3" - "@babel/plugin-transform-modules-systemjs" "^7.25.9" - "@babel/plugin-transform-modules-umd" "^7.25.9" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-new-target" "^7.25.9" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6" - "@babel/plugin-transform-numeric-separator" "^7.25.9" - "@babel/plugin-transform-object-rest-spread" "^7.25.9" - "@babel/plugin-transform-object-super" "^7.25.9" - "@babel/plugin-transform-optional-catch-binding" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - "@babel/plugin-transform-private-methods" "^7.25.9" - "@babel/plugin-transform-private-property-in-object" "^7.25.9" - "@babel/plugin-transform-property-literals" "^7.25.9" - "@babel/plugin-transform-regenerator" "^7.25.9" - "@babel/plugin-transform-regexp-modifiers" "^7.26.0" - "@babel/plugin-transform-reserved-words" "^7.25.9" - "@babel/plugin-transform-shorthand-properties" "^7.25.9" - "@babel/plugin-transform-spread" "^7.25.9" - "@babel/plugin-transform-sticky-regex" "^7.25.9" - "@babel/plugin-transform-template-literals" "^7.26.8" - "@babel/plugin-transform-typeof-symbol" "^7.26.7" - "@babel/plugin-transform-unicode-escapes" "^7.25.9" - "@babel/plugin-transform-unicode-property-regex" "^7.25.9" - "@babel/plugin-transform-unicode-regex" "^7.25.9" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.11.0" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.40.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== +"@babel/helpers@7.26.10", "@babel/helpers@^7.27.4": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384" + integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" + "@babel/template" "^7.26.9" + "@babel/types" "^7.26.10" -"@babel/preset-typescript@^7.24.7": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" - integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.27.2", "@babel/parser@^7.27.4", "@babel/parser@^7.27.5": + version "7.27.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.5.tgz#ed22f871f110aa285a6fd934a0efed621d118826" + integrity sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-syntax-jsx" "^7.25.9" - "@babel/plugin-transform-modules-commonjs" "^7.25.9" - "@babel/plugin-transform-typescript" "^7.25.9" + "@babel/types" "^7.27.3" -"@babel/runtime@7.26.10", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": +"@babel/runtime@7.26.10", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.26.10" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2" integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.25.9", "@babel/template@^7.26.8": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.26.8.tgz#db3898f47a17bab2f4c78ec1d0de38527c2ffe19" - integrity sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/parser" "^7.26.8" - "@babel/types" "^7.26.8" - -"@babel/template@^7.26.9": - version "7.26.9" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2" - integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/parser" "^7.26.9" - "@babel/types" "^7.26.9" - -"@babel/traverse@^7.18.9", "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.8.tgz#0a8a9c2b7cc9519eed14275f4fd2278ad46e8cc9" - integrity sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.8" - "@babel/parser" "^7.26.8" - "@babel/template" "^7.26.8" - "@babel/types" "^7.26.8" +"@babel/template@^7.26.9", "@babel/template@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.18.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.27.4": + version "7.27.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.4.tgz#b0045ac7023c8472c3d35effd7cc9ebd638da6ea" + integrity sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.3" + "@babel/parser" "^7.27.4" + "@babel/template" "^7.27.2" + "@babel/types" "^7.27.3" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.9", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.8", "@babel/types@^7.4.4": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.8.tgz#97dcdc190fab45be7f3dc073e3c11160d677c127" - integrity sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@babel/types@^7.26.10", "@babel/types@^7.26.9": - version "7.26.10" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259" - integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ== +"@babel/types@^7.0.0", "@babel/types@^7.18.9", "@babel/types@^7.20.7", "@babel/types@^7.26.10", "@babel/types@^7.27.1", "@babel/types@^7.27.3": + version "7.27.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.6.tgz#a434ca7add514d4e646c80f7375c0aa2befc5535" + integrity sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q== dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" "@blueprintjs/colors@^4.2.1": version "4.2.1" - resolved "https://registry.npmjs.org/@blueprintjs/colors/-/colors-4.2.1.tgz#603b2512caee84feddcb3dbd536534c140b9a1f3" + resolved "https://registry.yarnpkg.com/@blueprintjs/colors/-/colors-4.2.1.tgz#603b2512caee84feddcb3dbd536534c140b9a1f3" integrity sha512-Cx7J2YnUuxn+fi+y5XtXnBB7+cFHN4xBrRkaAetp78i3VTCXjUk+d1omrOr8TqbRucUXTdrhbZOUHpzRLFcJpQ== dependencies: tslib "~2.5.0" "@blueprintjs/core@^4.16.3", "@blueprintjs/core@^4.20.2": version "4.20.2" - resolved "https://registry.npmjs.org/@blueprintjs/core/-/core-4.20.2.tgz#ae1bbaf13bd1bf887b506760c478cc940f6d6e20" + resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-4.20.2.tgz#ae1bbaf13bd1bf887b506760c478cc940f6d6e20" integrity sha512-5v4Nr0jozfAjiOkjY4zvt1XSpt4ldnrSaxtwo506S2cxJYfwFeMTmDshXNPFcc8L1fjZMxi0IWI2WABXzZXS6w== dependencies: "@blueprintjs/colors" "^4.2.1" @@ -932,7 +223,7 @@ "@blueprintjs/icons@^4.16.0": version "4.16.0" - resolved "https://registry.npmjs.org/@blueprintjs/icons/-/icons-4.16.0.tgz#47f9e8abe64d84fc18721080b8f191d8aac075d8" + resolved "https://registry.yarnpkg.com/@blueprintjs/icons/-/icons-4.16.0.tgz#47f9e8abe64d84fc18721080b8f191d8aac075d8" integrity sha512-cyfgjUZcZCtQrXWUV8FwqYTFEzduV4a0N7yhOU38jY+cBRCLu/sDrD0Osvfk4DGRvNe4YjY7pohVLFSxpg68Uw== dependencies: change-case "^4.1.2" @@ -941,7 +232,7 @@ "@blueprintjs/popover2@^1.13.3": version "1.14.11" - resolved "https://registry.npmjs.org/@blueprintjs/popover2/-/popover2-1.14.11.tgz#0698fdeaf6710460cef0b71bed592ca37f40d1f9" + resolved "https://registry.yarnpkg.com/@blueprintjs/popover2/-/popover2-1.14.11.tgz#0698fdeaf6710460cef0b71bed592ca37f40d1f9" integrity sha512-5XAjeb2mlWjYXC0pqrNDLzHSsX85Zaiv8jixxUN9abarMUUFKGATgGF8MRsWTLAW94Gli6CB1lzVkrYkRHHf6Q== dependencies: "@blueprintjs/core" "^4.20.2" @@ -954,7 +245,7 @@ "@chromatic-com/storybook@^1.4.0": version "1.9.0" - resolved "https://registry.npmjs.org/@chromatic-com/storybook/-/storybook-1.9.0.tgz#d95eb3474783bcc17a830a7627c3f099c1f75ba5" + resolved "https://registry.yarnpkg.com/@chromatic-com/storybook/-/storybook-1.9.0.tgz#d95eb3474783bcc17a830a7627c3f099c1f75ba5" integrity sha512-vYQ+TcfktEE3GHnLZXHCzXF/sN9dw+KivH8a5cmPyd9YtQs7fZtHrEgsIjWpYycXiweKMo1Lm1RZsjxk8DH3rA== dependencies: chromatic "^11.4.0" @@ -965,47 +256,47 @@ "@colors/colors@1.6.0", "@colors/colors@^1.6.0": version "1.6.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@csstools/color-helpers@^5.0.1": - version "5.0.1" - resolved "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz#829f1c76f5800b79c51c709e2f36821b728e0e10" - integrity sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA== +"@csstools/color-helpers@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.0.2.tgz#82592c9a7c2b83c293d9161894e2a6471feb97b8" + integrity sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA== -"@csstools/css-calc@^2.1.1": - version "2.1.1" - resolved "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz#a7dbc66627f5cf458d42aed14bda0d3860562383" - integrity sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag== +"@csstools/css-calc@^2.1.3", "@csstools/css-calc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" + integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== -"@csstools/css-color-parser@^3.0.7": - version "3.0.7" - resolved "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz#442d61d58e54ad258d52c309a787fceb33906484" - integrity sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA== +"@csstools/css-color-parser@^3.0.9": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz#79fc68864dd43c3b6782d2b3828bc0fa9d085c10" + integrity sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg== dependencies: - "@csstools/color-helpers" "^5.0.1" - "@csstools/css-calc" "^2.1.1" + "@csstools/color-helpers" "^5.0.2" + "@csstools/css-calc" "^2.1.4" "@csstools/css-parser-algorithms@^3.0.4": - version "3.0.4" - resolved "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz#74426e93bd1c4dcab3e441f5cc7ba4fb35d94356" - integrity sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076" + integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== "@csstools/css-tokenizer@^3.0.3": - version "3.0.3" - resolved "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz#a5502c8539265fecbd873c1e395a890339f119c2" - integrity sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3" + integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== "@dabh/diagnostics@^2.0.2": version "2.0.3" - resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== dependencies: colorspace "1.1.x" @@ -1017,9 +308,31 @@ resolved "https://registry.yarnpkg.com/@date-fns/tz/-/tz-1.2.0.tgz#81cb3211693830babaf3b96aff51607e143030a6" integrity sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg== +"@emnapi/core@^1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.3.tgz#9ac52d2d5aea958f67e52c40a065f51de59b77d6" + integrity sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== + dependencies: + "@emnapi/wasi-threads" "1.0.2" + tslib "^2.4.0" + +"@emnapi/runtime@^1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" + integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz#977f44f844eac7d6c138a415a123818c655f874c" + integrity sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== + dependencies: + tslib "^2.4.0" + "@emotion/babel-plugin@^11.13.5": version "11.13.5" - resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" integrity sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ== dependencies: "@babel/helper-module-imports" "^7.16.7" @@ -1036,7 +349,7 @@ "@emotion/cache@^11.13.5", "@emotion/cache@^11.14.0": version "11.14.0" - resolved "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== dependencies: "@emotion/memoize" "^0.9.0" @@ -1047,24 +360,24 @@ "@emotion/hash@^0.9.2": version "0.9.2" - resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== "@emotion/is-prop-valid@^1.3.0": version "1.3.1" - resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz#8d5cf1132f836d7adbe42cf0b49df7816fc88240" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz#8d5cf1132f836d7adbe42cf0b49df7816fc88240" integrity sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw== dependencies: "@emotion/memoize" "^0.9.0" "@emotion/memoize@^0.9.0": version "0.9.0" - resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== "@emotion/react@^11.11.1": version "11.14.0" - resolved "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== dependencies: "@babel/runtime" "^7.18.3" @@ -1078,7 +391,7 @@ "@emotion/serialize@^1.3.3": version "1.3.3" - resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== dependencies: "@emotion/hash" "^0.9.2" @@ -1089,13 +402,13 @@ "@emotion/sheet@^1.4.0": version "1.4.0" - resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== "@emotion/styled@^11.11.0": - version "11.14.0" - resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz#f47ca7219b1a295186d7661583376fcea95f0ff3" - integrity sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA== + version "11.14.1" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.14.1.tgz#8c34bed2948e83e1980370305614c20955aacd1c" + integrity sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw== dependencies: "@babel/runtime" "^7.18.3" "@emotion/babel-plugin" "^11.13.5" @@ -1106,22 +419,22 @@ "@emotion/unitless@^0.10.0": version "0.10.0" - resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== "@emotion/use-insertion-effect-with-fallbacks@^1.2.0": version "1.2.0" - resolved "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz#8a8cb77b590e09affb960f4ff1e9a89e532738bf" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz#8a8cb77b590e09affb960f4ff1e9a89e532738bf" integrity sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg== "@emotion/utils@^1.4.2": version "1.4.2" - resolved "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== "@emotion/weak-memoize@^0.4.0": version "0.4.0" - resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== "@esbuild/aix-ppc64@0.25.0": @@ -1249,21 +562,21 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz#c8e119a30a7c8d60b9d2e22d2073722dde3b710b" integrity sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ== -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.1" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" - integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" + integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== dependencies: eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": version "4.12.1" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== "@eslint/eslintrc@^2.1.4": version "2.1.4" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" @@ -1278,34 +591,34 @@ "@eslint/js@8.57.1": version "8.57.1" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@floating-ui/core@^1.6.0": - version "1.6.9" - resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz#64d1da251433019dafa091de9b2886ff35ec14e6" - integrity sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw== +"@floating-ui/core@^1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.1.tgz#1abc6b157d4a936174f9dbd078278c3a81c8bc6b" + integrity sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw== dependencies: "@floating-ui/utils" "^0.2.9" -"@floating-ui/dom@^1.0.0": - version "1.6.13" - resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz#a8a938532aea27a95121ec16e667a7cbe8c59e34" - integrity sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w== +"@floating-ui/dom@^1.0.0", "@floating-ui/dom@^1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.1.tgz#76a4e3cbf7a08edf40c34711cf64e0cc8053d912" + integrity sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ== dependencies: - "@floating-ui/core" "^1.6.0" + "@floating-ui/core" "^1.7.1" "@floating-ui/utils" "^0.2.9" "@floating-ui/react-dom@^2.1.2": - version "2.1.2" - resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" - integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== + version "2.1.3" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.3.tgz#1dea32e59514a67d182f0c89c8975ff959774b61" + integrity sha512-huMBfiU9UnQ2oBwIhgzyIiSpVgvlDstU8CX0AF+wS+KzmYMs0J2a3GwuFHV1Lz+jlrQGeC1fF+Nv0QoumyV0bA== dependencies: "@floating-ui/dom" "^1.0.0" "@floating-ui/react@^0.26.4": version "0.26.28" - resolved "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz#93f44ebaeb02409312e9df9507e83aab4a8c0dc7" + resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.28.tgz#93f44ebaeb02409312e9df9507e83aab4a8c0dc7" integrity sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw== dependencies: "@floating-ui/react-dom" "^2.1.2" @@ -1314,53 +627,53 @@ "@floating-ui/utils@^0.2.8", "@floating-ui/utils@^0.2.9": version "0.2.9" - resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429" integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg== -"@formatjs/ecma402-abstract@2.3.3": - version "2.3.3" - resolved "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.3.tgz#fbc7555c9e4fdd104cd5e23129fa3735be3ad0ba" - integrity sha512-pJT1OkhplSmvvr6i3CWTPvC/FGC06MbN5TNBfRO6Ox62AEz90eMq+dVvtX9Bl3jxCEkS0tATzDarRZuOLw7oFg== +"@formatjs/ecma402-abstract@2.3.4": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.4.tgz#e90c5a846ba2b33d92bc400fdd709da588280fbc" + integrity sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA== dependencies: - "@formatjs/fast-memoize" "2.2.6" - "@formatjs/intl-localematcher" "0.6.0" - decimal.js "10" - tslib "2" + "@formatjs/fast-memoize" "2.2.7" + "@formatjs/intl-localematcher" "0.6.1" + decimal.js "^10.4.3" + tslib "^2.8.0" -"@formatjs/fast-memoize@2.2.6": - version "2.2.6" - resolved "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.6.tgz#fac0a84207a1396be1f1aa4ee2805b179e9343d1" - integrity sha512-luIXeE2LJbQnnzotY1f2U2m7xuQNj2DA8Vq4ce1BY9ebRZaoPB1+8eZ6nXpLzsxuW5spQxr7LdCg+CApZwkqkw== +"@formatjs/fast-memoize@2.2.7": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz#707f9ddaeb522a32f6715bb7950b0831f4cc7b15" + integrity sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ== dependencies: - tslib "2" + tslib "^2.8.0" -"@formatjs/icu-messageformat-parser@2.11.1": - version "2.11.1" - resolved "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.1.tgz#59d69124b9cf3186800a576c0228947d10594347" - integrity sha512-o0AhSNaOfKoic0Sn1GkFCK4MxdRsw7mPJ5/rBpIqdvcC7MIuyUSW8WChUEvrK78HhNpYOgqCQbINxCTumJLzZA== +"@formatjs/icu-messageformat-parser@2.11.2": + version "2.11.2" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.2.tgz#85aea211bea40aa81ee1d44ac7accc3cf5500a73" + integrity sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA== dependencies: - "@formatjs/ecma402-abstract" "2.3.3" - "@formatjs/icu-skeleton-parser" "1.8.13" - tslib "2" + "@formatjs/ecma402-abstract" "2.3.4" + "@formatjs/icu-skeleton-parser" "1.8.14" + tslib "^2.8.0" -"@formatjs/icu-skeleton-parser@1.8.13": - version "1.8.13" - resolved "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.13.tgz#5e8b1e1bb467c937735fecb4cb4b345932151a44" - integrity sha512-N/LIdTvVc1TpJmMt2jVg0Fr1F7Q1qJPdZSCs19unMskCmVQ/sa0H9L8PWt13vq+gLdLg1+pPsvBLydL1Apahjg== +"@formatjs/icu-skeleton-parser@1.8.14": + version "1.8.14" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.14.tgz#b9581d00363908efb29817fdffc32b79f41dabe5" + integrity sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ== dependencies: - "@formatjs/ecma402-abstract" "2.3.3" - tslib "2" + "@formatjs/ecma402-abstract" "2.3.4" + tslib "^2.8.0" -"@formatjs/intl-localematcher@0.6.0": - version "0.6.0" - resolved "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.0.tgz#33cf0d33279572c990e02ab75a93122569878082" - integrity sha512-4rB4g+3hESy1bHSBG3tDFaMY2CH67iT7yne1e+0CLTsGLDcmoEWWpJjjpWVaYgYfYuohIRuo0E+N536gd2ZHZA== +"@formatjs/intl-localematcher@0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.6.1.tgz#25dc30675320bf65a9d7f73876fc1e4064c0e299" + integrity sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg== dependencies: - tslib "2" + tslib "^2.8.0" "@headlessui/react@^1.7.13", "@headlessui/react@^1.7.19", "@headlessui/react@^1.7.3": version "1.7.19" - resolved "https://registry.npmjs.org/@headlessui/react/-/react-1.7.19.tgz#91c78cf5fcb254f4a0ebe96936d48421caf75f40" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.19.tgz#91c78cf5fcb254f4a0ebe96936d48421caf75f40" integrity sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw== dependencies: "@tanstack/react-virtual" "^3.0.0-beta.60" @@ -1368,28 +681,28 @@ "@hocuspocus/common@^2.15.2": version "2.15.2" - resolved "https://registry.npmjs.org/@hocuspocus/common/-/common-2.15.2.tgz#dec1869f41716bd80a454e4cefb789fcbad543a0" + resolved "https://registry.yarnpkg.com/@hocuspocus/common/-/common-2.15.2.tgz#dec1869f41716bd80a454e4cefb789fcbad543a0" integrity sha512-wU1wxXNnQQMXyeL3mdSDYiQsm/r/QyJVjjQhF7sUBrLnjdsN7bA1cvfcSvJBr1ymrMSeYRmUL3UlQmEHEOaP7w== dependencies: lib0 "^0.2.87" "@hocuspocus/extension-database@^2.15.0": version "2.15.2" - resolved "https://registry.npmjs.org/@hocuspocus/extension-database/-/extension-database-2.15.2.tgz#d17be8061525c308038f973bc9878732a3423fb7" + resolved "https://registry.yarnpkg.com/@hocuspocus/extension-database/-/extension-database-2.15.2.tgz#d17be8061525c308038f973bc9878732a3423fb7" integrity sha512-BkYDfKA99udx7AEkqWReBS61kvGMC9SqoPJs3v8xNgpaj2GGyMJQlUdQRMhPyZTn2osV+pqhk8Hn7xUJCW1RJg== dependencies: "@hocuspocus/server" "^2.15.2" "@hocuspocus/extension-logger@^2.15.0": version "2.15.2" - resolved "https://registry.npmjs.org/@hocuspocus/extension-logger/-/extension-logger-2.15.2.tgz#f13fe713311d832dabefc03dc412657c184232da" + resolved "https://registry.yarnpkg.com/@hocuspocus/extension-logger/-/extension-logger-2.15.2.tgz#f13fe713311d832dabefc03dc412657c184232da" integrity sha512-nqSnSFI+xO7dBTsgzSANKvx09ptq8J4Doz3AdLgxfaweYC85qFao7mAx1ZCtWoVHseVwBYua6S3dTwQq5IsWEg== dependencies: "@hocuspocus/server" "^2.15.2" "@hocuspocus/extension-redis@^2.15.0": version "2.15.2" - resolved "https://registry.npmjs.org/@hocuspocus/extension-redis/-/extension-redis-2.15.2.tgz#0982f65d7588235d039b80313e77103dc605285c" + resolved "https://registry.yarnpkg.com/@hocuspocus/extension-redis/-/extension-redis-2.15.2.tgz#0982f65d7588235d039b80313e77103dc605285c" integrity sha512-2BNBLnDEQq2v3uQSidBSdUOIbHhH383SGxn+hmy6tDQfrt2hLE4MwilgDdcCO0FKOCYaJrV7HyKu6/WyzLbAOg== dependencies: "@hocuspocus/server" "^2.15.2" @@ -1401,7 +714,7 @@ "@hocuspocus/provider@^2.15.0": version "2.15.2" - resolved "https://registry.npmjs.org/@hocuspocus/provider/-/provider-2.15.2.tgz#ce534b90e161cd32fd02928d7296bb38f424c319" + resolved "https://registry.yarnpkg.com/@hocuspocus/provider/-/provider-2.15.2.tgz#ce534b90e161cd32fd02928d7296bb38f424c319" integrity sha512-mdBurviyaUd7bQx4vMIE39WqRJDTpfFelHOVXr7w/jA8G1E7K7lxQ9/DacSrbg+9o8s+1z1+SerZiUjaToaBJg== dependencies: "@hocuspocus/common" "^2.15.2" @@ -1411,7 +724,7 @@ "@hocuspocus/server@^2.15.0", "@hocuspocus/server@^2.15.2": version "2.15.2" - resolved "https://registry.npmjs.org/@hocuspocus/server/-/server-2.15.2.tgz#77be1e2540843bec313141dad7f39ea65a4221dd" + resolved "https://registry.yarnpkg.com/@hocuspocus/server/-/server-2.15.2.tgz#77be1e2540843bec313141dad7f39ea65a4221dd" integrity sha512-+fLRVswg+bkgfHqJ+wFgywivw3H08WMOtVvJF7dJzWT2ZR/Sc3nDMFh2KqMF6Ygh4z6mt23xr7SKIm3eP1zoLA== dependencies: "@hocuspocus/common" "^2.15.2" @@ -1423,7 +736,7 @@ "@humanwhocodes/config-array@^0.13.0": version "0.13.0" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== dependencies: "@humanwhocodes/object-schema" "^2.0.3" @@ -1432,17 +745,17 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^2.0.3": version "2.0.3" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@hypnosphi/create-react-context@^0.3.1": version "0.3.1" - resolved "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz#f8bfebdc7665f5d426cba3753e0e9c7d3154d7c6" + resolved "https://registry.yarnpkg.com/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz#f8bfebdc7665f5d426cba3753e0e9c7d3154d7c6" integrity sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A== dependencies: gud "^1.0.0" @@ -1450,22 +763,22 @@ "@icons/material@^0.2.4": version "0.2.4" - resolved "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" + resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== "@intercom/messenger-js-sdk@^0.0.12": version "0.0.12" - resolved "https://registry.npmjs.org/@intercom/messenger-js-sdk/-/messenger-js-sdk-0.0.12.tgz#1b80acf6b2a59ef9ce4010e0920522d579a590fa" + resolved "https://registry.yarnpkg.com/@intercom/messenger-js-sdk/-/messenger-js-sdk-0.0.12.tgz#1b80acf6b2a59ef9ce4010e0920522d579a590fa" integrity sha512-xoUGlKLD8nIcZaH7AesR/LfwXH4QQUdPZMV4sApK/zvVFBgAY/A9IWp1ey/jUcp+776ejtZeEqreJZxG4LdEuw== -"@ioredis/commands@^1.1.1": +"@ioredis/commands@^1.0.2", "@ioredis/commands@^1.1.1": version "1.2.0" - resolved "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" + resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -1477,7 +790,7 @@ "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": version "0.3.8" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== dependencies: "@jridgewell/set-array" "^1.2.1" @@ -1486,17 +799,17 @@ "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.2.1": version "1.2.1" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": version "0.3.6" - resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: "@jridgewell/gen-mapping" "^0.3.5" @@ -1504,12 +817,12 @@ "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.0" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -1517,7 +830,7 @@ "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" @@ -1525,36 +838,36 @@ "@juggle/resize-observer@^3.4.0": version "3.4.0" - resolved "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" + resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== "@lifeomic/attempt@^3.0.2": version "3.1.0" - resolved "https://registry.npmjs.org/@lifeomic/attempt/-/attempt-3.1.0.tgz#7fc703559177b81a008b9d263e3d9a001d11d08a" + resolved "https://registry.yarnpkg.com/@lifeomic/attempt/-/attempt-3.1.0.tgz#7fc703559177b81a008b9d263e3d9a001d11d08a" integrity sha512-QZqem4QuAnAyzfz+Gj5/+SLxqwCAw2qmt7732ZXodr6VDWGeYLG6w1i/vYLa55JQM9wRuBKLmXmiZ2P0LtE5rw== "@mdx-js/react@^3.0.0": version "3.1.0" - resolved "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz#c4522e335b3897b9a845db1dbdd2f966ae8fb0ed" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.1.0.tgz#c4522e335b3897b9a845db1dbdd2f966ae8fb0ed" integrity sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ== dependencies: "@types/mdx" "^2.0.0" -"@mui/core-downloads-tracker@^5.16.14": - version "5.16.14" - resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.14.tgz#e6536f1b6caa873f7915fbf9703fdc840a5a98d9" - integrity sha512-sbjXW+BBSvmzn61XyTMun899E7nGPTXwqD9drm1jBUAvWEhJpPFIRxwQQiATWZnd9rvdxtnhhdsDxEGWI0jxqA== +"@mui/core-downloads-tracker@^5.17.1": + version "5.17.1" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.17.1.tgz#49b88ecb68b800431b5c2f2bfb71372d1f1478fa" + integrity sha512-OcZj+cs6EfUD39IoPBOgN61zf1XFVY+imsGoBDwXeSq2UHJZE3N59zzBOVjclck91Ne3e9gudONOeILvHCIhUA== "@mui/material@^5.14.1": - version "5.16.14" - resolved "https://registry.npmjs.org/@mui/material/-/material-5.16.14.tgz#da8a75822f039d8c1b0ab7fb4146d767c2f9248a" - integrity sha512-eSXQVCMKU2xc7EcTxe/X/rC9QsV2jUe8eLM3MUCPYbo6V52eCE436akRIvELq/AqZpxx2bwkq7HC0cRhLB+yaw== + version "5.17.1" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.17.1.tgz#596f542a51fc74db75da2df66565b4874ce4049d" + integrity sha512-2B33kQf+GmPnrvXXweWAx+crbiUEsxCdCN979QDYnlH9ox4pd+0/IBriWLV+l6ORoBF60w39cWjFnJYGFdzXcw== dependencies: "@babel/runtime" "^7.23.9" - "@mui/core-downloads-tracker" "^5.16.14" - "@mui/system" "^5.16.14" - "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.14" + "@mui/core-downloads-tracker" "^5.17.1" + "@mui/system" "^5.17.1" + "@mui/types" "~7.2.15" + "@mui/utils" "^5.17.1" "@popperjs/core" "^2.11.8" "@types/react-transition-group" "^4.4.10" clsx "^2.1.0" @@ -1563,18 +876,18 @@ react-is "^19.0.0" react-transition-group "^4.4.5" -"@mui/private-theming@^5.16.14": - version "5.16.14" - resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.14.tgz#7ad2b8a8fe0417f9fdfd05011806b9cb33c1a20a" - integrity sha512-12t7NKzvYi819IO5IapW2BcR33wP/KAVrU8d7gLhGHoAmhDxyXlRoKiRij3TOD8+uzk0B6R9wHUNKi4baJcRNg== +"@mui/private-theming@^5.17.1": + version "5.17.1" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.17.1.tgz#b4b6fbece27830754ef78186e3f1307dca42f295" + integrity sha512-XMxU0NTYcKqdsG8LRmSoxERPXwMbp16sIXPcLVgLGII/bVNagX0xaheWAwFv8+zDK7tI3ajllkuD3GZZE++ICQ== dependencies: "@babel/runtime" "^7.23.9" - "@mui/utils" "^5.16.14" + "@mui/utils" "^5.17.1" prop-types "^15.8.1" "@mui/styled-engine@^5.16.14": version "5.16.14" - resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.14.tgz#f90fef5b4f8ebf11d48e1b1df8854a45bb31a9f5" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.14.tgz#f90fef5b4f8ebf11d48e1b1df8854a45bb31a9f5" integrity sha512-UAiMPZABZ7p8mUW4akDV6O7N3+4DatStpXMZwPlt+H/dA0lt67qawN021MNND+4QTpjaiMYxbhKZeQcyWCbuKw== dependencies: "@babel/runtime" "^7.23.9" @@ -1582,46 +895,55 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.16.14": - version "5.16.14" - resolved "https://registry.npmjs.org/@mui/system/-/system-5.16.14.tgz#92765ba01a3d1f8ee4967248cb00077d7aed225b" - integrity sha512-KBxMwCb8mSIABnKvoGbvM33XHyT+sN0BzEBG+rsSc0lLQGzs7127KWkCA6/H8h6LZ00XpBEME5MAj8mZLiQ1tw== +"@mui/system@^5.17.1": + version "5.17.1" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.17.1.tgz#1f987cce91bf738545a8cf5f99152cd2728e6077" + integrity sha512-aJrmGfQpyF0U4D4xYwA6ueVtQcEMebET43CUmKMP7e7iFh3sMIF3sBR0l8Urb4pqx1CBjHAaWgB0ojpND4Q3Jg== dependencies: "@babel/runtime" "^7.23.9" - "@mui/private-theming" "^5.16.14" + "@mui/private-theming" "^5.17.1" "@mui/styled-engine" "^5.16.14" - "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.14" + "@mui/types" "~7.2.15" + "@mui/utils" "^5.17.1" clsx "^2.1.0" csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.2.15": - version "7.2.21" - resolved "https://registry.npmjs.org/@mui/types/-/types-7.2.21.tgz#63f50874eda8e4a021a69aaa8ba9597369befda2" - integrity sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww== +"@mui/types@~7.2.15": + version "7.2.24" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.24.tgz#5eff63129d9c29d80bbf2d2e561bd0690314dec2" + integrity sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw== -"@mui/utils@^5.16.14": - version "5.16.14" - resolved "https://registry.npmjs.org/@mui/utils/-/utils-5.16.14.tgz#7217e876a5092cd04c184b34bca348e0befaef8c" - integrity sha512-wn1QZkRzSmeXD1IguBVvJJHV3s6rxJrfb6YuC9Kk6Noh9f8Fb54nUs5JRkKm+BOerRhj5fLg05Dhx/H3Ofb8Mg== +"@mui/utils@^5.17.1": + version "5.17.1" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.17.1.tgz#72ba4ffa79f7bdf69d67458139390f18484b6e6b" + integrity sha512-jEZ8FTqInt2WzxDV8bhImWBqeQRD99c/id/fq83H0ER9tFl+sfZlaAoCdznGvbSQQ9ividMxqSV2c7cC1vBcQg== dependencies: "@babel/runtime" "^7.23.9" - "@mui/types" "^7.2.15" + "@mui/types" "~7.2.15" "@types/prop-types" "^15.7.12" clsx "^2.1.1" prop-types "^15.8.1" react-is "^19.0.0" +"@napi-rs/wasm-runtime@^0.2.11": + version "0.2.11" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz#192c1610e1625048089ab4e35bc0649ce478500e" + integrity sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA== + dependencies: + "@emnapi/core" "^1.4.3" + "@emnapi/runtime" "^1.4.3" + "@tybys/wasm-util" "^0.9.0" + "@next/env@14.2.30": version "14.2.30" resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.30.tgz#f955b57975751584722b6b0a2a8cf2bdcc4ffae3" integrity sha512-KBiBKrDY6kxTQWGzKjQB7QirL3PiiOkV7KW98leHFjtVRKtft76Ra5qSA/SL75xT44dp6hOcqiiJ6iievLOYug== -"@next/eslint-plugin-next@14.2.24": - version "14.2.24" - resolved "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.24.tgz#2bd0857c31d510610386ecb7a4cc9c2ca452a4ee" - integrity sha512-FDL3qs+5DML0AJz56DCVr+KnFYivxeAX73En8QbPw9GjJZ6zbfvqDy+HrarHFzbsIASn7y8y5ySJ/lllSruNVQ== +"@next/eslint-plugin-next@14.2.30": + version "14.2.30" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.30.tgz#852651bc31a7a01d84a54d95903f48cde6c8bc01" + integrity sha512-mvVsMIutMxQ4NGZEMZ1kiBNc+la8Xmlk30bKUmCPQz2eFkmsLv54Mha8QZarMaCtSPkkFA1TMD+FIZk0l/PpzA== dependencies: glob "10.3.10" @@ -1670,14 +992,9 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.30.tgz#94d3ddcc1e97572a0514a6180c8e3bb415e1dc98" integrity sha512-4KCo8hMZXMjpTzs3HOqOGYYwAXymXIy7PEPAXNEcEOyKqkjiDlECumrWziy+JEF0Oi4ILHGxzgQ3YiMGG2t/Lg== -"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": - version "2.1.8-no-fsevents.3" - resolved "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" - integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -1685,12 +1002,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -1698,175 +1015,188 @@ "@nolyfill/is-core-module@1.0.39": version "1.0.39" - resolved "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" + resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@popperjs/core@^2.11.7", "@popperjs/core@^2.11.8", "@popperjs/core@^2.9.0": version "2.11.8" - resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@radix-ui/number@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.0.tgz#1e95610461a09cdf8bb05c152e76ca1278d5da46" - integrity sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ== - -"@radix-ui/primitive@1.1.1": +"@radix-ui/number@1.1.1": version "1.1.1" - resolved "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz#fc169732d755c7fbad33ba8d0cd7fd10c90dc8e3" - integrity sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA== + resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.1.tgz#7b2c9225fbf1b126539551f5985769d0048d9090" + integrity sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g== -"@radix-ui/react-compose-refs@1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz#6f766faa975f8738269ebb8a23bad4f5a8d2faec" - integrity sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw== +"@radix-ui/primitive@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.2.tgz#83f415c4425f21e3d27914c12b3272a32e3dae65" + integrity sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA== -"@radix-ui/react-context@1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz#82074aa83a472353bb22e86f11bcbd1c61c4c71a" - integrity sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q== +"@radix-ui/react-compose-refs@1.1.2", "@radix-ui/react-compose-refs@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30" + integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg== -"@radix-ui/react-dialog@^1.1.2": - version "1.1.6" - resolved "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.6.tgz#65b4465e99ad900f28a98eed9a94bb21ec644bf7" - integrity sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.5" - "@radix-ui/react-focus-guards" "1.1.1" - "@radix-ui/react-focus-scope" "1.1.2" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-portal" "1.1.4" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-slot" "1.1.2" - "@radix-ui/react-use-controllable-state" "1.1.0" +"@radix-ui/react-context@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36" + integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA== + +"@radix-ui/react-dialog@^1.1.6": + version "1.1.14" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz#4c69c80c258bc6561398cfce055202ea11075107" + integrity sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.10" + "@radix-ui/react-focus-guards" "1.1.2" + "@radix-ui/react-focus-scope" "1.1.7" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.4" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" + "@radix-ui/react-use-controllable-state" "1.2.2" aria-hidden "^1.2.4" react-remove-scroll "^2.6.3" -"@radix-ui/react-direction@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc" - integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg== +"@radix-ui/react-direction@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.1.tgz#39e5a5769e676c753204b792fbe6cf508e550a14" + integrity sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw== -"@radix-ui/react-dismissable-layer@1.1.5": - version "1.1.5" - resolved "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.5.tgz#96dde2be078c694a621e55e047406c58cd5fe774" - integrity sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg== +"@radix-ui/react-dismissable-layer@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz#429b9bada3672c6895a5d6a642aca6ecaf4f18c3" + integrity sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ== dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-escape-keydown" "1.1.0" + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-escape-keydown" "1.1.1" -"@radix-ui/react-focus-guards@1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz#8635edd346304f8b42cae86b05912b61aef27afe" - integrity sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg== - -"@radix-ui/react-focus-scope@1.1.2": +"@radix-ui/react-focus-guards@1.1.2": version "1.1.2" - resolved "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.2.tgz#c0a4519cd95c772606a82fc5b96226cd7fdd2602" - integrity sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA== + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz#4ec9a7e50925f7fb661394460045b46212a33bed" + integrity sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA== + +"@radix-ui/react-focus-scope@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz#dfe76fc103537d80bf42723a183773fd07bfb58d" + integrity sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw== dependencies: - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" -"@radix-ui/react-id@1.1.0", "@radix-ui/react-id@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz#de47339656594ad722eb87f94a6b25f9cffae0ed" - integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA== +"@radix-ui/react-id@1.1.1", "@radix-ui/react-id@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.1.tgz#1404002e79a03fe062b7e3864aa01e24bd1471f7" + integrity sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg== dependencies: - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-portal@1.1.4": - version "1.1.4" - resolved "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.4.tgz#ff5401ff63c8a825c46eea96d3aef66074b8c0c8" - integrity sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA== +"@radix-ui/react-portal@1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.9.tgz#14c3649fe48ec474ac51ed9f2b9f5da4d91c4472" + integrity sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ== dependencies: - "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-presence@1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz#bb764ed8a9118b7ec4512da5ece306ded8703cdc" - integrity sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg== +"@radix-ui/react-presence@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.4.tgz#253ac0ad4946c5b4a9c66878335f5cf07c967ced" + integrity sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA== dependencies: - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-primitive@2.0.2", "@radix-ui/react-primitive@^2.0.0": - version "2.0.2" - resolved "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz#ac8b7854d87b0d7af388d058268d9a7eb64ca8ef" - integrity sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w== +"@radix-ui/react-primitive@2.1.3", "@radix-ui/react-primitive@^2.0.2": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz#db9b8bcff49e01be510ad79893fb0e4cda50f1bc" + integrity sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ== dependencies: - "@radix-ui/react-slot" "1.1.2" + "@radix-ui/react-slot" "1.2.3" "@radix-ui/react-scroll-area@^1.2.3": + version "1.2.9" + resolved "https://registry.yarnpkg.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.9.tgz#90c49bd3231d7f0796d5d12dabc065afa829cf07" + integrity sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A== + dependencies: + "@radix-ui/number" "1.1.1" + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-presence" "1.1.4" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-slot@1.2.3", "@radix-ui/react-slot@^1.1.1": version "1.2.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.3.tgz#6a9a7897add739ce84b517796ee345d495893d3f" - integrity sha512-l7+NNBfBYYJa9tNqVcP2AGvxdE3lmE6kFTBXdvHgUaZuy+4wGCL1Cl2AfaR7RKyimj7lZURGLwFO59k4eBnDJQ== - dependencies: - "@radix-ui/number" "1.1.0" - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" - -"@radix-ui/react-slot@1.1.2", "@radix-ui/react-slot@^1.1.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz#daffff7b2bfe99ade63b5168407680b93c00e1c6" - integrity sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ== + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.3.tgz#502d6e354fc847d4169c3bc5f189de777f68cfe1" + integrity sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A== dependencies: - "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.2" -"@radix-ui/react-use-callback-ref@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1" - integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw== +"@radix-ui/react-use-callback-ref@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40" + integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg== -"@radix-ui/react-use-controllable-state@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0" - integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw== +"@radix-ui/react-use-controllable-state@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz#905793405de57d61a439f4afebbb17d0645f3190" + integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg== dependencies: - "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-effect-event" "0.0.2" + "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-use-escape-keydown@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz#31a5b87c3b726504b74e05dac1edce7437b98754" - integrity sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw== +"@radix-ui/react-use-effect-event@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz#090cf30d00a4c7632a15548512e9152217593907" + integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA== dependencies: - "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-use-layout-effect@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27" - integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w== +"@radix-ui/react-use-escape-keydown@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz#b3fed9bbea366a118f40427ac40500aa1423cc29" + integrity sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.1" + +"@radix-ui/react-use-layout-effect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e" + integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ== "@react-pdf/fns@2.2.1": version "2.2.1" - resolved "https://registry.npmjs.org/@react-pdf/fns/-/fns-2.2.1.tgz#04fe664a6f70214569c9c27e249e3395836f37d5" + resolved "https://registry.yarnpkg.com/@react-pdf/fns/-/fns-2.2.1.tgz#04fe664a6f70214569c9c27e249e3395836f37d5" integrity sha512-s78aDg0vDYaijU5lLOCsUD+qinQbfOvcNeaoX9AiE7+kZzzCo6B/nX+l48cmt9OosJmvZvE9DWR9cLhrhOi2pA== dependencies: "@babel/runtime" "^7.20.13" +"@react-pdf/fns@3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@react-pdf/fns/-/fns-3.1.2.tgz#9ce7351d9fdf1cdb6e9c6ffd6801bc65f29f991c" + integrity sha512-qTKGUf0iAMGg2+OsUcp9ffKnKi41RukM/zYIWMDJ4hRVYSr89Q7e3wSDW/Koqx3ea3Uy/z3h2y3wPX6Bdfxk6g== + "@react-pdf/font@^2.5.2": version "2.5.2" - resolved "https://registry.npmjs.org/@react-pdf/font/-/font-2.5.2.tgz#4a2fcaac3b55470a2727387ec28937b54cba0d77" + resolved "https://registry.yarnpkg.com/@react-pdf/font/-/font-2.5.2.tgz#4a2fcaac3b55470a2727387ec28937b54cba0d77" integrity sha512-Ud0EfZ2FwrbvwAWx8nz+KKLmiqACCH9a/N/xNDOja0e/YgSnqTpuyHegFBgIMKjuBtO5dNvkb4dXkxAhGe/ayw== dependencies: "@babel/runtime" "^7.20.13" @@ -1875,9 +1205,19 @@ fontkit "^2.0.2" is-url "^1.2.4" +"@react-pdf/font@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@react-pdf/font/-/font-4.0.2.tgz#58ede51937bb57025dcf221b107e248d0ea9d60b" + integrity sha512-/dAWu7Y2RD1RxarDZ9SkYPHgBYOhmcDnet4W/qN/m8k+A2Hr3ja54GymSR7GGxWBtxjKtNauVKrTa9LS1n8WUw== + dependencies: + "@react-pdf/pdfkit" "^4.0.3" + "@react-pdf/types" "^2.9.0" + fontkit "^2.0.2" + is-url "^1.2.4" + "@react-pdf/image@^2.3.6": version "2.3.6" - resolved "https://registry.npmjs.org/@react-pdf/image/-/image-2.3.6.tgz#72444842517f8b0c08bbf4c216d8b41110498d16" + resolved "https://registry.yarnpkg.com/@react-pdf/image/-/image-2.3.6.tgz#72444842517f8b0c08bbf4c216d8b41110498d16" integrity sha512-7iZDYZrZlJqNzS6huNl2XdMcLFUo68e6mOdzQeJ63d5eApdthhSHBnkGzHfLhH5t8DCpZNtClmklzuLL63ADfw== dependencies: "@babel/runtime" "^7.20.13" @@ -1887,7 +1227,7 @@ "@react-pdf/layout@^3.13.0": version "3.13.0" - resolved "https://registry.npmjs.org/@react-pdf/layout/-/layout-3.13.0.tgz#2ef1423f32e891b5ec24f2d9d5c2daad4da01c66" + resolved "https://registry.yarnpkg.com/@react-pdf/layout/-/layout-3.13.0.tgz#2ef1423f32e891b5ec24f2d9d5c2daad4da01c66" integrity sha512-lpPj/EJYHFOc0ALiJwLP09H28B4ADyvTjxOf67xTF+qkWd+dq1vg7dw3wnYESPnWk5T9NN+HlUenJqdYEY9AvA== dependencies: "@babel/runtime" "^7.20.13" @@ -1905,7 +1245,7 @@ "@react-pdf/pdfkit@^3.2.0": version "3.2.0" - resolved "https://registry.npmjs.org/@react-pdf/pdfkit/-/pdfkit-3.2.0.tgz#d4a088b8cc61c35512dc885e67ff2c6058518bea" + resolved "https://registry.yarnpkg.com/@react-pdf/pdfkit/-/pdfkit-3.2.0.tgz#d4a088b8cc61c35512dc885e67ff2c6058518bea" integrity sha512-OBfCcnTC6RpD9uv9L2woF60Zj1uQxhLFzTBXTdcYE9URzPE/zqXIyzpXEA4Vf3TFbvBCgFE2RzJ2ZUS0asq7yA== dependencies: "@babel/runtime" "^7.20.13" @@ -1916,21 +1256,47 @@ jay-peg "^1.0.2" vite-compatible-readable-stream "^3.6.1" +"@react-pdf/pdfkit@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@react-pdf/pdfkit/-/pdfkit-4.0.3.tgz#8b8a0e7e2aadbbada738a1c164f06ffff2947c8b" + integrity sha512-k+Lsuq8vTwWsCqTp+CCB4+2N+sOTFrzwGA7aw3H9ix/PDWR9QksbmNg0YkzGbLAPI6CeawmiLHcf4trZ5ecLPQ== + dependencies: + "@babel/runtime" "^7.20.13" + "@react-pdf/png-js" "^3.0.0" + browserify-zlib "^0.2.0" + crypto-js "^4.2.0" + fontkit "^2.0.2" + jay-peg "^1.1.1" + linebreak "^1.1.0" + vite-compatible-readable-stream "^3.6.1" + "@react-pdf/png-js@^2.3.1": version "2.3.1" - resolved "https://registry.npmjs.org/@react-pdf/png-js/-/png-js-2.3.1.tgz#5381d5443ac1134e98fc446fa1debb45950665bc" + resolved "https://registry.yarnpkg.com/@react-pdf/png-js/-/png-js-2.3.1.tgz#5381d5443ac1134e98fc446fa1debb45950665bc" integrity sha512-pEZ18I4t1vAUS4lmhvXPmXYP4PHeblpWP/pAlMMRkEyP7tdAeHUN7taQl9sf9OPq7YITMY3lWpYpJU6t4CZgZg== dependencies: browserify-zlib "^0.2.0" +"@react-pdf/png-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-pdf/png-js/-/png-js-3.0.0.tgz#c0b7dc7c77e36f0830e9b7bccca7ddd64ada1c5e" + integrity sha512-eSJnEItZ37WPt6Qv5pncQDxLJRK15eaRwPT+gZoujP548CodenOVp49GST8XJvKMFt9YqIBzGBV/j9AgrOQzVA== + dependencies: + browserify-zlib "^0.2.0" + "@react-pdf/primitives@^3.1.1": version "3.1.1" - resolved "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-3.1.1.tgz#45a3253806fa61046f3821b8553bfee3cd848d14" + resolved "https://registry.yarnpkg.com/@react-pdf/primitives/-/primitives-3.1.1.tgz#45a3253806fa61046f3821b8553bfee3cd848d14" integrity sha512-miwjxLwTnO3IjoqkTVeTI+9CdyDggwekmSLhVCw+a/7FoQc+gF3J2dSKwsHvAcVFM0gvU8mzCeTofgw0zPDq0w== +"@react-pdf/primitives@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@react-pdf/primitives/-/primitives-4.1.1.tgz#c7bfb7e83173661b6ec50ada4aba8dc9e94d0563" + integrity sha512-IuhxYls1luJb7NUWy6q5avb1XrNaVj9bTNI40U9qGRuS6n7Hje/8H8Qi99Z9UKFV74bBP3DOf3L1wV2qZVgVrQ== + "@react-pdf/render@^3.5.0": version "3.5.0" - resolved "https://registry.npmjs.org/@react-pdf/render/-/render-3.5.0.tgz#1be1f7ca280473680ce4f11e90b697e2c635ad16" + resolved "https://registry.yarnpkg.com/@react-pdf/render/-/render-3.5.0.tgz#1be1f7ca280473680ce4f11e90b697e2c635ad16" integrity sha512-gFOpnyqCgJ6l7VzfJz6rG1i2S7iVSD8bUHDjPW9Mze8TmyksHzN2zBH3y7NbsQOw1wU6hN4NhRmslrsn+BRDPA== dependencies: "@babel/runtime" "^7.20.13" @@ -1946,7 +1312,7 @@ "@react-pdf/renderer@^3.4.5": version "3.4.5" - resolved "https://registry.npmjs.org/@react-pdf/renderer/-/renderer-3.4.5.tgz#e369149d12815b53934183353fcfcee2386fb862" + resolved "https://registry.yarnpkg.com/@react-pdf/renderer/-/renderer-3.4.5.tgz#e369149d12815b53934183353fcfcee2386fb862" integrity sha512-O1N8q45bTs7YuC+x9afJSKQWDYQy2RjoCxlxEGdbCwP+WD5G6dWRUWXlc8F0TtzU3uFglYMmDab2YhXTmnVN9g== dependencies: "@babel/runtime" "^7.20.13" @@ -1964,7 +1330,7 @@ "@react-pdf/stylesheet@^4.3.0": version "4.3.0" - resolved "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-4.3.0.tgz#3b0ad11e8d304347c8de5caacaa708f16d4a0473" + resolved "https://registry.yarnpkg.com/@react-pdf/stylesheet/-/stylesheet-4.3.0.tgz#3b0ad11e8d304347c8de5caacaa708f16d4a0473" integrity sha512-x7IVZOqRrUum9quuDeFXBveXwBht+z/6B0M+z4a4XjfSg1vZVvzoTl07Oa1yvQ/4yIC5yIkG2TSMWeKnDB+hrw== dependencies: "@babel/runtime" "^7.20.13" @@ -1975,9 +1341,21 @@ media-engine "^1.0.3" postcss-value-parser "^4.1.0" +"@react-pdf/stylesheet@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@react-pdf/stylesheet/-/stylesheet-6.1.0.tgz#ca6b5b0f7cc749b36379379d943f648f8527d71a" + integrity sha512-BGZ2sYNUp38VJUegjva/jsri3iiRGnVNjWI+G9dTwAvLNOmwFvSJzqaCsEnqQ/DW5mrTBk/577FhDY7pv6AidA== + dependencies: + "@react-pdf/fns" "3.1.2" + "@react-pdf/types" "^2.9.0" + color-string "^1.9.1" + hsl-to-hex "^1.0.0" + media-engine "^1.0.3" + postcss-value-parser "^4.1.0" + "@react-pdf/textkit@^4.4.1": version "4.4.1" - resolved "https://registry.npmjs.org/@react-pdf/textkit/-/textkit-4.4.1.tgz#b4e4181ea7d4269c54a1794d4022b55c5135f0e7" + resolved "https://registry.yarnpkg.com/@react-pdf/textkit/-/textkit-4.4.1.tgz#b4e4181ea7d4269c54a1794d4022b55c5135f0e7" integrity sha512-Jl9wdTqIvJ5pX+vAGz0EOhP7ut5Two9H6CzTKo/YYPeD79cM2yTXF3JzTERBC28y7LR0Waq9D2LHQjI+b/EYUQ== dependencies: "@babel/runtime" "^7.20.13" @@ -1986,135 +1364,134 @@ hyphen "^1.6.4" unicode-properties "^1.4.1" -"@react-pdf/types@^2.6.0": - version "2.7.1" - resolved "https://registry.npmjs.org/@react-pdf/types/-/types-2.7.1.tgz#eb9f70be66b42c47f60c5afcc0af044ac48b98bf" - integrity sha512-MyjR1u+6SclQ/Tx6NP3/yoYZw7reXgC4OHFOrdMh/zeZ+ezfdGyovB+jdmVQuMe7Fsh64v7PUkO5tnsXHyCFWQ== +"@react-pdf/types@^2.6.0", "@react-pdf/types@^2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@react-pdf/types/-/types-2.9.0.tgz#a2721a847cb1ace2c31ca29b0303c7b51a2241c2" + integrity sha512-ckj80vZLlvl9oYrQ4tovEaqKWP3O06Eb1D48/jQWbdwz1Yh7Y9v1cEmwlP8ET+a1Whp8xfdM0xduMexkuPANCQ== + dependencies: + "@react-pdf/font" "^4.0.2" + "@react-pdf/primitives" "^4.1.1" + "@react-pdf/stylesheet" "^6.1.0" "@remirror/core-constants@3.0.0": version "3.0.0" - resolved "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz#96fdb89d25c62e7b6a5d08caf0ce5114370e3b8f" + resolved "https://registry.yarnpkg.com/@remirror/core-constants/-/core-constants-3.0.0.tgz#96fdb89d25c62e7b6a5d08caf0ce5114370e3b8f" integrity sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg== -"@rollup/rollup-android-arm-eabi@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz#f39f09f60d4a562de727c960d7b202a2cf797424" - integrity sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw== - -"@rollup/rollup-android-arm64@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz#d19af7e23760717f1d879d4ca3d2cd247742dff2" - integrity sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA== - -"@rollup/rollup-darwin-arm64@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz#1c3a2fbf205d80641728e05f4a56c909e95218b7" - integrity sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w== - -"@rollup/rollup-darwin-x64@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz#aa66d2ba1a25e609500e13bef06dc0e71cc0c0d4" - integrity sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg== - -"@rollup/rollup-freebsd-arm64@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz#df10a7b6316a0ef1028c6ca71a081124c537e30d" - integrity sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg== - -"@rollup/rollup-freebsd-x64@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz#a3fdce8a05e95b068cbcb46e4df5185e407d0c35" - integrity sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA== - -"@rollup/rollup-linux-arm-gnueabihf@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz#49f766c55383bd0498014a9d76924348c2f3890c" - integrity sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg== - -"@rollup/rollup-linux-arm-musleabihf@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz#1d4d7d32fc557e17d52e1857817381ea365e2959" - integrity sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA== - -"@rollup/rollup-linux-arm64-gnu@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz#f4fc317268441e9589edad3be8f62b6c03009bc1" - integrity sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA== - -"@rollup/rollup-linux-arm64-musl@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz#63a1f1b0671cb17822dabae827fef0e443aebeb7" - integrity sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg== - -"@rollup/rollup-linux-loongarch64-gnu@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz#c659b01cc6c0730b547571fc3973e1e955369f98" - integrity sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw== - -"@rollup/rollup-linux-powerpc64le-gnu@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz#612e746f9ad7e58480f964d65e0d6c3f4aae69a8" - integrity sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A== - -"@rollup/rollup-linux-riscv64-gnu@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz#4610dbd1dcfbbae32fbc10c20ae7387acb31110c" - integrity sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw== - -"@rollup/rollup-linux-riscv64-musl@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz#054911fab40dc83fafc21e470193c058108f19d8" - integrity sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw== - -"@rollup/rollup-linux-s390x-gnu@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz#98896eca8012547c7f04bd07eaa6896825f9e1a5" - integrity sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g== - -"@rollup/rollup-linux-x64-gnu@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz#01cf56844a1e636ee80dfb364e72c2b7142ad896" - integrity sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A== - -"@rollup/rollup-linux-x64-musl@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz#e67c7531df6dff0b4c241101d4096617fbca87c3" - integrity sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ== - -"@rollup/rollup-win32-arm64-msvc@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz#7eeada98444e580674de6989284e4baacd48ea65" - integrity sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ== - -"@rollup/rollup-win32-ia32-msvc@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz#516c4b54f80587b4a390aaf4940b40870271d35d" - integrity sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg== - -"@rollup/rollup-win32-x64-msvc@4.41.1": - version "4.41.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz#848f99b0d9936d92221bb6070baeff4db6947a30" - integrity sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw== +"@rollup/rollup-android-arm-eabi@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.1.tgz#f768e3b2b0e6b55c595d7a053652c06413713983" + integrity sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w== + +"@rollup/rollup-android-arm64@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.1.tgz#40379fd5501cfdfd7d8f86dfa1d3ce8d3a609493" + integrity sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ== + +"@rollup/rollup-darwin-arm64@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.1.tgz#972c227bc89fe8a38a3f0c493e1966900e4e1ff7" + integrity sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg== + +"@rollup/rollup-darwin-x64@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.1.tgz#96c919dcb87a5aa7dec5f7f77d90de881e578fdd" + integrity sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw== + +"@rollup/rollup-freebsd-arm64@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.1.tgz#d199d8eaef830179c0c95b7a6e5455e893d1102c" + integrity sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA== + +"@rollup/rollup-freebsd-x64@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.1.tgz#cab01f9e06ca756c1fabe87d64825ae016af4713" + integrity sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw== + +"@rollup/rollup-linux-arm-gnueabihf@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.1.tgz#f6f1c42036dba0e58dc2315305429beff0d02c78" + integrity sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ== + +"@rollup/rollup-linux-arm-musleabihf@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.1.tgz#1157e98e740facf858993fb51431dce3a4a96239" + integrity sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw== + +"@rollup/rollup-linux-arm64-gnu@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.1.tgz#b39db73f8a4c22e7db31a4f3fd45170105f33265" + integrity sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ== + +"@rollup/rollup-linux-arm64-musl@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.1.tgz#4043398049fe4449c1485312d1ae9ad8af4056dd" + integrity sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g== + +"@rollup/rollup-linux-loongarch64-gnu@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.1.tgz#855a80e7e86490da15a85dcce247dbc25265bc08" + integrity sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew== + +"@rollup/rollup-linux-powerpc64le-gnu@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.1.tgz#8cf843cb7ab1d42e1dda680937cf0a2db6d59047" + integrity sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA== + +"@rollup/rollup-linux-riscv64-gnu@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.1.tgz#287c085472976c8711f16700326f736a527f2f38" + integrity sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw== + +"@rollup/rollup-linux-riscv64-musl@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.1.tgz#095ad5e53a54ba475979f1b3226b92440c95c892" + integrity sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg== + +"@rollup/rollup-linux-s390x-gnu@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.1.tgz#a3dec8281d8f2aef1703e48ebc65d29fe847933c" + integrity sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw== + +"@rollup/rollup-linux-x64-gnu@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.1.tgz#4b211e6fd57edd6a134740f4f8e8ea61972ff2c5" + integrity sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw== + +"@rollup/rollup-linux-x64-musl@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.1.tgz#3ecbf8e21b4157e57bb15dc6837b6db851f9a336" + integrity sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g== + +"@rollup/rollup-win32-arm64-msvc@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.1.tgz#d4aae38465b2ad200557b53c8c817266a3ddbfd0" + integrity sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg== + +"@rollup/rollup-win32-ia32-msvc@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.1.tgz#0258e8ca052abd48b23fd6113360fa0cd1ec3e23" + integrity sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A== + +"@rollup/rollup-win32-x64-msvc@4.44.1": + version "4.44.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.1.tgz#1c982f6a5044ffc2a35cd754a0951bdcb44d5ba0" + integrity sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug== "@rtsao/scc@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== "@rushstack/eslint-patch@^1.3.3": - version "1.10.5" - resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.5.tgz#3a1c12c959010a55c17d46b395ed3047b545c246" - integrity sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A== + version "1.11.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz#75dce8e972f90bba488e2b0cc677fb233aa357ab" + integrity sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ== -"@sindresorhus/merge-streams@^2.1.0": - version "2.3.0" - resolved "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" - integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== - -"@storybook/addon-actions@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.5.4.tgz#8d1cd697a96d85d0e4d235b094753b3ac5610871" - integrity sha512-b7dwmVWaiJJmPdNrCCuy5wPD1HsPNGHCH+O9XJDrQpZ4EFREAcoWurIztldy5PV7DOOeLlW5rXxtwEEN41emQg== +"@storybook/addon-actions@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-8.6.14.tgz#e6bc8f5afc67853e6ce3e03fb0bdcfa67c0dec16" + integrity sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ== dependencies: "@storybook/global" "^5.0.0" "@types/uuid" "^9.0.1" @@ -2122,143 +1499,141 @@ polished "^4.2.2" uuid "^9.0.0" -"@storybook/addon-backgrounds@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.5.4.tgz#2021295f44f8ce02ac05724c12a335fc9ab134a2" - integrity sha512-PldWAiNGZ2gjwHSYpqCgkMAQ9kt6yZSZ6BMvQMEMZ5uUhTlQ65g/aSAVN8a3baM79idPA3yetnMm2ybXbUxKOQ== +"@storybook/addon-backgrounds@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-8.6.14.tgz#3840ce28339c3c16d001f751fd5f3125c0643ed7" + integrity sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg== dependencies: "@storybook/global" "^5.0.0" memoizerific "^1.11.3" ts-dedent "^2.0.0" -"@storybook/addon-controls@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.5.4.tgz#2d2b54e3fe3ec7afe51ea816d36d114e4c181ab6" - integrity sha512-6rI+IIYdTpR7RrZQfE1ixPINm+a4DOggs82PX8q8gLGErHQo1TSfLaUeNpysb9DTZev0PhTdajdiW4AVakMgyg== +"@storybook/addon-controls@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-8.6.14.tgz#4aafdd25276a0b86a8b744ef8344998f458cb5a5" + integrity sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw== dependencies: "@storybook/global" "^5.0.0" dequal "^2.0.2" ts-dedent "^2.0.0" -"@storybook/addon-docs@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.5.4.tgz#aa12e4adbdce1104f9befb70043c3f1e1c92202f" - integrity sha512-dLDM1oycm50a2wJVtuPwoNLIBmy8Z9r7e0F9InsPu9iTZAZLb6C5lYDNXG7GkFrRU/Q2yqSb9q7upoV7UiPGWA== +"@storybook/addon-docs@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-8.6.14.tgz#71fcf4cf06dae91cecd5668915a8c234b82748e9" + integrity sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ== dependencies: "@mdx-js/react" "^3.0.0" - "@storybook/blocks" "8.5.4" - "@storybook/csf-plugin" "8.5.4" - "@storybook/react-dom-shim" "8.5.4" + "@storybook/blocks" "8.6.14" + "@storybook/csf-plugin" "8.6.14" + "@storybook/react-dom-shim" "8.6.14" react "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" react-dom "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" ts-dedent "^2.0.0" "@storybook/addon-essentials@^8.1.1": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.5.4.tgz#978fc8357ea8075158396749bd7596a4c65c4e3c" - integrity sha512-syocWJaOI+JpV6aRhw1+QKFjJ0LEt1L/qDDz+UWyH2ryppXUkKQtc8nJVkLogkWODIZ/Q4cjIVD0kdrDSmtu0g== - dependencies: - "@storybook/addon-actions" "8.5.4" - "@storybook/addon-backgrounds" "8.5.4" - "@storybook/addon-controls" "8.5.4" - "@storybook/addon-docs" "8.5.4" - "@storybook/addon-highlight" "8.5.4" - "@storybook/addon-measure" "8.5.4" - "@storybook/addon-outline" "8.5.4" - "@storybook/addon-toolbars" "8.5.4" - "@storybook/addon-viewport" "8.5.4" + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-8.6.14.tgz#228f6ebeafba1d3368e8d900508dbdc86640ad34" + integrity sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA== + dependencies: + "@storybook/addon-actions" "8.6.14" + "@storybook/addon-backgrounds" "8.6.14" + "@storybook/addon-controls" "8.6.14" + "@storybook/addon-docs" "8.6.14" + "@storybook/addon-highlight" "8.6.14" + "@storybook/addon-measure" "8.6.14" + "@storybook/addon-outline" "8.6.14" + "@storybook/addon-toolbars" "8.6.14" + "@storybook/addon-viewport" "8.6.14" ts-dedent "^2.0.0" -"@storybook/addon-highlight@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.5.4.tgz#62d63e946059fe3249ee093aad57812794f20964" - integrity sha512-llrxTpzJs+F61nU9ZPaVhw8iHE3hVSc5bVRuEFSRRroJC/wSNGBHz9nLBfmZ7w+06dXK4S5DRHbYehBLRRzj3Q== +"@storybook/addon-highlight@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-8.6.14.tgz#f5fb86bfae8b485cd49e8e2732eb05e049cd60cb" + integrity sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ== dependencies: "@storybook/global" "^5.0.0" "@storybook/addon-interactions@^8.1.1": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.5.4.tgz#9a2a9c8c0de341df8bb92544e67296de98086ff5" - integrity sha512-9xhz7goOKV13WIAcrCZs4kP7pMutLqyMygjCt+oNHCiDx7Sj8q+heVT46uSR1xkgZU1C7uKpUeQWkb+kfkB54Q== + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-interactions/-/addon-interactions-8.6.14.tgz#f836fed81b4fb5a5ef09afaeb15902cdb933624e" + integrity sha512-8VmElhm2XOjh22l/dO4UmXxNOolGhNiSpBcls2pqWSraVh4a670EyYBZsHpkXqfNHo2YgKyZN3C91+9zfH79qQ== dependencies: "@storybook/global" "^5.0.0" - "@storybook/instrumenter" "8.5.4" - "@storybook/test" "8.5.4" + "@storybook/instrumenter" "8.6.14" + "@storybook/test" "8.6.14" polished "^4.2.2" ts-dedent "^2.2.0" "@storybook/addon-links@^8.1.1": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.5.4.tgz#ab0dcc30275b03c8cce2b92f822596dfad9f9dbb" - integrity sha512-t28NJXhtTGa4RbzGOWNoL0T9liqhdlVbq3wkhbpUgXI4ay5BA2bVsVUuO7vKDp26oNeaZDsSyWv78Gg7FoeVmQ== + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-8.6.14.tgz#d7d30b5f96dd6b5b93046dec5a37d2e9b0ae44d0" + integrity sha512-DRlXHIyZzOruAZkxmXfVgTF+4d6K27pFcH4cUsm3KT1AXuZbr23lb5iZHpUZoG6lmU85Sru4xCEgewSTXBIe1w== dependencies: - "@storybook/csf" "0.1.12" "@storybook/global" "^5.0.0" ts-dedent "^2.0.0" -"@storybook/addon-measure@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.5.4.tgz#711d01ee33d5df726eb771be135780928d80e672" - integrity sha512-VmKvXGm7s++BUrnmT8GHw2A3x+nDTk+8PtP4cBVaqMqyiYOd7ycWDrCTrLl/sm+WcYo3NY9/iXYNgluN4rKQ5Q== +"@storybook/addon-measure@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-8.6.14.tgz#cafe8742616f0df6f82eadc0ee268bbca6ac4843" + integrity sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw== dependencies: "@storybook/global" "^5.0.0" tiny-invariant "^1.3.1" "@storybook/addon-onboarding@^8.1.1": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-onboarding/-/addon-onboarding-8.5.4.tgz#49ad7197e3222ddc574a168e8055f5b572fd1f2b" - integrity sha512-QCj1HY2G+Rs60i0bhWEl1675MZ/iBLBofFyubmP2G8cdgYMLUrOtbrd0cQBp11TSGVNzkT8sCDHYW+JEtsb0tQ== + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-onboarding/-/addon-onboarding-8.6.14.tgz#82453d71595572818bf3a72899e6d506806475c3" + integrity sha512-bHdHiGJFigVcSzMIsNLHY5IODZHr+nKwyz5/QOZLMkLcGH2IaUbOJfm4RyGOaTTPsUtAKbdsVXNEG3Otf+qO9A== -"@storybook/addon-outline@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.5.4.tgz#edc388fb0eb508391d35050f195b5503ce027cd0" - integrity sha512-DSrTzQpCObZ9Af3djJPWVkBxvUfkBtMMeXKaGazOZem90vk2r1Q2PRaX8J/xhWxMhZtvjQuYexAyn5O7JxdaWA== +"@storybook/addon-outline@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-8.6.14.tgz#8a779cd6cdaf935964fe6d6c30ebf929218e23d5" + integrity sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w== dependencies: "@storybook/global" "^5.0.0" ts-dedent "^2.0.0" "@storybook/addon-styling-webpack@^1.0.0": version "1.0.1" - resolved "https://registry.npmjs.org/@storybook/addon-styling-webpack/-/addon-styling-webpack-1.0.1.tgz#660ee002ec249f6e32dd2784abfa50f59ef97951" + resolved "https://registry.yarnpkg.com/@storybook/addon-styling-webpack/-/addon-styling-webpack-1.0.1.tgz#660ee002ec249f6e32dd2784abfa50f59ef97951" integrity sha512-5n+SXPfMTc4m7sWaJWPWjoHYWc6/B111M2Ia55toQ3GV4ON4vVlTgH9FX+EgCkDticElj99HLTMDJkHRj2yvkg== dependencies: "@storybook/node-logger" "^8.0.0-alpha.10" -"@storybook/addon-toolbars@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.5.4.tgz#6c79ed56cdc732301b41cfcc0b31f64e88e14f86" - integrity sha512-aszYJ8VJjaQV6RcZhD27NMSHpPHygt130l3VnRg1EqKN/r2QdNU1hVC8n2EPASYOJfOQH4Q9eySIplbQYSt0+g== +"@storybook/addon-toolbars@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-8.6.14.tgz#6d53ba81ee7179621798fe0302d453e47ecfaeba" + integrity sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ== -"@storybook/addon-viewport@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.5.4.tgz#2e4d90071302d9c50d5788403c8669ae406c6e8d" - integrity sha512-CweXFUXmdG9d4uRVspGzhtrzwyLYQMKLIpjz1N5jDHiT234+xWKYtlqYbpmm5x56M/w9kzxqIWgyMgB/i2mPIA== +"@storybook/addon-viewport@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-8.6.14.tgz#d948fcb0a91dadd7f4735913c8eee6c376d49baa" + integrity sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA== dependencies: memoizerific "^1.11.3" "@storybook/addon-webpack5-compiler-swc@^1.0.2": version "1.0.6" - resolved "https://registry.npmjs.org/@storybook/addon-webpack5-compiler-swc/-/addon-webpack5-compiler-swc-1.0.6.tgz#6fe1d3af421e3efc935c866a719e02b62f2ab6ea" + resolved "https://registry.yarnpkg.com/@storybook/addon-webpack5-compiler-swc/-/addon-webpack5-compiler-swc-1.0.6.tgz#6fe1d3af421e3efc935c866a719e02b62f2ab6ea" integrity sha512-QiZheKKYsUCAtPn9phwtmOBAWBNxnxyfu5E+HUSQIbX94pTwc3ROufJ3g1R/RMQZcklOYXpSI0V8FS1m6aUVkg== dependencies: "@swc/core" "^1.7.3" swc-loader "^0.2.3" -"@storybook/blocks@8.5.4", "@storybook/blocks@^8.1.1": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.5.4.tgz#cf91a257ab8e756d53393126251708149cfa8d26" - integrity sha512-QLfQ5KX6m2FAsz1zjB+mUp9jEA+LCzIHo3BxLr/tWN3pIwSURoHs2wrHDXT2r+wu5CBesGvTKI4KUWlsxsOF9g== +"@storybook/blocks@8.6.14", "@storybook/blocks@^8.1.1": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-8.6.14.tgz#9d39e64f4fd0a446d96f1f5d6b220d4812fc05fa" + integrity sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ== dependencies: - "@storybook/csf" "0.1.12" "@storybook/icons" "^1.2.12" ts-dedent "^2.0.0" -"@storybook/builder-webpack5@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-8.5.4.tgz#d5f5f0c97c6b8dace63f0abe4b314a50d7e17c30" - integrity sha512-bOcq7qrcW31Oy1RcR7utgr3SEYBvSj5wiQYHmRMgvAbcmWP80mP6scTHFdauvc/kzKE11Yri9CT/KG9GgoEm4g== +"@storybook/builder-webpack5@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-8.6.14.tgz#18e9f0d34b989ad1e4ed5b79a71c82b2bc727fd4" + integrity sha512-YZYAqc6NBKoMTKZpjxnkMch6zDtMkBZdS/yaji1+wJX2QPFBwTbSh7SpeBxDp1S11gXSAJ4f1btUWeqSqo8nJA== dependencies: - "@storybook/core-webpack" "8.5.4" + "@storybook/core-webpack" "8.6.14" "@types/semver" "^7.3.4" browser-assert "^1.2.1" case-sensitive-paths-webpack-plugin "^2.4.0" @@ -2283,27 +1658,27 @@ webpack-hot-middleware "^2.25.1" webpack-virtual-modules "^0.6.0" -"@storybook/components@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/components/-/components-8.5.4.tgz#f1eab3e26c687a225e21a0e8af5f257f6326601e" - integrity sha512-z4lWN4W1cUqlhOFQ3Kg33Yu4uuoOvECQtxJqNHUPFsHNOtIbYIdUMCLwiJFUxrzdJXUnOqn5QTcsFerWX6Roag== +"@storybook/components@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-8.6.14.tgz#3cfc5e120f3dc38990fc37b34a22eff1e3f4bdfb" + integrity sha512-HNR2mC5I4Z5ek8kTrVZlIY/B8gJGs5b3XdZPBPBopTIN6U/YHXiDyOjY3JlaS4fSG1fVhp/Qp1TpMn1w/9m1pw== -"@storybook/core-webpack@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-8.5.4.tgz#430ebf12a063efb03859fa105bb09c32feaddd79" - integrity sha512-YOlzywqG4pVFYMzkmYuMrueI4swofOaoKvQjlVIE/8fP7vSu7HhhBbtlxowd0i08UjP/wSVq0zvxl9RGxHWq5Q== +"@storybook/core-webpack@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/core-webpack/-/core-webpack-8.6.14.tgz#2d2d3aca9cff01bcb33d1b6067d5dd69727998f1" + integrity sha512-iG7r8osNKabSGBbuJuSeMWKbU+ilt5PvzTYkClcYaagla/DliXkXvfywA6jOugVk/Cpx+c6tVKlPfjLcaQHwmw== dependencies: ts-dedent "^2.0.0" -"@storybook/core@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/core/-/core-8.5.4.tgz#7dfdd3496620f607253bd23bb004d602e17114ee" - integrity sha512-x7SoqdDAi6+x7hFRF7SIcxKKNdj8E1pK0B9k6uf+cop16/mxNWazqQFJRpKRE66h/ImYqopMnpX3ASaa3Khm4w== +"@storybook/core@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-8.6.14.tgz#335b067709fd649512b6553b31ad48c8c56f7ed9" + integrity sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA== dependencies: - "@storybook/csf" "0.1.12" + "@storybook/theming" "8.6.14" better-opn "^3.0.2" browser-assert "^1.2.1" - esbuild "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0" + esbuild "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0" esbuild-register "^3.5.0" jsdoc-type-pratt-parser "^4.0.0" process "^0.11.10" @@ -2312,55 +1687,48 @@ util "^0.12.5" ws "^8.2.3" -"@storybook/csf-plugin@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.5.4.tgz#e8638a45f07fd3e9d080c29c3cf7f2737438e6af" - integrity sha512-W368wMblH861QlW5gfZEwF/LYrWQ2NheXgikBfYv73se1WxvQCo8IMLXCNpgmYhse81GsvXRddKULGsqDSH37A== +"@storybook/csf-plugin@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-8.6.14.tgz#c7fc0361204a34693e8d62ebe5922d77dfec06c0" + integrity sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ== dependencies: unplugin "^1.3.1" -"@storybook/csf@0.1.12": - version "0.1.12" - resolved "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.12.tgz#1dcfa0f398a69b834c563884b5f747db3d5a81df" - integrity sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw== - dependencies: - type-fest "^2.19.0" - "@storybook/global@^5.0.0": version "5.0.0" - resolved "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed" + resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed" integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== "@storybook/icons@^1.2.12": - version "1.3.2" - resolved "https://registry.npmjs.org/@storybook/icons/-/icons-1.3.2.tgz#e9b92c35ca789ff79f9d0b3848829dd6490ca628" - integrity sha512-t3xcbCKkPvqyef8urBM0j/nP6sKtnlRkVgC+8JTbTAZQjaTmOjes3byEgzs89p4B/K6cJsg9wLW2k3SknLtYJw== + version "1.4.0" + resolved "https://registry.yarnpkg.com/@storybook/icons/-/icons-1.4.0.tgz#7cf7ab3dfb41943930954c4ef493a73798d8b31d" + integrity sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA== -"@storybook/instrumenter@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.5.4.tgz#002e79b6d1d618c6249cfa82a1adf79e298535ad" - integrity sha512-6Y2d6SNZslZl2UhkfH8Ml6SzKX5b2x/QRBwkLAAXc/xZcFdK5luAOPk/fW1BU7jEAPAjtn493V3oo2nGA5D22A== +"@storybook/instrumenter@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-8.6.14.tgz#85bf47e34348f17dfbb99080312eefb2f535bd65" + integrity sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ== dependencies: "@storybook/global" "^5.0.0" "@vitest/utils" "^2.1.1" -"@storybook/manager-api@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.5.4.tgz#3d198104264af3ffac27b0a6c3700b822484af16" - integrity sha512-kFK5DM+4YPob0qdiXN5DJh33fDyQvNJb7IAobDS/rPo2L+t6M+DAgqEsXLQXT9nUbnUD9IcCjwEnjKa+EHU2RA== +"@storybook/manager-api@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-8.6.14.tgz#1e0740193fbfd4a66e9ff5f75c7f976e16028752" + integrity sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g== "@storybook/node-logger@^8.0.0-alpha.10": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.5.4.tgz#0805ba35a71ece96b29458fd76dee71900310901" - integrity sha512-76vc3gkwOO6gnh/l4uRbYQ4AFNcWoklOED0Ck6yP2OsuH5lRb8sayeE9sluRCathXHBiI2nW1c85P8OeYCP55w== + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-8.6.14.tgz#f5f6971a88e21c20855506ab54be22ab43673946" + integrity sha512-/H67NMvc9hDOaNgVragsHaeXQ5JzwAQfyx1QeL4vlx2SPGoWXmxpoRXZTpOJRaNOhKlYh6sDj/3Lx2xOH5IxnQ== -"@storybook/preset-react-webpack@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-8.5.4.tgz#916e54cebd4e0f8fe6f2c11f4ba0471883921cae" - integrity sha512-4T9wzY+G0TtyzAqlqFwOujffxxjxrJGY2vLtHVWNP5kTjqIdmmqes7LFz+69Pmily1qKJg+bIPkelu/MUBECRA== +"@storybook/preset-react-webpack@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/preset-react-webpack/-/preset-react-webpack-8.6.14.tgz#c8a402afe857dbe1d04f2ebee492521adaff1ae7" + integrity sha512-M7Q6ErNx7N2hQorTz0OLa3YV8nc8OcvkDlCxqqnkHPGQNEIWEpeDvq3wn2OvZlrHDpchyuiquGXZ8aztVtBP2g== dependencies: - "@storybook/core-webpack" "8.5.4" - "@storybook/react" "8.5.4" + "@storybook/core-webpack" "8.6.14" + "@storybook/react" "8.6.14" "@storybook/react-docgen-typescript-plugin" "1.0.6--canary.9.0c3f3b7.0" "@types/semver" "^7.3.4" find-up "^5.0.0" @@ -2371,14 +1739,14 @@ tsconfig-paths "^4.2.0" webpack "5" -"@storybook/preview-api@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.5.4.tgz#ea3f05bfbbc2924c1112fd25befdc8be28101ee0" - integrity sha512-V9cTl5uWRmWAA4hCmz97PxgP0QYq2DpJUpeSxt/+Hhhm1OYTxAYJWt6Y3pIfqEFhOFjQzZwTprzGYzVjk4S3DA== +"@storybook/preview-api@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.6.14.tgz#b4a1eda7ecf17c4d3a07aa9a42ed1251de121f74" + integrity sha512-2GhcCd4dNMrnD7eooEfvbfL4I83qAqEyO0CO7JQAmIO6Rxb9BsOLLI/GD5HkvQB73ArTJ+PT50rfaO820IExOQ== "@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0": version "1.0.6--canary.9.0c3f3b7.0" - resolved "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz#7f10f3c641f32e4513a8b6ffb5036933e7059534" + resolved "https://registry.yarnpkg.com/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz#7f10f3c641f32e4513a8b6ffb5036933e7059534" integrity sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q== dependencies: debug "^4.1.1" @@ -2389,144 +1757,143 @@ react-docgen-typescript "^2.2.2" tslib "^2.0.0" -"@storybook/react-dom-shim@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.5.4.tgz#32f2d82b0a7478f5ad39013fba5d0a093b4e7a01" - integrity sha512-m6soTAZFlOH5L2CW3V3g1eJ9Z06Gzgv8urOrnqeBmyCTcpuzxs4GRf9whvu5x/ULZAuvAL77H53d9W1/UYI4sQ== +"@storybook/react-dom-shim@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-8.6.14.tgz#02fc8aeab701040744d93b6ef46b9e5727123370" + integrity sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw== "@storybook/react-webpack5@^8.1.1": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-8.5.4.tgz#57f2f37e044c0f2ce1e0ef2b33eb7a650d3a7962" - integrity sha512-rXdvr2Ls22chU8BoiCFicaERKo3vZarrHeS4y++pL5ef+RIU0bnZitxGyhusolL6s2q36ZS6u+i1BXr//c0Ynw== + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/react-webpack5/-/react-webpack5-8.6.14.tgz#2a3d23787153e31a2943078904648b188669a777" + integrity sha512-ka0q9tQBLruhO38sybP/MkZzejqAltce7HJTJ2KKbUYUlbvuG7m56tBX7DVC5JaImbsO3b8fqOrKH7gRt4KYrQ== dependencies: - "@storybook/builder-webpack5" "8.5.4" - "@storybook/preset-react-webpack" "8.5.4" - "@storybook/react" "8.5.4" + "@storybook/builder-webpack5" "8.6.14" + "@storybook/preset-react-webpack" "8.6.14" + "@storybook/react" "8.6.14" -"@storybook/react@8.5.4", "@storybook/react@^8.1.1": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/react/-/react-8.5.4.tgz#cbf286803bf8dc6477dab582b82f010e2c3b6bfc" - integrity sha512-4OipHaxH+IYqrYrX25kjrXTC3gj0NhpksYG/cfZ38MgLY+odFHGI7hNMgx9YMoaL/pnQRtnVjWaz2nIahsUXSA== +"@storybook/react@8.6.14", "@storybook/react@^8.1.1": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-8.6.14.tgz#80136abcbc6e96ef5f747aef5c4e6afc40b3dce4" + integrity sha512-BOepx5bBFwl/CPI+F+LnmMmsG1wQYmrX/UQXgUbHQUU9Tj7E2ndTnNbpIuSLc8IrM03ru+DfwSg1Co3cxWtT+g== dependencies: - "@storybook/components" "8.5.4" + "@storybook/components" "8.6.14" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "8.5.4" - "@storybook/preview-api" "8.5.4" - "@storybook/react-dom-shim" "8.5.4" - "@storybook/theming" "8.5.4" + "@storybook/manager-api" "8.6.14" + "@storybook/preview-api" "8.6.14" + "@storybook/react-dom-shim" "8.6.14" + "@storybook/theming" "8.6.14" -"@storybook/test@8.5.4", "@storybook/test@^8.1.1": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/test/-/test-8.5.4.tgz#700d9fdd08c3ce76dc0f3d98fd35a7c68b9a8b1e" - integrity sha512-H7zV39GLiUSz/M7fJtv/NWOF1J99CTAqqXMaETwJU5wEpkj1Q3jzmWss+UFtl5x7f/OZC4niP9s9A3G8rZHpKw== +"@storybook/test@8.6.14", "@storybook/test@^8.1.1": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/test/-/test-8.6.14.tgz#7b90708f13adabdac0fe8d08889d763608f6a481" + integrity sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw== dependencies: - "@storybook/csf" "0.1.12" "@storybook/global" "^5.0.0" - "@storybook/instrumenter" "8.5.4" + "@storybook/instrumenter" "8.6.14" "@testing-library/dom" "10.4.0" "@testing-library/jest-dom" "6.5.0" "@testing-library/user-event" "14.5.2" "@vitest/expect" "2.0.5" "@vitest/spy" "2.0.5" -"@storybook/theming@8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@storybook/theming/-/theming-8.5.4.tgz#9e50d3c16e0c3885de5ed02925de1e0cbf0e7dfa" - integrity sha512-mgMQDe6rF0fS3cDGx55KSzv0URA9Eefo89uoh2oKUmv5+M30067axNK62A9Ys03fSVcB11Iccen0cyu3SHeiyw== - -"@swc/core-darwin-arm64@1.10.15": - version "1.10.15" - resolved "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.15.tgz#1703ee8e98ea859965bfc7a912db4c452dc4ca36" - integrity sha512-zFdZ6/yHqMCPk7OhLFqHy/MQ1EqJhcZMpNHd1gXYT7VRU3FaqvvKETrUlG3VYl65McPC7AhMRfXPyJ0JO/jARQ== - -"@swc/core-darwin-x64@1.10.15": - version "1.10.15" - resolved "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.15.tgz#e8d60fc04ca56b1e5644b25f0032093a5bef70a0" - integrity sha512-8g4yiQwbr8fxOOjKXdot0dEkE5zgE8uNZudLy/ZyAhiwiZ8pbJ8/wVrDOu6dqbX7FBXAoDnvZ7fwN1jk4C8jdA== - -"@swc/core-linux-arm-gnueabihf@1.10.15": - version "1.10.15" - resolved "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.15.tgz#1ec6d2caf1a8a099e13dcd459f45be2fb4febde8" - integrity sha512-rl+eVOltl2+7WXOnvmWBpMgh6aO13G5x0U0g8hjwlmD6ku3Y9iRcThpOhm7IytMEarUp5pQxItNoPq+VUGjVHg== - -"@swc/core-linux-arm64-gnu@1.10.15": - version "1.10.15" - resolved "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.15.tgz#dfcf6a63e9d6cb75779411e637c86ff7a04d352b" - integrity sha512-qxWEQeyAJMWJqjaN4hi58WMpPdt3Tn0biSK9CYRegQtvZWCbewr6v2agtSu5AZ2rudeH6OfCWAMDQQeSgn6PJQ== - -"@swc/core-linux-arm64-musl@1.10.15": - version "1.10.15" - resolved "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.15.tgz#a629b47066f83730b757743145e2c8354a42164f" - integrity sha512-QcELd9/+HjZx0WCxRrKcyKGWTiQ0485kFb5w8waxcSNd0d9Lgk4EFfWWVyvIb5gIHpDQmhrgzI/yRaWQX4YSZQ== - -"@swc/core-linux-x64-gnu@1.10.15": - version "1.10.15" - resolved "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.15.tgz#2a5ec7ed21b38d6f07524ec6af6ae90c10ad3f63" - integrity sha512-S1+ZEEn3+a/MiMeQqQypbwTGoBG8/sPoCvpNbk+uValyygT+jSn3U0xVr45FbukpmMB+NhBMqfedMLqKA0QnJA== - -"@swc/core-linux-x64-musl@1.10.15": - version "1.10.15" - resolved "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.15.tgz#64bf2a9d4b3858a002a4879833245c25e742149b" - integrity sha512-qW+H9g/2zTJ4jP7NDw4VAALY0ZlNEKzYsEoSj/HKi7k3tYEHjMzsxjfsY9I8WZCft23bBdV3RTCPoxCshaj1CQ== - -"@swc/core-win32-arm64-msvc@1.10.15": - version "1.10.15" - resolved "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.15.tgz#1c703c90873991b37a49df056af0f71bd632db5b" - integrity sha512-AhRB11aA6LxjIqut+mg7qsu/7soQDmbK6MKR9nP3hgBszpqtXbRba58lr24xIbBCMr+dpo6kgEapWt+t5Po6Zg== - -"@swc/core-win32-ia32-msvc@1.10.15": - version "1.10.15" - resolved "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.15.tgz#09f86d172b08913aaf0b96aa1596505cd95447af" - integrity sha512-UGdh430TQwbDn6KjgvRTg1fO022sbQ4yCCHUev0+5B8uoBwi9a89qAz3emy2m56C8TXxUoihW9Y9OMfaRwPXUw== - -"@swc/core-win32-x64-msvc@1.10.15": - version "1.10.15" - resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.15.tgz#70bcf83837d331e5cebaf2195a1e696549fdfef3" - integrity sha512-XJzBCqO1m929qbJsOG7FZXQWX26TnEoMctS3QjuCoyBmkHxxQmZsy78KjMes1aomTcKHCyFYgrRGWgVmk7tT4Q== +"@storybook/theming@8.6.14": + version "8.6.14" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.6.14.tgz#78c6dc878f705de70c67f2b2d08b8313b985d81a" + integrity sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg== + +"@swc/core-darwin-arm64@1.12.7": + version "1.12.7" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.12.7.tgz#d939a2a8137de143927fbb9d0954c9bd501515a9" + integrity sha512-w6BBT0hBRS56yS+LbReVym0h+iB7/PpCddqrn1ha94ra4rZ4R/A91A/rkv+LnQlPqU/+fhqdlXtCJU9mrhCBtA== + +"@swc/core-darwin-x64@1.12.7": + version "1.12.7" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.12.7.tgz#577337cf54df2e95201d25064937ffc717edce32" + integrity sha512-jN6LhFfGOpm4DY2mXPgwH4aa9GLOwublwMVFFZ/bGnHYYCRitLZs9+JWBbyWs7MyGcA246Ew+EREx36KVEAxjA== + +"@swc/core-linux-arm-gnueabihf@1.12.7": + version "1.12.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.12.7.tgz#d837713bcd457b7d48cd8d3120cb407964fb748c" + integrity sha512-rHn8XXi7G2StEtZRAeJ6c7nhJPDnqsHXmeNrAaYwk8Tvpa6ZYG2nT9E1OQNXj1/dfbSFTjdiA8M8ZvGYBlpBoA== + +"@swc/core-linux-arm64-gnu@1.12.7": + version "1.12.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.12.7.tgz#cb49017eff530d24c1b3f2e7ff91d85cf1218ec0" + integrity sha512-N15hKizSSh+hkZ2x3TDVrxq0TDcbvDbkQJi2ZrLb9fK+NdFUV/x+XF16ZDPlbxtrGXl1CT7VD439SNaMN9F7qw== + +"@swc/core-linux-arm64-musl@1.12.7": + version "1.12.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.12.7.tgz#44ae48b2cd1498b178a8078d91dd24ee6ed0f508" + integrity sha512-jxyINtBezpxd3eIUDiDXv7UQ87YWlPsM9KumOwJk09FkFSO4oYxV2RT+Wu+Nt5tVWue4N0MdXT/p7SQsDEk4YA== + +"@swc/core-linux-x64-gnu@1.12.7": + version "1.12.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.12.7.tgz#064cdbbffc2e0d67fd01fb0d10145fc308e269f5" + integrity sha512-PR4tPVwU1BQBfFDk2XfzXxsEIjF3x/bOV1BzZpYvrlkU0TKUDbR4t2wzvsYwD/coW7/yoQmlL70/qnuPtTp1Zw== + +"@swc/core-linux-x64-musl@1.12.7": + version "1.12.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.12.7.tgz#f775b66551be2d6628cf2d9e624df7b7ab61785d" + integrity sha512-zy7JWfQtQItgMfUjSbbcS3DZqQUn2d9VuV0LSGpJxtTXwgzhRpF1S2Sj7cU9hGpbM27Y8RJ4DeFb3qbAufjbrw== + +"@swc/core-win32-arm64-msvc@1.12.7": + version "1.12.7" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.12.7.tgz#d95bd10a150876030075a6db8717086dd86c2464" + integrity sha512-52PeF0tyX04ZFD8nibNhy/GjMFOZWTEWPmIB3wpD1vIJ1po+smtBnEdRRll5WIXITKoiND8AeHlBNBPqcsdcwA== + +"@swc/core-win32-ia32-msvc@1.12.7": + version "1.12.7" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.12.7.tgz#8c3ead90acf1fa8e229c664930fe41dd2238e734" + integrity sha512-WzQwkNMuhB1qQShT9uUgz/mX2j7NIEPExEtzvGsBT7TlZ9j1kGZ8NJcZH/fwOFcSJL4W7DnkL7nAhx6DBlSPaA== + +"@swc/core-win32-x64-msvc@1.12.7": + version "1.12.7" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.12.7.tgz#f48d1b5b5011aba9aeba6af5b8038d47cf7d74cc" + integrity sha512-R52ivBi2lgjl+Bd3XCPum0YfgbZq/W1AUExITysddP9ErsNSwnreYyNB3exEijiazWGcqHEas2ChiuMOP7NYrA== "@swc/core@^1.7.3": - version "1.10.15" - resolved "https://registry.npmjs.org/@swc/core/-/core-1.10.15.tgz#41568ec332765d2798f56753fd56d7aeece48510" - integrity sha512-/iFeQuNaGdK7mfJbQcObhAhsMqLT7qgMYl7jX2GEIO+VDTejESpzAyKwaMeYXExN8D6e5BRHBCe7M5YlsuzjDA== + version "1.12.7" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.12.7.tgz#c22df49bee1fccb900b57caef59204dbf186e696" + integrity sha512-bcpllEihyUSnqp0UtXTvXc19CT4wp3tGWLENhWnjr4B5iEOkzqMu+xHGz1FI5IBatjfqOQb29tgIfv6IL05QaA== dependencies: "@swc/counter" "^0.1.3" - "@swc/types" "^0.1.17" + "@swc/types" "^0.1.23" optionalDependencies: - "@swc/core-darwin-arm64" "1.10.15" - "@swc/core-darwin-x64" "1.10.15" - "@swc/core-linux-arm-gnueabihf" "1.10.15" - "@swc/core-linux-arm64-gnu" "1.10.15" - "@swc/core-linux-arm64-musl" "1.10.15" - "@swc/core-linux-x64-gnu" "1.10.15" - "@swc/core-linux-x64-musl" "1.10.15" - "@swc/core-win32-arm64-msvc" "1.10.15" - "@swc/core-win32-ia32-msvc" "1.10.15" - "@swc/core-win32-x64-msvc" "1.10.15" + "@swc/core-darwin-arm64" "1.12.7" + "@swc/core-darwin-x64" "1.12.7" + "@swc/core-linux-arm-gnueabihf" "1.12.7" + "@swc/core-linux-arm64-gnu" "1.12.7" + "@swc/core-linux-arm64-musl" "1.12.7" + "@swc/core-linux-x64-gnu" "1.12.7" + "@swc/core-linux-x64-musl" "1.12.7" + "@swc/core-win32-arm64-msvc" "1.12.7" + "@swc/core-win32-ia32-msvc" "1.12.7" + "@swc/core-win32-x64-msvc" "1.12.7" "@swc/counter@^0.1.3": version "0.1.3" - resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== "@swc/helpers@0.5.5": version "0.5.5" - resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz#12689df71bfc9b21c4f4ca00ae55f2f16c8b77c0" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.5.tgz#12689df71bfc9b21c4f4ca00ae55f2f16c8b77c0" integrity sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A== dependencies: "@swc/counter" "^0.1.3" tslib "^2.4.0" "@swc/helpers@^0.5.12": - version "0.5.15" - resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" - integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== + version "0.5.17" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971" + integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A== dependencies: tslib "^2.8.0" -"@swc/types@^0.1.17": - version "0.1.17" - resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz#bd1d94e73497f27341bf141abdf4c85230d41e7c" - integrity sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ== +"@swc/types@^0.1.23": + version "0.1.23" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.23.tgz#7eabf88b9cfd929253859c562ae95982ee04b4e8" + integrity sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw== dependencies: "@swc/counter" "^0.1.3" @@ -2537,7 +1904,7 @@ "@tailwindcss/typography@^0.5.9": version "0.5.16" - resolved "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz#a926c8f44d5c439b2915e231cad80058850047c6" + resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.16.tgz#a926c8f44d5c439b2915e231cad80058850047c6" integrity sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA== dependencies: lodash.castarray "^4.4.0" @@ -2553,25 +1920,25 @@ "@tanstack/table-core" "8.21.3" "@tanstack/react-virtual@^3.0.0-beta.60": - version "3.13.0" - resolved "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.0.tgz#f50bccdfbb792cb11fdc0342fd3ec6945c730389" - integrity sha512-CchF0NlLIowiM2GxtsoKBkXA4uqSnY2KvnXo+kyUFD4a4ll6+J0qzoRsUPMwXV/H26lRsxgJIr/YmjYum2oEjg== + version "3.13.11" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.13.11.tgz#7e95a09dfc765f25e8fda3ec9455ca7930e42ddc" + integrity sha512-u5EaOSJOq08T9NXFuDopMdxZBNDFuEMohIFFU45fBYDXXh9SjYdbpNq1OLFSOpQnDRPjqgmY96ipZTkzom9t9Q== dependencies: - "@tanstack/virtual-core" "3.13.0" + "@tanstack/virtual-core" "3.13.11" "@tanstack/table-core@8.21.3": version "8.21.3" resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.21.3.tgz#2977727d8fc8dfa079112d9f4d4c019110f1732c" integrity sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg== -"@tanstack/virtual-core@3.13.0": - version "3.13.0" - resolved "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.0.tgz#8db0ccc9d6c32b6393551a6d19c87dbb259a8828" - integrity sha512-NBKJP3OIdmZY3COJdWkSonr50FMVIi+aj5ZJ7hI/DTpEKg2RMfo/KvP8A3B/zOSpMgIe52B5E2yn7rryULzA6g== +"@tanstack/virtual-core@3.13.11": + version "3.13.11" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.13.11.tgz#1b4d7328adeb76fc29897bf7cdafd17c2c3fd7c7" + integrity sha512-ORL6UyuZJ0D9X33LDR4TcgcM+K2YiS2j4xbvH1vnhhObwR1Z4dKwPTL/c0kj2Yeb4Yp2lBv1wpyVaqlohk8zpg== "@testing-library/dom@10.4.0": version "10.4.0" - resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz#82a9d9462f11d240ecadbf406607c6ceeeff43a8" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.0.tgz#82a9d9462f11d240ecadbf406607c6ceeeff43a8" integrity sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ== dependencies: "@babel/code-frame" "^7.10.4" @@ -2585,7 +1952,7 @@ "@testing-library/jest-dom@6.5.0": version "6.5.0" - resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz#50484da3f80fb222a853479f618a9ce5c47bfe54" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz#50484da3f80fb222a853479f618a9ce5c47bfe54" integrity sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA== dependencies: "@adobe/css-tools" "^4.4.0" @@ -2598,198 +1965,198 @@ "@testing-library/user-event@14.5.2": version "14.5.2" - resolved "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== "@tiptap/core@2.10.4": version "2.10.4" - resolved "https://registry.npmjs.org/@tiptap/core/-/core-2.10.4.tgz#0b3ad822d71f5834b281590809f430e6fd41523c" + resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.10.4.tgz#0b3ad822d71f5834b281590809f430e6fd41523c" integrity sha512-fExFRTRgb6MSpg2VvR5qO2dPTQAZWuUoU4UsBCurIVcPWcyVv4FG1YzgMyoLDKy44rebFtwUGJbfU9NzX7Q/bA== "@tiptap/core@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/core/-/core-2.11.5.tgz#2bf1b08c4ca2467778d0a109634c45ab475522f4" - integrity sha512-jb0KTdUJaJY53JaN7ooY3XAxHQNoMYti/H6ANo707PsLXVeEqJ9o8+eBup1JU5CuwzrgnDc2dECt2WIGX9f8Jw== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.22.3.tgz#32628cc734c37f7e274e12594807bd8ba97c4e47" + integrity sha512-czyBPXZG/ZFyObZEF1kyusGf58Ai3X8TnaxlUUn3gqLLWPy0idXZg85NETCidzi/gAxWxL9j6Pcy+zwS4pbZYQ== "@tiptap/extension-blockquote@2.10.4": version "2.10.4" - resolved "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.10.4.tgz#0f9a26740009fc7430fabc423077c369feaebb42" + resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.10.4.tgz#0f9a26740009fc7430fabc423077c369feaebb42" integrity sha512-4JSwAM3B92YWvGzu/Vd5rovPrCGwLSaSLD5rxcLyfxLSrTDQd3n7lp78pzVgGhunVECzaGF5A0ByWWpEyS0a3w== "@tiptap/extension-blockquote@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.11.5.tgz#d43ae78f5eba7de1b9138820502e950bae83c31c" - integrity sha512-MZfcRIzKRD8/J1hkt/eYv49060GTL6qGR3NY/oTDuw2wYzbQXXLEbjk8hxAtjwNn7G+pWQv3L+PKFzZDxibLuA== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.22.3.tgz#4cf83c836380a2fc2d7b7d4c84fa633d53027d7b" + integrity sha512-HvTXvqeGaANg0owk0Xxkgyc4lJMO5CZES2Lc3JJp8u5kV+HZIwd78eJ7fbKBMtkpKb4zOk4xQsHQ/TuhghJaeA== "@tiptap/extension-bold@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.11.5.tgz#7fc13d835067fbee4ff2be83a694f5200ba50e41" - integrity sha512-OAq03MHEbl7MtYCUzGuwb0VpOPnM0k5ekMbEaRILFU5ZC7cEAQ36XmPIw1dQayrcuE8GZL35BKub2qtRxyC9iA== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.22.3.tgz#c0567788f1fff01f08438c4df1d7daec1e0563b4" + integrity sha512-J3GxKwijD42eqCwU1SS7PK5aSgnp0wgQDetLz9izAD0RQBrKj5WZA13GnPoTTlzLU4qwjcPRV+6mvF+llH6b6A== "@tiptap/extension-bubble-menu@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.11.5.tgz#75da9bcea2a6579cd3ad41cf82f7bc7369c1816d" - integrity sha512-rx+rMd7EEdht5EHLWldpkzJ56SWYA9799b33ustePqhXd6linnokJCzBqY13AfZ9+xp3RsR6C0ZHI9GGea0tIA== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.22.3.tgz#590212d973abce568f1eecce36af0672ff37c3d6" + integrity sha512-8iQLNrRf3iBPKqI3dQnfvMxMfgp6y9TAbO803LihvzbIGqBaX264ES7fHtoyFIIeVjy2xFruVsTZCZofWTupGg== dependencies: tippy.js "^6.3.7" "@tiptap/extension-bullet-list@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.11.5.tgz#84c6bf623c5dffcd73dd24d012c9636191031d43" - integrity sha512-VXwHlX6A/T6FAspnyjbKDO0TQ+oetXuat6RY1/JxbXphH42nLuBaGWJ6pgy6xMl6XY8/9oPkTNrfJw/8/eeRwA== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.22.3.tgz#492722d9db8812e71958bc55e9486d1fc7cf2510" + integrity sha512-SYvLIxqmuV0kTj4/3ZFlnZ1fr9Y233qX00BKuIpGnczeFsWQmzBJo8vGm3d1IlKPCQN+jTRtDdDE1aSum8Kv2w== "@tiptap/extension-character-count@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/extension-character-count/-/extension-character-count-2.11.0.tgz#7d3992ceba72f1eeb2db3a1fc997c50dddd7cf8c" + resolved "https://registry.yarnpkg.com/@tiptap/extension-character-count/-/extension-character-count-2.11.0.tgz#7d3992ceba72f1eeb2db3a1fc997c50dddd7cf8c" integrity sha512-WbqVr1QY62vxpmDJP5k3bwyzoHha1sZTs0xj3L+4s1j/SB2A7tAlFdcNPPwfbPOINHQgomSAyClfTyd4Gor7HA== "@tiptap/extension-code-block@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.11.5.tgz#b90cea403884630f3f86c7629815250e8a266802" - integrity sha512-ksxMMvqLDlC+ftcQLynqZMdlJT1iHYZorXsXw/n+wuRd7YElkRkd6YWUX/Pq/njFY6lDjKiqFLEXBJB8nrzzBA== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.22.3.tgz#04732fecba70f31aa73126b769973bbea1b89eeb" + integrity sha512-twPCBpb/ygNixlSBAXgvfo+t56Ucpb8lvPDiZn+cH8OjmmO0ayBoSfSrjKWgaEWGPcXBrFAfsBRbYHyoHj7pXg== "@tiptap/extension-code@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.11.5.tgz#a550c544804e65507ab66dc8ab89a1e2f7d9228d" - integrity sha512-xOvHevNIQIcCCVn9tpvXa1wBp0wHN/2umbAZGTVzS+AQtM7BTo0tz8IyzwxkcZJaImONcUVYLOLzt2AgW1LltA== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.22.3.tgz#f966ca75e630cdf3a36a1c00e9b1cd760134f8e5" + integrity sha512-s+W6jHezq+n9cC40xZ3hZF6cGGSl+fBELik1b2x8+cb0WoIlqmcdWin1dgeMNrWlRZUw1aD2DNwy/PdXI5vn2g== "@tiptap/extension-collaboration@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/extension-collaboration/-/extension-collaboration-2.11.0.tgz#21ac1c8bc2ca6d8ba2a838e63457528627294888" + resolved "https://registry.yarnpkg.com/@tiptap/extension-collaboration/-/extension-collaboration-2.11.0.tgz#21ac1c8bc2ca6d8ba2a838e63457528627294888" integrity sha512-pS3E//ODD80PwVXp7zOqek0q9z5AtZ6sMSK5nPneNioe7dSvCeQzToOD9V6EevK4KChUIN9wEryK8mkQs57ioA== "@tiptap/extension-document@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.11.5.tgz#1d650d232df46cf07b83e0a5cc64db1c70057f37" - integrity sha512-7I4BRTpIux2a0O2qS3BDmyZ5LGp3pszKbix32CmeVh7lN9dV7W5reDqtJJ9FCZEEF+pZ6e1/DQA362dflwZw2g== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.22.3.tgz#91462a9b46aa62b1524ed598a95c44f146fbd6f1" + integrity sha512-7MnILbhRZRyROlMUgyntzRZ/EZlqNB8fO761RNjJxR2WMb49R4yc04fz7/+f/QH/hwxoS13bKfsNUDAsDxA5Aw== "@tiptap/extension-dropcursor@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.11.5.tgz#a1d6fad3379551449534bdb8135da2577a8ec8fb" - integrity sha512-uIN7L3FU0904ec7FFFbndO7RQE/yiON4VzAMhNn587LFMyWO8US139HXIL4O8dpZeYwYL3d1FnDTflZl6CwLlg== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.22.3.tgz#729ddd6d6b15432c2e15ba196162b7dce16c5fd4" + integrity sha512-yQxSfTWjdUQS+bh6KiNLR9KIMsn1SElzycQe4XE+0eoaetapGtKqxfwkTbbQdNgQOU5wQG1KOda221mnPvkpAA== "@tiptap/extension-floating-menu@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.11.5.tgz#97868901bae46e1826b9d2cfe5a4a33a446adfc1" - integrity sha512-HsMI0hV5Lwzm530Z5tBeyNCBNG38eJ3qjfdV2OHlfSf3+KOEfn6a5AUdoNaZO02LF79/8+7BaYU2drafag9cxQ== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.22.3.tgz#403e237b46964035c8fdb30746de04c5119862e1" + integrity sha512-GeJRRdulxpwsshxzBkpOf/xJkLD2fa+49o+3FqRCmrm7AioC8oUcZZmzuzjLj5a3ZNGKPuJ9xxDkYWUjH4tE1g== dependencies: tippy.js "^6.3.7" "@tiptap/extension-gapcursor@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.11.5.tgz#6771e387d90ef85ee834f4572627d76e303e1297" - integrity sha512-kcWa+Xq9cb6lBdiICvLReuDtz/rLjFKHWpW3jTTF3FiP3wx4H8Rs6bzVtty7uOVTfwupxZRiKICAMEU6iT0xrQ== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.22.3.tgz#44cb70f051cf405a9330969be8905aeea16cb15d" + integrity sha512-6Q8TLL4PVGcZLn27eQazCC+be8LP8uzuz5Z5e4TpIeswPAju49cerQOdEGNFKkuYv/FelWIhXNtkWFMf4eSmyw== "@tiptap/extension-hard-break@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.11.5.tgz#cf9610846cb7ab0f3a8d8dc37fd1fcee6a39d72f" - integrity sha512-q9doeN+Yg9F5QNTG8pZGYfNye3tmntOwch683v0CCVCI4ldKaLZ0jG3NbBTq+mosHYdgOH2rNbIORlRRsQ+iYQ== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.22.3.tgz#f5b391d146b5050a8ce36cf714f4712db6d59de4" + integrity sha512-tbEji/V4Za3UhxYwB36amYhyonwe5j66iYTNRWzgjNixjrcGDbWk6cfaF9jMAgPgIDBmmtQLJY+moKskwgpnZg== "@tiptap/extension-heading@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.11.5.tgz#e9a54e4cbb5c9c7fc95a24cc894a16751ecd185f" - integrity sha512-x/MV53psJ9baRcZ4k4WjnCUBMt8zCX7mPlKVT+9C/o+DEs/j/qxPLs95nHeQv70chZpSwCQCt93xMmuF0kPoAg== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.22.3.tgz#e08bd45f9b9350d2316ad2b05065087939738d6c" + integrity sha512-+MexJD+kXtNwMDbNTFa7jCFipx1DqAdT+n9GgInqebAN9bK+CWjC+SskzZNRqeMrQ0Er7QTsi6YC09M+74sevA== "@tiptap/extension-history@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.11.5.tgz#c636c8da784ad25886eb617cff6b4752ac9586d1" - integrity sha512-b+wOS33Dz1azw6F1i9LFTEIJ/gUui0Jwz5ZvmVDpL2ZHBhq1Ui0/spTT+tuZOXq7Y/uCbKL8Liu4WoedIvhboQ== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.22.3.tgz#a141be9f5c2477e8b87af864ee0ee8d7a8fc3af3" + integrity sha512-F9sC45zPw7vbjKrwSKuSLZ0ODyc/X3bGPeCa6HYLEHKfgqsdt2v2fQLvxjpmlwO2ZMrnkBkg76KDxHfVyrZ2zQ== "@tiptap/extension-horizontal-rule@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.11.5.tgz#b876f606386c51bc2ff45d4bd26267f5b104a850" - integrity sha512-3up2r1Du8/5/4ZYzTC0DjTwhgPI3dn8jhOCLu73m5F3OGvK/9whcXoeWoX103hYMnGDxBlfOje71yQuN35FL4A== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.22.3.tgz#71f059687a3495da86e6cb0c353987a7f8f58dfe" + integrity sha512-3GvY798p9pCXUBbCebIdSmi1q80l7VZz/B6NN4uUMQ9iwxWopd8yaZ0O7xx2hM2UBzPEtY3M4FAhhpYUTXNFgQ== "@tiptap/extension-image@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-2.11.0.tgz#e9611a6a032804279f9b12a483a7afe696358a3f" + resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.11.0.tgz#e9611a6a032804279f9b12a483a7afe696358a3f" integrity sha512-R+JkK5ocX35ag1c42aAw6rcb9QlLUBB0ju8A7b+8qZXN5yWKE0yO/oixYFmnZN7WSnBYtzuCVDX8cvRG+BPbgA== "@tiptap/extension-italic@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.11.5.tgz#63b09c7fb41ab64681983df7be8cf6bc330c0ede" - integrity sha512-9VGfb2/LfPhQ6TjzDwuYLRvw0A6VGbaIp3F+5Mql8XVdTBHb2+rhELbyhNGiGVR78CaB/EiKb6dO9xu/tBWSYA== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.22.3.tgz#2910f865915ee0644777e10a6639ff4a055f37a7" + integrity sha512-W/rQDo7qFL7MfwfaYEcdtbk862fOmBv30qIEwVdqElBye7BFJYKtRuWBzNbG2BwKanjwMbVc/tBXF5W1sqfT7Q== "@tiptap/extension-list-item@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.11.0.tgz#15889fd8217b998bfef78cd9079c8405b5a9abcd" + resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.11.0.tgz#15889fd8217b998bfef78cd9079c8405b5a9abcd" integrity sha512-Jikcg0fccpM13a3hAFLtguMcpVg4eMWI8NnC0aUULD9rFhvWZQYQYQuoK3fO6vQrAQpNhsV4oa0dfSq1btu9kg== "@tiptap/extension-list-item@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.11.5.tgz#6ada38dd4e6db889288242542bc0490b0908d190" - integrity sha512-Mp5RD/pbkfW1vdc6xMVxXYcta73FOwLmblQlFNn/l/E5/X1DUSA4iGhgDDH4EWO3swbs03x2f7Zka/Xoj3+WLg== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.22.3.tgz#86ebe7c1ba1c901a1204d800f75d231d8161c495" + integrity sha512-B7Fze+eM1sYbGOZtDDAwAivnj1ow2wN5RqaQPC1la3wdTK4Wgp7bdzGjvUbrN6gp3zMFCEWlqP2toc/mRAHCtA== "@tiptap/extension-mention@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/extension-mention/-/extension-mention-2.11.0.tgz#515f831975188ce33e3c0951f94a34396a3f35cd" + resolved "https://registry.yarnpkg.com/@tiptap/extension-mention/-/extension-mention-2.11.0.tgz#515f831975188ce33e3c0951f94a34396a3f35cd" integrity sha512-5/Yk2rTpsoIZaNyo4f+CgsCCkQkSiNAp24HOvvCm9Dp9w1gIFm6y6dSj5RYqzEucGjOkoaBbfMcm1QxKWIj6/A== "@tiptap/extension-ordered-list@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.11.5.tgz#c81e33b5bc885450d412e9ea644cc666407e0c13" - integrity sha512-Cu8KwruBNWAaEfshRQR0yOSaUKAeEwxW7UgbvF9cN/zZuKgK5uZosPCPTehIFCcRe+TBpRtZQh+06f/gNYpYYg== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.22.3.tgz#d7b733827f43b4247923c158918135caae953b15" + integrity sha512-pHGkuZhV/uAAHI9vzk/lpAkbdpMT4wUR1FI17/GE3zNrogfzx0VopCQrXq4+sQVsLUW4I6Cj6VeBjm9wB6qlIw== "@tiptap/extension-paragraph@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.11.5.tgz#05575f0264a435837483831eebffc5e3af279cb1" - integrity sha512-YFBWeg7xu/sBnsDIF/+nh9Arf7R0h07VZMd0id5Ydd2Qe3c1uIZwXxeINVtH0SZozuPIQFAT8ICe9M0RxmE+TA== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.22.3.tgz#8ae4abdf039c687b99914a04a3ffe7770f92b24e" + integrity sha512-TYvgS7CweNFo/xVxsKWSt0wnm46Y8OtsfDSjnLbSC4Pj4ZNa6PU3zpvDTW+UxYakr+8zIPvI2WgLBkyTHq6oQA== "@tiptap/extension-placeholder@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.11.0.tgz#a330df0bc791df82b3a84490031a8db9a68f4061" + resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.11.0.tgz#a330df0bc791df82b3a84490031a8db9a68f4061" integrity sha512-ee8vz51pW6H+1rEDMFg2FnBs2Tj5rUHlJ1JgD7Dcp3+89SVHGB3UILGfbNpAnHZvhmsTY3NcfPAcZZ80QfQFMQ== "@tiptap/extension-strike@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.11.5.tgz#94e214dcede09f6c5f99d0c58290a1d3f5db61eb" - integrity sha512-PVfUiCqrjvsLpbIoVlegSY8RlkR64F1Rr2RYmiybQfGbg+AkSZXDeO0eIrc03//4gua7D9DfIozHmAKv1KN3ow== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.22.3.tgz#950ee6e188088b24f9af2d60f780fabefdd4e190" + integrity sha512-I+s2Csw2cTHae2vFJiojnHK+NnQjDr6441mSlAd+e7kEly1kjZ4g7J+JMj02ajNQhr/ob8/hb5r6EdIyv2xtoA== "@tiptap/extension-task-item@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/extension-task-item/-/extension-task-item-2.11.0.tgz#ff97f10bf39d6c27fd3f3f1ee3987d7015304c11" + resolved "https://registry.yarnpkg.com/@tiptap/extension-task-item/-/extension-task-item-2.11.0.tgz#ff97f10bf39d6c27fd3f3f1ee3987d7015304c11" integrity sha512-qu6VuRc8qF80Bwr82CItFcrKtC67LJkwpxESLEIi42zWZ5sXF/3DJEPPS/4Kk+nAc9UCBoEMFAULibPq7rRl/w== "@tiptap/extension-task-list@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/extension-task-list/-/extension-task-list-2.11.0.tgz#2f197a70aafc0c23163ed70aa314cc0300534cf6" + resolved "https://registry.yarnpkg.com/@tiptap/extension-task-list/-/extension-task-list-2.11.0.tgz#2f197a70aafc0c23163ed70aa314cc0300534cf6" integrity sha512-+dZRjeXLXxyliFt3J7uQADxfOwi6ntyepVM+ri1rnmIaqVZUHJbUFodOc0LivI+Z5iZZ10u3TId8gehqWJHD+w== "@tiptap/extension-text-align@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-2.11.0.tgz#b90b86ee3f6e14c9abf186cb8ab6ced20c0df14d" + resolved "https://registry.yarnpkg.com/@tiptap/extension-text-align/-/extension-text-align-2.11.0.tgz#b90b86ee3f6e14c9abf186cb8ab6ced20c0df14d" integrity sha512-VRXBqO17po6ddqhoWLBa2aCX/tqHdzdKPLfjnBy1fF8hjQKbidzjMWhb4CMm31ApvJjKK/DTkM3EnyYS/XDhng== "@tiptap/extension-text-style@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-2.11.0.tgz#2acb6207fe6acdb5479384682846980be15caa80" + resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.11.0.tgz#2acb6207fe6acdb5479384682846980be15caa80" integrity sha512-vuA16wMZ6J3fboL7FObwV2f5uN9Vg0WYmqU7971vxzJyaRj9VE1eeH8Kh5fq4RgwDzc13MZGvZZV4HcE1R8o8A== "@tiptap/extension-text-style@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-2.11.5.tgz#f1b3882de489328203187e6256e6ee130477cfad" - integrity sha512-YUmYl0gILSd/u/ZkOmNxjNXVw+mu8fpC2f8G4I4tLODm0zCx09j9DDEJXSrM5XX72nxJQqtSQsCpNKnL0hfeEQ== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.22.3.tgz#b945dae81a4d7d100bd2c6d0a715d68a9fdbcc1e" + integrity sha512-M3FLOUPcO8fR+rM97mR2gQ54KFkdlAUQtEPKQpO1f312gtcVdBNxgq0WgqTnBY7thWLyqQSKiAsL6y88+JddSA== "@tiptap/extension-text@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.11.5.tgz#10cc6ec519aac71a6841ec9bd914ded747f6ec3f" - integrity sha512-Gq1WwyhFpCbEDrLPIHt5A8aLSlf8bfz4jm417c8F/JyU0J5dtYdmx0RAxjnLw1i7ZHE7LRyqqAoS0sl7JHDNSQ== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.22.3.tgz#63203cb4095994beb5cef66bfb3880f4e55fe69e" + integrity sha512-07cymWkPTfq6nuum88Yf90YYArbowed8nNiu0Tw3jCvwpzf9J9TDaovT+LAKuSKtrOsnNpFB/9IqUwFxZepOGw== "@tiptap/extension-underline@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.11.0.tgz#473025d3ed01953fb2c23f8060ea90be4c231faa" + resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-2.11.0.tgz#473025d3ed01953fb2c23f8060ea90be4c231faa" integrity sha512-DE1piq441y1+9Aj1pvvuq1dcc5B2HZ2d1SPtO4DTMjCxrhok12biTkMxxq0q1dzA5/BouLlUW6WTPpinhmrUWA== "@tiptap/html@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/html/-/html-2.11.0.tgz#dd0b4195a07bbdca27aa13325b8ebac41480a6a0" + resolved "https://registry.yarnpkg.com/@tiptap/html/-/html-2.11.0.tgz#dd0b4195a07bbdca27aa13325b8ebac41480a6a0" integrity sha512-9+8eSeey3gm6vMtbt+uKZfkvtwsWr577lhtTeGUsoThim9zyBnbhzHc1dQw2m1RefOoPcODrnnQPvi5nvA84Cw== dependencies: zeed-dom "^0.15.1" "@tiptap/pm@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/pm/-/pm-2.11.0.tgz#c2ccb0c9b99fd5915d9390e90d3ab9e5fb408cd8" + resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.11.0.tgz#c2ccb0c9b99fd5915d9390e90d3ab9e5fb408cd8" integrity sha512-4RU6bpODkMY+ZshzdRFcuUc5jWlMW82LWXR6UOsHK/X/Mav41ZFS0Cyf+hQM6gxxTB09YFIICmGpEpULb+/CuA== dependencies: prosemirror-changeset "^2.2.1" @@ -2812,11 +2179,11 @@ prosemirror-view "^1.37.0" "@tiptap/pm@^2.11.0": - version "2.11.5" - resolved "https://registry.npmjs.org/@tiptap/pm/-/pm-2.11.5.tgz#6577e277e5a991c605a3dfcebde7c0b794d8def4" - integrity sha512-z9JFtqc5ZOsdQLd9vRnXfTCQ8v5ADAfRt9Nm7SqP6FUHII8E1hs38ACzf5xursmth/VonJYb5+73Pqxk1hGIPw== + version "2.22.3" + resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.22.3.tgz#9ce863a3da78226554afbe280743577f233dbda1" + integrity sha512-uWPeIScnpQVCYdTnL140XgcvbT1qH288CstMJ6S0Y11lC5PclPK9CxfAipsqgWWrIK7yatxKUVCg6TzfG9zpmA== dependencies: - prosemirror-changeset "^2.2.1" + prosemirror-changeset "^2.3.0" prosemirror-collab "^1.3.1" prosemirror-commands "^1.6.2" prosemirror-dropcursor "^1.8.1" @@ -2830,14 +2197,14 @@ prosemirror-schema-basic "^1.2.3" prosemirror-schema-list "^1.4.1" prosemirror-state "^1.4.3" - prosemirror-tables "^1.6.3" + prosemirror-tables "^1.6.4" prosemirror-trailing-node "^3.0.0" prosemirror-transform "^1.10.2" prosemirror-view "^1.37.0" "@tiptap/react@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/react/-/react-2.11.0.tgz#28b9ca64bdeb6302eaca1941ef792e3acea2e40e" + resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.11.0.tgz#28b9ca64bdeb6302eaca1941ef792e3acea2e40e" integrity sha512-AALzHbqNq/gerJpkbXmN2OXFmHAs2bQENH7rXbnH70bpxVdIfQVtvjK4dIb+cQQvAuTWZvhsISnTrFY2BesT3Q== dependencies: "@tiptap/extension-bubble-menu" "^2.11.0" @@ -2848,7 +2215,7 @@ "@tiptap/starter-kit@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.11.0.tgz#3b4a9ca9daaffed3abd030d4cd72e8d9d3eb0649" + resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.11.0.tgz#3b4a9ca9daaffed3abd030d4cd72e8d9d3eb0649" integrity sha512-lrYmkeaAFiuUjN5nGnCowdjponrsR7eRmeTf/15/5oZsNrMN7t/fvPb014AqhG/anNasa0ism4CKZns3D+4pKQ== dependencies: "@tiptap/core" "^2.11.0" @@ -2875,37 +2242,44 @@ "@tiptap/suggestion@2.11.0": version "2.11.0" - resolved "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-2.11.0.tgz#826140c6f1a76af2d91713dafb4b142c803eabef" + resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.11.0.tgz#826140c6f1a76af2d91713dafb4b142c803eabef" integrity sha512-f+KcczhzEEy2f7/0N/RSID+Z6NjxCX6ab26NLfWZxdaEm/J+vQ2Pqh/e5Z59vMfKiC0DJXVcO0rdv2LBh23qDw== "@tsconfig/node10@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" + integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== + dependencies: + tslib "^2.4.0" + "@types/aria-query@^5.0.1": version "5.0.4" - resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== "@types/babel__core@^7.18.0": version "7.20.5" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" @@ -2915,141 +2289,142 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.4.4" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.18.0": - version "7.20.6" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.7.tgz#968cdc2366ec3da159f61166428ee40f370e56c2" + integrity sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng== dependencies: "@babel/types" "^7.20.7" "@types/body-parser@*": - version "1.19.5" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + version "1.19.6" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" + integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== dependencies: "@types/connect" "*" "@types/node" "*" "@types/compression@^1.7.5": - version "1.7.5" - resolved "https://registry.npmjs.org/@types/compression/-/compression-1.7.5.tgz#0f80efef6eb031be57b12221c4ba6bc3577808f7" - integrity sha512-AAQvK5pxMpaT+nDvhHrsBhLSYG5yQdtkaJE1WYieSNY2mVFKAgmU4ks65rkZD5oqnGCFLyQpUr1CqI4DmUMyDg== + version "1.8.1" + resolved "https://registry.yarnpkg.com/@types/compression/-/compression-1.8.1.tgz#57cd1a5c0c585aca56124ab4daef1d254d6f5a7d" + integrity sha512-kCFuWS0ebDbmxs0AXYn6e2r2nrGAb5KwQhknjSPSPgJcGd8+HVSILlUyFhGqML2gk39HcG7D1ydW9/qpYkN00Q== dependencies: "@types/express" "*" + "@types/node" "*" "@types/connect@*": version "3.4.38" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/cors@^2.8.17": - version "2.8.17" - resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" - integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== + version "2.8.19" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" + integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== dependencies: "@types/node" "*" "@types/d3-array@^3.0.3": version "3.2.1" - resolved "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz#1f6658e3d2006c4fceac53fde464166859f8b8c5" + resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.2.1.tgz#1f6658e3d2006c4fceac53fde464166859f8b8c5" integrity sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg== "@types/d3-color@*": version "3.1.3" - resolved "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz#368c961a18de721da8200e80bf3943fb53136af2" + resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-3.1.3.tgz#368c961a18de721da8200e80bf3943fb53136af2" integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A== "@types/d3-ease@^3.0.0": version "3.0.2" - resolved "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz#e28db1bfbfa617076f7770dd1d9a48eaa3b6c51b" + resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-3.0.2.tgz#e28db1bfbfa617076f7770dd1d9a48eaa3b6c51b" integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA== "@types/d3-interpolate@^3.0.1": version "3.0.4" - resolved "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz#412b90e84870285f2ff8a846c6eb60344f12a41c" + resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz#412b90e84870285f2ff8a846c6eb60344f12a41c" integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA== dependencies: "@types/d3-color" "*" "@types/d3-path@*": version "3.1.1" - resolved "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz#f632b380c3aca1dba8e34aa049bcd6a4af23df8a" + resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.1.tgz#f632b380c3aca1dba8e34aa049bcd6a4af23df8a" integrity sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg== "@types/d3-scale@^4.0.2": version "4.0.9" - resolved "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz#57a2f707242e6fe1de81ad7bfcccaaf606179afb" + resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.9.tgz#57a2f707242e6fe1de81ad7bfcccaaf606179afb" integrity sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw== dependencies: "@types/d3-time" "*" "@types/d3-shape@^3.1.0": version "3.1.7" - resolved "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz#2b7b423dc2dfe69c8c93596e673e37443348c555" + resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-3.1.7.tgz#2b7b423dc2dfe69c8c93596e673e37443348c555" integrity sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg== dependencies: "@types/d3-path" "*" "@types/d3-time@*", "@types/d3-time@^3.0.0": version "3.0.4" - resolved "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz#8472feecd639691450dd8000eb33edd444e1323f" + resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.4.tgz#8472feecd639691450dd8000eb33edd444e1323f" integrity sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g== "@types/d3-timer@^3.0.0": version "3.0.2" - resolved "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz#70bbda77dc23aa727413e22e214afa3f0e852f70" + resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.2.tgz#70bbda77dc23aa727413e22e214afa3f0e852f70" integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== "@types/debug@^4.0.0": version "4.1.12" - resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" "@types/doctrine@^0.0.9": version "0.0.9" - resolved "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.9.tgz#d86a5f452a15e3e3113b99e39616a9baa0f9863f" + resolved "https://registry.yarnpkg.com/@types/doctrine/-/doctrine-0.0.9.tgz#d86a5f452a15e3e3113b99e39616a9baa0f9863f" integrity sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA== "@types/dom4@^2.0.2": version "2.0.4" - resolved "https://registry.npmjs.org/@types/dom4/-/dom4-2.0.4.tgz#427a4ce8590727aed5ce0fe39a64f175a57fdc1c" + resolved "https://registry.yarnpkg.com/@types/dom4/-/dom4-2.0.4.tgz#427a4ce8590727aed5ce0fe39a64f175a57fdc1c" integrity sha512-PD+wqNhrjWFjAlSVd18jvChZvOXB2SOwAILBmuYev5zswBats5qmzs/QFoooLKd2omj9BT05a8MeSeRmXLGY+Q== "@types/dompurify@^3.0.5": version "3.2.0" - resolved "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.2.0.tgz#56610bf3e4250df57744d61fbd95422e07dfb840" + resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-3.2.0.tgz#56610bf3e4250df57744d61fbd95422e07dfb840" integrity sha512-Fgg31wv9QbLDA0SpTOXO3MaxySc4DKGLi8sna4/Utjo4r3ZRPdCt4UQee8BWr+Q5z21yifghREPJGYaEOEIACg== dependencies: dompurify "*" "@types/dotenv@^8.2.0": version "8.2.3" - resolved "https://registry.npmjs.org/@types/dotenv/-/dotenv-8.2.3.tgz#c97b3c5b2e97ff3873793a000999e86cd66ff354" + resolved "https://registry.yarnpkg.com/@types/dotenv/-/dotenv-8.2.3.tgz#c97b3c5b2e97ff3873793a000999e86cd66ff354" integrity sha512-g2FXjlDX/cYuc5CiQvyU/6kkbP1JtmGzh0obW50zD7OKeILVL0NSpPWLXVfqoAGQjom2/SLLx9zHq0KXvD6mbw== dependencies: dotenv "*" "@types/eslint-scope@^3.7.7": version "3.7.7" - resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: "@types/eslint" "*" @@ -3057,25 +2432,20 @@ "@types/eslint@*": version "9.6.1" - resolved "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.6": - version "1.0.6" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== - -"@types/estree@1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" - integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== +"@types/estree@*", "@types/estree@1.0.8", "@types/estree@^1.0.0", "@types/estree@^1.0.6": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": version "5.0.6" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz#41fec4ea20e9c7b22f024ab88a95c6bb288f51b8" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz#41fec4ea20e9c7b22f024ab88a95c6bb288f51b8" integrity sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA== dependencies: "@types/node" "*" @@ -3085,7 +2455,7 @@ "@types/express-serve-static-core@^4.17.33": version "4.19.6" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== dependencies: "@types/node" "*" @@ -3095,7 +2465,7 @@ "@types/express-ws@^3.0.4": version "3.0.5" - resolved "https://registry.npmjs.org/@types/express-ws/-/express-ws-3.0.5.tgz#5abf3dda3acb0a339351f089c31aca708f234c7c" + resolved "https://registry.yarnpkg.com/@types/express-ws/-/express-ws-3.0.5.tgz#5abf3dda3acb0a339351f089c31aca708f234c7c" integrity sha512-lbWMjoHrm/v85j81UCmb/GNZFO3genxRYBW1Ob7rjRI+zxUBR+4tcFuOpKKsYQ1LYTYiy3356epLeYi/5zxUwA== dependencies: "@types/express" "*" @@ -3103,82 +2473,76 @@ "@types/ws" "*" "@types/express@*": - version "5.0.0" - resolved "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz#13a7d1f75295e90d19ed6e74cab3678488eaa96c" - integrity sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ== + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.3.tgz#6c4bc6acddc2e2a587142e1d8be0bce20757e956" + integrity sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^5.0.0" - "@types/qs" "*" "@types/serve-static" "*" "@types/express@^4.17.21": - version "4.17.21" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + version "4.17.23" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.23.tgz#35af3193c640bfd4d7fe77191cd0ed411a433bef" + integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" "@types/serve-static" "*" -"@types/gensync@^1.0.0": - version "1.0.4" - resolved "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.4.tgz#7122d8f0cd3bf437f9725cc95b180197190cf50b" - integrity sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA== - "@types/hast@^2.0.0": version "2.3.10" - resolved "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643" integrity sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw== dependencies: "@types/unist" "^2" "@types/hast@^3.0.0": version "3.0.4" - resolved "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== dependencies: "@types/unist" "*" "@types/html-minifier-terser@^6.0.0": version "6.1.0" - resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== "@types/http-errors@*": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" + integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== -"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/linkify-it@^3": version "3.0.5" - resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz#1e78a3ac2428e6d7e6c05c1665c242023a4601d8" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.5.tgz#1e78a3ac2428e6d7e6c05c1665c242023a4601d8" integrity sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw== "@types/linkify-it@^5": version "5.0.0" - resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== "@types/lodash@^4.14.202", "@types/lodash@^4.17.0", "@types/lodash@^4.17.1", "@types/lodash@^4.17.6": - version "4.17.15" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.15.tgz#12d4af0ed17cc7600ce1f9980cec48fc17ad1e89" - integrity sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw== + version "4.17.19" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.19.tgz#de18c90b7891f00fed7c1273495a2f851efd99c4" + integrity sha512-NYqRyg/hIQrYPT9lbOeYc3kIRabJDn/k4qQHIXUpx88CBDww2fD15Sg5kbXlW86zm2XEW4g0QxkTI3/Kfkc7xQ== "@types/markdown-it@^13.0.7": version "13.0.9" - resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.9.tgz#df79221eae698df5b4e982c7e91128dd8e525743" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-13.0.9.tgz#df79221eae698df5b4e982c7e91128dd8e525743" integrity sha512-1XPwR0+MgXLWfTn9gCsZ55AHOKW1WN+P9vr0PaQh5aerR9LLQXUbjfEAFhjmEmyoYFWAyuN2Mqkn40MZ4ukjBw== dependencies: "@types/linkify-it" "^3" @@ -3186,7 +2550,7 @@ "@types/markdown-it@^14.0.0": version "14.1.2" - resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61" integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== dependencies: "@types/linkify-it" "^5" @@ -3194,120 +2558,157 @@ "@types/mdast@^3.0.0": version "3.0.15" - resolved "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5" integrity sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ== dependencies: "@types/unist" "^2" "@types/mdurl@^1": version "1.0.5" - resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz#3e0d2db570e9fb6ccb2dc8fde0be1d79ac810d39" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.5.tgz#3e0d2db570e9fb6ccb2dc8fde0be1d79ac810d39" integrity sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA== "@types/mdurl@^2": version "2.0.0" - resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== "@types/mdx@^2.0.0": version "2.0.13" - resolved "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd" + resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd" integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== "@types/mime@^1": version "1.3.5" - resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/ms@*": version "2.1.0" - resolved "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== -"@types/node@*", "@types/node@^22.5.4": - version "22.13.1" - resolved "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz#a2a3fefbdeb7ba6b89f40371842162fac0934f33" - integrity sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew== +"@types/node@*": + version "24.0.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.0.4.tgz#dbae889912bda33a7f57669fb8587c1a56bc0c1f" + integrity sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA== dependencies: - undici-types "~6.20.0" + undici-types "~7.8.0" "@types/node@18.14.1": version "18.14.1" - resolved "https://registry.npmjs.org/@types/node/-/node-18.14.1.tgz#90dad8476f1e42797c49d6f8b69aaf9f876fc69f" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.1.tgz#90dad8476f1e42797c49d6f8b69aaf9f876fc69f" integrity sha512-QH+37Qds3E0eDlReeboBxfHbX9omAcBCXEzswCu6jySP642jiM3cYSIkU/REqwhCUqXdonHFuBfJDiAJxMNhaQ== "@types/node@18.15.3": version "18.15.3" - resolved "https://registry.npmjs.org/@types/node/-/node-18.15.3.tgz#f0b991c32cfc6a4e7f3399d6cb4b8cf9a0315014" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.3.tgz#f0b991c32cfc6a4e7f3399d6cb4b8cf9a0315014" integrity sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw== "@types/node@18.16.1": version "18.16.1" - resolved "https://registry.npmjs.org/@types/node/-/node-18.16.1.tgz#5db121e9c5352925bb1f1b892c4ae620e3526799" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.1.tgz#5db121e9c5352925bb1f1b892c4ae620e3526799" integrity sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA== "@types/node@^20.14.9", "@types/node@^20.5.2": - version "20.17.17" - resolved "https://registry.npmjs.org/@types/node/-/node-20.17.17.tgz#5cea2af2e271313742c14f418eaf5dcfa8ae2e3a" - integrity sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg== + version "20.19.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.1.tgz#cef8bc04aaae86824b5bbe2570769358592bcc59" + integrity sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA== + dependencies: + undici-types "~6.21.0" + +"@types/node@^22.5.4": + version "22.15.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.33.tgz#5722ba32042fd547c113bc35ea92c1cc59ef68b1" + integrity sha512-wzoocdnnpSxZ+6CjW4ADCK1jVmd1S/J3ArNWfn8FDDQtRm8dkDg7TA+mvek2wNrfCgwuZxqEOiB9B1XCJ6+dbw== dependencies: - undici-types "~6.19.2" + undici-types "~6.21.0" "@types/nprogress@^0.2.0": version "0.2.3" - resolved "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.3.tgz#b2150b054a13622fabcba12cf6f0b54c48b14287" + resolved "https://registry.yarnpkg.com/@types/nprogress/-/nprogress-0.2.3.tgz#b2150b054a13622fabcba12cf6f0b54c48b14287" integrity sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA== "@types/parse-json@^4.0.0": version "4.0.2" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== +"@types/pino-http@^5.8.4": + version "5.8.4" + resolved "https://registry.yarnpkg.com/@types/pino-http/-/pino-http-5.8.4.tgz#c775d527fccdde3c055f9c3ac55c0975284c70f0" + integrity sha512-UTYBQ2acmJ2eK0w58vVtgZ9RAicFFndfrnWC1w5cBTf8zwn/HEy8O+H7psc03UZgTzHmlcuX8VkPRnRDEj+FUQ== + dependencies: + "@types/pino" "6.3" + +"@types/pino-pretty@*": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/pino-pretty/-/pino-pretty-5.0.0.tgz#aa7a61cfd553b051764acfa0a49872f7a09a1722" + integrity sha512-N1uzqSzioqz8R3AkDbSJwcfDWeI3YMPNapSQQhnB2ISU4NYgUIcAh+hYT5ygqBM+klX4htpEhXMmoJv3J7GrdA== + dependencies: + pino-pretty "*" + +"@types/pino-std-serializers@*": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1e28b80b554c8222858e99a4e0fc77fd070e10e8" + integrity sha512-gXfUZx2xIBbFYozGms53fT0nvkacx/+62c8iTxrEqH5PkIGAQvDbXg2774VWOycMPbqn5YJBQ3BMsg4Li3dWbg== + dependencies: + pino-std-serializers "*" + +"@types/pino@6.3": + version "6.3.12" + resolved "https://registry.yarnpkg.com/@types/pino/-/pino-6.3.12.tgz#4425db6ced806109c3df957100cba9dfcd73c228" + integrity sha512-dsLRTq8/4UtVSpJgl9aeqHvbh6pzdmjYD3C092SYgLD2TyoCqHpTJk6vp8DvCTGGc7iowZ2MoiYiVUUCcu7muw== + dependencies: + "@types/node" "*" + "@types/pino-pretty" "*" + "@types/pino-std-serializers" "*" + sonic-boom "^2.1.0" + "@types/prop-types@*", "@types/prop-types@^15.0.0", "@types/prop-types@^15.7.12": - version "15.7.14" - resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" - integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== + version "15.7.15" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" + integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== "@types/qs@*": - version "6.9.18" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2" - integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== + version "6.14.0" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" + integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== "@types/range-parser@*": version "1.2.7" - resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/react-color@^3.0.6", "@types/react-color@^3.0.9": version "3.0.13" - resolved "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.13.tgz#0f86a14ac948428bd811689706c328817661dc13" + resolved "https://registry.yarnpkg.com/@types/react-color/-/react-color-3.0.13.tgz#0f86a14ac948428bd811689706c328817661dc13" integrity sha512-2c/9FZ4ixC5T3JzN0LP5Cke2Mf0MKOP2Eh0NPDPWmuVH3NjPyhEjqNMQpN1Phr5m74egAy+p2lYNAFrX1z9Yrg== dependencies: "@types/reactcss" "*" "@types/react-dom@18.3.0": version "18.3.0" - resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== dependencies: "@types/react" "*" "@types/react-dom@^18.2.18": - version "18.3.5" - resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz#45f9f87398c5dcea085b715c58ddcf1faf65f716" - integrity sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q== + version "18.3.7" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.7.tgz#b89ddf2cd83b4feafcc4e2ea41afdfb95a0d194f" + integrity sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ== "@types/react-transition-group@^4.4.10": version "4.4.12" - resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== -"@types/react@*", "@types/react@^18.3.11": - version "18.3.18" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.18.tgz#9b382c4cd32e13e463f97df07c2ee3bbcd26904b" - integrity sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ== +"@types/react@*": + version "19.1.8" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.8.tgz#ff8395f2afb764597265ced15f8dddb0720ae1c3" + integrity sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g== dependencies: - "@types/prop-types" "*" csstype "^3.0.2" "@types/react@18.3.1": @@ -3318,9 +2719,17 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/react@^18.3.11": + version "18.3.23" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.23.tgz#86ae6f6b95a48c418fecdaccc8069e0fbb63696a" + integrity sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + "@types/reactcss@*": version "1.2.13" - resolved "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.13.tgz#11c7468cc96b5353f7af998a5664deae21c7af08" + resolved "https://registry.yarnpkg.com/@types/reactcss/-/reactcss-1.2.13.tgz#11c7468cc96b5353f7af998a5664deae21c7af08" integrity sha512-gi3S+aUi6kpkF5vdhUsnkwbiSEIU/BEJyD7kBy2SudWBUuKmJk8AQKE0OVcQQeEy40Azh0lV6uynxlikYIJuwg== "@types/reflect-metadata@^0.1.0": @@ -3332,26 +2741,26 @@ "@types/resolve@^1.20.2": version "1.20.6" - resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.6.tgz#e6e60dad29c2c8c206c026e6dd8d6d1bdda850b8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.6.tgz#e6e60dad29c2c8c206c026e6dd8d6d1bdda850b8" integrity sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ== "@types/semver@^7.3.12", "@types/semver@^7.3.4": - version "7.5.8" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + version "7.7.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.0.tgz#64c441bdae033b378b6eef7d0c3d77c329b9378e" + integrity sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA== "@types/send@*": - version "0.17.4" - resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + version "0.17.5" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74" + integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w== dependencies: "@types/mime" "^1" "@types/node" "*" "@types/serve-static@*": - version "1.15.7" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" - integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + version "1.15.8" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.8.tgz#8180c3fbe4a70e8f00b9f70b9ba7f08f35987877" + integrity sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg== dependencies: "@types/http-errors" "*" "@types/node" "*" @@ -3359,76 +2768,69 @@ "@types/triple-beam@^1.3.2": version "1.3.5" - resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== "@types/trusted-types@^2.0.7": version "2.0.7" - resolved "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== "@types/unist@*": version "3.0.3" - resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== "@types/unist@^2", "@types/unist@^2.0.0": version "2.0.11" - resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== "@types/use-sync-external-store@^0.0.6": version "0.0.6" - resolved "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc" integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg== "@types/uuid@^8.3.4": version "8.3.4" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== "@types/uuid@^9.0.1", "@types/uuid@^9.0.8": version "9.0.8" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== -"@types/ws@*": - version "8.5.14" - resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz#93d44b268c9127d96026cf44353725dd9b6c3c21" - integrity sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw== - dependencies: - "@types/node" "*" - -"@types/ws@^8.5.10": - version "8.18.0" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.0.tgz#8a2ec491d6f0685ceaab9a9b7ff44146236993b5" - integrity sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw== +"@types/ws@*", "@types/ws@^8.5.10": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== dependencies: "@types/node" "*" "@types/zxcvbn@^4.4.4", "@types/zxcvbn@^4.4.5": version "4.4.5" - resolved "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.5.tgz#8ce8623ed7a36e3a76d1c0b539708dfb2e859bc0" + resolved "https://registry.yarnpkg.com/@types/zxcvbn/-/zxcvbn-4.4.5.tgz#8ce8623ed7a36e3a76d1c0b539708dfb2e859bc0" integrity sha512-FZJgC5Bxuqg7Rhsm/bx6gAruHHhDQ55r+s0JhDh8CQ16fD7NsJJ+p8YMMQDhSQoIrSmjpqqYWA96oQVMNkjRyA== "@typescript-eslint/eslint-plugin@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/eslint-plugin@^8.6.0": - version "8.24.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.0.tgz#574a95d67660a1e4544ae131d672867a5b40abb3" - integrity sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ== + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.0.tgz#515170100ff867445fe0a17ce05c14fc5fd9ca63" + integrity sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.24.0" - "@typescript-eslint/type-utils" "8.24.0" - "@typescript-eslint/utils" "8.24.0" - "@typescript-eslint/visitor-keys" "8.24.0" + "@typescript-eslint/scope-manager" "8.35.0" + "@typescript-eslint/type-utils" "8.35.0" + "@typescript-eslint/utils" "8.35.0" + "@typescript-eslint/visitor-keys" "8.35.0" graphemer "^1.4.0" - ignore "^5.3.1" + ignore "^7.0.0" natural-compare "^1.4.0" - ts-api-utils "^2.0.1" + ts-api-utils "^2.1.0" "@typescript-eslint/eslint-plugin@^5.48.2": version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== dependencies: "@eslint-community/regexpp" "^4.4.0" @@ -3443,35 +2845,49 @@ tsutils "^3.21.0" "@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser@^8.6.0": - version "8.24.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.0.tgz#bba837f9ee125b78f459ad947ff9b61be8139085" - integrity sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA== - dependencies: - "@typescript-eslint/scope-manager" "8.24.0" - "@typescript-eslint/types" "8.24.0" - "@typescript-eslint/typescript-estree" "8.24.0" - "@typescript-eslint/visitor-keys" "8.24.0" + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.35.0.tgz#20a0e17778a329a6072722f5ac418d4376b767d2" + integrity sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA== + dependencies: + "@typescript-eslint/scope-manager" "8.35.0" + "@typescript-eslint/types" "8.35.0" + "@typescript-eslint/typescript-estree" "8.35.0" + "@typescript-eslint/visitor-keys" "8.35.0" + debug "^4.3.4" + +"@typescript-eslint/project-service@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.35.0.tgz#00bd77e6845fbdb5684c6ab2d8a400a58dcfb07b" + integrity sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ== + dependencies: + "@typescript-eslint/tsconfig-utils" "^8.35.0" + "@typescript-eslint/types" "^8.35.0" debug "^4.3.4" "@typescript-eslint/scope-manager@5.62.0": version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/scope-manager@8.24.0": - version "8.24.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.0.tgz#2e34b3eb2ce768f2ffb109474174ced5417002b1" - integrity sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw== +"@typescript-eslint/scope-manager@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.35.0.tgz#8ccb2ab63383544fab98fc4b542d8d141259ff4f" + integrity sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA== dependencies: - "@typescript-eslint/types" "8.24.0" - "@typescript-eslint/visitor-keys" "8.24.0" + "@typescript-eslint/types" "8.35.0" + "@typescript-eslint/visitor-keys" "8.35.0" + +"@typescript-eslint/tsconfig-utils@8.35.0", "@typescript-eslint/tsconfig-utils@^8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.0.tgz#6e05aeb999999e31d562ceb4fe144f3cbfbd670e" + integrity sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA== "@typescript-eslint/type-utils@5.62.0": version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== dependencies: "@typescript-eslint/typescript-estree" "5.62.0" @@ -3479,29 +2895,29 @@ debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/type-utils@8.24.0": - version "8.24.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.0.tgz#6ee3ec4db06f9e5e7b01ca6c2b5dd5843a9fd1e8" - integrity sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA== +"@typescript-eslint/type-utils@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.35.0.tgz#0201eae9d83ffcc3451ef8c94f53ecfbf2319ecc" + integrity sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA== dependencies: - "@typescript-eslint/typescript-estree" "8.24.0" - "@typescript-eslint/utils" "8.24.0" + "@typescript-eslint/typescript-estree" "8.35.0" + "@typescript-eslint/utils" "8.35.0" debug "^4.3.4" - ts-api-utils "^2.0.1" + ts-api-utils "^2.1.0" "@typescript-eslint/types@5.62.0": version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@8.24.0": - version "8.24.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.0.tgz#694e7fb18d70506c317b816de9521300b0f72c8e" - integrity sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw== +"@typescript-eslint/types@8.35.0", "@typescript-eslint/types@^8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.35.0.tgz#e60d062907930e30008d796de5c4170f02618a93" + integrity sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: "@typescript-eslint/types" "5.62.0" @@ -3512,23 +2928,25 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@8.24.0": - version "8.24.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.0.tgz#0487349be174097bb329a58273100a9629e03c6c" - integrity sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ== +"@typescript-eslint/typescript-estree@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.0.tgz#86141e6c55b75bc1eaecc0781bd39704de14e52a" + integrity sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w== dependencies: - "@typescript-eslint/types" "8.24.0" - "@typescript-eslint/visitor-keys" "8.24.0" + "@typescript-eslint/project-service" "8.35.0" + "@typescript-eslint/tsconfig-utils" "8.35.0" + "@typescript-eslint/types" "8.35.0" + "@typescript-eslint/visitor-keys" "8.35.0" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" minimatch "^9.0.4" semver "^7.6.0" - ts-api-utils "^2.0.1" + ts-api-utils "^2.1.0" "@typescript-eslint/utils@5.62.0": version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" @@ -3540,40 +2958,137 @@ eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/utils@8.24.0": - version "8.24.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.0.tgz#21cb1195ae79230af825bfeed59574f5cb70a749" - integrity sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ== +"@typescript-eslint/utils@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.35.0.tgz#aaf0afab5ab51ea2f1897002907eacd9834606d5" + integrity sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg== dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.24.0" - "@typescript-eslint/types" "8.24.0" - "@typescript-eslint/typescript-estree" "8.24.0" + "@eslint-community/eslint-utils" "^4.7.0" + "@typescript-eslint/scope-manager" "8.35.0" + "@typescript-eslint/types" "8.35.0" + "@typescript-eslint/typescript-estree" "8.35.0" "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@8.24.0": - version "8.24.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.0.tgz#36ecf0b9b1d819ad88a3bd4157ab7d594cb797c9" - integrity sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg== +"@typescript-eslint/visitor-keys@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.0.tgz#93e905e7f1e94d26a79771d1b1eb0024cb159dbf" + integrity sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g== dependencies: - "@typescript-eslint/types" "8.24.0" - eslint-visitor-keys "^4.2.0" + "@typescript-eslint/types" "8.35.0" + eslint-visitor-keys "^4.2.1" "@ungap/structured-clone@^1.2.0": version "1.3.0" - resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== +"@unrs/resolver-binding-android-arm-eabi@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.2.tgz#6cb01dde20bef06397ffd4924f502596cb458851" + integrity sha512-tS+lqTU3N0kkthU+rYp0spAYq15DU8ld9kXkaKg9sbQqJNF+WPMuNHZQGCgdxrUOEO0j22RKMwRVhF1HTl+X8A== + +"@unrs/resolver-binding-android-arm64@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.2.tgz#1672b533f01f98119095860683496def93929a2e" + integrity sha512-MffGiZULa/KmkNjHeuuflLVqfhqLv1vZLm8lWIyeADvlElJ/GLSOkoUX+5jf4/EGtfwrNFcEaB8BRas03KT0/Q== + +"@unrs/resolver-binding-darwin-arm64@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.2.tgz#dad66a21553b1ba4088c6eb922332846550bd9b2" + integrity sha512-dzJYK5rohS1sYl1DHdJ3mwfwClJj5BClQnQSyAgEfggbUwA9RlROQSSbKBLqrGfsiC/VyrDPtbO8hh56fnkbsQ== + +"@unrs/resolver-binding-darwin-x64@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.2.tgz#bfaedca218078862f3d536d44269fed94a6158e2" + integrity sha512-gaIMWK+CWtXcg9gUyznkdV54LzQ90S3X3dn8zlh+QR5Xy7Y+Efqw4Rs4im61K1juy4YNb67vmJsCDAGOnIeffQ== + +"@unrs/resolver-binding-freebsd-x64@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.2.tgz#bdab0e754c45831522b16df0b6fe4b0ffde22628" + integrity sha512-S7QpkMbVoVJb0xwHFwujnwCAEDe/596xqY603rpi/ioTn9VDgBHnCCxh+UFrr5yxuMH+dliHfjwCZJXOPJGPnw== + +"@unrs/resolver-binding-linux-arm-gnueabihf@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.2.tgz#2bac9c19599888d4ba4787b437b0273ac7a7a9f2" + integrity sha512-+XPUMCuCCI80I46nCDFbGum0ZODP5NWGiwS3Pj8fOgsG5/ctz+/zzuBlq/WmGa+EjWZdue6CF0aWWNv84sE1uw== + +"@unrs/resolver-binding-linux-arm-musleabihf@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.2.tgz#49d27d5d63e5f26cf7b93a0731334b302b9b7fec" + integrity sha512-sqvUyAd1JUpwbz33Ce2tuTLJKM+ucSsYpPGl2vuFwZnEIg0CmdxiZ01MHQ3j6ExuRqEDUCy8yvkDKvjYFPb8Zg== + +"@unrs/resolver-binding-linux-arm64-gnu@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.2.tgz#95ba5d1654a04b1049d944871e165d786e8da68f" + integrity sha512-UYA0MA8ajkEDCFRQdng/FVx3F6szBvk3EPnkTTQuuO9lV1kPGuTB+V9TmbDxy5ikaEgyWKxa4CI3ySjklZ9lFA== + +"@unrs/resolver-binding-linux-arm64-musl@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.2.tgz#23f90a48b1d343189b1c20c89b694140e2d5a210" + integrity sha512-P/CO3ODU9YJIHFqAkHbquKtFst0COxdphc8TKGL5yCX75GOiVpGqd1d15ahpqu8xXVsqP4MGFP2C3LRZnnL5MA== + +"@unrs/resolver-binding-linux-ppc64-gnu@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.2.tgz#076f2c2e95dbcd4824cc9929bc504151b402ac11" + integrity sha512-uKStFlOELBxBum2s1hODPtgJhY4NxYJE9pAeyBgNEzHgTqTiVBPjfTlPFJkfxyTjQEuxZbbJlJnMCrRgD7ubzw== + +"@unrs/resolver-binding-linux-riscv64-gnu@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.2.tgz#f7de54d45df430c74bbd12794946a55805bed6dd" + integrity sha512-LkbNnZlhINfY9gK30AHs26IIVEZ9PEl9qOScYdmY2o81imJYI4IMnJiW0vJVtXaDHvBvxeAgEy5CflwJFIl3tQ== + +"@unrs/resolver-binding-linux-riscv64-musl@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.2.tgz#ad1fcdcf5f112d7432fcfe38269a084bdccad266" + integrity sha512-vI+e6FzLyZHSLFNomPi+nT+qUWN4YSj8pFtQZSFTtmgFoxqB6NyjxSjAxEC1m93qn6hUXhIsh8WMp+fGgxCoRg== + +"@unrs/resolver-binding-linux-s390x-gnu@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.2.tgz#d914a4f12b9048e1a4de0040f64d73274104e301" + integrity sha512-sSO4AlAYhSM2RAzBsRpahcJB1msc6uYLAtP6pesPbZtptF8OU/CbCPhSRW6cnYOGuVmEmWVW5xVboAqCnWTeHQ== + +"@unrs/resolver-binding-linux-x64-gnu@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.2.tgz#d8f8cddc42ae267ef45ed4b61ff72b9e22aa3b82" + integrity sha512-jkSkwch0uPFva20Mdu8orbQjv2A3G88NExTN2oPTI1AJ+7mZfYW3cDCTyoH6OnctBKbBVeJCEqh0U02lTkqD5w== + +"@unrs/resolver-binding-linux-x64-musl@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.2.tgz#7bfce67acb51b3f4a7cff8383f46600f7b055a96" + integrity sha512-Uk64NoiTpQbkpl+bXsbeyOPRpUoMdcUqa+hDC1KhMW7aN1lfW8PBlBH4mJ3n3Y47dYE8qi0XTxy1mBACruYBaw== + +"@unrs/resolver-binding-wasm32-wasi@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.2.tgz#b133c9b6941aba54eea007ca2f27ff6ce917ae55" + integrity sha512-EpBGwkcjDicjR/ybC0g8wO5adPNdVuMrNalVgYcWi+gYtC1XYNuxe3rufcO7dA76OHGeVabcO6cSkPJKVcbCXQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.11" + +"@unrs/resolver-binding-win32-arm64-msvc@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.2.tgz#5f95f590f06c1e9ba15b24292c956c21a6294b30" + integrity sha512-EdFbGn7o1SxGmN6aZw9wAkehZJetFPao0VGZ9OMBwKx6TkvDuj6cNeLimF/Psi6ts9lMOe+Dt6z19fZQ9Ye2fw== + +"@unrs/resolver-binding-win32-ia32-msvc@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.2.tgz#aac6595c6de6b26e5314372ab977b0f6a869c903" + integrity sha512-JY9hi1p7AG+5c/dMU8o2kWemM8I6VZxfGwn1GCtf3c5i+IKcMo2NQ8OjZ4Z3/itvY/Si3K10jOBQn7qsD/whUA== + +"@unrs/resolver-binding-win32-x64-msvc@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.2.tgz#f755c5229f1401bbff7307d037c6e38fa169ad1d" + integrity sha512-ryoo+EB19lMxAd80ln9BVf8pdOAxLb97amrQ3SFN9OCRn/5M5wvwDgAe4i8ZjhpbiHoDeP8yavcTEnpKBo7lZg== + "@vitest/expect@2.0.5": version "2.0.5" - resolved "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz#f3745a6a2c18acbea4d39f5935e913f40d26fa86" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-2.0.5.tgz#f3745a6a2c18acbea4d39f5935e913f40d26fa86" integrity sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA== dependencies: "@vitest/spy" "2.0.5" @@ -3583,28 +3098,28 @@ "@vitest/pretty-format@2.0.5": version "2.0.5" - resolved "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz#91d2e6d3a7235c742e1a6cc50e7786e2f2979b1e" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.0.5.tgz#91d2e6d3a7235c742e1a6cc50e7786e2f2979b1e" integrity sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ== dependencies: tinyrainbow "^1.2.0" "@vitest/pretty-format@2.1.9": version "2.1.9" - resolved "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz#434ff2f7611689f9ce70cd7d567eceb883653fdf" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.1.9.tgz#434ff2f7611689f9ce70cd7d567eceb883653fdf" integrity sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ== dependencies: tinyrainbow "^1.2.0" "@vitest/spy@2.0.5": version "2.0.5" - resolved "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz#590fc07df84a78b8e9dd976ec2090920084a2b9f" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-2.0.5.tgz#590fc07df84a78b8e9dd976ec2090920084a2b9f" integrity sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA== dependencies: tinyspy "^3.0.0" "@vitest/utils@2.0.5": version "2.0.5" - resolved "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz#6f8307a4b6bc6ceb9270007f73c67c915944e926" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.0.5.tgz#6f8307a4b6bc6ceb9270007f73c67c915944e926" integrity sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ== dependencies: "@vitest/pretty-format" "2.0.5" @@ -3614,7 +3129,7 @@ "@vitest/utils@^2.1.1": version "2.1.9" - resolved "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz#4f2486de8a54acf7ecbf2c5c24ad7994a680a6c1" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.1.9.tgz#4f2486de8a54acf7ecbf2c5c24ad7994a680a6c1" integrity sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ== dependencies: "@vitest/pretty-format" "2.1.9" @@ -3623,7 +3138,7 @@ "@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== dependencies: "@webassemblyjs/helper-numbers" "1.13.2" @@ -3631,22 +3146,22 @@ "@webassemblyjs/floating-point-hex-parser@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== "@webassemblyjs/helper-api-error@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== "@webassemblyjs/helper-buffer@1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== "@webassemblyjs/helper-numbers@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== dependencies: "@webassemblyjs/floating-point-hex-parser" "1.13.2" @@ -3655,12 +3170,12 @@ "@webassemblyjs/helper-wasm-bytecode@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== "@webassemblyjs/helper-wasm-section@1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -3670,26 +3185,26 @@ "@webassemblyjs/ieee754@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.13.2": version "1.13.2" - resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== "@webassemblyjs/wasm-edit@^1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -3703,7 +3218,7 @@ "@webassemblyjs/wasm-gen@1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -3714,7 +3229,7 @@ "@webassemblyjs/wasm-opt@1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -3724,7 +3239,7 @@ "@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -3736,7 +3251,7 @@ "@webassemblyjs/wast-printer@1.14.1": version "1.14.1" - resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -3744,29 +3259,29 @@ "@xtuc/ieee754@^1.2.0": version "1.2.0" - resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" - resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" abs-svg-path@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf" + resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf" integrity sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA== accepts@~1.3.8: version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -3774,48 +3289,48 @@ accepts@~1.3.8: acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: version "8.3.4" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== dependencies: acorn "^8.11.0" -acorn@^8.11.0, acorn@^8.14.0, acorn@^8.4.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.14.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== +acorn@^8.11.0, acorn@^8.14.0, acorn@^8.4.1, acorn@^8.9.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== agent-base@^7.1.0, agent-base@^7.1.2: version "7.1.3" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== ajv-formats@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" ajv-keywords@^3.5.2: version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== ajv-keywords@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== dependencies: fast-deep-equal "^3.1.3" ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -3825,7 +3340,7 @@ ajv@^6.12.4, ajv@^6.12.5: ajv@^8.0.0, ajv@^8.9.0: version "8.17.1" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: fast-deep-equal "^3.1.3" @@ -3835,44 +3350,44 @@ ajv@^8.0.0, ajv@^8.9.0: ansi-html-community@0.0.8: version "0.0.8" - resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== any-promise@^1.0.0: version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -3880,41 +3395,41 @@ anymatch@~3.1.2: arg@^4.1.0: version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== arg@^5.0.2: version "5.0.2" - resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== aria-hidden@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522" - integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== + version "1.2.6" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.6.tgz#73051c9b088114c795b1ea414e9c0fff874ffc1a" + integrity sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA== dependencies: tslib "^2.0.0" aria-query@5.3.0: version "5.3.0" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: dequal "^2.0.3" aria-query@^5.0.0, aria-query@^5.3.2: version "5.3.2" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== dependencies: call-bound "^1.0.3" @@ -3922,29 +3437,31 @@ array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.6, array-includes@^3.1.8: - version "3.1.8" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== +array-includes@^3.1.6, array-includes@^3.1.8, array-includes@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.findlast@^1.2.5: version "1.2.5" - resolved "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: call-bind "^1.0.7" @@ -3954,21 +3471,22 @@ array.prototype.findlast@^1.2.5: es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" -array.prototype.findlastindex@^1.2.5: - version "1.2.5" - resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== +array.prototype.findlastindex@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" define-properties "^1.2.1" - es-abstract "^1.23.2" + es-abstract "^1.23.9" es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== dependencies: call-bind "^1.0.8" @@ -3978,7 +3496,7 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== dependencies: call-bind "^1.0.8" @@ -3988,7 +3506,7 @@ array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: array.prototype.tosorted@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== dependencies: call-bind "^1.0.7" @@ -3999,7 +3517,7 @@ array.prototype.tosorted@^1.1.4: arraybuffer.prototype.slice@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== dependencies: array-buffer-byte-length "^1.0.1" @@ -4012,54 +3530,54 @@ arraybuffer.prototype.slice@^1.0.4: assertion-error@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== ast-types-flow@^0.0.8: version "0.0.8" - resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== ast-types@^0.16.1: version "0.16.1" - resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz#7a9da1617c9081bc121faafe91711b4c8bb81da2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.16.1.tgz#7a9da1617c9081bc121faafe91711b4c8bb81da2" integrity sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg== dependencies: tslib "^2.0.1" async-function@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== async-lock@^1.3.1: version "1.4.1" - resolved "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz#56b8718915a9b68b10fce2f2a9a3dddf765ef53f" + resolved "https://registry.yarnpkg.com/async-lock/-/async-lock-1.4.1.tgz#56b8718915a9b68b10fce2f2a9a3dddf765ef53f" integrity sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ== async@^3.2.3: version "3.2.6" - resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== atomic-sleep@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" + resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== attr-accept@^2.2.4: version "2.2.5" - resolved "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz#d7061d958e6d4f97bf8665c68b75851a0713ab5e" + resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.5.tgz#d7061d958e6d4f97bf8665c68b75851a0713ab5e" integrity sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ== autoprefixer@10.4.14: version "10.4.14" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== dependencies: browserslist "^4.21.5" @@ -4070,33 +3588,33 @@ autoprefixer@10.4.14: postcss-value-parser "^4.2.0" autoprefixer@^10.4.14, autoprefixer@^10.4.19: - version "10.4.20" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" - integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + version "10.4.21" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" + integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== dependencies: - browserslist "^4.23.3" - caniuse-lite "^1.0.30001646" + browserslist "^4.24.4" + caniuse-lite "^1.0.30001702" fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.1" + picocolors "^1.1.1" postcss-value-parser "^4.2.0" available-typed-arrays@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== dependencies: possible-typed-array-names "^1.0.0" axe-core@^4.10.0: - version "4.10.2" - resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz#85228e3e1d8b8532a27659b332e39b7fa0e022df" - integrity sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w== + version "4.10.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.3.tgz#04145965ac7894faddbac30861e5d8f11bfd14fc" + integrity sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== axios@^1.8.3: - version "1.8.3" - resolved "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz#9ebccd71c98651d547162a018a1a95a4b4ed4de8" - integrity sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A== + version "1.10.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.10.0.tgz#af320aee8632eaf2a400b6a1979fa75856f38d54" + integrity sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -4104,150 +3622,120 @@ axios@^1.8.3: axobject-query@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== b4a@^1.6.4: version "1.6.7" - resolved "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4" integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== babel-plugin-macros@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== dependencies: "@babel/runtime" "^7.12.5" cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-module-resolver@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.2.tgz#cdeac5d4aaa3b08dd1ac23ddbf516660ed2d293e" - integrity sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg== - dependencies: - find-babel-config "^2.1.1" - glob "^9.3.3" - pkg-up "^3.1.0" - reselect "^4.1.7" - resolve "^1.22.8" - -babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.12" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz#ca55bbec8ab0edeeef3d7b8ffd75322e210879a9" - integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.3" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.11.0: - version "0.11.1" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6" - integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.3" - core-js-compat "^3.40.0" - -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.3" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz#abeb1f3f1c762eace37587f42548b08b57789bc8" - integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.3" - bail@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -bare-events@^2.0.0, bare-events@^2.2.0: +bare-events@^2.2.0, bare-events@^2.5.4: version "2.5.4" - resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz#16143d435e1ed9eafd1ab85f12b89b3357a41745" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.4.tgz#16143d435e1ed9eafd1ab85f12b89b3357a41745" integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== bare-fs@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.1.tgz#85844f34da819c76754d545323a8b23ed3617c76" - integrity sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg== + version "4.1.5" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.1.5.tgz#1d06c076e68cc8bf97010d29af9e3ac3808cdcf7" + integrity sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA== dependencies: - bare-events "^2.0.0" + bare-events "^2.5.4" bare-path "^3.0.0" - bare-stream "^2.0.0" + bare-stream "^2.6.4" bare-os@^3.0.1: - version "3.4.0" - resolved "https://registry.npmjs.org/bare-os/-/bare-os-3.4.0.tgz#97be31503f3095beb232a6871f0118859832eb0c" - integrity sha512-9Ous7UlnKbe3fMi7Y+qh0DwAup6A1JkYgPnjvMDNOlmnxNRQvQ/7Nst+OnUQKzk0iAT0m9BisbDVp9gCv8+ETA== + version "3.6.1" + resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-3.6.1.tgz#9921f6f59edbe81afa9f56910658422c0f4858d4" + integrity sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g== bare-path@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz#b59d18130ba52a6af9276db3e96a2e3d3ea52178" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-3.0.0.tgz#b59d18130ba52a6af9276db3e96a2e3d3ea52178" integrity sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw== dependencies: bare-os "^3.0.1" -bare-stream@^2.0.0: +bare-stream@^2.6.4: version "2.6.5" - resolved "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz#bba8e879674c4c27f7e27805df005c15d7a2ca07" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.6.5.tgz#bba8e879674c4c27f7e27805df005c15d7a2ca07" integrity sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA== dependencies: streamx "^2.21.0" +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== + base64-js@^1.1.2, base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== basic-auth@~2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== dependencies: safe-buffer "5.1.2" batch-processor@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" + resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" integrity sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA== better-opn@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz#f96f35deaaf8f34144a4102651babcf00d1d8817" + resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-3.0.2.tgz#f96f35deaaf8f34144a4102651babcf00d1d8817" integrity sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ== dependencies: open "^8.0.4" bidi-js@^1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz#6f8bcf3c877c4d9220ddf49b9bb6930c88f877d2" + resolved "https://registry.yarnpkg.com/bidi-js/-/bidi-js-1.0.3.tgz#6f8bcf3c877c4d9220ddf49b9bb6930c88f877d2" integrity sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw== dependencies: require-from-string "^2.0.2" binary-extensions@^2.0.0: version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bind-event-listener@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/bind-event-listener/-/bind-event-listener-3.0.0.tgz#c90f9a7fcb65cac21045f810c20ef7e647a74921" + resolved "https://registry.yarnpkg.com/bind-event-listener/-/bind-event-listener-3.0.0.tgz#c90f9a7fcb65cac21045f810c20ef7e647a74921" integrity sha512-PJvH288AWQhKs2v9zyfYdPzlPqf5bXbGMmhmUIY9x4dAUGIWgomO771oBQNwJnMQSnUIXhKu6sgzpBRXTlvb8Q== bluebird@^3.7.2: version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== body-parser@1.20.3: version "1.20.3" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" @@ -4265,7 +3753,7 @@ body-parser@1.20.3: boolbase@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== brace-expansion@2.0.2, brace-expansion@^1.1.7, brace-expansion@^2.0.1: @@ -4277,48 +3765,48 @@ brace-expansion@2.0.2, brace-expansion@^1.1.7, brace-expansion@^2.0.1: braces@^3.0.3, braces@~3.0.2: version "3.0.3" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" brotli@^1.3.2: version "1.3.3" - resolved "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz#7365d8cc00f12cf765d2b2c898716bcf4b604d48" + resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.3.tgz#7365d8cc00f12cf765d2b2c898716bcf4b604d48" integrity sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg== dependencies: base64-js "^1.1.2" browser-assert@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz#9aaa5a2a8c74685c2ae05bfe46efd606f068c200" + resolved "https://registry.yarnpkg.com/browser-assert/-/browser-assert-1.2.1.tgz#9aaa5a2a8c74685c2ae05bfe46efd606f068c200" integrity sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ== browserify-zlib@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" -browserslist@^4.21.5, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.3: - version "4.24.4" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" - integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== +browserslist@^4.21.5, browserslist@^4.24.0, browserslist@^4.24.4: + version "4.25.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.1.tgz#ba9e8e6f298a1d86f829c9b975e07948967bb111" + integrity sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw== dependencies: - caniuse-lite "^1.0.30001688" - electron-to-chromium "^1.5.73" + caniuse-lite "^1.0.30001726" + electron-to-chromium "^1.5.173" node-releases "^2.0.19" - update-browserslist-db "^1.1.1" + update-browserslist-db "^1.1.3" buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -4333,14 +3821,14 @@ bundle-require@^5.1.0: busboy@1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== dependencies: streamsearch "^1.1.0" bytes@3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== cac@^6.7.14: @@ -4348,17 +3836,17 @@ cac@^6.7.14: resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" - integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" function-bind "^1.1.2" call-bind@^1.0.7, call-bind@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== dependencies: call-bind-apply-helpers "^1.0.0" @@ -4366,22 +3854,22 @@ call-bind@^1.0.7, call-bind@^1.0.8: get-intrinsic "^1.2.4" set-function-length "^1.2.2" -call-bound@^1.0.2, call-bound@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" - integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: - call-bind-apply-helpers "^1.0.1" - get-intrinsic "^1.2.6" + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" @@ -4389,17 +3877,17 @@ camel-case@^4.1.2: camelcase-css@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: - version "1.0.30001699" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz#a102cf330d153bf8c92bfb5be3cd44c0a89c8c12" - integrity sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w== +caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001726: + version "1.0.30001726" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz#a15bd87d5a4bf01f6b6f70ae7c97fdfd28b5ae47" + integrity sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw== capital-case@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== dependencies: no-case "^3.0.4" @@ -4408,13 +3896,13 @@ capital-case@^1.0.4: case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" - resolved "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== chai@^5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz#3afbc340b994ae3610ca519a6c70ace77ad4378d" - integrity sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-5.2.0.tgz#1358ee106763624114addf84ab02697e411c9c05" + integrity sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw== dependencies: assertion-error "^2.0.1" check-error "^2.1.1" @@ -4424,7 +3912,7 @@ chai@^5.1.1: chalk@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== dependencies: ansi-styles "^4.1.0" @@ -4432,7 +3920,7 @@ chalk@^3.0.0: chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -4440,7 +3928,7 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: change-case@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== dependencies: camel-case "^4.1.2" @@ -4458,12 +3946,12 @@ change-case@^4.1.2: character-entities@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== check-error@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== chokidar@3.6.0, chokidar@^3.3.0, chokidar@^3.5.2, chokidar@^3.5.3, chokidar@^3.6.0, chokidar@^4.0.3: @@ -4482,47 +3970,47 @@ chokidar@3.6.0, chokidar@^3.3.0, chokidar@^3.5.2, chokidar@^3.5.3, chokidar@^3.6 fsevents "~2.3.2" chromatic@^11.4.0: - version "11.25.2" - resolved "https://registry.npmjs.org/chromatic/-/chromatic-11.25.2.tgz#cb93dc1332d8f6b70d97a3ef126bc6d03429d396" - integrity sha512-/9eQWn6BU1iFsop86t8Au21IksTRxwXAl7if8YHD05L2AbuMjClLWZo5cZojqrJHGKDhTqfrC2X2xE4uSm0iKw== + version "11.29.0" + resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-11.29.0.tgz#da556dbd3b043e8c6a3134d1afa3bb4ad7317410" + integrity sha512-yisBlntp9hHVj19lIQdpTlcYIXuU9H/DbFuu6tyWHmj6hWT2EtukCCcxYXL78XdQt1vm2GfIrtgtKpj/Rzmo4A== chrome-trace-event@^1.0.2: version "1.0.4" - resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== cjs-module-lexer@^1.2.3: version "1.4.3" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== class-variance-authority@^0.7.0, class-variance-authority@^0.7.1: version "0.7.1" - resolved "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz#4008a798a0e4553a781a57ac5177c9fb5d043787" + resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.1.tgz#4008a798a0e4553a781a57ac5177c9fb5d043787" integrity sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg== dependencies: clsx "^2.1.1" -classnames@^2.3.1, classnames@^2.3.2: +classnames@^2.3.1: version "2.5.1" - resolved "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== clean-css@^5.2.2: version "5.3.3" - resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== dependencies: source-map "~0.6.0" client-only@0.0.1, client-only@^0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== cliui@^8.0.1: version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -4531,56 +4019,56 @@ cliui@^8.0.1: clone@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== clsx@^2.0.0, clsx@^2.1.0, clsx@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== cluster-key-slot@^1.1.0: version "1.1.2" - resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== cmdk@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/cmdk/-/cmdk-1.0.4.tgz#cbddef6f5ade2378f85c80a0b9ad9a8a712779b5" - integrity sha512-AnsjfHyHpQ/EFeAnG216WY7A5LiYCoZzCSygiLvfXC3H3LFGCprErteUcszaVluGOhuOTbJS3jWHrSDYPBBygg== + version "1.1.1" + resolved "https://registry.yarnpkg.com/cmdk/-/cmdk-1.1.1.tgz#b8524272699ccaa37aaf07f36850b376bf3d58e5" + integrity sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg== dependencies: - "@radix-ui/react-dialog" "^1.1.2" + "@radix-ui/react-compose-refs" "^1.1.1" + "@radix-ui/react-dialog" "^1.1.6" "@radix-ui/react-id" "^1.1.0" - "@radix-ui/react-primitive" "^2.0.0" - use-sync-external-store "^1.2.2" + "@radix-ui/react-primitive" "^2.0.2" color-convert@^1.9.3: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^1.6.0, color-string@^1.9.0, color-string@^1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" @@ -4588,7 +4076,7 @@ color-string@^1.6.0, color-string@^1.9.0, color-string@^1.9.1: color@^3.1.3: version "3.2.1" - resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: color-convert "^1.9.3" @@ -4596,7 +4084,7 @@ color@^3.1.3: color@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== dependencies: color-convert "^2.0.1" @@ -4604,12 +4092,12 @@ color@^4.2.3: colorette@^2.0.10, colorette@^2.0.7: version "2.0.20" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== colorspace@1.1.x: version "1.1.4" - resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== dependencies: color "^3.1.3" @@ -4617,56 +4105,51 @@ colorspace@1.1.x: combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" comlink@^4.4.1: version "4.4.2" - resolved "https://registry.npmjs.org/comlink/-/comlink-4.4.2.tgz#cbbcd82742fbebc06489c28a183eedc5c60a2bca" + resolved "https://registry.yarnpkg.com/comlink/-/comlink-4.4.2.tgz#cbbcd82742fbebc06489c28a183eedc5c60a2bca" integrity sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g== comma-separated-tokens@^2.0.0: version "2.0.3" - resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== commander@^2.20.0: version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^4.0.0: version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - commander@^8.3.0: version "8.3.0" - resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== compressible@~2.0.18: version "2.0.18" - resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.8.0" - resolved "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz#09420efc96e11a0f44f3a558de59e321364180f7" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.0.tgz#09420efc96e11a0f44f3a558de59e321364180f7" integrity sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA== dependencies: bytes "3.1.2" @@ -4679,13 +4162,13 @@ compression@^1.7.4: compute-scroll-into-view@^3.0.2: version "3.1.1" - resolved "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz#02c3386ec531fb6a9881967388e53e8564f3e9aa" + resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz#02c3386ec531fb6a9881967388e53e8564f3e9aa" integrity sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw== concurrently@^9.0.1: - version "9.1.2" - resolved "https://registry.npmjs.org/concurrently/-/concurrently-9.1.2.tgz#22d9109296961eaee773e12bfb1ce9a66bc9836c" - integrity sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ== + version "9.2.0" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.2.0.tgz#233e3892ceb0b5db9fd49e9c8c739737a7b638b5" + integrity sha512-IsB/fiXTupmagMW4MNp2lx2cdSN2FfZq78vF90LBB+zZHArbIQZjQtzXCiXnvTxCZSvXanTqFLWBjw2UkLx1SQ== dependencies: chalk "^4.1.2" lodash "^4.17.21" @@ -4702,7 +4185,7 @@ consola@^3.4.0: constant-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== dependencies: no-case "^3.0.4" @@ -4711,56 +4194,49 @@ constant-case@^3.0.4: constants-browserify@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== convert-source-map@^1.5.0: version "1.9.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.7.1: version "0.7.1" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== -core-js-compat@^3.40.0: - version "3.40.0" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz#7485912a5a4a4315c2fdb2cbdc623e6881c88b38" - integrity sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ== - dependencies: - browserslist "^4.24.3" - core-js@^3.38.1: - version "3.40.0" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.40.0.tgz#2773f6b06877d8eda102fc42f828176437062476" - integrity sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ== + version "3.43.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.43.0.tgz#f7258b156523208167df35dea0cfd6b6ecd4ee88" + integrity sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA== cors@^2.8.5: version "2.8.5" - resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -4768,7 +4244,7 @@ cors@^2.8.5: cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: version "7.1.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: "@types/parse-json" "^4.0.0" @@ -4779,7 +4255,7 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: create-react-class@^15.6.2: version "15.7.0" - resolved "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz#7499d7ca2e69bb51d13faf59bd04f0c65a1d6c1e" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.7.0.tgz#7499d7ca2e69bb51d13faf59bd04f0c65a1d6c1e" integrity sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng== dependencies: loose-envify "^1.3.1" @@ -4787,24 +4263,24 @@ create-react-class@^15.6.2: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== crelt@^1.0.0: version "1.0.6" - resolved "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" + resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== cross-fetch@^3.1.5: version "3.2.0" - resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== dependencies: node-fetch "^2.7.0" -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.2, cross-spawn@^7.0.6: version "7.0.6" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" @@ -4813,12 +4289,12 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: crypto-js@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== css-loader@^6.7.1: version "6.11.0" - resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== dependencies: icss-utils "^5.1.0" @@ -4832,7 +4308,7 @@ css-loader@^6.7.1: css-select@^4.1.3: version "4.3.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" @@ -4843,7 +4319,7 @@ css-select@^4.1.3: css-select@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== dependencies: boolbase "^1.0.0" @@ -4854,7 +4330,7 @@ css-select@^5.1.0: css-tree@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== dependencies: mdn-data "2.0.14" @@ -4862,69 +4338,69 @@ css-tree@^1.1.3: css-what@^6.0.1, css-what@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== css.escape@^1.5.1: version "1.5.1" - resolved "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssstyle@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-4.2.1.tgz#5142782410fea95db66fb68147714a652a7c2381" - integrity sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw== + version "4.6.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.6.0.tgz#ea18007024e3167f4f105315f3ec2d982bf48ed9" + integrity sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg== dependencies: - "@asamuzakjp/css-color" "^2.8.2" + "@asamuzakjp/css-color" "^3.2.0" rrweb-cssom "^0.8.0" csstype@^3.0.2, csstype@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== "d3-array@2 - 3", "d3-array@2.10.0 - 3", d3-array@^3.1.6: version "3.2.4" - resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== dependencies: internmap "1 - 2" "d3-color@1 - 3": version "3.1.0" - resolved "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== d3-ease@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== "d3-format@1 - 3": version "3.1.0" - resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== "d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== dependencies: d3-color "1 - 3" d3-path@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== d3-scale@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== dependencies: d3-array "2.10.0 - 3" @@ -4935,38 +4411,38 @@ d3-scale@^4.0.2: d3-shape@^3.1.0: version "3.2.0" - resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== dependencies: d3-path "^3.1.0" "d3-time-format@2 - 4": version "4.1.0" - resolved "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== dependencies: d3-time "1 - 3" "d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== dependencies: d3-array "2 - 3" d3-timer@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== damerau-levenshtein@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== data-urls@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== dependencies: whatwg-mimetype "^4.0.0" @@ -4974,7 +4450,7 @@ data-urls@^5.0.0: data-view-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== dependencies: call-bound "^1.0.3" @@ -4983,7 +4459,7 @@ data-view-buffer@^1.0.2: data-view-byte-length@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== dependencies: call-bound "^1.0.3" @@ -4992,7 +4468,7 @@ data-view-byte-length@^1.0.2: data-view-byte-offset@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== dependencies: call-bound "^1.0.2" @@ -5006,79 +4482,72 @@ date-fns-jalali@^4.1.0-0: date-fns@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz#64b3d83fff5aa80438f5b1a633c2e83b8a1c2d14" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-4.1.0.tgz#64b3d83fff5aa80438f5b1a633c2e83b8a1c2d14" integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== dateformat@^4.6.3: version "4.6.3" - resolved "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== debug@2.6.9: version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.7: - version "4.4.0" - resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== +debug@4, debug@^4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" debug@^3.2.7: version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@^4.4.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" - integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== - dependencies: - ms "^2.1.3" - decimal.js-light@^2.4.1: version "2.5.1" - resolved "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" + resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== -decimal.js@10, decimal.js@^10.4.3: +decimal.js@^10.4.3, decimal.js@^10.5.0: version "10.5.0" - resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz#0f371c7cf6c4898ce0afb09836db73cd82010f22" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.5.0.tgz#0f371c7cf6c4898ce0afb09836db73cd82010f22" integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== decode-named-character-reference@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" - integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + version "1.2.0" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz#25c32ae6dd5e21889549d40f676030e9514cc0ed" + integrity sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q== dependencies: character-entities "^2.0.0" decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" dedent@^0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== deep-eql@^5.0.1: version "5.0.2" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== deep-equal@^1.1.1: version "1.1.2" - resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" integrity sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg== dependencies: is-arguments "^1.1.1" @@ -5090,22 +4559,22 @@ deep-equal@^1.1.1: deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: es-define-property "^1.0.0" @@ -5114,12 +4583,12 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: define-lazy-prop@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== define-properties@^1.1.3, define-properties@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: define-data-property "^1.0.1" @@ -5128,127 +4597,127 @@ define-properties@^1.1.3, define-properties@^1.2.1: delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== denque@^1.1.0: version "1.5.1" - resolved "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== denque@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== depd@2.0.0, depd@~2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -dependency-graph@^0.11.0: - version "0.11.0" - resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" - integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== +dependency-graph@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-1.0.0.tgz#bb5e85aec1310bc13b22dbd76e3196c4ee4c10d2" + integrity sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg== dequal@^2.0.0, dequal@^2.0.2, dequal@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== desandro-matches-selector@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz#717beed4dc13e7d8f3762f707a6d58a6774218e1" + resolved "https://registry.yarnpkg.com/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz#717beed4dc13e7d8f3762f707a6d58a6774218e1" integrity sha512-+1q0nXhdzg1IpIJdMKalUwvvskeKnYyEe3shPRwedNcWtnhEKT3ZxvFjzywHDeGcKViIxTCAoOYQWP1qD7VNyg== destroy@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-libc@^2.0.0, detect-libc@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== detect-node-es@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" + resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== devlop@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== dependencies: dequal "^2.0.0" dfa@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" + resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q== didyoumean@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== diff@^4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== diff@^5.0.0: version "5.2.0" - resolved "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" dlv@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dom-accessibility-api@^0.5.9: version "0.5.16" - resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== dom-accessibility-api@^0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== dom-converter@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== dependencies: utila "~0.4" dom-helpers@^5.0.1: version "5.2.1" - resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== dependencies: "@babel/runtime" "^7.8.7" @@ -5256,7 +4725,7 @@ dom-helpers@^5.0.1: dom-serializer@^1.0.1: version "1.4.1" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" @@ -5265,7 +4734,7 @@ dom-serializer@^1.0.1: dom-serializer@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== dependencies: domelementtype "^2.3.0" @@ -5274,38 +4743,38 @@ dom-serializer@^2.0.0: dom4@^2.1.5: version "2.1.6" - resolved "https://registry.npmjs.org/dom4/-/dom4-2.1.6.tgz#c90df07134aa0dbd81ed4d6ba1237b36fc164770" + resolved "https://registry.yarnpkg.com/dom4/-/dom4-2.1.6.tgz#c90df07134aa0dbd81ed4d6ba1237b36fc164770" integrity sha512-JkCVGnN4ofKGbjf5Uvc8mmxaATIErKQKSgACdBXpsQ3fY6DlIpAyWfiBSrGkttATssbDCp3psiAKWXk5gmjycA== domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== dependencies: domelementtype "^2.3.0" -dompurify@*, dompurify@^3.0.11, dompurify@^3.2.3: - version "3.2.4" - resolved "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz#af5a5a11407524431456cf18836c55d13441cd8e" - integrity sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg== +dompurify@*, dompurify@^3.0.11, dompurify@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.6.tgz#ca040a6ad2b88e2a92dc45f38c79f84a714a1cad" + integrity sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ== optionalDependencies: "@types/trusted-types" "^2.0.7" domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" @@ -5314,7 +4783,7 @@ domutils@^2.5.2, domutils@^2.8.0: domutils@^3.0.1: version "3.2.2" - resolved "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== dependencies: dom-serializer "^2.0.0" @@ -5323,25 +4792,25 @@ domutils@^3.0.1: dot-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" tslib "^2.0.3" dotenv@*, dotenv@^16.0.3, dotenv@^16.3.1, dotenv@^16.4.5: - version "16.4.7" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" - integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + version "16.5.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692" + integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg== dotenv@16.0.3: version "16.0.3" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: call-bind-apply-helpers "^1.0.1" @@ -5350,130 +4819,135 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1: eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== ee-first@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.73: - version "1.5.97" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.97.tgz#5c4a4744c79e7c85b187adf5160264ac130c776f" - integrity sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ== +electron-to-chromium@^1.5.173: + version "1.5.176" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.176.tgz#f4bbbd2c0a9a6a2a527c884eacc18244fa79dd88" + integrity sha512-2nDK9orkm7M9ZZkjO3PjbEd3VUulQLyg5T9O3enJdFvUg46Hzd4DUvTvAuEgbdHYXyFsiG4A5sO9IzToMH1cDg== element-resize-detector@^1.1.9: version "1.2.4" - resolved "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz#3e6c5982dd77508b5fa7e6d5c02170e26325c9b1" + resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.2.4.tgz#3e6c5982dd77508b5fa7e6d5c02170e26325c9b1" integrity sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg== dependencies: batch-processor "1.0.0" emoji-picker-react@^4.5.16: - version "4.12.0" - resolved "https://registry.npmjs.org/emoji-picker-react/-/emoji-picker-react-4.12.0.tgz#4cc310ad4b8a39844a2d5edcc92967683d6b5138" - integrity sha512-q2c8UcZH0eRIMj41bj0k1akTjk69tsu+E7EzkW7giN66iltF6H9LQvQvw6ugscsxdC+1lmt3WZpQkkY65J95tg== + version "4.12.2" + resolved "https://registry.yarnpkg.com/emoji-picker-react/-/emoji-picker-react-4.12.2.tgz#323fbbf763daf1ffc1a9ff819966408e1ec30bab" + integrity sha512-6PDYZGlhidt+Kc0ay890IU4HLNfIR7/OxPvcNxw+nJ4HQhMKd8pnGnPn4n2vqC/arRFCNWQhgJP8rpsYKsz0GQ== dependencies: flairup "1.0.0" emoji-regex@^10.3.0: version "10.4.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== enabled@2.0.x: version "2.0.0" - resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== encodeurl@~2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== dependencies: once "^1.4.0" endent@^2.0.1: version "2.1.0" - resolved "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz#5aaba698fb569e5e18e69e1ff7a28ff35373cd88" + resolved "https://registry.yarnpkg.com/endent/-/endent-2.1.0.tgz#5aaba698fb569e5e18e69e1ff7a28ff35373cd88" integrity sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w== dependencies: dedent "^0.7.0" fast-json-parse "^1.0.3" objectorarray "^1.0.5" -enhanced-resolve@^5.15.0, enhanced-resolve@^5.17.1: - version "5.18.1" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf" - integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== +enhanced-resolve@^5.17.1: + version "5.18.2" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz#7903c5b32ffd4b2143eeb4b92472bd68effd5464" + integrity sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" entities@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: +entities@^4.2.0, entities@^4.4.0: version "4.5.0" - resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== entities@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz#b2ab51fe40d995817979ec79dd621154c3c0f62b" + resolved "https://registry.yarnpkg.com/entities/-/entities-5.0.0.tgz#b2ab51fe40d995817979ec79dd621154c3c0f62b" integrity sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA== +entities@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== + error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9: - version "1.23.9" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" - integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== +es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9, es-abstract@^1.24.0: + version "1.24.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328" + integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== dependencies: array-buffer-byte-length "^1.0.2" arraybuffer.prototype.slice "^1.0.4" available-typed-arrays "^1.0.7" call-bind "^1.0.8" - call-bound "^1.0.3" + call-bound "^1.0.4" data-view-buffer "^1.0.2" data-view-byte-length "^1.0.2" data-view-byte-offset "^1.0.1" es-define-property "^1.0.1" es-errors "^1.3.0" - es-object-atoms "^1.0.0" + es-object-atoms "^1.1.1" es-set-tostringtag "^2.1.0" es-to-primitive "^1.3.0" function.prototype.name "^1.1.8" - get-intrinsic "^1.2.7" - get-proto "^1.0.0" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" get-symbol-description "^1.1.0" globalthis "^1.0.4" gopd "^1.2.0" @@ -5485,21 +4959,24 @@ es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23 is-array-buffer "^3.0.5" is-callable "^1.2.7" is-data-view "^1.0.2" + is-negative-zero "^2.0.3" is-regex "^1.2.1" + is-set "^2.0.3" is-shared-array-buffer "^1.0.4" is-string "^1.1.1" is-typed-array "^1.1.15" - is-weakref "^1.1.0" + is-weakref "^1.1.1" math-intrinsics "^1.1.0" - object-inspect "^1.13.3" + object-inspect "^1.13.4" object-keys "^1.1.1" object.assign "^4.1.7" own-keys "^1.0.1" - regexp.prototype.flags "^1.5.3" + regexp.prototype.flags "^1.5.4" safe-array-concat "^1.1.3" safe-push-apply "^1.0.0" safe-regex-test "^1.1.0" set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" string.prototype.trim "^1.2.10" string.prototype.trimend "^1.0.9" string.prototype.trimstart "^1.0.8" @@ -5508,21 +4985,21 @@ es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23 typed-array-byte-offset "^1.0.4" typed-array-length "^1.0.7" unbox-primitive "^1.1.0" - which-typed-array "^1.1.18" + which-typed-array "^1.1.19" es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-iterator-helpers@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75" integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== dependencies: call-bind "^1.0.8" @@ -5543,20 +5020,20 @@ es-iterator-helpers@^1.2.1: safe-array-concat "^1.1.3" es-module-lexer@^1.2.1, es-module-lexer@^1.5.0: - version "1.6.0" - resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21" - integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== -es-object-atoms@^1.0.0: +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: es-errors "^1.3.0" @@ -5564,16 +5041,16 @@ es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: has-tostringtag "^1.0.2" hasown "^2.0.2" -es-shim-unscopables@^1.0.2: +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== dependencies: hasown "^2.0.2" es-to-primitive@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== dependencies: is-callable "^1.2.7" @@ -5582,14 +5059,14 @@ es-to-primitive@^1.3.0: esbuild-register@^3.5.0: version "3.6.0" - resolved "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz#cf270cfa677baebbc0010ac024b823cbf723a36d" + resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.6.0.tgz#cf270cfa677baebbc0010ac024b823cbf723a36d" integrity sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg== dependencies: debug "^4.3.4" -esbuild@0.25.0, "esbuild@^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0", esbuild@^0.25.0: +esbuild@0.25.0, "esbuild@^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0", esbuild@^0.25.0: version "0.25.0" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz#0de1787a77206c5a79eeb634a623d39b5006ce92" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.0.tgz#0de1787a77206c5a79eeb634a623d39b5006ce92" integrity sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw== optionalDependencies: "@esbuild/aix-ppc64" "0.25.0" @@ -5620,25 +5097,25 @@ esbuild@0.25.0, "esbuild@^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-next@^14.1.0: - version "14.2.24" - resolved "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.24.tgz#da232b0c7f768c0d5c11e1cab9df20351cf3f602" - integrity sha512-9r1ujK++Pgpfixr5+DQ6rXDIQmSzuDbBlAQYMkJRMz9KWqovX7ESUTC0EAyBfOCl3ubkoeplw+aoXDuih3A8fw== + version "14.2.30" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.2.30.tgz#3a2be44099c6fbda60ba5c97098dd5f534bb18c7" + integrity sha512-4pTMb3wfpI+piVeEz3TWG1spjuXJJBZaYabi2H08z2ZTk6/N304POEovHdFmK6EZb4QlKpETulBNaRIITA0+xg== dependencies: - "@next/eslint-plugin-next" "14.2.24" + "@next/eslint-plugin-next" "14.2.30" "@rushstack/eslint-patch" "^1.3.3" "@typescript-eslint/eslint-plugin" "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" @@ -5651,19 +5128,19 @@ eslint-config-next@^14.1.0: eslint-config-prettier@^9.1.0: version "9.1.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== eslint-config-turbo@^1.12.4: version "1.13.4" - resolved "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.13.4.tgz#9c06f10c4e5d971d317baee8695fbdda24b92804" + resolved "https://registry.yarnpkg.com/eslint-config-turbo/-/eslint-config-turbo-1.13.4.tgz#9c06f10c4e5d971d317baee8695fbdda24b92804" integrity sha512-+we4eWdZlmlEn7LnhXHCIPX/wtujbHCS7XjQM/TN09BHNEl2fZ8id4rHfdfUKIYTSKyy8U/nNyJ0DNoZj5Q8bw== dependencies: eslint-plugin-turbo "1.13.4" eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: version "0.3.9" - resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" @@ -5671,54 +5148,53 @@ eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" eslint-import-resolver-typescript@^3.5.2: - version "3.7.0" - resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz#e69925936a771a9cb2de418ccebc4cdf6c0818aa" - integrity sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow== + version "3.10.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz#23dac32efa86a88e2b8232eb244ac499ad636db2" + integrity sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ== dependencies: "@nolyfill/is-core-module" "1.0.39" - debug "^4.3.7" - enhanced-resolve "^5.15.0" - fast-glob "^3.3.2" - get-tsconfig "^4.7.5" - is-bun-module "^1.0.2" - is-glob "^4.0.3" - stable-hash "^0.0.4" + debug "^4.4.0" + get-tsconfig "^4.10.0" + is-bun-module "^2.0.0" + stable-hash "^0.0.5" + tinyglobby "^0.2.13" + unrs-resolver "^1.6.2" -eslint-module-utils@^2.12.0: - version "2.12.0" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" - integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== +eslint-module-utils@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" + integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== dependencies: debug "^3.2.7" eslint-plugin-import@^2.28.1, eslint-plugin-import@^2.29.1: - version "2.31.0" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" - integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== + version "2.32.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" + integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== dependencies: "@rtsao/scc" "^1.1.0" - array-includes "^3.1.8" - array.prototype.findlastindex "^1.2.5" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.12.0" + eslint-module-utils "^2.12.1" hasown "^2.0.2" - is-core-module "^2.15.1" + is-core-module "^2.16.1" is-glob "^4.0.3" minimatch "^3.1.2" object.fromentries "^2.0.8" object.groupby "^1.0.3" - object.values "^1.2.0" + object.values "^1.2.1" semver "^6.3.1" - string.prototype.trimend "^1.0.8" + string.prototype.trimend "^1.0.9" tsconfig-paths "^3.15.0" eslint-plugin-jsx-a11y@^6.7.1: version "6.10.2" - resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== dependencies: aria-query "^5.3.2" @@ -5739,7 +5215,7 @@ eslint-plugin-jsx-a11y@^6.7.1: "eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": version "5.0.0-canary-7118f5dd7-20230705" - resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz#4d55c50e186f1a2b0636433d2b0b2f592ddbccfd" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz#4d55c50e186f1a2b0636433d2b0b2f592ddbccfd" integrity sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw== eslint-plugin-react-hooks@^5.2.0: @@ -5748,9 +5224,9 @@ eslint-plugin-react-hooks@^5.2.0: integrity sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== eslint-plugin-react@^7.33.2: - version "7.37.4" - resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz#1b6c80b6175b6ae4b26055ae4d55d04c414c7181" - integrity sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ== + version "7.37.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065" + integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA== dependencies: array-includes "^3.1.8" array.prototype.findlast "^1.2.5" @@ -5762,7 +5238,7 @@ eslint-plugin-react@^7.33.2: hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.8" + object.entries "^1.1.9" object.fromentries "^2.0.8" object.values "^1.2.1" prop-types "^15.8.1" @@ -5773,14 +5249,14 @@ eslint-plugin-react@^7.33.2: eslint-plugin-turbo@1.13.4: version "1.13.4" - resolved "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.13.4.tgz#d237d51a33ccdf54d3be8e300f8052342a16e85c" + resolved "https://registry.yarnpkg.com/eslint-plugin-turbo/-/eslint-plugin-turbo-1.13.4.tgz#d237d51a33ccdf54d3be8e300f8052342a16e85c" integrity sha512-82GfMzrewI/DJB92Bbch239GWbGx4j1zvjk1lqb06lxIlMPnVwUHVwPbAnLfyLG3JuhLv9whxGkO/q1CL18JTg== dependencies: dotenv "16.0.3" eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -5788,7 +5264,7 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: eslint-scope@^7.2.2: version "7.2.2" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" @@ -5796,17 +5272,17 @@ eslint-scope@^7.2.2: eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" - integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== eslint@8.57.1: version "8.57.1" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" @@ -5850,7 +5326,7 @@ eslint@8.57.1: espree@^9.6.0, espree@^9.6.1: version "9.6.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: acorn "^8.9.0" @@ -5859,73 +5335,73 @@ espree@^9.6.0, espree@^9.6.1: esprima@~4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: version "1.6.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== dependencies: "@types/estree" "^1.0.0" esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== ev-emitter@^1.0.0: version "1.1.1" - resolved "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.1.1.tgz#8f18b0ce5c76a5d18017f71c0a795c65b9138f2a" + resolved "https://registry.yarnpkg.com/ev-emitter/-/ev-emitter-1.1.1.tgz#8f18b0ce5c76a5d18017f71c0a795c65b9138f2a" integrity sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q== event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== eventemitter3@^4.0.1: version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.2.0, events@^3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== expand-template@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== export-to-csv@^1.4.0: @@ -5935,14 +5411,14 @@ export-to-csv@^1.4.0: express-ws@^5.0.2: version "5.0.2" - resolved "https://registry.npmjs.org/express-ws/-/express-ws-5.0.2.tgz#5b02d41b937d05199c6c266d7cc931c823bda8eb" + resolved "https://registry.yarnpkg.com/express-ws/-/express-ws-5.0.2.tgz#5b02d41b937d05199c6c266d7cc931c823bda8eb" integrity sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ== dependencies: ws "^7.4.6" express@^4.21.2: version "4.21.2" - resolved "https://registry.npmjs.org/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== dependencies: accepts "~1.3.8" @@ -5979,32 +5455,32 @@ express@^4.21.2: extend@^3.0.0: version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== fast-copy@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz#59c68f59ccbcac82050ba992e0d5c389097c9d35" + resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.2.tgz#59c68f59ccbcac82050ba992e0d5c389097c9d35" integrity sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ== fast-deep-equal@^3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-equals@^5.0.1: version "5.2.2" - resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz#885d7bfb079fac0ce0e8450374bce29e9b742484" + resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.2.2.tgz#885d7bfb079fac0ce0e8450374bce29e9b742484" integrity sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw== fast-fifo@^1.2.0, fast-fifo@^1.3.2: version "1.3.2" - resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@^3.2.9, fast-glob@^3.3.2, fast-glob@^3.3.3: +fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.3" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -6015,99 +5491,99 @@ fast-glob@^3.2.9, fast-glob@^3.3.2, fast-glob@^3.3.3: fast-json-parse@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" + resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" integrity sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw== fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-redact@^3.1.1: version "3.5.0" - resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== fast-safe-stringify@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== fast-uri@^3.0.1: version "3.0.6" - resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== fastq@^1.6.0: - version "1.19.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz#a82c6b7c2bb4e44766d865f07997785fecfdcb89" - integrity sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA== + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" fault@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" + resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== dependencies: format "^0.2.0" fdir@^6.4.4: - version "6.4.4" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.4.tgz#1cfcf86f875a883e19a8fab53622cfe992e8d2f9" - integrity sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg== + version "6.4.6" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" + integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== fecha@^4.2.0: version "4.2.3" - resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== fflate@^0.4.8: version "0.4.8" - resolved "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz#f90b82aefbd8ac174213abb338bd7ef848f0f5ae" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.4.8.tgz#f90b82aefbd8ac174213abb338bd7ef848f0f5ae" integrity sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA== file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" file-selector@^2.1.0: version "2.1.2" - resolved "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz#fe7c7ee9e550952dfbc863d73b14dc740d7de8b4" + resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-2.1.2.tgz#fe7c7ee9e550952dfbc863d73b14dc740d7de8b4" integrity sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig== dependencies: tslib "^2.7.0" file-stream-rotator@^0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz#007019e735b262bb6c6f0197e58e5c87cb96cec3" + resolved "https://registry.yarnpkg.com/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz#007019e735b262bb6c6f0197e58e5c87cb96cec3" integrity sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ== dependencies: moment "^2.29.1" filesize@^10.0.12: version "10.1.6" - resolved "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz#31194da825ac58689c0bce3948f33ce83aabd361" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.1.6.tgz#31194da825ac58689c0bce3948f33ce83aabd361" integrity sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w== fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" finalhandler@1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== dependencies: debug "2.6.9" @@ -6118,16 +5594,9 @@ finalhandler@1.3.1: statuses "2.0.1" unpipe "~1.0.0" -find-babel-config@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.1.2.tgz#2841b1bfbbbcdb971e1e39df8cbc43dafa901716" - integrity sha512-ZfZp1rQyp4gyuxqt1ZqjFGVeVBvmpURMqdIWXbPRfB97Bf6BzdK/xSIbylEINzQ0kB5tlDQfn9HkNXXWsqTqLg== - dependencies: - json5 "^2.2.3" - find-cache-dir@^3.3.1: version "3.3.2" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" @@ -6136,19 +5605,12 @@ find-cache-dir@^3.3.1: find-root@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^4.0.0: version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -6156,7 +5618,7 @@ find-up@^4.0.0: find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -6164,19 +5626,19 @@ find-up@^5.0.0: fizzy-ui-utils@^2.0.0: version "2.0.7" - resolved "https://registry.npmjs.org/fizzy-ui-utils/-/fizzy-ui-utils-2.0.7.tgz#7df45dcc4eb374a08b65d39bb9a4beedf7330505" + resolved "https://registry.yarnpkg.com/fizzy-ui-utils/-/fizzy-ui-utils-2.0.7.tgz#7df45dcc4eb374a08b65d39bb9a4beedf7330505" integrity sha512-CZXDVXQ1If3/r8s0T+v+qVeMshhfcuq0rqIFgJnrtd+Bu8GmDmqMjntjUePypVtjHXKJ6V4sw9zeyox34n9aCg== dependencies: desandro-matches-selector "^2.0.0" flairup@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/flairup/-/flairup-1.0.0.tgz#d3af0052ad02734c12d2446608a869498adb351b" + resolved "https://registry.yarnpkg.com/flairup/-/flairup-1.0.0.tgz#d3af0052ad02734c12d2446608a869498adb351b" integrity sha512-IKlE+pNvL2R+kVL1kEhUYqRxVqeFnjiIvHWDMLFXNaqyUdFXQM2wte44EfMYJNHkW16X991t2Zg8apKkhv7OBA== flat-cache@^3.0.4: version "3.2.0" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: flatted "^3.2.9" @@ -6184,28 +5646,28 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.2.9: - version "3.3.2" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" - integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== fn.name@1.x.x: version "1.1.0" - resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== follow-redirects@^1.15.6: version "1.15.9" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== fontfaceobserver@2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz#e2705d293e2c585a6531c2a722905657317a2991" + resolved "https://registry.yarnpkg.com/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz#e2705d293e2c585a6531c2a722905657317a2991" integrity sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng== fontkit@^2.0.2: version "2.0.4" - resolved "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz#4765d664c68b49b5d6feb6bd1051ee49d8ec5ab0" + resolved "https://registry.yarnpkg.com/fontkit/-/fontkit-2.0.4.tgz#4765d664c68b49b5d6feb6bd1051ee49d8ec5ab0" integrity sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g== dependencies: "@swc/helpers" "^0.5.12" @@ -6218,24 +5680,24 @@ fontkit@^2.0.2: unicode-properties "^1.4.0" unicode-trie "^2.0.0" -for-each@^0.3.3: +for-each@^0.3.3, for-each@^0.3.5: version "0.3.5" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: is-callable "^1.2.7" foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: - cross-spawn "^7.0.0" + cross-spawn "^7.0.6" signal-exit "^4.0.1" fork-ts-checker-webpack-plugin@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz#dae45dfe7298aa5d553e2580096ced79b6179504" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz#dae45dfe7298aa5d553e2580096ced79b6179504" integrity sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg== dependencies: "@babel/code-frame" "^7.16.7" @@ -6251,38 +5713,40 @@ fork-ts-checker-webpack-plugin@^8.0.0: semver "^7.3.5" tapable "^2.2.1" -form-data@^4.0.0, form-data@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" - integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== +form-data@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.3.tgz#608b1b3f3e28be0fccf5901fc85fb3641e5cf0ae" + integrity sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" mime-types "^2.1.12" format@^0.2.0: version "0.2.2" - resolved "https://registry.npmjs.org/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== forwarded@0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fraction.js@^4.2.0, fraction.js@^4.3.7: version "4.3.7" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== fresh@0.5.2: version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-extra@^10.0.0: version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" @@ -6291,7 +5755,7 @@ fs-extra@^10.0.0: fs-extra@^11.0.0: version "11.3.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== dependencies: graceful-fs "^4.2.0" @@ -6300,32 +5764,27 @@ fs-extra@^11.0.0: fs-monkey@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: version "1.1.8" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== dependencies: call-bind "^1.0.8" @@ -6337,30 +5796,30 @@ function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044" - integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA== +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: - call-bind-apply-helpers "^1.0.1" + call-bind-apply-helpers "^1.0.2" es-define-property "^1.0.1" es-errors "^1.3.0" - es-object-atoms "^1.0.0" + es-object-atoms "^1.1.1" function-bind "^1.1.2" - get-proto "^1.0.0" + get-proto "^1.0.1" gopd "^1.2.0" has-symbols "^1.1.0" hasown "^2.0.2" @@ -6368,12 +5827,12 @@ get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@ get-nonce@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" + resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== get-proto@^1.0.0, get-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: dunder-proto "^1.0.1" @@ -6381,57 +5840,52 @@ get-proto@^1.0.0, get-proto@^1.0.1: get-size@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/get-size/-/get-size-2.0.3.tgz#54a1d0256b20ea7ac646516756202769941ad2ef" + resolved "https://registry.yarnpkg.com/get-size/-/get-size-2.0.3.tgz#54a1d0256b20ea7ac646516756202769941ad2ef" integrity sha512-lXNzT/h/dTjTxRbm9BXb+SGxxzkm97h/PCIKtlN/CBCxxmkkIVV21udumMS93MuVTDX583gqc94v3RjuHmI+2Q== -get-stdin@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" - integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== - get-symbol-description@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== dependencies: call-bound "^1.0.3" es-errors "^1.3.0" get-intrinsic "^1.2.6" -get-tsconfig@^4.7.5: - version "4.10.0" - resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz#403a682b373a823612475a4c2928c7326fc0f6bb" - integrity sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A== +get-tsconfig@^4.10.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e" + integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== dependencies: resolve-pkg-maps "^1.0.0" github-from-package@0.0.0: version "0.0.0" - resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob-to-regexp@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== glob@10.3.10: version "10.3.10" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== dependencies: foreground-child "^3.1.0" @@ -6442,7 +5896,7 @@ glob@10.3.10: glob@^10.3.10: version "10.4.5" - resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" @@ -6452,9 +5906,9 @@ glob@^10.3.10: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.1.3, glob@^7.2.0: +glob@^7.1.3: version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -6464,31 +5918,21 @@ glob@^7.1.3, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^9.3.3: - version "9.3.5" - resolved "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - globals@^11.1.0: version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: version "13.24.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" globalthis@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: define-properties "^1.2.1" @@ -6496,7 +5940,7 @@ globalthis@^1.0.4: globby@^11.1.0: version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -6506,99 +5950,87 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^14.0.0: - version "14.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz#138b78e77cf5a8d794e327b15dce80bf1fb0a73e" - integrity sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA== - dependencies: - "@sindresorhus/merge-streams" "^2.1.0" - fast-glob "^3.3.3" - ignore "^7.0.3" - path-type "^6.0.0" - slash "^5.1.0" - unicorn-magic "^0.3.0" - gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4: version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== gud@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== has-bigints@^1.0.2: version "1.1.0" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" has-proto@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== dependencies: dunder-proto "^1.0.0" has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" hasown@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" hast-util-whitespace@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng== he@1.2.0, he@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== header-case@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== dependencies: capital-case "^1.0.4" @@ -6606,58 +6038,58 @@ header-case@^2.0.4: helmet@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/helmet/-/helmet-7.2.0.tgz#8b2dcc425b4a46c88f6953481b40453cbe66b167" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-7.2.0.tgz#8b2dcc425b4a46c88f6953481b40453cbe66b167" integrity sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw== help-me@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz#b1ebe63b967b74060027c2ac61f9be12d354a6f6" + resolved "https://registry.yarnpkg.com/help-me/-/help-me-5.0.0.tgz#b1ebe63b967b74060027c2ac61f9be12d354a6f6" integrity sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg== highlight.js@^11.8.0, highlight.js@~11.11.0: version "11.11.1" - resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz#fca06fa0e5aeecf6c4d437239135fabc15213585" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.11.1.tgz#fca06fa0e5aeecf6c4d437239135fabc15213585" integrity sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w== highlight.js@~11.8.0: version "11.8.0" - resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-11.8.0.tgz#966518ea83257bae2e7c9a48596231856555bb65" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.8.0.tgz#966518ea83257bae2e7c9a48596231856555bb65" integrity sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg== hoist-non-react-statics@^3.3.1: version "3.3.2" - resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" hsl-to-hex@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz#c58c826dc6d2f1e0a5ff1da5a7ecbf03faac1352" + resolved "https://registry.yarnpkg.com/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz#c58c826dc6d2f1e0a5ff1da5a7ecbf03faac1352" integrity sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA== dependencies: hsl-to-rgb-for-reals "^1.1.0" hsl-to-rgb-for-reals@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz#e1eb23f6b78016e3722431df68197e6dcdc016d9" + resolved "https://registry.yarnpkg.com/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz#e1eb23f6b78016e3722431df68197e6dcdc016d9" integrity sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg== html-encoding-sniffer@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== dependencies: whatwg-encoding "^3.1.1" html-entities@^2.1.0: - version "2.5.2" - resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" - integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== + version "2.6.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.6.0.tgz#7c64f1ea3b36818ccae3d3fb48b6974208e984f8" + integrity sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ== html-minifier-terser@^6.0.2: version "6.1.0" - resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== dependencies: camel-case "^4.1.2" @@ -6670,7 +6102,7 @@ html-minifier-terser@^6.0.2: html-webpack-plugin@^5.5.0: version "5.6.3" - resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz#a31145f0fee4184d53a794f9513147df1e653685" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz#a31145f0fee4184d53a794f9513147df1e653685" integrity sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg== dependencies: "@types/html-minifier-terser" "^6.0.0" @@ -6681,7 +6113,7 @@ html-webpack-plugin@^5.5.0: htmlparser2@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" @@ -6691,7 +6123,7 @@ htmlparser2@^6.1.0: http-errors@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -6702,7 +6134,7 @@ http-errors@2.0.0: http-proxy-agent@^7.0.2: version "7.0.2" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== dependencies: agent-base "^7.1.0" @@ -6710,7 +6142,7 @@ http-proxy-agent@^7.0.2: https-proxy-agent@^7.0.6: version "7.0.6" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== dependencies: agent-base "^7.1.2" @@ -6718,58 +6150,58 @@ https-proxy-agent@^7.0.6: hyphen@^1.6.4: version "1.10.6" - resolved "https://registry.npmjs.org/hyphen/-/hyphen-1.10.6.tgz#0e779d280e696102b97d7e42f5ca5de2cc97e274" + resolved "https://registry.yarnpkg.com/hyphen/-/hyphen-1.10.6.tgz#0e779d280e696102b97d7e42f5ca5de2cc97e274" integrity sha512-fXHXcGFTXOvZTSkPJuGOQf5Lv5T/R2itiiCVPg9LxAje5D00O0pP83yJShFq5V89Ly//Gt6acj7z8pbBr34stw== iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore-by-default@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== -ignore@^5.2.0, ignore@^5.3.1: +ignore@^5.2.0: version "5.3.2" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -ignore@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz#397ef9315dfe0595671eefe8b633fec6943ab733" - integrity sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA== +ignore@^7.0.0: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== imagesloaded@^4.0.0: version "4.1.4" - resolved "https://registry.npmjs.org/imagesloaded/-/imagesloaded-4.1.4.tgz#1376efcd162bb768c34c3727ac89cc04051f3cc7" + resolved "https://registry.yarnpkg.com/imagesloaded/-/imagesloaded-4.1.4.tgz#1376efcd162bb768c34c3727ac89cc04051f3cc7" integrity sha512-ltiBVcYpc/TYTF5nolkMNsnREHW+ICvfQ3Yla2Sgr71YFwQ86bDwV9hgpFhFtrGPuwEx5+LqOHIrdXBdoWwwsA== dependencies: ev-emitter "^1.0.0" import-fresh@^3.2.1: version "3.3.1" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" @@ -6777,17 +6209,17 @@ import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -6795,22 +6227,22 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@~1.3.0: version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inline-style-parser@0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== internal-slot@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: es-errors "^1.3.0" @@ -6819,24 +6251,25 @@ internal-slot@^1.1.0: "internmap@1 - 2": version "2.0.3" - resolved "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" + resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== intl-messageformat@^10.7.11: - version "10.7.15" - resolved "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.15.tgz#5cdc62139ef39ece1b083db32dae4d1c9fa5b627" - integrity sha512-LRyExsEsefQSBjU2p47oAheoKz+EOJxSLDdjOaEjdriajfHsMXOmV/EhMvYSg9bAgCUHasuAC+mcUBe/95PfIg== + version "10.7.16" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.7.16.tgz#d909f9f9f4ab857fbe681d559b958dd4dd9f665a" + integrity sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug== dependencies: - "@formatjs/ecma402-abstract" "2.3.3" - "@formatjs/fast-memoize" "2.2.6" - "@formatjs/icu-messageformat-parser" "2.11.1" - tslib "2" + "@formatjs/ecma402-abstract" "2.3.4" + "@formatjs/fast-memoize" "2.2.7" + "@formatjs/icu-messageformat-parser" "2.11.2" + tslib "^2.8.0" ioredis@^4.28.2: - version "4.28.5" - resolved "https://registry.npmjs.org/ioredis/-/ioredis-4.28.5.tgz#5c149e6a8d76a7f8fa8a504ffc85b7d5b6797f9f" - integrity sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A== + version "4.30.0" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.30.0.tgz#023277fcbeddd2dba3c101ef45f26c3f1de98a92" + integrity sha512-P9F4Eo6zicYsIJbEy/mPJmSxKY0rVcmiy5H8oXPxPDotQRCvCBjBuI5QWoQQanVE9jdeocnum5iqYAHl4pHdLA== dependencies: + "@ioredis/commands" "^1.0.2" cluster-key-slot "^1.1.0" debug "^4.3.1" denque "^1.1.0" @@ -6844,15 +6277,14 @@ ioredis@^4.28.2: lodash.flatten "^4.4.0" lodash.isarguments "^3.1.0" p-map "^2.1.0" - redis-commands "1.7.0" redis-errors "^1.2.0" redis-parser "^3.0.0" standard-as-callback "^2.1.0" ioredis@^5.4.1: - version "5.5.0" - resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.5.0.tgz#ff2332e125ca2ac8e15472ddd14ecdffa6484a2a" - integrity sha512-7CutT89g23FfSa8MDoIFs2GYYa0PaNiW/OrT+nRyjRXHDZd17HmIgy+reOQ/yhh72NznNjGuS8kbCAcA4Ro4mw== + version "5.6.1" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.6.1.tgz#1ed7dc9131081e77342503425afceaf7357ae599" + integrity sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA== dependencies: "@ioredis/commands" "^1.1.1" cluster-key-slot "^1.1.0" @@ -6866,12 +6298,12 @@ ioredis@^5.4.1: ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-arguments@^1.0.4, is-arguments@^1.1.1: version "1.2.0" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== dependencies: call-bound "^1.0.2" @@ -6879,7 +6311,7 @@ is-arguments@^1.0.4, is-arguments@^1.1.1: is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: version "3.0.5" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== dependencies: call-bind "^1.0.8" @@ -6888,17 +6320,17 @@ is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-async-function@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== dependencies: async-function "^1.0.0" @@ -6909,21 +6341,21 @@ is-async-function@^2.0.0: is-bigint@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== dependencies: has-bigints "^1.0.2" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-boolean-object@^1.2.1: version "1.2.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: call-bound "^1.0.3" @@ -6931,31 +6363,31 @@ is-boolean-object@^1.2.1: is-buffer@^2.0.0: version "2.0.5" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-bun-module@^1.0.2: - version "1.3.0" - resolved "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz#ea4d24fdebfcecc98e81bcbcb506827fee288760" - integrity sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA== +is-bun-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-2.0.0.tgz#4d7859a87c0fcac950c95e666730e745eae8bddd" + integrity sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ== dependencies: - semver "^7.6.3" + semver "^7.7.1" is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0: +is-core-module@^2.13.0, is-core-module@^2.16.0, is-core-module@^2.16.1: version "2.16.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: hasown "^2.0.2" is-data-view@^1.0.1, is-data-view@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== dependencies: call-bound "^1.0.2" @@ -6964,7 +6396,7 @@ is-data-view@^1.0.1, is-data-view@^1.0.2: is-date-object@^1.0.5, is-date-object@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== dependencies: call-bound "^1.0.2" @@ -6972,29 +6404,29 @@ is-date-object@^1.0.5, is-date-object@^1.1.0: is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-finalizationregistry@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== dependencies: call-bound "^1.0.3" is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-function@^1.0.10, is-generator-function@^1.0.7: version "1.1.0" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== dependencies: call-bound "^1.0.3" @@ -7004,19 +6436,24 @@ is-generator-function@^1.0.10, is-generator-function@^1.0.7: is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-map@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + is-number-object@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== dependencies: call-bound "^1.0.3" @@ -7024,27 +6461,27 @@ is-number-object@^1.1.1: is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^4.0.0: version "4.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== is-potential-custom-element-name@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-regex@^1.1.4, is-regex@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: call-bound "^1.0.2" @@ -7054,24 +6491,24 @@ is-regex@^1.1.4, is-regex@^1.2.1: is-set@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== is-shared-array-buffer@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: call-bound "^1.0.3" is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.7, is-string@^1.1.1: +is-string@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== dependencies: call-bound "^1.0.3" @@ -7079,7 +6516,7 @@ is-string@^1.0.7, is-string@^1.1.1: is-symbol@^1.0.4, is-symbol@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: call-bound "^1.0.2" @@ -7088,31 +6525,31 @@ is-symbol@^1.0.4, is-symbol@^1.1.1: is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15, is-typed-array@^1.1.3: version "1.1.15" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: which-typed-array "^1.1.16" is-url@^1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== is-weakmap@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== -is-weakref@^1.0.2, is-weakref@^1.1.0: +is-weakref@^1.0.2, is-weakref@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== dependencies: call-bound "^1.0.3" is-weakset@^2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== dependencies: call-bound "^1.0.3" @@ -7120,37 +6557,37 @@ is-weakset@^2.0.3: is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" isarray@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isomorphic-dompurify@^2.12.0, isomorphic-dompurify@^2.16.0: - version "2.21.0" - resolved "https://registry.npmjs.org/isomorphic-dompurify/-/isomorphic-dompurify-2.21.0.tgz#57369b409bd72a67c111d065eae412610725588b" - integrity sha512-IjBG/D6ApEiO6ciXvrzPqbE4xOLbjRTshSWRSeeycQVhvsxf1O9PhA7LoqwMYS0/2PKLNFJRugwsNV5UihtLxQ== + version "2.25.0" + resolved "https://registry.yarnpkg.com/isomorphic-dompurify/-/isomorphic-dompurify-2.25.0.tgz#063e3ea7399bc1146783a9527be6c10baa25dc15" + integrity sha512-bcpJzu9DOjN21qaCVpcoCwUX1ytpvA6EFqCK5RNtPg5+F0Jz9PX50jl6jbEicBNeO87eDDfC7XtPs4zjDClZJg== dependencies: - dompurify "^3.2.3" - jsdom "^26.0.0" + dompurify "^3.2.6" + jsdom "^26.1.0" isomorphic.js@^0.2.4: version "0.2.5" - resolved "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz#13eecf36f2dba53e85d355e11bf9d4208c6f7f88" + resolved "https://registry.yarnpkg.com/isomorphic.js/-/isomorphic.js-0.2.5.tgz#13eecf36f2dba53e85d355e11bf9d4208c6f7f88" integrity sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw== iterator.prototype@^1.1.4: version "1.1.5" - resolved "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== dependencies: define-data-property "^1.1.4" @@ -7162,7 +6599,7 @@ iterator.prototype@^1.1.4: jackspeak@^2.3.5: version "2.3.6" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== dependencies: "@isaacs/cliui" "^8.0.2" @@ -7171,23 +6608,23 @@ jackspeak@^2.3.5: jackspeak@^3.1.2: version "3.4.3" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jay-peg@^1.0.2: +jay-peg@^1.0.2, jay-peg@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/jay-peg/-/jay-peg-1.1.1.tgz#fdf410b89fa7a295bf74424ffe4c9083dbe7c363" + resolved "https://registry.yarnpkg.com/jay-peg/-/jay-peg-1.1.1.tgz#fdf410b89fa7a295bf74424ffe4c9083dbe7c363" integrity sha512-D62KEuBxz/ip2gQKOEhk/mx14o7eiFRaU+VNNSP4MOiIkwb/D6B3G1Mfas7C/Fit8EsSV2/IWjZElx/Gs6A4ww== dependencies: restructure "^3.0.0" jest-worker@^27.4.5: version "27.5.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" @@ -7196,40 +6633,39 @@ jest-worker@^27.4.5: jiti@^1.21.6: version "1.21.7" - resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== joycon@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" + resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsdoc-type-pratt-parser@^4.0.0: version "4.1.0" - resolved "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz#ff6b4a3f339c34a6c188cbf50a16087858d22113" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz#ff6b4a3f339c34a6c188cbf50a16087858d22113" integrity sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg== -jsdom@^26.0.0: - version "26.0.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz#446dd1ad8cfc50df7e714e58f1f972c1763b354c" - integrity sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw== +jsdom@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-26.1.0.tgz#ab5f1c1cafc04bd878725490974ea5e8bf0c72b3" + integrity sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg== dependencies: cssstyle "^4.2.1" data-urls "^5.0.0" - decimal.js "^10.4.3" - form-data "^4.0.1" + decimal.js "^10.5.0" html-encoding-sniffer "^4.0.0" http-proxy-agent "^7.0.2" https-proxy-agent "^7.0.6" @@ -7239,65 +6675,60 @@ jsdom@^26.0.0: rrweb-cssom "^0.8.0" saxes "^6.0.0" symbol-tree "^3.2.4" - tough-cookie "^5.0.0" + tough-cookie "^5.1.1" w3c-xmlserializer "^5.0.0" webidl-conversions "^7.0.0" whatwg-encoding "^3.1.1" whatwg-mimetype "^4.0.0" - whatwg-url "^14.1.0" + whatwg-url "^14.1.1" ws "^8.18.0" xml-name-validator "^5.0.0" jsesc@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -jsesc@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" - integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== - json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.2.2, json5@^2.2.3: version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^6.0.1, jsonfile@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -7306,7 +6737,7 @@ jsonfile@^6.0.1, jsonfile@^6.1.0: "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: version "3.3.5" - resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== dependencies: array-includes "^3.1.6" @@ -7316,162 +6747,162 @@ jsonfile@^6.0.1, jsonfile@^6.1.0: jsx-dom-cjs@^8.0.3: version "8.1.6" - resolved "https://registry.npmjs.org/jsx-dom-cjs/-/jsx-dom-cjs-8.1.6.tgz#37ac60189fd0a99b63d0c2bb99f57fc563992b25" + resolved "https://registry.yarnpkg.com/jsx-dom-cjs/-/jsx-dom-cjs-8.1.6.tgz#37ac60189fd0a99b63d0c2bb99f57fc563992b25" integrity sha512-aeGqlIZ3IBKF2+B0cKXZGh10OHxxABuHD9tlS10suXDXXG0c4wMkJios9xVslduflSNEQJVlicME3EBCYgxGvA== dependencies: csstype "^3.1.3" keyv@^4.5.3: version "4.5.4" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" kleur@^4.0.3, kleur@^4.1.4: version "4.1.5" - resolved "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== kuler@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== language-subtag-registry@^0.3.20: version "0.3.23" - resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== language-tags@^1.0.9: version "1.0.9" - resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== dependencies: language-subtag-registry "^0.3.20" levn@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" type-check "~0.4.0" -lib0@^0.2.42, lib0@^0.2.47, lib0@^0.2.74, lib0@^0.2.85, lib0@^0.2.87, lib0@^0.2.99: - version "0.2.99" - resolved "https://registry.npmjs.org/lib0/-/lib0-0.2.99.tgz#80d715dbd75496dabe0a1f5061fbb4ea162d2532" - integrity sha512-vwztYuUf1uf/1zQxfzRfO5yzfNKhTtgOByCruuiQQxWQXnPb8Itaube5ylofcV0oM0aKal9Mv+S1s1Ky0UYP1w== +lib0@^0.2.109, lib0@^0.2.47, lib0@^0.2.74, lib0@^0.2.85, lib0@^0.2.87, lib0@^0.2.99: + version "0.2.109" + resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.109.tgz#78a4a15cfb9de489a031396c6497eefe620ca794" + integrity sha512-jP0gbnyW0kwlx1Atc4dcHkBbrVAkdHjuyHxtClUPYla7qCmwIif1qZ6vQeJdR5FrOVdn26HvQT0ko01rgW7/Xw== dependencies: isomorphic.js "^0.2.4" lilconfig@^3.0.0, lilconfig@^3.1.1, lilconfig@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== +linebreak@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" + integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== + dependencies: + base64-js "0.0.8" + unicode-trie "^2.0.0" + lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== linkify-it@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== dependencies: uc.micro "^2.0.0" linkifyjs@^4.1.3: - version "4.2.0" - resolved "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.2.0.tgz#9dd30222b9cbabec9c950e725ec00031c7fa3f08" - integrity sha512-pCj3PrQyATaoTYKHrgWRF3SJwsm61udVh+vuls/Rl6SptiDhgE7ziUIudAedRY9QEfynmM7/RmLEfPUyw1HPCw== + version "4.3.1" + resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.3.1.tgz#1f246ebf4be040002accd1f4535b6af7c7e37898" + integrity sha512-DRSlB9DKVW04c4SUdGvKK5FR6be45lTU9M76JnngqPeeGDqPwYc0zdUErtsNVMtxPXgUWV4HbXbnC4sNyBxkYg== load-tsconfig@^0.2.3: version "0.2.5" - resolved "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz#453b8cd8961bfb912dea77eb6c168fe8cca3d3a1" + resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz#453b8cd8961bfb912dea77eb6c168fe8cca3d3a1" integrity sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg== loader-runner@^4.2.0: version "4.3.0" - resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash-es@^4.17.15: version "4.17.21" - resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== lodash.castarray@^4.4.0: version "4.4.0" - resolved "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" + resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q== lodash.debounce@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.defaults@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== lodash.flatten@^4.4.0: version "4.4.0" - resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== lodash.isarguments@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.sortby@^4.7.0: version "4.7.0" - resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== lodash@^4.0.1, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== logform@^2.7.0: version "2.7.0" - resolved "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz#cfca97528ef290f2e125a08396805002b2d060d1" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.7.0.tgz#cfca97528ef290f2e125a08396805002b2d060d1" integrity sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ== dependencies: "@colors/colors" "1.6.0" @@ -7483,26 +6914,26 @@ logform@^2.7.0: loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" loupe@^3.1.0, loupe@^3.1.1, loupe@^3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz#042a8f7986d77f3d0f98ef7990a2b2fef18b0fd2" - integrity sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug== + version "3.1.4" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.4.tgz#784a0060545cb38778ffb19ccde44d7870d5fdd9" + integrity sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg== lower-case@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" lowlight@^2.9.0: version "2.9.0" - resolved "https://registry.npmjs.org/lowlight/-/lowlight-2.9.0.tgz#70da647a4319c7bfd8e97721a679b13ef5621496" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-2.9.0.tgz#70da647a4319c7bfd8e97721a679b13ef5621496" integrity sha512-OpcaUTCLmHuVuBcyNckKfH5B0oA4JUavb/M/8n9iAvanJYNQkrVm4pvyX0SUaqkBG4dnWHKt7p50B3ngAG2Rfw== dependencies: "@types/hast" "^2.0.0" @@ -7511,7 +6942,7 @@ lowlight@^2.9.0: lowlight@^3.0.0: version "3.3.0" - resolved "https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz#007b8a5bfcfd27cc65b96246d2de3e9dd4e23c6c" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-3.3.0.tgz#007b8a5bfcfd27cc65b96246d2de3e9dd4e23c6c" integrity sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ== dependencies: "@types/hast" "^3.0.0" @@ -7520,66 +6951,58 @@ lowlight@^3.0.0: lru-cache@^10.2.0, lru-cache@^10.4.3: version "10.4.3" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lucide-react@^0.469.0: version "0.469.0" - resolved "https://registry.npmjs.org/lucide-react/-/lucide-react-0.469.0.tgz#f16936ca6521482fef754a7eabb310e6c68e1482" + resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.469.0.tgz#f16936ca6521482fef754a7eabb310e6c68e1482" integrity sha512-28vvUnnKQ/dBwiCQtwJw7QauYnE7yd2Cyp4tTTJpvglX4EMpbflcdBgrgToX2j71B3YvugK/NH3BGUk+E/p/Fw== lz-string@^1.5.0: version "1.5.0" - resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== magic-string@^0.30.5: version "0.30.17" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-dir@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-error@^1.1.1: version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== map-or-similar@^1.5.0: version "1.5.0" - resolved "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" + resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" integrity sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg== markdown-it-task-lists@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz#f68f4d2ac2bad5a2c373ba93081a1a6848417088" + resolved "https://registry.yarnpkg.com/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz#f68f4d2ac2bad5a2c373ba93081a1a6848417088" integrity sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA== markdown-it@^14.0.0, markdown-it@^14.1.0: version "14.1.0" - resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== dependencies: argparse "^2.0.1" @@ -7591,7 +7014,7 @@ markdown-it@^14.0.0, markdown-it@^14.1.0: masonry-layout@^4.2.0: version "4.2.2" - resolved "https://registry.npmjs.org/masonry-layout/-/masonry-layout-4.2.2.tgz#d57b44af13e601bfcdc423f1dd8348b5524de348" + resolved "https://registry.yarnpkg.com/masonry-layout/-/masonry-layout-4.2.2.tgz#d57b44af13e601bfcdc423f1dd8348b5524de348" integrity sha512-iGtAlrpHNyxaR19CvKC3npnEcAwszXoyJiI8ARV2ePi7fmYhIud25MHK8Zx4P0LCC4d3TNO9+rFa1KoK1OEOaA== dependencies: get-size "^2.0.2" @@ -7599,17 +7022,17 @@ masonry-layout@^4.2.0: material-colors@^1.2.1: version "1.2.6" - resolved "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" + resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== math-intrinsics@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== mdast-util-definitions@^5.0.0: version "5.1.2" - resolved "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7" integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA== dependencies: "@types/mdast" "^3.0.0" @@ -7618,7 +7041,7 @@ mdast-util-definitions@^5.0.0: mdast-util-from-markdown@^1.0.0: version "1.3.1" - resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0" integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww== dependencies: "@types/mdast" "^3.0.0" @@ -7636,7 +7059,7 @@ mdast-util-from-markdown@^1.0.0: mdast-util-to-hast@^12.1.0: version "12.3.0" - resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49" integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw== dependencies: "@types/hast" "^2.0.0" @@ -7650,68 +7073,68 @@ mdast-util-to-hast@^12.1.0: mdast-util-to-string@^3.1.0: version "3.2.0" - resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg== dependencies: "@types/mdast" "^3.0.0" mdn-data@2.0.14: version "2.0.14" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== mdurl@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== media-engine@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/media-engine/-/media-engine-1.0.3.tgz#be3188f6cd243ea2a40804a35de5a5b032f58dad" + resolved "https://registry.yarnpkg.com/media-engine/-/media-engine-1.0.3.tgz#be3188f6cd243ea2a40804a35de5a5b032f58dad" integrity sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg== media-typer@0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^3.4.1, memfs@^3.4.12: version "3.6.0" - resolved "https://registry.npmjs.org/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: fs-monkey "^1.0.4" memoizerific@^1.11.3: version "1.11.3" - resolved "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" + resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" integrity sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog== dependencies: map-or-similar "^1.5.0" merge-descriptors@1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromark-core-commonmark@^1.0.1: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8" integrity sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw== dependencies: decode-named-character-reference "^1.0.0" @@ -7733,7 +7156,7 @@ micromark-core-commonmark@^1.0.1: micromark-factory-destination@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f" integrity sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg== dependencies: micromark-util-character "^1.0.0" @@ -7742,7 +7165,7 @@ micromark-factory-destination@^1.0.0: micromark-factory-label@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68" integrity sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w== dependencies: micromark-util-character "^1.0.0" @@ -7752,7 +7175,7 @@ micromark-factory-label@^1.0.0: micromark-factory-space@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== dependencies: micromark-util-character "^1.0.0" @@ -7760,7 +7183,7 @@ micromark-factory-space@^1.0.0: micromark-factory-title@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1" integrity sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ== dependencies: micromark-factory-space "^1.0.0" @@ -7770,7 +7193,7 @@ micromark-factory-title@^1.0.0: micromark-factory-whitespace@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705" integrity sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ== dependencies: micromark-factory-space "^1.0.0" @@ -7780,7 +7203,7 @@ micromark-factory-whitespace@^1.0.0: micromark-util-character@^1.0.0: version "1.2.0" - resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== dependencies: micromark-util-symbol "^1.0.0" @@ -7788,14 +7211,14 @@ micromark-util-character@^1.0.0: micromark-util-chunked@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b" integrity sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ== dependencies: micromark-util-symbol "^1.0.0" micromark-util-classify-character@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d" integrity sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw== dependencies: micromark-util-character "^1.0.0" @@ -7804,7 +7227,7 @@ micromark-util-classify-character@^1.0.0: micromark-util-combine-extensions@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84" integrity sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA== dependencies: micromark-util-chunked "^1.0.0" @@ -7812,14 +7235,14 @@ micromark-util-combine-extensions@^1.0.0: micromark-util-decode-numeric-character-reference@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6" integrity sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw== dependencies: micromark-util-symbol "^1.0.0" micromark-util-decode-string@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c" integrity sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ== dependencies: decode-named-character-reference "^1.0.0" @@ -7829,31 +7252,31 @@ micromark-util-decode-string@^1.0.0: micromark-util-encode@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5" integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw== micromark-util-html-tag-name@^1.0.0: version "1.2.0" - resolved "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588" integrity sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q== micromark-util-normalize-identifier@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7" integrity sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q== dependencies: micromark-util-symbol "^1.0.0" micromark-util-resolve-all@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188" integrity sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA== dependencies: micromark-util-types "^1.0.0" micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d" integrity sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A== dependencies: micromark-util-character "^1.0.0" @@ -7862,7 +7285,7 @@ micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0: micromark-util-subtokenize@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1" integrity sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A== dependencies: micromark-util-chunked "^1.0.0" @@ -7872,17 +7295,17 @@ micromark-util-subtokenize@^1.0.0: micromark-util-symbol@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== micromark@^3.0.0: version "3.2.0" - resolved "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9" integrity sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA== dependencies: "@types/debug" "^4.0.0" @@ -7905,7 +7328,7 @@ micromark@^3.0.0: micromatch@^4.0.2, micromatch@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" @@ -7913,109 +7336,97 @@ micromatch@^4.0.2, micromatch@^4.0.8: mime-db@1.52.0: version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== "mime-db@>= 1.43.0 < 2": - version "1.53.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" - integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== min-indent@^1.0.0, min-indent@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@^8.0.2: - version "8.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== - dependencies: - brace-expansion "^2.0.1" - minimatch@^9.0.1, minimatch@^9.0.4: version "9.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -minipass@^4.2.4: - version "4.2.8" - resolved "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== mkdirp-classic@^0.5.3: version "0.5.3" - resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== mobx-react-lite@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-4.1.0.tgz#6a03ed2d94150848213cfebd7d172e123528a972" + resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-4.1.0.tgz#6a03ed2d94150848213cfebd7d172e123528a972" integrity sha512-QEP10dpHHBeQNv1pks3WnHRCem2Zp636lq54M2nKO2Sarr13pL4u6diQXf65yzXUn0mkk18SyIDCm9UOJYTi1w== dependencies: use-sync-external-store "^1.4.0" mobx-react@^9.1.1: version "9.2.0" - resolved "https://registry.npmjs.org/mobx-react/-/mobx-react-9.2.0.tgz#c1e4d1ed406f6664d9de0787c948bac3a7ed5893" + resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-9.2.0.tgz#c1e4d1ed406f6664d9de0787c948bac3a7ed5893" integrity sha512-dkGWCx+S0/1mfiuFfHRH8D9cplmwhxOV5CkXMp38u6rQGG2Pv3FWYztS0M7ncR6TyPRQKaTG/pnitInoYE9Vrw== dependencies: mobx-react-lite "^4.1.0" mobx-utils@^6.0.8: - version "6.1.0" - resolved "https://registry.npmjs.org/mobx-utils/-/mobx-utils-6.1.0.tgz#98f749b1ede18a9f40b89b9b296bcc625b085ddf" - integrity sha512-P3qUVDFp3Kv5HXD7EIGJn3zlgJJnN+/ZpFHWQ+u6YNN1xDxY53iMvsQ9fM8kauTVdDmt7ulDgDQtDrOxb1NS9Q== + version "6.1.1" + resolved "https://registry.yarnpkg.com/mobx-utils/-/mobx-utils-6.1.1.tgz#61c66563e7646fb75462c189f4110a76d2e35768" + integrity sha512-ZR4tOKucWAHOdMjqElRl2BEvrzK7duuDdKmsbEbt2kzgVpuLuoYLiDCjc3QwWQl8CmOlxPgaZQpZ7emwNqPkIg== mobx@^6.10.0, mobx@^6.12.0: - version "6.13.6" - resolved "https://registry.npmjs.org/mobx/-/mobx-6.13.6.tgz#3b80895c7c9df456efc86ae0b6983ccea1da6cc6" - integrity sha512-r19KNV0uBN4b+ER8Z0gA4y+MzDYIQ2SvOmn3fUrqPnWXdQfakd9yfbPBDBF/p5I+bd3N5Rk1fHONIvMay+bJGA== + version "6.13.7" + resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.13.7.tgz#70e5dda7a45da947f773b3cd3b065dfe7c8a75de" + integrity sha512-aChaVU/DO5aRPmk1GX8L+whocagUUpBQqoPtJk+cm7UOXUk87J4PeWCh6nNmTTIfEhiR9DI/+FnA8dln/hTK7g== moment@^2.29.1: version "2.30.1" - resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== morgan@^1.10.0: version "1.10.0" - resolved "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== dependencies: basic-auth "~2.0.1" @@ -8026,66 +7437,71 @@ morgan@^1.10.0: mri@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== ms@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.3, ms@^2.1.1, ms@^2.1.3: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mz@^2.7.0: version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== dependencies: any-promise "^1.0.0" object-assign "^4.0.1" thenify-all "^1.0.0" -nanoid@3.3.8, nanoid@^3.3.6, nanoid@^3.3.8: +nanoid@3.3.8, nanoid@^3.3.11, nanoid@^3.3.6: version "3.3.8" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== napi-build-utils@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== +napi-postinstall@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.2.4.tgz#419697d0288cb524623e422f919624f22a5e4028" + integrity sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg== + natural-compare-lite@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== negotiator@~0.6.4: version "0.6.4" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== next-themes@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/next-themes/-/next-themes-0.2.1.tgz#0c9f128e847979daf6c67f70b38e6b6567856e45" + resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.1.tgz#0c9f128e847979daf6c67f70b38e6b6567856e45" integrity sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A== next@14.2.30: @@ -8113,39 +7529,39 @@ next@14.2.30: no-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" tslib "^2.0.3" node-abi@^3.3.0: - version "3.74.0" - resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.74.0.tgz#5bfb4424264eaeb91432d2adb9da23c63a301ed0" - integrity sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w== + version "3.75.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.75.0.tgz#2f929a91a90a0d02b325c43731314802357ed764" + integrity sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg== dependencies: semver "^7.3.5" node-abort-controller@^3.0.1: version "3.1.1" - resolved "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== node-addon-api@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== node-fetch@^2.7.0: version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" node-html-parser@^6.1.13: version "6.1.13" - resolved "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz#a1df799b83df5c6743fcd92740ba14682083b7e4" + resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-6.1.13.tgz#a1df799b83df5c6743fcd92740ba14682083b7e4" integrity sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg== dependencies: css-select "^5.1.0" @@ -8153,13 +7569,13 @@ node-html-parser@^6.1.13: node-releases@^2.0.19: version "2.0.19" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== nodemon@^3.1.7: - version "3.1.9" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.1.9.tgz#df502cdc3b120e1c3c0c6e4152349019efa7387b" - integrity sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg== + version "3.1.10" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.10.tgz#5015c5eb4fffcb24d98cf9454df14f4fecec9bc1" + integrity sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw== dependencies: chokidar "^3.5.2" debug "^4" @@ -8174,61 +7590,61 @@ nodemon@^3.1.7: normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-range@^0.1.2: version "0.1.2" - resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-svg-path@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz#0e614eca23c39f0cffe821d6be6cd17e569a766c" + resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz#0e614eca23c39f0cffe821d6be6cd17e569a766c" integrity sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg== dependencies: svg-arc-to-cubic-bezier "^3.0.0" normalize.css@^8.0.1: version "8.0.1" - resolved "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" + resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== nprogress@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== nth-check@^2.0.1: version "2.1.1" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" nwsapi@^2.2.16: - version "2.2.16" - resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz#177760bba02c351df1d2644e220c31dfec8cdb43" - integrity sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ== + version "2.2.20" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.20.tgz#22e53253c61e7b0e7e93cef42c891154bcca11ef" + integrity sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA== object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-hash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.13.3: +object-inspect@^1.13.3, object-inspect@^1.13.4: version "1.13.4" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-is@^1.1.5: version "1.1.6" - resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== dependencies: call-bind "^1.0.7" @@ -8236,12 +7652,12 @@ object-is@^1.1.5: object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4, object.assign@^4.1.7: version "4.1.7" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: call-bind "^1.0.8" @@ -8251,18 +7667,19 @@ object.assign@^4.1.4, object.assign@^4.1.7: has-symbols "^1.1.0" object-keys "^1.1.1" -object.entries@^1.1.8: - version "1.1.8" - resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" - integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== +object.entries@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" + integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" define-properties "^1.2.1" - es-object-atoms "^1.0.0" + es-object-atoms "^1.1.1" object.fromentries@^2.0.8: version "2.0.8" - resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: call-bind "^1.0.7" @@ -8272,16 +7689,16 @@ object.fromentries@^2.0.8: object.groupby@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: call-bind "^1.0.7" define-properties "^1.2.1" es-abstract "^1.23.2" -object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: +object.values@^1.1.6, object.values@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== dependencies: call-bind "^1.0.8" @@ -8291,50 +7708,50 @@ object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: objectorarray@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz#2c05248bbefabd8f43ad13b41085951aac5e68a5" + resolved "https://registry.yarnpkg.com/objectorarray/-/objectorarray-1.0.5.tgz#2c05248bbefabd8f43ad13b41085951aac5e68a5" integrity sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg== on-exit-leak-free@^2.1.0: version "2.1.2" - resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== on-finished@2.4.1: version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" on-finished@~2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== dependencies: ee-first "1.1.1" on-headers@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" one-time@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== dependencies: fn.name "1.x.x" open@^8.0.4: version "8.4.2" - resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: define-lazy-prop "^2.0.0" @@ -8343,7 +7760,7 @@ open@^8.0.4: optionator@^0.9.3: version "0.9.4" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" @@ -8355,12 +7772,12 @@ optionator@^0.9.3: orderedmap@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz#61481269c44031c449915497bf5a4ad273c512d2" + resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-2.1.1.tgz#61481269c44031c449915497bf5a4ad273c512d2" integrity sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g== outlayer@^2.1.0: version "2.1.1" - resolved "https://registry.npmjs.org/outlayer/-/outlayer-2.1.1.tgz#29863b6de10ea5dadfffcadfa0d728907387e9a2" + resolved "https://registry.yarnpkg.com/outlayer/-/outlayer-2.1.1.tgz#29863b6de10ea5dadfffcadfa0d728907387e9a2" integrity sha512-+GplXsCQ3VrbGujAeHEzP9SXsBmJxzn/YdDSQZL0xqBmAWBmortu2Y9Gwdp9J0bgDQ8/YNIPMoBM13nTwZfAhw== dependencies: ev-emitter "^1.0.0" @@ -8369,76 +7786,69 @@ outlayer@^2.1.0: own-keys@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== dependencies: get-intrinsic "^1.2.6" object-keys "^1.1.1" safe-push-apply "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== p-try@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== package-json-from-dist@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== pako@^0.2.5: version "0.2.9" - resolved "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== pako@~1.0.5: version "1.0.11" - resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== param-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: dot-case "^3.0.4" @@ -8446,14 +7856,14 @@ param-case@^3.0.4: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -8463,24 +7873,24 @@ parse-json@^5.0.0: parse-svg-path@^0.1.2: version "0.1.2" - resolved "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb" + resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb" integrity sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ== parse5@^7.2.1: - version "7.2.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a" - integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== + version "7.3.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" + integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== dependencies: - entities "^4.5.0" + entities "^6.0.0" parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascal-case@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: no-case "^3.0.4" @@ -8488,45 +7898,40 @@ pascal-case@^3.1.2: path-browserify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== path-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== dependencies: dot-case "^3.0.4" tslib "^2.0.3" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1, path-scurry@^1.11.1, path-scurry@^1.6.1: +path-scurry@^1.10.1, path-scurry@^1.11.1: version "1.11.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: lru-cache "^10.2.0" @@ -8534,69 +7939,78 @@ path-scurry@^1.10.1, path-scurry@^1.11.1, path-scurry@^1.6.1: path-to-regexp@0.1.12: version "0.1.12" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -path-type@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz#2f1bb6791a91ce99194caede5d6c5920ed81eb51" - integrity sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ== - pathval@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" - integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.1.tgz#8855c5a2899af072d6ac05d11e46045ad0dc605d" + integrity sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ== -picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.1: +picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== picomatch@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== pify@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - pino-abstract-transport@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz#de241578406ac7b8a33ce0d77ae6e8a0b3b68a60" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz#de241578406ac7b8a33ce0d77ae6e8a0b3b68a60" integrity sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw== dependencies: split2 "^4.0.0" pino-http@^10.3.0: - version "10.4.0" - resolved "https://registry.npmjs.org/pino-http/-/pino-http-10.4.0.tgz#a97911138fd5170e6da92ae8882c2a6357e84115" - integrity sha512-vjQsKBE+VN1LVchjbfLE7B6nBeGASZNRNKsR68VS0DolTm5R3zo+47JX1wjm0O96dcbvA7vnqt8YqOWlG5nN0w== + version "10.5.0" + resolved "https://registry.yarnpkg.com/pino-http/-/pino-http-10.5.0.tgz#6a4fd8df93a181fc89f7f89979b8a2146aad29f2" + integrity sha512-hD91XjgaKkSsdn8P7LaebrNzhGTdB086W3pyPihX0EzGPjq5uBJBXo4N5guqNaK6mUjg9aubMF7wDViYek9dRA== dependencies: get-caller-file "^2.0.5" pino "^9.0.0" pino-std-serializers "^7.0.0" - process-warning "^4.0.0" + process-warning "^5.0.0" + +pino-pretty@*: + version "13.0.0" + resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-13.0.0.tgz#21d57fe940e34f2e279905d7dba2d7e2c4f9bf17" + integrity sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA== + dependencies: + colorette "^2.0.7" + dateformat "^4.6.3" + fast-copy "^3.0.2" + fast-safe-stringify "^2.1.1" + help-me "^5.0.0" + joycon "^3.1.1" + minimist "^1.2.6" + on-exit-leak-free "^2.1.0" + pino-abstract-transport "^2.0.0" + pump "^3.0.0" + secure-json-parse "^2.4.0" + sonic-boom "^4.0.1" + strip-json-comments "^3.1.1" pino-pretty@^11.2.2: version "11.3.0" - resolved "https://registry.npmjs.org/pino-pretty/-/pino-pretty-11.3.0.tgz#390b3be044cf3d2e9192c7d19d44f6b690468f2e" + resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-11.3.0.tgz#390b3be044cf3d2e9192c7d19d44f6b690468f2e" integrity sha512-oXwn7ICywaZPHmu3epHGU2oJX4nPmKvHvB/bwrJHlGcbEWaVcotkpyVHMKLKmiVryWYByNp0jpgAcXpFJDXJzA== dependencies: colorette "^2.0.7" @@ -8614,22 +8028,22 @@ pino-pretty@^11.2.2: sonic-boom "^4.0.1" strip-json-comments "^3.1.1" -pino-std-serializers@^7.0.0: +pino-std-serializers@*, pino-std-serializers@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz#7c625038b13718dbbd84ab446bd673dc52259e3b" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz#7c625038b13718dbbd84ab446bd673dc52259e3b" integrity sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA== pino@^9.0.0: - version "9.6.0" - resolved "https://registry.npmjs.org/pino/-/pino-9.6.0.tgz#6bc628159ba0cc81806d286718903b7fc6b13169" - integrity sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg== + version "9.7.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-9.7.0.tgz#ff7cd86eb3103ee620204dbd5ca6ffda8b53f645" + integrity sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg== dependencies: atomic-sleep "^1.0.0" fast-redact "^3.1.1" on-exit-leak-free "^2.1.0" pino-abstract-transport "^2.0.0" pino-std-serializers "^7.0.0" - process-warning "^4.0.0" + process-warning "^5.0.0" quick-format-unescaped "^4.0.3" real-require "^0.2.0" safe-stable-stringify "^2.3.1" @@ -8637,62 +8051,54 @@ pino@^9.0.0: thread-stream "^3.0.0" pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== pkg-dir@^4.1.0: version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - polished@^4.2.2: version "4.3.1" - resolved "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz#5a00ae32715609f83d89f6f31d0f0261c6170548" + resolved "https://registry.yarnpkg.com/polished/-/polished-4.3.1.tgz#5a00ae32715609f83d89f6f31d0f0261c6170548" integrity sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA== dependencies: "@babel/runtime" "^7.17.8" popper.js@^1.14.4, popper.js@^1.16.1: version "1.16.1" - resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== possible-typed-array-names@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== postcss-cli@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz#649f4b9af447501feb6cbca7f7505a132f90442b" - integrity sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA== + version "11.0.1" + resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-11.0.1.tgz#341188ff7b26b19b206ca923ae2bd979751e7da7" + integrity sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g== dependencies: chokidar "^3.3.0" - dependency-graph "^0.11.0" + dependency-graph "^1.0.0" fs-extra "^11.0.0" - get-stdin "^9.0.0" - globby "^14.0.0" picocolors "^1.0.0" postcss-load-config "^5.0.0" postcss-reporter "^7.0.0" pretty-hrtime "^1.0.3" read-cache "^1.0.0" slash "^5.0.0" + tinyglobby "^0.2.12" yargs "^17.0.0" postcss-import@^15.1.0: version "15.1.0" - resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== dependencies: postcss-value-parser "^4.0.0" @@ -8701,14 +8107,14 @@ postcss-import@^15.1.0: postcss-js@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== dependencies: camelcase-css "^2.0.1" postcss-load-config@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== dependencies: lilconfig "^3.0.0" @@ -8716,7 +8122,7 @@ postcss-load-config@^4.0.2: postcss-load-config@^5.0.0: version "5.1.0" - resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz#4ded23410da973e05edae9d41fa99bb5c1d5477f" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-5.1.0.tgz#4ded23410da973e05edae9d41fa99bb5c1d5477f" integrity sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA== dependencies: lilconfig "^3.1.1" @@ -8731,12 +8137,12 @@ postcss-load-config@^6.0.1: postcss-modules-extract-imports@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== postcss-modules-local-by-default@^4.0.5: version "4.2.0" - resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz#d150f43837831dae25e4085596e84f6f5d6ec368" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz#d150f43837831dae25e4085596e84f6f5d6ec368" integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw== dependencies: icss-utils "^5.0.0" @@ -8745,28 +8151,28 @@ postcss-modules-local-by-default@^4.0.5: postcss-modules-scope@^3.2.0: version "3.2.1" - resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== dependencies: postcss-selector-parser "^7.0.0" postcss-modules-values@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: icss-utils "^5.0.0" postcss-nested@^6.0.1, postcss-nested@^6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== dependencies: postcss-selector-parser "^6.1.1" postcss-reporter@^7.0.0: version "7.1.0" - resolved "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz#5ec476d224e2fe25a054e3c66d9b2901d4fab422" + resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-7.1.0.tgz#5ec476d224e2fe25a054e3c66d9b2901d4fab422" integrity sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA== dependencies: picocolors "^1.0.0" @@ -8774,7 +8180,7 @@ postcss-reporter@^7.0.0: postcss-selector-parser@6.0.10: version "6.0.10" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== dependencies: cssesc "^3.0.0" @@ -8782,7 +8188,7 @@ postcss-selector-parser@6.0.10: postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: version "6.1.2" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== dependencies: cssesc "^3.0.0" @@ -8790,7 +8196,7 @@ postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: postcss-selector-parser@^7.0.0: version "7.1.0" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz#4d6af97eba65d73bc4d84bcb343e865d7dd16262" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz#4d6af97eba65d73bc4d84bcb343e865d7dd16262" integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA== dependencies: cssesc "^3.0.0" @@ -8798,45 +8204,45 @@ postcss-selector-parser@^7.0.0: postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@8.4.31: version "8.4.31" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.4.33, postcss@^8.4.38, postcss@^8.4.47: - version "8.5.2" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz#e7b99cb9d2ec3e8dd424002e7c16517cb2b846bd" - integrity sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA== +postcss@^8.4.33, postcss@^8.4.38, postcss@^8.4.47, postcss@^8.4.49: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== dependencies: - nanoid "^3.3.8" + nanoid "^3.3.11" picocolors "^1.1.1" source-map-js "^1.2.1" posthog-js@^1.131.3: - version "1.217.1" - resolved "https://registry.npmjs.org/posthog-js/-/posthog-js-1.217.1.tgz#f8919cc05ed4851896a47a5a0c949e7ae91731c4" - integrity sha512-qttaRWe3WW7VL/MIG1Usg65Dzohw9Ylf8IVWyX36oHH9k0kzriPUl4Nx08P+oV0esbWWaCsljRzIiww4p+HOMQ== + version "1.255.1" + resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.255.1.tgz#c8c335f496d3062985fc00662804604cd3edb884" + integrity sha512-KMh0o9MhORhEZVjXpktXB5rJ8PfDk+poqBoTSoLzWgNjhJf6D8jcyB9jUMA6vVPfn4YeepVX5NuclDRqOwr5Mw== dependencies: core-js "^3.38.1" fflate "^0.4.8" preact "^10.19.3" - web-vitals "^4.2.0" + web-vitals "^4.2.4" preact@^10.19.3: - version "10.25.4" - resolved "https://registry.npmjs.org/preact/-/preact-10.25.4.tgz#c1d00bee9d7b9dcd06a2311d9951973b506ae8ac" - integrity sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA== + version "10.26.9" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.26.9.tgz#b3898d1b65140640799062ad73b89846c293b6a7" + integrity sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA== prebuild-install@^7.1.1: version "7.1.3" - resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== dependencies: detect-libc "^2.0.0" @@ -8854,32 +8260,32 @@ prebuild-install@^7.1.1: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier-plugin-tailwindcss@^0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.3.0.tgz#8299b307c7f6467f52732265579ed9375be6c818" + resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.3.0.tgz#8299b307c7f6467f52732265579ed9375be6c818" integrity sha512-009/Xqdy7UmkcTBpwlq7jsViDqXAYSOMLDrHAdTMlVZOrKfM2o9Ci7EMWTMZ7SkKBFTG04UM9F9iM2+4i6boDA== prettier-plugin-tailwindcss@^0.5.4: version "0.5.14" - resolved "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.14.tgz#4482eed357d5e22eac259541c70aca5a4c7b9d5c" + resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.14.tgz#4482eed357d5e22eac259541c70aca5a4c7b9d5c" integrity sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q== prettier@^2.8.8: version "2.8.8" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== prettier@^3.2.5, prettier@latest: - version "3.5.0" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.5.0.tgz#50325a28887c6dfdf2ca3f8eaba02b66a8429ca7" - integrity sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA== + version "3.6.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.1.tgz#cc3bce21c09a477b1e987b76ce9663925d86ae44" + integrity sha512-5xGWRa90Sp2+x1dQtNpIpeOQpTDBs9cZDmA/qs2vDNN2i18PdapqY7CmBeyLlMuGqXJRIOPaCaVZTLNQRWUH/A== pretty-error@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== dependencies: lodash "^4.17.20" @@ -8887,7 +8293,7 @@ pretty-error@^4.0.0: pretty-format@^27.0.2: version "27.5.1" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== dependencies: ansi-regex "^5.0.1" @@ -8896,22 +8302,22 @@ pretty-format@^27.0.2: pretty-hrtime@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== -process-warning@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz#5c1db66007c67c756e4e09eb170cdece15da32fb" - integrity sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q== +process-warning@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-5.0.0.tgz#566e0bf79d1dff30a72d8bbbe9e8ecefe8d378d7" + integrity sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA== process@^0.11.10: version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.8.1: version "15.8.1" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -8920,41 +8326,41 @@ prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.1, property-information@^6.0.0: version "6.5.0" - resolved "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== -prosemirror-changeset@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz#dae94b63aec618fac7bb9061648e6e2a79988383" - integrity sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ== +prosemirror-changeset@^2.2.1, prosemirror-changeset@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz#eee3299cfabc7a027694e9abdc4e85505e9dd5e7" + integrity sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ== dependencies: prosemirror-transform "^1.0.0" prosemirror-codemark@^0.4.2: version "0.4.2" - resolved "https://registry.npmjs.org/prosemirror-codemark/-/prosemirror-codemark-0.4.2.tgz#b4d0a57c0f1f6c6667e2a1ae7cfb6ba031dfb2e5" + resolved "https://registry.yarnpkg.com/prosemirror-codemark/-/prosemirror-codemark-0.4.2.tgz#b4d0a57c0f1f6c6667e2a1ae7cfb6ba031dfb2e5" integrity sha512-4n+PnGQToa/vTjn0OiivUvE8/moLtguUAfry8UA4Q8p47MhqT2Qpf2zBLustX5Upi4mSp3z1ZYBqLLovZC6abA== prosemirror-collab@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz#0e8c91e76e009b53457eb3b3051fb68dad029a33" + resolved "https://registry.yarnpkg.com/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz#0e8c91e76e009b53457eb3b3051fb68dad029a33" integrity sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ== dependencies: prosemirror-state "^1.0.0" prosemirror-commands@^1.0.0, prosemirror-commands@^1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.6.2.tgz#d9cf6654912442cff47daa1677eb43ebd0b1f117" - integrity sha512-0nDHH++qcf/BuPLYvmqZTUUsPJUCPBUXt0J1ErTcDIS369CTp773itzLGIgIXG4LJXOlwYCr44+Mh4ii6MP1QA== + version "1.7.1" + resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz#d101fef85618b1be53d5b99ea17bee5600781b38" + integrity sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w== dependencies: prosemirror-model "^1.0.0" prosemirror-state "^1.0.0" prosemirror-transform "^1.10.2" prosemirror-dropcursor@^1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.1.tgz#49b9fb2f583e0d0f4021ff87db825faa2be2832d" - integrity sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw== + version "1.8.2" + resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz#2ed30c4796109ddeb1cf7282372b3850528b7228" + integrity sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw== dependencies: prosemirror-state "^1.0.0" prosemirror-transform "^1.1.0" @@ -8962,7 +8368,7 @@ prosemirror-dropcursor@^1.8.1: prosemirror-gapcursor@^1.3.2: version "1.3.2" - resolved "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz#5fa336b83789c6199a7341c9493587e249215cb4" + resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz#5fa336b83789c6199a7341c9493587e249215cb4" integrity sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ== dependencies: prosemirror-keymap "^1.0.0" @@ -8972,7 +8378,7 @@ prosemirror-gapcursor@^1.3.2: prosemirror-history@^1.0.0, prosemirror-history@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz#cc370a46fb629e83a33946a0e12612e934ab8b98" + resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.4.1.tgz#cc370a46fb629e83a33946a0e12612e934ab8b98" integrity sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ== dependencies: prosemirror-state "^1.2.2" @@ -8981,58 +8387,58 @@ prosemirror-history@^1.0.0, prosemirror-history@^1.4.1: rope-sequence "^1.3.0" prosemirror-inputrules@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz#ef1519bb2cb0d1e0cec74bad1a97f1c1555068bb" - integrity sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-1.5.0.tgz#e22bfaf1d6ea4fe240ad447c184af3d520d43c37" + integrity sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA== dependencies: prosemirror-state "^1.0.0" prosemirror-transform "^1.0.0" prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz#14a54763a29c7b2704f561088ccf3384d14eb77e" - integrity sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ== + version "1.2.3" + resolved "https://registry.yarnpkg.com/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz#c0f6ab95f75c0b82c97e44eb6aaf29cbfc150472" + integrity sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw== dependencies: prosemirror-state "^1.0.0" w3c-keyname "^2.2.0" prosemirror-markdown@^1.11.1, prosemirror-markdown@^1.13.1: - version "1.13.1" - resolved "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.1.tgz#23feb6652dacb3dd78ffd8f131da37c20e4e4cf8" - integrity sha512-Sl+oMfMtAjWtlcZoj/5L/Q39MpEnVZ840Xo330WJWUvgyhNmLBLN7MsHn07s53nG/KImevWHSE6fEj4q/GihHw== + version "1.13.2" + resolved "https://registry.yarnpkg.com/prosemirror-markdown/-/prosemirror-markdown-1.13.2.tgz#863eb3fd5f57a444e4378174622b562735b1c503" + integrity sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g== dependencies: "@types/markdown-it" "^14.0.0" markdown-it "^14.0.0" - prosemirror-model "^1.20.0" + prosemirror-model "^1.25.0" prosemirror-menu@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.4.tgz#3cfdc7c06d10f9fbd1bce29082c498bd11a0a79a" - integrity sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA== + version "1.2.5" + resolved "https://registry.yarnpkg.com/prosemirror-menu/-/prosemirror-menu-1.2.5.tgz#dea00e7b623cea89f4d76963bee22d2ac2343250" + integrity sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ== dependencies: crelt "^1.0.0" prosemirror-commands "^1.0.0" prosemirror-history "^1.0.0" prosemirror-state "^1.0.0" -prosemirror-model@^1.0.0, prosemirror-model@^1.19.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.23.0, prosemirror-model@^1.24.1: - version "1.24.1" - resolved "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.24.1.tgz#b445e4f9b9cfc8c1a699215057b506842ebff1a9" - integrity sha512-YM053N+vTThzlWJ/AtPtF1j0ebO36nvbmDy4U7qA2XQB8JVaQp1FmB9Jhrps8s+z+uxhhVTny4m20ptUvhk0Mg== +prosemirror-model@^1.0.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.23.0, prosemirror-model@^1.25.0: + version "1.25.1" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.25.1.tgz#aeae9f1ec79fcaa76f6fc619800d91fbcf726870" + integrity sha512-AUvbm7qqmpZa5d9fPKMvH1Q5bqYQvAZWOGRvxsB6iFLyycvC9MwNemNVjHVrWgjaoxAfY8XVg7DbvQ/qxvI9Eg== dependencies: orderedmap "^2.0.0" prosemirror-schema-basic@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.3.tgz#649c349bb21c61a56febf9deb71ac68fca4cedf2" - integrity sha512-h+H0OQwZVqMon1PNn0AG9cTfx513zgIG2DY00eJ00Yvgb3UD+GQ/VlWW5rcaxacpCGT1Yx8nuhwXk4+QbXUfJA== + version "1.2.4" + resolved "https://registry.yarnpkg.com/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz#389ce1ec09b8a30ea9bbb92c58569cb690c2d695" + integrity sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ== dependencies: - prosemirror-model "^1.19.0" + prosemirror-model "^1.25.0" prosemirror-schema-list@^1.4.1: - version "1.5.0" - resolved "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.0.tgz#f05ddbe2e71efc9157a0dbedf80761c08bda5192" - integrity sha512-gg1tAfH1sqpECdhIHOA/aLg2VH3ROKBWQ4m8Qp9mBKrOxQRW61zc+gMCI8nh22gnBzd1t2u1/NPLmO3nAa3ssg== + version "1.5.1" + resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz#5869c8f749e8745c394548bb11820b0feb1e32f5" + integrity sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q== dependencies: prosemirror-model "^1.0.0" prosemirror-state "^1.0.0" @@ -9040,48 +8446,48 @@ prosemirror-schema-list@^1.4.1: prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.4.3: version "1.4.3" - resolved "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz#94aecf3ffd54ec37e87aa7179d13508da181a080" + resolved "https://registry.yarnpkg.com/prosemirror-state/-/prosemirror-state-1.4.3.tgz#94aecf3ffd54ec37e87aa7179d13508da181a080" integrity sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q== dependencies: prosemirror-model "^1.0.0" prosemirror-transform "^1.0.0" prosemirror-view "^1.27.0" -prosemirror-tables@^1.6.1, prosemirror-tables@^1.6.3: - version "1.6.4" - resolved "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.6.4.tgz#e36ebca70d9e398c4a3b99b122ba86bfc985293d" - integrity sha512-TkDY3Gw52gRFRfRn2f4wJv5WOgAOXLJA2CQJYIJ5+kdFbfj3acR4JUW6LX2e1hiEBiUwvEhzH5a3cZ5YSztpIA== +prosemirror-tables@^1.6.1, prosemirror-tables@^1.6.4: + version "1.7.1" + resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.7.1.tgz#df2507f285c6c7563097b4904cb7c4b9e0cd724b" + integrity sha512-eRQ97Bf+i9Eby99QbyAiyov43iOKgWa7QCGly+lrDt7efZ1v8NWolhXiB43hSDGIXT1UXgbs4KJN3a06FGpr1Q== dependencies: prosemirror-keymap "^1.2.2" - prosemirror-model "^1.24.1" + prosemirror-model "^1.25.0" prosemirror-state "^1.4.3" - prosemirror-transform "^1.10.2" - prosemirror-view "^1.37.2" + prosemirror-transform "^1.10.3" + prosemirror-view "^1.39.1" prosemirror-trailing-node@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz#5bc223d4fc1e8d9145e4079ec77a932b54e19e04" + resolved "https://registry.yarnpkg.com/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz#5bc223d4fc1e8d9145e4079ec77a932b54e19e04" integrity sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ== dependencies: "@remirror/core-constants" "3.0.0" escape-string-regexp "^4.0.0" -prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.10.2, prosemirror-transform@^1.7.3: - version "1.10.2" - resolved "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.2.tgz#8ebac4e305b586cd96595aa028118c9191bbf052" - integrity sha512-2iUq0wv2iRoJO/zj5mv8uDUriOHWzXRnOTVgCzSXnktS/2iQRa3UUQwVlkBlYZFtygw6Nh1+X4mGqoYBINn5KQ== +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.10.2, prosemirror-transform@^1.10.3, prosemirror-transform@^1.7.3: + version "1.10.4" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.4.tgz#56419eac14f9f56612c806ae46f9238648f3f02e" + integrity sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw== dependencies: prosemirror-model "^1.21.0" prosemirror-utils@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/prosemirror-utils/-/prosemirror-utils-1.2.2.tgz#21ff3777e7b9b22b9ec8d7ded7d15b9aeeb1d008" + resolved "https://registry.yarnpkg.com/prosemirror-utils/-/prosemirror-utils-1.2.2.tgz#21ff3777e7b9b22b9ec8d7ded7d15b9aeeb1d008" integrity sha512-7a2MPf99oCW8/587rQYI1/snX71Ban40+apr1hLkY8TmU9YXd7JeR6QsmktcTisJURO3WRjxIia4lTMsYgZVOw== -prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.37.0, prosemirror-view@^1.37.2: - version "1.37.2" - resolved "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.37.2.tgz#e16b92611c6d0f30695606724dc4a9575ce7ca6b" - integrity sha512-ApcyrfV/cRcaL65on7TQcfWElwLyOgIjnIynfAuV+fIdlpbSvSWRwfuPaH7T5mo4AbO/FID29qOtjiDIKGWyog== +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.37.0, prosemirror-view@^1.39.1: + version "1.40.0" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.40.0.tgz#212e627a0c4f0198ac9823a1232e0099c9a92865" + integrity sha512-2G3svX0Cr1sJjkD/DYWSe3cfV5VPVTBOxI9XQEGWJDFEpsZb/gh4MV29ctv+OJx2RFX4BLt09i+6zaGM/ldkCw== dependencies: prosemirror-model "^1.20.0" prosemirror-state "^1.0.0" @@ -9089,7 +8495,7 @@ prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.27.0, pros proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -9097,88 +8503,88 @@ proxy-addr@~2.0.7: proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pstree.remy@^1.1.8: version "1.1.8" - resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== pump@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" - integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + version "3.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d" + integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA== dependencies: end-of-stream "^1.1.0" once "^1.3.1" punycode.js@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" + resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== punycode@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0, punycode@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== qs@6.13.0: version "6.13.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: side-channel "^1.0.6" qs@^6.12.3: version "6.14.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== dependencies: side-channel "^1.1.0" queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== queue@^6.0.1: version "6.0.2" - resolved "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== dependencies: inherits "~2.0.3" quick-format-unescaped@^4.0.3: version "4.0.4" - resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== raf-schd@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" + resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ== randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.2: version "2.5.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -9188,7 +8594,7 @@ raw-body@2.5.2: rc@^1.2.7: version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -9198,7 +8604,7 @@ rc@^1.2.7: react-color@^2.19.3: version "2.19.3" - resolved "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz#ec6c6b4568312a3c6a18420ab0472e146aa5683d" + resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.19.3.tgz#ec6c6b4568312a3c6a18420ab0472e146aa5683d" integrity sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA== dependencies: "@icons/material" "^0.2.4" @@ -9210,9 +8616,9 @@ react-color@^2.19.3: tinycolor2 "^1.4.1" react-confetti@^6.1.0: - version "6.2.2" - resolved "https://registry.npmjs.org/react-confetti/-/react-confetti-6.2.2.tgz#b72888889b10b6707a91adca919dd35c653f4bb2" - integrity sha512-K+kTyOPgX+ZujMZ+Rmb7pZdHBvg+DzinG/w4Eh52WOB8/pfO38efnnrtEZNJmjTvLxc16RBYO+tPM68Fg8viBA== + version "6.4.0" + resolved "https://registry.yarnpkg.com/react-confetti/-/react-confetti-6.4.0.tgz#e9416b5b3c8baf6f0bb1c5a8e1e3c89babd2c837" + integrity sha512-5MdGUcqxrTU26I2EU7ltkWPwxvucQTuqMm8dUz72z2YMqTD6s9vMcDUysk7n9jnC+lXuCPeJJ7Knf98VEYE9Rg== dependencies: tween-functions "^1.2.0" @@ -9226,13 +8632,13 @@ react-day-picker@9.5.0: date-fns-jalali "^4.1.0-0" react-docgen-typescript@^2.2.2: - version "2.2.2" - resolved "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz#4611055e569edc071204aadb20e1c93e1ab1659c" - integrity sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg== + version "2.4.0" + resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-2.4.0.tgz#033428b4a6a639d050ac8baf2a5195c596521713" + integrity sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg== react-docgen@^7.0.0: version "7.1.1" - resolved "https://registry.npmjs.org/react-docgen/-/react-docgen-7.1.1.tgz#a7a8e6b923a945acf0b7325a889ddd74fec74a63" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-7.1.1.tgz#a7a8e6b923a945acf0b7325a889ddd74fec74a63" integrity sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg== dependencies: "@babel/core" "^7.18.9" @@ -9247,24 +8653,24 @@ react-docgen@^7.0.0: strip-indent "^4.0.0" "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0": - version "19.0.0" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57" - integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ== + version "19.1.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.1.0.tgz#133558deca37fa1d682708df8904b25186793623" + integrity sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g== dependencies: - scheduler "^0.25.0" + scheduler "^0.26.0" react-dom@^18.3.1: version "18.3.1" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" scheduler "^0.23.2" react-dropzone@^14.2.3: - version "14.3.5" - resolved "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.3.5.tgz#1a8bd312c8a353ec78ef402842ccb3589c225add" - integrity sha512-9nDUaEEpqZLOz5v5SUcFA0CjM4vq8YbqO0WRls+EYT7+DvxUdzDPKNCPLqGfj3YL9MsniCLCD4RFA6M95V6KMQ== + version "14.3.8" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-14.3.8.tgz#a7eab118f8a452fe3f8b162d64454e81ba830582" + integrity sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug== dependencies: attr-accept "^2.2.4" file-selector "^2.1.0" @@ -9272,37 +8678,37 @@ react-dropzone@^14.2.3: react-fast-compare@^3.0.1: version "3.2.2" - resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== react-hook-form@7.51.5: version "7.51.5" - resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.51.5.tgz#4afbfb819312db9fea23e8237a3a0d097e128b43" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.51.5.tgz#4afbfb819312db9fea23e8237a3a0d097e128b43" integrity sha512-J2ILT5gWx1XUIJRETiA7M19iXHlG74+6O3KApzvqB/w8S5NQR7AbU8HVZrMALdmDgWpRPYiZJl0zx8Z4L2mP6Q== react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-is@^17.0.1: version "17.0.2" - resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-is@^18.0.0, react-is@^18.3.1: version "18.3.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== react-is@^19.0.0: - version "19.0.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz#d6669fd389ff022a9684f708cf6fa4962d1fea7a" - integrity sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g== + version "19.1.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.1.0.tgz#805bce321546b7e14c084989c77022351bbdd11b" + integrity sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg== react-markdown@^8.0.7: version "8.0.7" - resolved "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz#c8dbd1b9ba5f1c5e7e5f2a44de465a3caafdf89b" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.7.tgz#c8dbd1b9ba5f1c5e7e5f2a44de465a3caafdf89b" integrity sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ== dependencies: "@types/hast" "^2.0.0" @@ -9323,7 +8729,7 @@ react-markdown@^8.0.7: react-masonry-component@^6.3.0: version "6.3.0" - resolved "https://registry.npmjs.org/react-masonry-component/-/react-masonry-component-6.3.0.tgz#edd7593f9f0d4bfa29249ea1e4d2d07757eba65d" + resolved "https://registry.yarnpkg.com/react-masonry-component/-/react-masonry-component-6.3.0.tgz#edd7593f9f0d4bfa29249ea1e4d2d07757eba65d" integrity sha512-4ZI78nxMfCpU5yQiS6Rup07Ju++YzcOGAyvbMcl2GfpZTw8GRwT548lkKr0PJarNicRV1qE2D/NiT26UPg1T7A== dependencies: create-react-class "^15.6.2" @@ -9335,7 +8741,7 @@ react-masonry-component@^6.3.0: react-pdf-html@^2.1.2: version "2.1.3" - resolved "https://registry.npmjs.org/react-pdf-html/-/react-pdf-html-2.1.3.tgz#1e3d048e2a42b594cd65b7ecbd62088cfa26b2cd" + resolved "https://registry.yarnpkg.com/react-pdf-html/-/react-pdf-html-2.1.3.tgz#1e3d048e2a42b594cd65b7ecbd62088cfa26b2cd" integrity sha512-KTTbLUFnpus2Ed6zPGM+LD/evnDcQVz+uG7/kBW4d5qKI9/O6/Hwirh8ZvcbQT/0TeA5vzaqjUnuOs2MhhZjCw== dependencies: css-tree "^1.1.3" @@ -9343,7 +8749,7 @@ react-pdf-html@^2.1.2: react-popper@^1.3.11: version "1.3.11" - resolved "https://registry.npmjs.org/react-popper/-/react-popper-1.3.11.tgz#a2cc3f0a67b75b66cfa62d2c409f9dd1fcc71ffd" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.11.tgz#a2cc3f0a67b75b66cfa62d2c409f9dd1fcc71ffd" integrity sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg== dependencies: "@babel/runtime" "^7.1.2" @@ -9356,7 +8762,7 @@ react-popper@^1.3.11: react-popper@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz#17891c620e1320dce318bad9fede46a5f71c70ba" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.3.0.tgz#17891c620e1320dce318bad9fede46a5f71c70ba" integrity sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q== dependencies: react-fast-compare "^3.0.1" @@ -9364,16 +8770,16 @@ react-popper@^2.3.0: react-remove-scroll-bar@^2.3.7: version "2.3.8" - resolved "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz#99c20f908ee467b385b68a3469b4a3e750012223" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz#99c20f908ee467b385b68a3469b4a3e750012223" integrity sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q== dependencies: react-style-singleton "^2.2.2" tslib "^2.0.0" react-remove-scroll@^2.6.3: - version "2.6.3" - resolved "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz#df02cde56d5f2731e058531f8ffd7f9adec91ac2" - integrity sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ== + version "2.7.1" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz#d2101d414f6d81d7d3bf033f3c1cb4785789f753" + integrity sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA== dependencies: react-remove-scroll-bar "^2.3.7" react-style-singleton "^2.2.3" @@ -9383,7 +8789,7 @@ react-remove-scroll@^2.6.3: react-smooth@^4.0.4: version "4.0.4" - resolved "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz#a5875f8bb61963ca61b819cedc569dc2453894b4" + resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-4.0.4.tgz#a5875f8bb61963ca61b819cedc569dc2453894b4" integrity sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q== dependencies: fast-equals "^5.0.1" @@ -9392,7 +8798,7 @@ react-smooth@^4.0.4: react-style-singleton@^2.2.2, react-style-singleton@^2.2.3: version "2.2.3" - resolved "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388" integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== dependencies: get-nonce "^1.0.0" @@ -9400,7 +8806,7 @@ react-style-singleton@^2.2.2, react-style-singleton@^2.2.3: react-transition-group@^4.4.5: version "4.4.5" - resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" @@ -9409,34 +8815,34 @@ react-transition-group@^4.4.5: prop-types "^15.6.2" "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0": - version "19.0.0" - resolved "https://registry.npmjs.org/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd" - integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ== + version "19.1.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.1.0.tgz#926864b6c48da7627f004795d6cce50e90793b75" + integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg== react@^18.3.1: version "18.3.1" - resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" reactcss@^1.2.0: version "1.2.3" - resolved "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd" + resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd" integrity sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A== dependencies: lodash "^4.0.1" read-cache@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== dependencies: pify "^2.3.0" readable-stream@^3.4.0, readable-stream@^3.6.2: version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -9445,7 +8851,7 @@ readable-stream@^3.4.0, readable-stream@^3.6.2: readable-stream@^4.0.0: version "4.7.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== dependencies: abort-controller "^3.0.0" @@ -9456,20 +8862,20 @@ readable-stream@^4.0.0: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" real-require@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== recast@^0.23.5: - version "0.23.9" - resolved "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz#587c5d3a77c2cfcb0c18ccce6da4361528c2587b" - integrity sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q== + version "0.23.11" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.11.tgz#8885570bb28cf773ba1dc600da7f502f7883f73f" + integrity sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA== dependencies: ast-types "^0.16.1" esprima "~4.0.0" @@ -9479,15 +8885,15 @@ recast@^0.23.5: recharts-scale@^0.4.4: version "0.4.5" - resolved "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz#0969271f14e732e642fcc5bd4ab270d6e87dd1d9" + resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.4.5.tgz#0969271f14e732e642fcc5bd4ab270d6e87dd1d9" integrity sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w== dependencies: decimal.js-light "^2.4.1" recharts@^2.12.7, recharts@^2.15.1: - version "2.15.1" - resolved "https://registry.npmjs.org/recharts/-/recharts-2.15.1.tgz#0941adf0402528d54f6d81997eb15840c893aa3c" - integrity sha512-v8PUTUlyiDe56qUj82w/EDVuzEFXwEHp9/xOowGAZwfLjB9uAy3GllQVIYMWF6nU+qibx85WF75zD7AjqoT54Q== + version "2.15.4" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.15.4.tgz#0ed3e66c0843bcf2d9f9a172caf97b1d05127a5f" + integrity sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw== dependencies: clsx "^2.0.0" eventemitter3 "^4.0.1" @@ -9500,32 +8906,27 @@ recharts@^2.12.7, recharts@^2.15.1: redent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: indent-string "^4.0.0" strip-indent "^3.0.0" -redis-commands@1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89" - integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ== - redis-errors@^1.0.0, redis-errors@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== redis-parser@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== dependencies: redis-errors "^1.0.0" redlock@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/redlock/-/redlock-4.2.0.tgz#c26590768559afd5fff76aa1133c94b411ff4f5f" + resolved "https://registry.yarnpkg.com/redlock/-/redlock-4.2.0.tgz#c26590768559afd5fff76aa1133c94b411ff4f5f" integrity sha512-j+oQlG+dOwcetUt2WJWttu4CZVeRzUrcVcISFmEmfyuwCVSJ93rDT7YSgg7H7rnxwoRyk/jU46kycVka5tW7jA== dependencies: bluebird "^3.7.2" @@ -9537,7 +8938,7 @@ reflect-metadata@*, reflect-metadata@^0.2.2: reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: version "1.0.10" - resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== dependencies: call-bind "^1.0.8" @@ -9549,33 +8950,14 @@ reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: get-proto "^1.0.1" which-builtin-type "^1.2.1" -regenerate-unicode-properties@^10.2.0: - version "10.2.0" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" - integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - regenerator-runtime@^0.14.0: version "0.14.1" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.3: +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: version "1.5.4" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: call-bind "^1.0.8" @@ -9585,38 +8967,14 @@ regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.3: gopd "^1.2.0" set-function-name "^2.0.2" -regexpu-core@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" - integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.2.0" - regjsgen "^0.8.0" - regjsparser "^0.12.0" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsgen@^0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" - integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== - -regjsparser@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" - integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== - dependencies: - jsesc "~3.0.2" - relateurl@^0.2.7: version "0.2.7" - resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== remark-parse@^10.0.0: version "10.0.2" - resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz#ca241fde8751c2158933f031a4e3efbaeb8bc262" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.2.tgz#ca241fde8751c2158933f031a4e3efbaeb8bc262" integrity sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw== dependencies: "@types/mdast" "^3.0.0" @@ -9625,7 +8983,7 @@ remark-parse@^10.0.0: remark-rehype@^10.0.0: version "10.1.0" - resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== dependencies: "@types/hast" "^2.0.0" @@ -9635,7 +8993,7 @@ remark-rehype@^10.0.0: renderkid@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== dependencies: css-select "^4.1.3" @@ -9646,37 +9004,32 @@ renderkid@^3.0.0: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -reselect@^4.1.7: - version "4.1.8" - resolved "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" - integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== - resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-pkg-maps@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.1, resolve@^1.22.4, resolve@^1.22.8: +resolve@^1.1.7, resolve@^1.19.0, resolve@^1.22.1, resolve@^1.22.4, resolve@^1.22.8: version "1.22.10" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: is-core-module "^2.16.0" @@ -9685,7 +9038,7 @@ resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.1, resolve@^1.22 resolve@^2.0.0-next.5: version "2.0.0-next.5" - resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: is-core-module "^2.13.0" @@ -9694,84 +9047,84 @@ resolve@^2.0.0-next.5: restructure@^3.0.0: version "3.0.2" - resolved "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz#e6b2fad214f78edee21797fa8160fef50eb9b49a" + resolved "https://registry.yarnpkg.com/restructure/-/restructure-3.0.2.tgz#e6b2fad214f78edee21797fa8160fef50eb9b49a" integrity sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw== reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rollup@^4.34.8: - version "4.41.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.41.1.tgz#46ddc1b33cf1b0baa99320d3b0b4973dc2253b6a" - integrity sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw== + version "4.44.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.44.1.tgz#641723932894e7acbe6052aea34b8e72ef8b7c8f" + integrity sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg== dependencies: - "@types/estree" "1.0.7" + "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.41.1" - "@rollup/rollup-android-arm64" "4.41.1" - "@rollup/rollup-darwin-arm64" "4.41.1" - "@rollup/rollup-darwin-x64" "4.41.1" - "@rollup/rollup-freebsd-arm64" "4.41.1" - "@rollup/rollup-freebsd-x64" "4.41.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.41.1" - "@rollup/rollup-linux-arm-musleabihf" "4.41.1" - "@rollup/rollup-linux-arm64-gnu" "4.41.1" - "@rollup/rollup-linux-arm64-musl" "4.41.1" - "@rollup/rollup-linux-loongarch64-gnu" "4.41.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.41.1" - "@rollup/rollup-linux-riscv64-gnu" "4.41.1" - "@rollup/rollup-linux-riscv64-musl" "4.41.1" - "@rollup/rollup-linux-s390x-gnu" "4.41.1" - "@rollup/rollup-linux-x64-gnu" "4.41.1" - "@rollup/rollup-linux-x64-musl" "4.41.1" - "@rollup/rollup-win32-arm64-msvc" "4.41.1" - "@rollup/rollup-win32-ia32-msvc" "4.41.1" - "@rollup/rollup-win32-x64-msvc" "4.41.1" + "@rollup/rollup-android-arm-eabi" "4.44.1" + "@rollup/rollup-android-arm64" "4.44.1" + "@rollup/rollup-darwin-arm64" "4.44.1" + "@rollup/rollup-darwin-x64" "4.44.1" + "@rollup/rollup-freebsd-arm64" "4.44.1" + "@rollup/rollup-freebsd-x64" "4.44.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.44.1" + "@rollup/rollup-linux-arm-musleabihf" "4.44.1" + "@rollup/rollup-linux-arm64-gnu" "4.44.1" + "@rollup/rollup-linux-arm64-musl" "4.44.1" + "@rollup/rollup-linux-loongarch64-gnu" "4.44.1" + "@rollup/rollup-linux-powerpc64le-gnu" "4.44.1" + "@rollup/rollup-linux-riscv64-gnu" "4.44.1" + "@rollup/rollup-linux-riscv64-musl" "4.44.1" + "@rollup/rollup-linux-s390x-gnu" "4.44.1" + "@rollup/rollup-linux-x64-gnu" "4.44.1" + "@rollup/rollup-linux-x64-musl" "4.44.1" + "@rollup/rollup-win32-arm64-msvc" "4.44.1" + "@rollup/rollup-win32-ia32-msvc" "4.44.1" + "@rollup/rollup-win32-x64-msvc" "4.44.1" fsevents "~2.3.2" rope-sequence@^1.3.0: version "1.3.4" - resolved "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz#df85711aaecd32f1e756f76e43a415171235d425" + resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.4.tgz#df85711aaecd32f1e756f76e43a415171235d425" integrity sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ== rrweb-cssom@^0.8.0: version "0.8.0" - resolved "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz#3021d1b4352fbf3b614aaeed0bc0d5739abe0bc2" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz#3021d1b4352fbf3b614aaeed0bc0d5739abe0bc2" integrity sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== dependencies: tslib "^2.1.0" sade@^1.7.3: version "1.8.1" - resolved "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== dependencies: mri "^1.1.0" safe-array-concat@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== dependencies: call-bind "^1.0.8" @@ -9782,17 +9135,17 @@ safe-array-concat@^1.1.3: safe-buffer@5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-push-apply@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== dependencies: es-errors "^1.3.0" @@ -9800,7 +9153,7 @@ safe-push-apply@^1.0.0: safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== dependencies: call-bound "^1.0.2" @@ -9809,24 +9162,24 @@ safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: safe-stable-stringify@^2.3.1: version "2.5.0" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== saxes@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== dependencies: xmlchars "^2.2.0" scheduler@^0.17.0: version "0.17.0" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz#7c9c673e4ec781fac853927916d1c426b6f3ddfe" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.17.0.tgz#7c9c673e4ec781fac853927916d1c426b6f3ddfe" integrity sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA== dependencies: loose-envify "^1.1.0" @@ -9834,29 +9187,29 @@ scheduler@^0.17.0: scheduler@^0.23.2: version "0.23.2" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" -scheduler@^0.25.0: - version "0.25.0" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015" - integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== +scheduler@^0.26.0: + version "0.26.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337" + integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA== -schema-utils@^3.1.1, schema-utils@^3.2.0: +schema-utils@^3.1.1: version "3.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^4.0.0, schema-utils@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz#3b669f04f71ff2dfb5aba7ce2d5a9d79b35622c0" - integrity sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g== +schema-utils@^4.0.0, schema-utils@^4.3.0, schema-utils@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae" + integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== dependencies: "@types/json-schema" "^7.0.9" ajv "^8.9.0" @@ -9865,34 +9218,29 @@ schema-utils@^4.0.0, schema-utils@^4.3.0: scroll-into-view-if-needed@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz#fa9524518c799b45a2ef6bbffb92bcad0296d01f" + resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz#fa9524518c799b45a2ef6bbffb92bcad0296d01f" integrity sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ== dependencies: compute-scroll-into-view "^3.0.2" secure-json-parse@^2.4.0: version "2.7.0" - resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" + resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== -semver@^5.6.0: - version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - semver@^6.0.0, semver@^6.3.1: version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3: - version "7.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" - integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== +semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.7.1: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== send@0.19.0: version "0.19.0" - resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" @@ -9911,7 +9259,7 @@ send@0.19.0: sentence-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== dependencies: no-case "^3.0.4" @@ -9920,14 +9268,14 @@ sentence-case@^3.0.4: serialize-javascript@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" serve-static@1.16.2: version "1.16.2" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: encodeurl "~2.0.0" @@ -9937,7 +9285,7 @@ serve-static@1.16.2: set-function-length@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: define-data-property "^1.1.4" @@ -9949,7 +9297,7 @@ set-function-length@^1.2.2: set-function-name@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: define-data-property "^1.1.4" @@ -9959,7 +9307,7 @@ set-function-name@^2.0.2: set-proto@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== dependencies: dunder-proto "^1.0.1" @@ -9968,12 +9316,12 @@ set-proto@^1.0.0: setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sharp@^0.32.1: version "0.32.6" - resolved "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== dependencies: color "^4.2.3" @@ -9987,24 +9335,24 @@ sharp@^0.32.1: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.8.1: - version "1.8.2" - resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a" - integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== + version "1.8.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" + integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== side-channel-list@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: es-errors "^1.3.0" @@ -10012,7 +9360,7 @@ side-channel-list@^1.0.0: side-channel-map@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== dependencies: call-bound "^1.0.2" @@ -10022,7 +9370,7 @@ side-channel-map@^1.0.1: side-channel-weakmap@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== dependencies: call-bound "^1.0.2" @@ -10033,7 +9381,7 @@ side-channel-weakmap@^1.0.2: side-channel@^1.0.6, side-channel@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== dependencies: es-errors "^1.3.0" @@ -10044,17 +9392,17 @@ side-channel@^1.0.6, side-channel@^1.1.0: signal-exit@^4.0.1: version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== simple-concat@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== simple-get@^4.0.0, simple-get@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== dependencies: decompress-response "^6.0.0" @@ -10063,68 +9411,70 @@ simple-get@^4.0.0, simple-get@^4.0.1: simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" simple-update-notifier@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== dependencies: semver "^7.5.3" -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slash@^5.0.0, slash@^5.1.0: +slash@^5.0.0: version "5.1.0" - resolved "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" + resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== smooth-scroll-into-view-if-needed@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/smooth-scroll-into-view-if-needed/-/smooth-scroll-into-view-if-needed-2.0.2.tgz#5bd4ebef668474d6618ce8704650082e93068371" + resolved "https://registry.yarnpkg.com/smooth-scroll-into-view-if-needed/-/smooth-scroll-into-view-if-needed-2.0.2.tgz#5bd4ebef668474d6618ce8704650082e93068371" integrity sha512-z54WzUSlM+xHHvJu3lMIsh+1d1kA4vaakcAtQvqzeGJ5Ffau7EKjpRrMHh1/OBo5zyU2h30ZYEt77vWmPHqg7Q== dependencies: scroll-into-view-if-needed "^3.1.0" snake-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== dependencies: dot-case "^3.0.4" tslib "^2.0.3" +sonic-boom@^2.1.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" + integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== + dependencies: + atomic-sleep "^1.0.0" + sonic-boom@^4.0.1: version "4.2.0" - resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz#e59a525f831210fa4ef1896428338641ac1c124d" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.2.0.tgz#e59a525f831210fa4ef1896428338641ac1c124d" integrity sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww== dependencies: atomic-sleep "^1.0.0" sonner@^1.4.41: version "1.7.4" - resolved "https://registry.npmjs.org/sonner/-/sonner-1.7.4.tgz#4c39820db86623800a17115c8970796aa862133a" + resolved "https://registry.yarnpkg.com/sonner/-/sonner-1.7.4.tgz#4c39820db86623800a17115c8970796aa862133a" integrity sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw== source-map-js@^1.0.2, source-map-js@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map-support@~0.5.20: version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -10132,67 +9482,75 @@ source-map-support@~0.5.20: source-map@0.8.0-beta.0: version "0.8.0-beta.0" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== dependencies: whatwg-url "^7.0.0" source-map@^0.5.7: version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== space-separated-tokens@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== split2@^4.0.0: version "4.2.0" - resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== -stable-hash@^0.0.4: - version "0.0.4" - resolved "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz#55ae7dadc13e4b3faed13601587cec41859b42f7" - integrity sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g== +stable-hash@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" + integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== stack-trace@0.0.x: version "0.0.10" - resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== standard-as-callback@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== statuses@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + storybook@^8.1.1: - version "8.5.4" - resolved "https://registry.npmjs.org/storybook/-/storybook-8.5.4.tgz#097e6d39bba43db18c2fa951c8b820a2d445e61f" - integrity sha512-TMXXOprDjkt8GbTCgzZSi0sPYoKMfvN+9gGnU7gRa8s1C0QhqkE0lc6fq9pl8nahXPF5ala4gPOaxjQbuJUvNQ== + version "8.6.14" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.6.14.tgz#d205e73b6427eebf321bcfbe63bfbec3ade4d9db" + integrity sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw== dependencies: - "@storybook/core" "8.5.4" + "@storybook/core" "8.6.14" streamsearch@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== streamx@^2.15.0, streamx@^2.21.0: - version "2.22.0" - resolved "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz#cd7b5e57c95aaef0ff9b2aef7905afa62ec6e4a7" - integrity sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw== + version "2.22.1" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.22.1.tgz#c97cbb0ce18da4f4db5a971dc9ab68ff5dc7f5a5" + integrity sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA== dependencies: fast-fifo "^1.3.2" text-decoder "^1.1.0" @@ -10201,7 +9559,7 @@ streamx@^2.15.0, streamx@^2.21.0: "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -10210,7 +9568,7 @@ streamx@^2.15.0, streamx@^2.21.0: string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -10219,7 +9577,7 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" @@ -10228,7 +9586,7 @@ string-width@^5.0.1, string-width@^5.1.2: string.prototype.includes@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== dependencies: call-bind "^1.0.7" @@ -10237,7 +9595,7 @@ string.prototype.includes@^2.0.1: string.prototype.matchall@^4.0.12: version "4.0.12" - resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== dependencies: call-bind "^1.0.8" @@ -10256,7 +9614,7 @@ string.prototype.matchall@^4.0.12: string.prototype.repeat@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== dependencies: define-properties "^1.1.3" @@ -10264,7 +9622,7 @@ string.prototype.repeat@^1.0.0: string.prototype.trim@^1.2.10: version "1.2.10" - resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== dependencies: call-bind "^1.0.8" @@ -10275,9 +9633,9 @@ string.prototype.trim@^1.2.10: es-object-atoms "^1.0.0" has-property-descriptors "^1.0.2" -string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: +string.prototype.trimend@^1.0.9: version "1.0.9" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== dependencies: call-bind "^1.0.8" @@ -10287,7 +9645,7 @@ string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: string.prototype.trimstart@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: call-bind "^1.0.7" @@ -10296,88 +9654,88 @@ string.prototype.trimstart@^1.0.8: string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-indent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" strip-indent@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz#b41379433dd06f5eae805e21d631e07ee670d853" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-4.0.0.tgz#b41379433dd06f5eae805e21d631e07ee670d853" integrity sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA== dependencies: min-indent "^1.0.1" strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== style-loader@^3.3.1: version "3.3.4" - resolved "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7" integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== style-to-object@^0.4.0: version "0.4.4" - resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz#266e3dfd56391a7eefb7770423612d043c3f33ec" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.4.tgz#266e3dfd56391a7eefb7770423612d043c3f33ec" integrity sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg== dependencies: inline-style-parser "0.1.1" styled-jsx@5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== dependencies: client-only "0.0.1" stylis@4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== sucrase@^3.35.0: version "3.35.0" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: "@jridgewell/gen-mapping" "^0.3.2" @@ -10390,73 +9748,73 @@ sucrase@^3.35.0: supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svg-arc-to-cubic-bezier@^3.0.0, svg-arc-to-cubic-bezier@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz#390c450035ae1c4a0104d90650304c3bc814abe6" + resolved "https://registry.yarnpkg.com/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz#390c450035ae1c4a0104d90650304c3bc814abe6" integrity sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g== swc-loader@^0.2.3: version "0.2.6" - resolved "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.6.tgz#bf0cba8eeff34bb19620ead81d1277fefaec6bc8" + resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.6.tgz#bf0cba8eeff34bb19620ead81d1277fefaec6bc8" integrity sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg== dependencies: "@swc/counter" "^0.1.3" swr@^2.1.3, swr@^2.2.2, swr@^2.2.4: - version "2.3.2" - resolved "https://registry.npmjs.org/swr/-/swr-2.3.2.tgz#e7c4eb7115e7ff734e445ad0036e97812dd95191" - integrity sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/swr/-/swr-2.3.3.tgz#9d6a703355f15f9099f45114db3ef75764444788" + integrity sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A== dependencies: dequal "^2.0.3" use-sync-external-store "^1.4.0" symbol-tree@^3.2.4: version "3.2.4" - resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tabbable@^6.0.0: version "6.2.0" - resolved "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== tailwind-merge@^2.0.0, tailwind-merge@^2.5.5: version "2.6.0" - resolved "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz#ac5fb7e227910c038d458f396b7400d93a3142d5" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.6.0.tgz#ac5fb7e227910c038d458f396b7400d93a3142d5" integrity sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA== tailwindcss-animate@^1.0.6, tailwindcss-animate@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4" + resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4" integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== tailwindcss@^3.4.17: version "3.4.17" - resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz#ae8406c0f96696a631c790768ff319d46d5e5a63" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.17.tgz#ae8406c0f96696a631c790768ff319d46d5e5a63" integrity sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og== dependencies: "@alloc/quick-lru" "^5.2.0" @@ -10483,13 +9841,13 @@ tailwindcss@^3.4.17: sucrase "^3.35.0" tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + version "2.2.2" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872" + integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg== tar-fs@3.0.9, tar-fs@^2.0.0, tar-fs@^3.0.4: version "3.0.9" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz#d570793c6370d7078926c41fa422891566a0b617" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.9.tgz#d570793c6370d7078926c41fa422891566a0b617" integrity sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA== dependencies: pump "^3.0.0" @@ -10500,17 +9858,17 @@ tar-fs@3.0.9, tar-fs@^2.0.0, tar-fs@^3.0.4: tar-stream@^3.1.5: version "3.1.7" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== dependencies: b4a "^1.6.4" fast-fifo "^1.2.0" streamx "^2.15.0" -terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.10: - version "5.3.11" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz#93c21f44ca86634257cac176f884f942b7ba3832" - integrity sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ== +terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.11: + version "5.3.14" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" + integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== dependencies: "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" @@ -10519,71 +9877,71 @@ terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.10: terser "^5.31.1" terser@^5.10.0, terser@^5.31.1: - version "5.38.2" - resolved "https://registry.npmjs.org/terser/-/terser-5.38.2.tgz#24aef4ea48c900d46a4b13f6a53789980d59967f" - integrity sha512-w8CXxxbFA5zfNsR/i8HZq5bvn18AK0O9jj7hyo1YqkovLxEFa0uP0LCVGZRqiRaKRFxXhELBp8SteeAjEnfeJg== + version "5.43.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.43.1.tgz#88387f4f9794ff1a29e7ad61fb2932e25b4fdb6d" + integrity sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg== dependencies: "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" + acorn "^8.14.0" commander "^2.20.0" source-map-support "~0.5.20" text-decoder@^1.1.0: version "1.2.3" - resolved "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz#b19da364d981b2326d5f43099c310cc80d770c65" + resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.3.tgz#b19da364d981b2326d5f43099c310cc80d770c65" integrity sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA== dependencies: b4a "^1.6.4" text-hex@1.0.x: version "1.0.0" - resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== text-table@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thenby@^1.3.4: version "1.3.4" - resolved "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz#81581f6e1bb324c6dedeae9bfc28e59b1a2201cc" + resolved "https://registry.yarnpkg.com/thenby/-/thenby-1.3.4.tgz#81581f6e1bb324c6dedeae9bfc28e59b1a2201cc" integrity sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ== thenify-all@^1.0.0: version "1.6.0" - resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== dependencies: thenify ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== dependencies: any-promise "^1.0.0" thread-stream@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A== dependencies: real-require "^0.2.0" tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" + resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== tiny-invariant@^1.3.1, tiny-invariant@^1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== tinycolor2@^1.4.1: version "1.6.0" - resolved "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== tinyexec@^0.3.2: @@ -10591,7 +9949,7 @@ tinyexec@^0.3.2: resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== -tinyglobby@^0.2.11: +tinyglobby@^0.2.11, tinyglobby@^0.2.12, tinyglobby@^0.2.13: version "0.2.14" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== @@ -10601,24 +9959,24 @@ tinyglobby@^0.2.11: tinyrainbow@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== tinyspy@^3.0.0: version "3.0.2" - resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== tippy.js@^6.3.7: version "6.3.7" - resolved "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" + resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== dependencies: "@popperjs/core" "^2.9.0" tiptap-markdown@^0.8.10: version "0.8.10" - resolved "https://registry.npmjs.org/tiptap-markdown/-/tiptap-markdown-0.8.10.tgz#864a54befc17b25e7f475ff6072de3d49814f09b" + resolved "https://registry.yarnpkg.com/tiptap-markdown/-/tiptap-markdown-0.8.10.tgz#864a54befc17b25e7f475ff6072de3d49814f09b" integrity sha512-iDVkR2BjAqkTDtFX0h94yVvE2AihCXlF0Q7RIXSJPRSR5I0PA1TMuAg6FHFpmqTn4tPxJ0by0CK7PUMlnFLGEQ== dependencies: "@types/markdown-it" "^13.0.7" @@ -10626,99 +9984,99 @@ tiptap-markdown@^0.8.10: markdown-it-task-lists "^2.1.1" prosemirror-markdown "^1.11.1" -tldts-core@^6.1.77: - version "6.1.77" - resolved "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.77.tgz#0fa4563163a7a61d72c4b05650fb66fc7e815500" - integrity sha512-bCaqm24FPk8OgBkM0u/SrEWJgHnhBWYqeBo6yUmcZJDCHt/IfyWBb+14CXdGi4RInMv4v7eUAin15W0DoA+Ytg== +tldts-core@^6.1.86: + version "6.1.86" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.86.tgz#a93e6ed9d505cb54c542ce43feb14c73913265d8" + integrity sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA== tldts@^6.1.32: - version "6.1.77" - resolved "https://registry.npmjs.org/tldts/-/tldts-6.1.77.tgz#714e3d1989e562886f2ed97b65e95a8e9f9e92d9" - integrity sha512-lBpoWgy+kYmuXWQ83+R7LlJCnsd9YW8DGpZSHhrMl4b8Ly/1vzOie3OdtmUJDkKxcgRGOehDu5btKkty+JEe+g== + version "6.1.86" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.86.tgz#087e0555b31b9725ee48ca7e77edc56115cd82f7" + integrity sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ== dependencies: - tldts-core "^6.1.77" + tldts-core "^6.1.86" to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== touch@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== -tough-cookie@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.1.tgz#4641c1fdbf024927e29c5532edb7b6e5377ea1f2" - integrity sha512-Ek7HndSVkp10hmHP9V4qZO1u+pn1RU5sI0Fw+jCU3lyvuMZcgqsNgc6CmJJZyByK4Vm/qotGRJlfgAX8q+4JiA== +tough-cookie@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.2.tgz#66d774b4a1d9e12dc75089725af3ac75ec31bed7" + integrity sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A== dependencies: tldts "^6.1.32" tr46@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== dependencies: punycode "^2.1.0" -tr46@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" - integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== +tr46@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.1.1.tgz#96ae867cddb8fdb64a49cc3059a8d428bcf238ca" + integrity sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw== dependencies: punycode "^2.3.1" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== tree-kill@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== trim-lines@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== triple-beam@^1.3.0, triple-beam@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== trough@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== -ts-api-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.1.tgz#660729385b625b939aaa58054f45c058f33f10cd" - integrity sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w== +ts-api-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" + integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== ts-dedent@^2.0.0, ts-dedent@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" + resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== ts-interface-checker@^0.1.9: version "0.1.13" - resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== ts-node@^10.9.2: version "10.9.2" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -10737,7 +10095,7 @@ ts-node@^10.9.2: tsconfig-paths@^3.15.0: version "3.15.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" @@ -10747,26 +10105,26 @@ tsconfig-paths@^3.15.0: tsconfig-paths@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== dependencies: json5 "^2.2.2" minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.7.0, tslib@^2.8.0: - version "2.8.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - tslib@^1.8.1: version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.7.0, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tslib@~2.5.0: version "2.5.3" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== tsup@8.4.0: @@ -10793,51 +10151,51 @@ tsup@8.4.0: tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" turbo-darwin-64@2.5.4: version "2.5.4" - resolved "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.5.4.tgz#f03b3f071365c626d05e84d0d4b9db96348f2951" + resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-2.5.4.tgz#f03b3f071365c626d05e84d0d4b9db96348f2951" integrity sha512-ah6YnH2dErojhFooxEzmvsoZQTMImaruZhFPfMKPBq8sb+hALRdvBNLqfc8NWlZq576FkfRZ/MSi4SHvVFT9PQ== turbo-darwin-arm64@2.5.4: version "2.5.4" - resolved "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.5.4.tgz#614becf281da75af5a01094373f380ac2b48190a" + resolved "https://registry.yarnpkg.com/turbo-darwin-arm64/-/turbo-darwin-arm64-2.5.4.tgz#614becf281da75af5a01094373f380ac2b48190a" integrity sha512-2+Nx6LAyuXw2MdXb7pxqle3MYignLvS7OwtsP9SgtSBaMlnNlxl9BovzqdYAgkUW3AsYiQMJ/wBRb7d+xemM5A== turbo-linux-64@2.5.4: version "2.5.4" - resolved "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.5.4.tgz#fc7425f35feb19a8373e7926eccdd4a3b2fb77a4" + resolved "https://registry.yarnpkg.com/turbo-linux-64/-/turbo-linux-64-2.5.4.tgz#fc7425f35feb19a8373e7926eccdd4a3b2fb77a4" integrity sha512-5May2kjWbc8w4XxswGAl74GZ5eM4Gr6IiroqdLhXeXyfvWEdm2mFYCSWOzz0/z5cAgqyGidF1jt1qzUR8hTmOA== turbo-linux-arm64@2.5.4: version "2.5.4" - resolved "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.5.4.tgz#ab5418a88089e4ec20b2c28c3d3c6b8a99b07a81" + resolved "https://registry.yarnpkg.com/turbo-linux-arm64/-/turbo-linux-arm64-2.5.4.tgz#ab5418a88089e4ec20b2c28c3d3c6b8a99b07a81" integrity sha512-/2yqFaS3TbfxV3P5yG2JUI79P7OUQKOUvAnx4MV9Bdz6jqHsHwc9WZPpO4QseQm+NvmgY6ICORnoVPODxGUiJg== turbo-windows-64@2.5.4: version "2.5.4" - resolved "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.5.4.tgz#fc78585d3950e5cd64bed8d6648f078e7f32f9a5" + resolved "https://registry.yarnpkg.com/turbo-windows-64/-/turbo-windows-64-2.5.4.tgz#fc78585d3950e5cd64bed8d6648f078e7f32f9a5" integrity sha512-EQUO4SmaCDhO6zYohxIjJpOKRN3wlfU7jMAj3CgcyTPvQR/UFLEKAYHqJOnJtymbQmiiM/ihX6c6W6Uq0yC7mA== turbo-windows-arm64@2.5.4: version "2.5.4" - resolved "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.5.4.tgz#5134537cc9fa27f4647f2f899b7ba2dacfc6ad22" + resolved "https://registry.yarnpkg.com/turbo-windows-arm64/-/turbo-windows-arm64-2.5.4.tgz#5134537cc9fa27f4647f2f899b7ba2dacfc6ad22" integrity sha512-oQ8RrK1VS8lrxkLriotFq+PiF7iiGgkZtfLKF4DDKsmdbPo0O9R2mQxm7jHLuXraRCuIQDWMIw6dpcr7Iykf4A== turbo@^2.5.4: version "2.5.4" - resolved "https://registry.npmjs.org/turbo/-/turbo-2.5.4.tgz#e46213a4560b94e56c014e0fd56d06605de16753" + resolved "https://registry.yarnpkg.com/turbo/-/turbo-2.5.4.tgz#e46213a4560b94e56c014e0fd56d06605de16753" integrity sha512-kc8ZibdRcuWUG1pbYSBFWqmIjynlD8Lp7IB6U3vIzvOv9VG+6Sp8bzyeBWE3Oi8XV5KsQrznyRTBPvrf99E4mA== optionalDependencies: turbo-darwin-64 "2.5.4" @@ -10849,29 +10207,24 @@ turbo@^2.5.4: tween-functions@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff" + resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff" integrity sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^2.19.0: - version "2.19.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - type-is@~1.6.18: version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -10879,7 +10232,7 @@ type-is@~1.6.18: typed-array-buffer@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== dependencies: call-bound "^1.0.3" @@ -10888,7 +10241,7 @@ typed-array-buffer@^1.0.3: typed-array-byte-length@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== dependencies: call-bind "^1.0.8" @@ -10899,7 +10252,7 @@ typed-array-byte-length@^1.0.3: typed-array-byte-offset@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== dependencies: available-typed-arrays "^1.0.7" @@ -10912,7 +10265,7 @@ typed-array-byte-offset@^1.0.4: typed-array-length@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== dependencies: call-bind "^1.0.7" @@ -10924,7 +10277,7 @@ typed-array-length@^1.0.7: typed-styles@^0.0.7: version "0.0.7" - resolved "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" + resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== typescript@5.8.3: @@ -10934,12 +10287,12 @@ typescript@5.8.3: uc.micro@^2.0.0, uc.micro@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== unbox-primitive@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== dependencies: call-bound "^1.0.3" @@ -10949,66 +10302,38 @@ unbox-primitive@^1.1.0: undefsafe@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" - integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -unicode-match-property-value-ecmascript@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" - integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== +undici-types@~7.8.0: + version "7.8.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.8.0.tgz#de00b85b710c54122e44fbfd911f8d70174cd294" + integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== unicode-properties@^1.4.0, unicode-properties@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz#96a9cffb7e619a0dc7368c28da27e05fc8f9be5f" + resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.4.1.tgz#96a9cffb7e619a0dc7368c28da27e05fc8f9be5f" integrity sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg== dependencies: base64-js "^1.3.0" unicode-trie "^2.0.0" -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - unicode-trie@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== dependencies: pako "^0.2.5" tiny-inflate "^1.0.0" -unicorn-magic@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" - integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== - unified@^10.0.0: version "10.1.2" - resolved "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" + resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== dependencies: "@types/unist" "^2.0.0" @@ -11021,33 +10346,33 @@ unified@^10.0.0: unist-util-generated@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A== unist-util-is@^5.0.0: version "5.2.1" - resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw== dependencies: "@types/unist" "^2.0.0" unist-util-position@^4.0.0: version "4.0.4" - resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037" integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg== dependencies: "@types/unist" "^2.0.0" unist-util-stringify-position@^3.0.0: version "3.0.3" - resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== dependencies: "@types/unist" "^2.0.0" unist-util-visit-parents@^5.1.1: version "5.1.3" - resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb" integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg== dependencies: "@types/unist" "^2.0.0" @@ -11055,7 +10380,7 @@ unist-util-visit-parents@^5.1.1: unist-util-visit@^4.0.0: version "4.1.2" - resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2" integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg== dependencies: "@types/unist" "^2.0.0" @@ -11064,54 +10389,81 @@ unist-util-visit@^4.0.0: universalify@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unplugin@^1.3.1: version "1.16.1" - resolved "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz#a844d2e3c3b14a4ac2945c42be80409321b61199" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.16.1.tgz#a844d2e3c3b14a4ac2945c42be80409321b61199" integrity sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w== dependencies: acorn "^8.14.0" webpack-virtual-modules "^0.6.2" -update-browserslist-db@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" - integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg== +unrs-resolver@^1.6.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.9.2.tgz#1a7c73335a5e510643664d7bb4bb6f5c28782e36" + integrity sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA== + dependencies: + napi-postinstall "^0.2.4" + optionalDependencies: + "@unrs/resolver-binding-android-arm-eabi" "1.9.2" + "@unrs/resolver-binding-android-arm64" "1.9.2" + "@unrs/resolver-binding-darwin-arm64" "1.9.2" + "@unrs/resolver-binding-darwin-x64" "1.9.2" + "@unrs/resolver-binding-freebsd-x64" "1.9.2" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.9.2" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.9.2" + "@unrs/resolver-binding-linux-arm64-gnu" "1.9.2" + "@unrs/resolver-binding-linux-arm64-musl" "1.9.2" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.9.2" + "@unrs/resolver-binding-linux-riscv64-gnu" "1.9.2" + "@unrs/resolver-binding-linux-riscv64-musl" "1.9.2" + "@unrs/resolver-binding-linux-s390x-gnu" "1.9.2" + "@unrs/resolver-binding-linux-x64-gnu" "1.9.2" + "@unrs/resolver-binding-linux-x64-musl" "1.9.2" + "@unrs/resolver-binding-wasm32-wasi" "1.9.2" + "@unrs/resolver-binding-win32-arm64-msvc" "1.9.2" + "@unrs/resolver-binding-win32-ia32-msvc" "1.9.2" + "@unrs/resolver-binding-win32-x64-msvc" "1.9.2" + +update-browserslist-db@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: escalade "^3.2.0" picocolors "^1.1.1" upper-case-first@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== dependencies: tslib "^2.0.3" upper-case@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== dependencies: tslib "^2.0.3" uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url@^0.11.0: version "0.11.4" - resolved "https://registry.npmjs.org/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg== dependencies: punycode "^1.4.1" @@ -11119,39 +10471,39 @@ url@^0.11.0: use-callback-ref@^1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz#98d9fab067075841c5b2c6852090d5d0feabe2bf" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.3.tgz#98d9fab067075841c5b2c6852090d5d0feabe2bf" integrity sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg== dependencies: tslib "^2.0.0" use-font-face-observer@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/use-font-face-observer/-/use-font-face-observer-1.2.2.tgz#ed230d907589c6b17e8c8b896c9f5913968ac5ed" - integrity sha512-5C11YC9vPQn5TeIKDvHHiUg59FBzV1LDIOjYJ2PVgn1raVoKHcuWf3dxVDb7OiqQVg3M2S1jX3LxbLw16xo8gg== + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-font-face-observer/-/use-font-face-observer-1.3.0.tgz#12987ed66450fdb1f48749be7ef70a3542951f70" + integrity sha512-gS5UoSPcOoCF+JMbw2By1E3FtXl6ZPxgFo8MW4shpM15lf+MNyzEfjsLJFJ3T/mHLdGTBhQgZYSAXEzubr6v5Q== dependencies: fontfaceobserver "2.1.0" use-sidecar@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb" integrity sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ== dependencies: detect-node-es "^1.1.0" tslib "^2.0.0" -use-sync-external-store@^1, use-sync-external-store@^1.2.2, use-sync-external-store@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" - integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== +use-sync-external-store@^1, use-sync-external-store@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" + integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util@^0.12.4, util@^0.12.5: version "0.12.5" - resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: inherits "^2.0.3" @@ -11162,32 +10514,32 @@ util@^0.12.4, util@^0.12.5: utila@~0.4: version "0.4.0" - resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^10.0.0: version "10.0.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== uuid@^11.0.3: - version "11.0.5" - resolved "https://registry.npmjs.org/uuid/-/uuid-11.0.5.tgz#07b46bdfa6310c92c3fb3953a8720f170427fc62" - integrity sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA== + version "11.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" + integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== uuid@^9.0.0, uuid@^9.0.1: version "9.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== uvu@^0.5.0: version "0.5.6" - resolved "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" + resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== dependencies: dequal "^2.0.0" @@ -11197,17 +10549,17 @@ uvu@^0.5.0: v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== vary@^1, vary@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vfile-message@^3.0.0: version "3.1.4" - resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== dependencies: "@types/unist" "^2.0.0" @@ -11215,7 +10567,7 @@ vfile-message@^3.0.0: vfile@^5.0.0: version "5.3.7" - resolved "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== dependencies: "@types/unist" "^2.0.0" @@ -11225,7 +10577,7 @@ vfile@^5.0.0: victory-vendor@^36.6.8: version "36.9.2" - resolved "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz#668b02a448fa4ea0f788dbf4228b7e64669ff801" + resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-36.9.2.tgz#668b02a448fa4ea0f788dbf4228b7e64669ff801" integrity sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ== dependencies: "@types/d3-array" "^3.0.3" @@ -11245,7 +10597,7 @@ victory-vendor@^36.6.8: vite-compatible-readable-stream@^3.6.1: version "3.6.1" - resolved "https://registry.npmjs.org/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz#27267aebbdc9893c0ddf65a421279cbb1e31d8cd" + resolved "https://registry.yarnpkg.com/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz#27267aebbdc9893c0ddf65a421279cbb1e31d8cd" integrity sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ== dependencies: inherits "^2.0.3" @@ -11254,54 +10606,54 @@ vite-compatible-readable-stream@^3.6.1: w3c-keyname@^2.2.0: version "2.2.8" - resolved "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5" + resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.8.tgz#7b17c8c6883d4e8b86ac8aba79d39e880f8869c5" integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== w3c-xmlserializer@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== dependencies: xml-name-validator "^5.0.0" warning@^4.0.2, warning@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== dependencies: loose-envify "^1.0.0" watchpack@^2.4.1: - version "2.4.2" - resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" - integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== + version "2.4.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" + integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -web-vitals@^4.2.0: +web-vitals@^4.2.4: version "4.2.4" - resolved "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz#1d20bc8590a37769bd0902b289550936069184b7" + resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-4.2.4.tgz#1d20bc8590a37769bd0902b289550936069184b7" integrity sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webidl-conversions@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webidl-conversions@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== webpack-dev-middleware@^6.1.2: version "6.1.3" - resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.3.tgz#79f4103f8c898564c9e96c3a9c2422de50f249bc" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-6.1.3.tgz#79f4103f8c898564c9e96c3a9c2422de50f249bc" integrity sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw== dependencies: colorette "^2.0.10" @@ -11312,7 +10664,7 @@ webpack-dev-middleware@^6.1.2: webpack-hot-middleware@^2.25.1: version "2.26.1" - resolved "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz#87214f1e3f9f3acab9271fef9e6ed7b637d719c0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz#87214f1e3f9f3acab9271fef9e6ed7b637d719c0" integrity sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A== dependencies: ansi-html-community "0.0.8" @@ -11320,22 +10672,23 @@ webpack-hot-middleware@^2.25.1: strip-ansi "^6.0.0" webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + version "3.3.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" + integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== webpack-virtual-modules@^0.6.0, webpack-virtual-modules@^0.6.2: version "0.6.2" - resolved "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8" integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== webpack@5: - version "5.97.1" - resolved "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz#972a8320a438b56ff0f1d94ade9e82eac155fa58" - integrity sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg== + version "5.99.9" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.99.9.tgz#d7de799ec17d0cce3c83b70744b4aedb537d8247" + integrity sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" "@webassemblyjs/ast" "^1.14.1" "@webassemblyjs/wasm-edit" "^1.14.1" "@webassemblyjs/wasm-parser" "^1.14.1" @@ -11352,35 +10705,35 @@ webpack@5: loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.2.0" + schema-utils "^4.3.2" tapable "^2.1.1" - terser-webpack-plugin "^5.3.10" + terser-webpack-plugin "^5.3.11" watchpack "^2.4.1" webpack-sources "^3.2.3" whatwg-encoding@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== dependencies: iconv-lite "0.6.3" whatwg-mimetype@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== -whatwg-url@^14.0.0, whatwg-url@^14.1.0: - version "14.1.1" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.1.tgz#ce71e240c61541315833b5cdafd139a479e47058" - integrity sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ== +whatwg-url@^14.0.0, whatwg-url@^14.1.1: + version "14.2.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.2.0.tgz#4ee02d5d725155dae004f6ae95c73e7ef5d95663" + integrity sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw== dependencies: - tr46 "^5.0.0" + tr46 "^5.1.0" webidl-conversions "^7.0.0" whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -11388,7 +10741,7 @@ whatwg-url@^5.0.0: whatwg-url@^7.0.0: version "7.1.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== dependencies: lodash.sortby "^4.7.0" @@ -11397,7 +10750,7 @@ whatwg-url@^7.0.0: which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== dependencies: is-bigint "^1.1.0" @@ -11408,7 +10761,7 @@ which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: which-builtin-type@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== dependencies: call-bound "^1.0.2" @@ -11427,7 +10780,7 @@ which-builtin-type@^1.2.1: which-collection@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: is-map "^2.0.3" @@ -11435,28 +10788,29 @@ which-collection@^1.0.2: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.16, which-typed-array@^1.1.18, which-typed-array@^1.1.2: - version "1.1.18" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" - integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== +which-typed-array@^1.1.16, which-typed-array@^1.1.19, which-typed-array@^1.1.2: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== dependencies: available-typed-arrays "^1.0.7" call-bind "^1.0.8" - call-bound "^1.0.3" - for-each "^0.3.3" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" gopd "^1.2.0" has-tostringtag "^1.0.2" which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" winston-daily-rotate-file@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-5.0.0.tgz#8cd94800025490e47c00ec892b655a5821f4266d" + resolved "https://registry.yarnpkg.com/winston-daily-rotate-file/-/winston-daily-rotate-file-5.0.0.tgz#8cd94800025490e47c00ec892b655a5821f4266d" integrity sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw== dependencies: file-stream-rotator "^0.6.1" @@ -11466,7 +10820,7 @@ winston-daily-rotate-file@^5.0.0: winston-transport@^4.7.0, winston-transport@^4.9.0: version "4.9.0" - resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz#3bba345de10297654ea6f33519424560003b3bf9" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.9.0.tgz#3bba345de10297654ea6f33519424560003b3bf9" integrity sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A== dependencies: logform "^2.7.0" @@ -11475,7 +10829,7 @@ winston-transport@^4.7.0, winston-transport@^4.9.0: winston@^3.17.0: version "3.17.0" - resolved "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz#74b8665ce9b4ea7b29d0922cfccf852a08a11423" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.17.0.tgz#74b8665ce9b4ea7b29d0922cfccf852a08a11423" integrity sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw== dependencies: "@colors/colors" "^1.6.0" @@ -11492,12 +10846,12 @@ winston@^3.17.0: word-wrap@^1.2.5: version "1.2.5" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -11506,7 +10860,7 @@ word-wrap@^1.2.5: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -11515,7 +10869,7 @@ wrap-ansi@^7.0.0: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -11524,78 +10878,78 @@ wrap-ansi@^8.1.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^7.4.6: version "7.5.10" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.17.1, ws@^8.18.0, ws@^8.2.3, ws@^8.5.0: - version "8.18.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + version "8.18.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" + integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== xml-name-validator@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== xmlchars@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== y-indexeddb@^9.0.12: version "9.0.12" - resolved "https://registry.npmjs.org/y-indexeddb/-/y-indexeddb-9.0.12.tgz#73657f31d52886d7532256610babf5cca4ad5e58" + resolved "https://registry.yarnpkg.com/y-indexeddb/-/y-indexeddb-9.0.12.tgz#73657f31d52886d7532256610babf5cca4ad5e58" integrity sha512-9oCFRSPPzBK7/w5vOkJBaVCQZKHXB/v6SIT+WYhnJxlEC61juqG0hBrAf+y3gmSMLFLwICNH9nQ53uscuse6Hg== dependencies: lib0 "^0.2.74" y-prosemirror@^1.2.15: - version "1.2.15" - resolved "https://registry.npmjs.org/y-prosemirror/-/y-prosemirror-1.2.15.tgz#6062ce96efd7465a3404a5aa1a34fb36a2cf7994" - integrity sha512-XDdrytq2M5bIy3qusQvfRclLu2eWZYPA+BbGWAb9FFWEhOB5FCrnzez2vsA+gvAd0FJTAcr89mjJ5g45r0j7TQ== + version "1.3.6" + resolved "https://registry.yarnpkg.com/y-prosemirror/-/y-prosemirror-1.3.6.tgz#bb83a392498f76a1807e87c5f994e3540ca8ca69" + integrity sha512-vtS2rv8+ll/TBQRqwUiqflgSuN/DhfvUQX0r5O3o5i0pO6K4pSNgFtVkOKtNWPBVkS6l9BDQjbtnDNftZnxq7Q== dependencies: - lib0 "^0.2.42" + lib0 "^0.2.109" y-protocols@^1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz#66dad8a95752623443e8e28c0e923682d2c0d495" + resolved "https://registry.yarnpkg.com/y-protocols/-/y-protocols-1.0.6.tgz#66dad8a95752623443e8e28c0e923682d2c0d495" integrity sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q== dependencies: lib0 "^0.2.85" y18n@^5.0.5: version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yaml@^1.10.0: version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.3.4, yaml@^2.4.2: - version "2.7.0" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" - integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== + version "2.8.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6" + integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^17.0.0, yargs@^17.7.2: version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -11607,41 +10961,41 @@ yargs@^17.0.0, yargs@^17.7.2: yargs-parser "^21.1.1" yjs@^13.6.20: - version "13.6.23" - resolved "https://registry.npmjs.org/yjs/-/yjs-13.6.23.tgz#62358dfa52e92dc870b8a0bedcf0d4cbd4c5ffa8" - integrity sha512-ExtnT5WIOVpkL56bhLeisG/N5c4fmzKn4k0ROVfJa5TY2QHbH7F0Wu2T5ZhR7ErsFWQEFafyrnSI8TPKVF9Few== + version "13.6.27" + resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.6.27.tgz#8899be929d57da05a0aa112d044a5c204393ab7b" + integrity sha512-OIDwaflOaq4wC6YlPBy2L6ceKeKuF7DeTxx+jPzv1FHn9tCZ0ZwSRnUBxD05E3yed46fv/FWJbvR+Ud7x0L7zw== dependencies: lib0 "^0.2.99" yn@3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yoga-layout@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/yoga-layout/-/yoga-layout-2.0.1.tgz#4bc686abe2464f977866650ddccc1dbcf9f0d03c" + resolved "https://registry.yarnpkg.com/yoga-layout/-/yoga-layout-2.0.1.tgz#4bc686abe2464f977866650ddccc1dbcf9f0d03c" integrity sha512-tT/oChyDXelLo2A+UVnlW9GU7CsvFMaEnd9kVFsaiCQonFAXd3xrHhkLYu+suwwosrAEQ746xBU+HvYtm1Zs2Q== zeed-dom@^0.15.1: version "0.15.1" - resolved "https://registry.npmjs.org/zeed-dom/-/zeed-dom-0.15.1.tgz#dceb759d8a6e7aec042701ebe6684850baaf6193" + resolved "https://registry.yarnpkg.com/zeed-dom/-/zeed-dom-0.15.1.tgz#dceb759d8a6e7aec042701ebe6684850baaf6193" integrity sha512-dtZ0aQSFyZmoJS0m06/xBN1SazUBPL5HpzlAcs/KcRW0rzadYw12deQBjeMhGKMMeGEp7bA9vmikMLaO4exBcg== dependencies: css-what "^6.1.0" entities "^5.0.0" zod@^3.22.2: - version "3.24.2" - resolved "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3" - integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== + version "3.25.67" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.67.tgz#62987e4078e2ab0f63b491ef0c4f33df24236da8" + integrity sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw== zxcvbn@^4.4.2: version "4.4.2" - resolved "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz#28ec17cf09743edcab056ddd8b1b06262cc73c30" + resolved "https://registry.yarnpkg.com/zxcvbn/-/zxcvbn-4.4.2.tgz#28ec17cf09743edcab056ddd8b1b06262cc73c30" integrity sha512-Bq0B+ixT/DMyG8kgX2xWcI5jUvCwqrMxSFam7m0lAf78nf04hv6lNCsyLYdyYTrCVMqNDY/206K7eExYCeSyUQ== From cfe169c6d7f118f0b15399d9749a81dcdb89b953 Mon Sep 17 00:00:00 2001 From: Akshita Goyal <36129505+gakshita@users.noreply.github.com> Date: Wed, 2 Jul 2025 15:23:18 +0530 Subject: [PATCH 007/130] [WEB-4423] refactor: event trackers (#7289) * feat: event tracker helper * feat: track click events for `data-ph-element` * fix: handled click events * fix: handled name * chore: tracker element updates * chore: remove export * chore: tracker element type * chore: track element and event helper. * chore: minor improvements * chore: minor refactors * fix: workspace events * fix: added slug * fix: changes nomenclature * fix: nomenclature * chore: update event tracker helper types * fix: data id * refactor: cycle events (#7290) * chore: update event tracker helper types * refactor: cycle events * refactor: cycle events * refactor: cycle event tracker * chore: update tracker elements * chore: check for closest element with data-ph-element attribute --------- Co-authored-by: Prateek Shourya * Refactor module events (#7291) * chore: update event tracker helper types * refactor: cycle events * refactor: cycle events * refactor: cycle event tracker * refactor: module tracker event and element * chore: update tracker element * chore: revert unnecessary changes --------- Co-authored-by: Prateek Shourya * refactor: global views, product tour, notifications, onboarding, users and sidebar related events * chore: member tracker events (#7302) * chore: member-tracker-events * fix: constants * refactor: update event tracker constants * refactor: auth related event trackers (#7306) * Chore: state events (#7307) * chore: state events * fix: refactor * chore: project events (#7305) * chore: project-events * fix: refactor * fix: removed hardcoded values * fix: github redirection event * chore: project page tracker events (#7304) * added events for most page events * refactor: simplify lock button event handling in PageLockControl --------- Co-authored-by: Palanikannan M Co-authored-by: M. Palanikannan <73993394+Palanikannan1437@users.noreply.github.com> * chore: minor cleanup and import fixes * refactor: added tracker elements for buttons (#7308) Co-authored-by: Prateek Shourya * fix: event type * refactor: posthog group event * chore: removed instances of event tracker (#7309) * refactor: remove event tracker stores and hooks * refactor: remove event tracker store * fix: build errors * clean up event tracker payloads * fix: coderabbit suggestions --------- Co-authored-by: Prateek Shourya Co-authored-by: Prateek Shourya Co-authored-by: Palanikannan M Co-authored-by: M. Palanikannan <73993394+Palanikannan1437@users.noreply.github.com> Co-authored-by: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com> --- packages/constants/src/event-tracker/core.ts | 336 +++++++++--------- .../account/auth-forms/unique-code.tsx | 2 - .../(projects)/analytics/[tabId]/page.tsx | 8 +- .../(projects)/extended-project-sidebar.tsx | 3 +- .../[workspaceSlug]/(projects)/header.tsx | 15 +- .../[projectId]/cycles/(detail)/header.tsx | 5 +- .../[projectId]/cycles/(list)/header.tsx | 7 +- .../[projectId]/cycles/(list)/page.tsx | 7 +- .../[projectId]/modules/(detail)/header.tsx | 5 +- .../[projectId]/modules/(list)/header.tsx | 7 +- .../[projectId]/pages/(list)/header.tsx | 14 +- .../views/(detail)/[viewId]/header.tsx | 6 +- .../(projects)/workspace-views/header.tsx | 10 +- .../settings/(workspace)/members/page.tsx | 51 +-- .../(settings)/settings/projects/page.tsx | 7 +- .../(all)/accounts/forgot-password/page.tsx | 23 +- web/app/(all)/invitations/page.tsx | 42 ++- web/app/(all)/onboarding/page.tsx | 14 +- web/app/(all)/sign-up/page.tsx | 8 +- web/app/(home)/page.tsx | 8 +- web/ce/components/issues/header.tsx | 6 +- .../copy-menu-helper.tsx | 1 - .../components/pages/header/lock-control.tsx | 5 + web/ce/components/projects/create/root.tsx | 21 +- .../workspace/delete-workspace-section.tsx | 7 +- web/ce/helpers/command-palette.ts | 33 +- web/ce/store/event-tracker.store.ts | 11 - .../account/auth-forms/password.tsx | 37 +- .../account/auth-forms/unique-code.tsx | 47 ++- .../actions/project-actions.tsx | 12 +- .../command-palette/command-modal.tsx | 25 +- .../command-palette/command-palette.tsx | 16 +- .../analytics-sidebar/sidebar-header.tsx | 75 ++-- .../cycles/archived-cycles/modal.tsx | 20 +- web/core/components/cycles/delete-modal.tsx | 21 +- web/core/components/cycles/form.tsx | 6 +- .../cycles/list/cycle-list-item-action.tsx | 65 ++-- web/core/components/cycles/modal.tsx | 35 +- web/core/components/cycles/quick-actions.tsx | 46 ++- web/core/components/home/root.tsx | 18 +- .../home/widgets/empty-states/no-projects.tsx | 15 +- .../components/inbox/content/issue-root.tsx | 55 ++- .../inbox/modals/create-modal/create-root.tsx | 22 +- .../integration/jira/give-details.tsx | 8 +- .../attachments/helper.tsx | 47 +-- .../issue-detail-widgets/relations/helper.tsx | 42 +-- .../issue-detail-widgets/sub-issues/helper.ts | 77 ++-- .../sub-issues/quick-action-button.tsx | 9 +- .../issue-detail-quick-actions.tsx | 31 +- .../components/issues/issue-detail/root.tsx | 143 +++----- .../issue-layouts/empty-states/cycle.tsx | 8 +- .../empty-states/global-view.tsx | 10 +- .../issue-layouts/empty-states/module.tsx | 8 +- .../empty-states/project-issues.tsx | 8 +- .../empty-states/project-view.tsx | 9 +- .../roots/global-view-root.tsx | 32 +- .../issue-layouts/kanban/base-kanban-root.tsx | 31 +- .../kanban/headers/group-by-card.tsx | 11 +- .../list/headers/group-by-card.tsx | 13 +- .../properties/all-properties.tsx | 89 ++--- .../quick-action-dropdowns/all-issue.tsx | 22 +- .../quick-action-dropdowns/archived-issue.tsx | 19 +- .../quick-action-dropdowns/cycle-issue.tsx | 27 +- .../quick-action-dropdowns/draft-issue.tsx | 20 +- .../quick-action-dropdowns/helper.tsx | 8 - .../quick-action-dropdowns/module-issue.tsx | 25 +- .../quick-action-dropdowns/project-issue.tsx | 26 +- .../issues/issue-layouts/quick-add/root.tsx | 20 +- .../spreadsheet/columns/cycle-column.tsx | 19 +- .../spreadsheet/columns/module-column.tsx | 19 +- .../spreadsheet/issue-column.tsx | 19 +- .../components/issues/issue-modal/base.tsx | 31 +- .../issues/issue-modal/draft-issue-layout.tsx | 26 +- .../components/issues/peek-overview/root.tsx | 155 +++----- .../issues/workspace-draft/root.tsx | 4 +- .../modules/analytics-sidebar/root.tsx | 93 ++--- .../modules/delete-module-modal.tsx | 14 +- .../components/modules/links/list-item.tsx | 3 + web/core/components/modules/modal.tsx | 29 +- .../components/modules/module-card-item.tsx | 31 +- .../modules/module-list-item-action.tsx | 58 ++- .../components/modules/modules-list-view.tsx | 7 +- web/core/components/modules/quick-actions.tsx | 43 ++- .../onboarding/create-workspace.tsx | 33 +- .../components/onboarding/invitations.tsx | 36 +- .../components/onboarding/invite-members.tsx | 33 +- .../components/onboarding/profile-setup.tsx | 46 +-- web/core/components/onboarding/tour/root.tsx | 18 +- .../components/pages/dropdowns/actions.tsx | 38 +- .../pages/header/favorite-control.tsx | 13 +- .../pages/list/block-item-action.tsx | 6 + .../pages/modals/create-page-modal.tsx | 16 +- .../pages/modals/delete-page-modal.tsx | 13 +- .../pages/pages-list-main-content.tsx | 6 +- .../project-states/create-update/create.tsx | 49 +-- .../project-states/create-update/update.tsx | 51 ++- .../components/project-states/group-item.tsx | 3 +- .../project-states/options/delete.tsx | 47 ++- .../project-states/state-delete-modal.tsx | 15 +- .../project-states/state-item-title.tsx | 3 +- web/core/components/project/card-list.tsx | 8 +- .../project/delete-project-modal.tsx | 16 +- web/core/components/project/form.tsx | 31 +- web/core/components/project/header.tsx | 8 +- .../project/leave-project-modal.tsx | 25 +- .../components/project/member-list-item.tsx | 25 +- web/core/components/project/member-list.tsx | 8 +- .../project/send-project-invitation-modal.tsx | 28 +- .../settings/delete-project-section.tsx | 7 +- .../project/settings/features-list.tsx | 11 +- .../project/settings/member-columns.tsx | 3 +- .../views/update-view-component.tsx | 9 +- .../sidebar/header/options/root.tsx | 16 +- .../notification-card/options/archive.tsx | 24 +- .../notification-card/options/read.tsx | 24 +- .../workspace/create-workspace-form.tsx | 36 +- .../workspace/delete-workspace-form.tsx | 21 +- .../settings/invitations-list-item.tsx | 10 +- .../workspace/settings/member-columns.tsx | 3 +- .../workspace/settings/members-list-item.tsx | 25 +- .../workspace/settings/workspace-details.tsx | 35 +- .../workspace/sidebar/projects-list-item.tsx | 11 +- .../workspace/sidebar/projects-list.tsx | 9 +- .../workspace/sidebar/quick-actions.tsx | 7 +- .../workspace/sidebar/user-menu-item.tsx | 13 +- .../workspace/views/delete-view-modal.tsx | 23 +- .../components/workspace/views/header.tsx | 24 +- web/core/components/workspace/views/modal.tsx | 38 +- .../workspace/views/quick-action.tsx | 6 +- .../workspace/views/view-list-item.tsx | 12 +- web/core/hooks/store/index.ts | 1 - web/core/hooks/store/use-event-tracker.ts | 11 - web/core/hooks/use-page-operations.ts | 145 ++++++-- .../layouts/auth-layout/project-wrapper.tsx | 7 +- web/core/lib/posthog-provider.tsx | 32 +- web/core/store/event-tracker.store.ts | 219 ------------ web/core/store/root.store.ts | 4 - web/ee/store/event-tracker.store.ts | 1 - web/helpers/event-tracker.helper.ts | 146 ++++++++ 139 files changed, 2093 insertions(+), 1886 deletions(-) delete mode 100644 web/ce/store/event-tracker.store.ts delete mode 100644 web/core/hooks/store/use-event-tracker.ts delete mode 100644 web/core/store/event-tracker.store.ts delete mode 100644 web/ee/store/event-tracker.store.ts create mode 100644 web/helpers/event-tracker.helper.ts diff --git a/packages/constants/src/event-tracker/core.ts b/packages/constants/src/event-tracker/core.ts index 85f2ea6e2ba..dd40d345933 100644 --- a/packages/constants/src/event-tracker/core.ts +++ b/packages/constants/src/event-tracker/core.ts @@ -1,163 +1,46 @@ -export type IssueEventProps = { - eventName: string; - payload: any; - updates?: any; - path?: string; -}; - -export type EventProps = { - eventName: string; - payload: any; - updates?: any; - path?: string; -}; - -export const getWorkspaceEventPayload = (payload: any) => ({ - workspace_id: payload.id, - created_at: payload.created_at, - updated_at: payload.updated_at, - organization_size: payload.organization_size, - first_time: payload.first_time, - state: payload.state, - element: payload.element, -}); - -export const getProjectEventPayload = (payload: any) => ({ - workspace_id: payload.workspace_id, - project_id: payload.id, - identifier: payload.identifier, - project_visibility: payload.network == 2 ? "Public" : "Private", - changed_properties: payload.changed_properties, - lead_id: payload.project_lead, - created_at: payload.created_at, - updated_at: payload.updated_at, - state: payload.state, - element: payload.element, -}); - -export const getCycleEventPayload = (payload: any) => ({ - workspace_id: payload.workspace_id, - project_id: payload.project, - cycle_id: payload.id, - created_at: payload.created_at, - updated_at: payload.updated_at, - start_date: payload.start_date, - target_date: payload.target_date, - cycle_status: payload.status, - changed_properties: payload.changed_properties, - state: payload.state, - element: payload.element, -}); - -export const getModuleEventPayload = (payload: any) => ({ - workspace_id: payload.workspace_id, - project_id: payload.project, - module_id: payload.id, - created_at: payload.created_at, - updated_at: payload.updated_at, - start_date: payload.start_date, - target_date: payload.target_date, - module_status: payload.status, - lead_id: payload.lead, - changed_properties: payload.changed_properties, - member_ids: payload.members, - state: payload.state, - element: payload.element, -}); - -export const getPageEventPayload = (payload: any) => ({ - workspace_id: payload.workspace_id, - project_id: payload.project, - created_at: payload.created_at, - updated_at: payload.updated_at, - access: payload.access === 0 ? "Public" : "Private", - is_locked: payload.is_locked, - archived_at: payload.archived_at, - created_by: payload.created_by, - state: payload.state, - element: payload.element, -}); - -export const getIssueEventPayload = (props: IssueEventProps) => { - const { eventName, payload, updates, path } = props; - let eventPayload: any = { - issue_id: payload.id, - estimate_point: payload.estimate_point, - link_count: payload.link_count, - target_date: payload.target_date, - is_draft: payload.is_draft, - label_ids: payload.label_ids, - assignee_ids: payload.assignee_ids, - created_at: payload.created_at, - updated_at: payload.updated_at, - sequence_id: payload.sequence_id, - module_ids: payload.module_ids, - sub_issues_count: payload.sub_issues_count, - parent_id: payload.parent_id, - project_id: payload.project_id, - workspace_id: payload.workspace_id, - priority: payload.priority, - state_id: payload.state_id, - start_date: payload.start_date, - attachment_count: payload.attachment_count, - cycle_id: payload.cycle_id, - module_id: payload.module_id, - archived_at: payload.archived_at, - state: payload.state, - view_id: path?.includes("workspace-views") || path?.includes("views") ? path.split("/").pop() : "", - }; - - if (eventName === WORK_ITEM_TRACKER_EVENTS.update) { - eventPayload = { - ...eventPayload, - ...updates, - updated_from: props.path?.includes("workspace-views") - ? "All views" - : props.path?.includes("cycles") - ? "Cycle" - : props.path?.includes("modules") - ? "Module" - : props.path?.includes("views") - ? "Project view" - : props.path?.includes("inbox") - ? "Inbox" - : props.path?.includes("draft") - ? "Draft" - : "Project", - }; - } - return eventPayload; -}; - -export const getProjectStateEventPayload = (payload: any) => ({ - workspace_id: payload.workspace_id, - project_id: payload.id, - state_id: payload.id, - created_at: payload.created_at, - updated_at: payload.updated_at, - group: payload.group, - color: payload.color, - default: payload.default, - state: payload.state, - element: payload.element, -}); - // Dashboard Events export const GITHUB_REDIRECTED_TRACKER_EVENT = "github_redirected"; +export const HEADER_GITHUB_ICON = "header_github_icon"; + // Groups export const GROUP_WORKSPACE_TRACKER_EVENT = "workspace_metrics"; +// Command palette tracker +export const COMMAND_PALETTE_TRACKER_ELEMENTS = { + COMMAND_PALETTE_SHORTCUT_KEY: "command_palette_shortcut_key", +}; + export const WORKSPACE_TRACKER_EVENTS = { create: "workspace_created", update: "workspace_updated", delete: "workspace_deleted", }; +export const WORKSPACE_TRACKER_ELEMENTS = { + DELETE_WORKSPACE_BUTTON: "delete_workspace_button", + ONBOARDING_CREATE_WORKSPACE_BUTTON: "onboarding_create_workspace_button", + CREATE_WORKSPACE_BUTTON: "create_workspace_button", + UPDATE_WORKSPACE_BUTTON: "update_workspace_button", +}; export const PROJECT_TRACKER_EVENTS = { create: "project_created", update: "project_updated", delete: "project_deleted", }; +export const PROJECT_TRACKER_ELEMENTS = { + EXTENDED_SIDEBAR_ADD_BUTTON: "extended_sidebar_add_project_button", + SIDEBAR_CREATE_PROJECT_BUTTON: "sidebar_create_project_button", + SIDEBAR_CREATE_PROJECT_TOOLTIP: "sidebar_create_project_tooltip", + COMMAND_PALETTE_CREATE_BUTTON: "command_palette_create_project_button", + COMMAND_PALETTE_SHORTCUT_CREATE_BUTTON: "command_palette_shortcut_create_project_button", + EMPTY_STATE_CREATE_PROJECT_BUTTON: "empty_state_create_project_button", + CREATE_HEADER_BUTTON: "create_project_header_button", + CREATE_FIRST_PROJECT_BUTTON: "create_first_project_button", + DELETE_PROJECT_BUTTON: "delete_project_button", + UPDATE_PROJECT_BUTTON: "update_project_button", + CREATE_PROJECT_JIRA_IMPORT_DETAIL_PAGE: "create_project_jira_import_detail_page", + TOGGLE_FEATURE: "toggle_project_feature", +}; export const CYCLE_TRACKER_EVENTS = { create: "cycle_created", @@ -165,7 +48,18 @@ export const CYCLE_TRACKER_EVENTS = { delete: "cycle_deleted", favorite: "cycle_favorited", unfavorite: "cycle_unfavorited", + archive: "cycle_archived", + restore: "cycle_restored", }; +export const CYCLE_TRACKER_ELEMENTS = { + RIGHT_HEADER_ADD_BUTTON: "right_header_add_cycle_button", + EMPTY_STATE_ADD_BUTTON: "empty_state_add_cycle_button", + COMMAND_PALETTE_ADD_ITEM: "command_palette_add_cycle_item", + RIGHT_SIDEBAR: "cycle_right_sidebar", + QUICK_ACTIONS: "cycle_quick_actions", + CONTEXT_MENU: "cycle_context_menu", + LIST_ITEM: "cycle_list_item", +} as const; export const MODULE_TRACKER_EVENTS = { create: "module_created", @@ -173,32 +67,120 @@ export const MODULE_TRACKER_EVENTS = { delete: "module_deleted", favorite: "module_favorited", unfavorite: "module_unfavorited", + archive: "module_archived", + restore: "module_restored", link: { create: "module_link_created", update: "module_link_updated", delete: "module_link_deleted", }, }; +export const MODULE_TRACKER_ELEMENTS = { + RIGHT_HEADER_ADD_BUTTON: "right_header_add_module_button", + EMPTY_STATE_ADD_BUTTON: "empty_state_add_module_button", + COMMAND_PALETTE_ADD_ITEM: "command_palette_add_module_item", + RIGHT_SIDEBAR: "module_right_sidebar", + QUICK_ACTIONS: "module_quick_actions", + CONTEXT_MENU: "module_context_menu", + LIST_ITEM: "module_list_item", + CARD_ITEM: "module_card_item", +} as const; export const WORK_ITEM_TRACKER_EVENTS = { create: "work_item_created", + add_existing: "work_item_add_existing", update: "work_item_updated", delete: "work_item_deleted", archive: "work_item_archived", restore: "work_item_restored", + attachment: { + add: "work_item_attachment_added", + remove: "work_item_attachment_removed", + }, + sub_issue: { + update: "sub_issue_updated", + remove: "sub_issue_removed", + delete: "sub_issue_deleted", + create: "sub_issue_created", + add_existing: "sub_issue_add_existing", + }, + draft: { + create: "draft_work_item_created", + }, }; +export const WORK_ITEM_TRACKER_ELEMENTS = { + HEADER_ADD_BUTTON: { + WORK_ITEMS: "work_items_header_add_work_item_button", + PROJECT_VIEW: "project_view_header_add_work_item_button", + CYCLE: "cycle_header_add_work_item_button", + MODULE: "module_header_add_work_item_button", + }, + COMMAND_PALETTE_ADD_BUTTON: "command_palette_add_work_item_button", + EMPTY_STATE_ADD_BUTTON: { + WORK_ITEMS: "work_items_empty_state_add_work_item_button", + PROJECT_VIEW: "project_view_empty_state_add_work_item_button", + CYCLE: "cycle_empty_state_add_work_item_button", + MODULE: "module_empty_state_add_work_item_button", + GLOBAL_VIEW: "global_view_empty_state_add_work_item_button", + }, + QUICK_ACTIONS: { + WORK_ITEMS: "work_items_quick_actions", + PROJECT_VIEW: "project_view_work_items_quick_actions", + CYCLE: "cycle_work_items_quick_actions", + MODULE: "module_work_items_quick_actions", + GLOBAL_VIEW: "global_view_work_items_quick_actions", + ARCHIVED: "archived_work_items_quick_actions", + DRAFT: "draft_work_items_quick_actions", + }, + CONTEXT_MENU: { + WORK_ITEMS: "work_items_context_menu", + PROJECT_VIEW: "project_view_context_menu", + CYCLE: "cycle_context_menu", + MODULE: "module_context_menu", + GLOBAL_VIEW: "global_view_context_menu", + ARCHIVED: "archived_context_menu", + DRAFT: "draft_context_menu", + }, +} as const; export const STATE_TRACKER_EVENTS = { create: "state_created", update: "state_updated", delete: "state_deleted", }; +export const STATE_TRACKER_ELEMENTS = { + STATE_GROUP_ADD_BUTTON: "state_group_add_button", + STATE_LIST_DELETE_BUTTON: "state_list_delete_button", + STATE_LIST_EDIT_BUTTON: "state_list_edit_button", +}; export const PROJECT_PAGE_TRACKER_EVENTS = { create: "project_page_created", update: "project_page_updated", delete: "project_page_deleted", + archive: "project_page_archived", + restore: "project_page_restored", + lock: "project_page_locked", + unlock: "project_page_unlocked", + access_update: "project_page_access_updated", + duplicate: "project_page_duplicated", + favorite: "project_page_favorited", + unfavorite: "project_page_unfavorited", + move: "project_page_moved", }; +export const PROJECT_PAGE_TRACKER_ELEMENTS = { + COMMAND_PALETTE_SHORTCUT_CREATE_BUTTON: "command_palette_shortcut_create_page_button", + EMPTY_STATE_CREATE_BUTTON: "empty_state_create_page_button", + COMMAND_PALETTE_CREATE_BUTTON: "command_palette_create_page_button", + CONTEXT_MENU: "page_context_menu", + QUICK_ACTIONS: "page_quick_actions", + LIST_ITEM: "page_list_item", + FAVORITE_BUTTON: "page_favorite_button", + ARCHIVE_BUTTON: "page_archive_button", + LOCK_BUTTON: "page_lock_button", + ACCESS_TOGGLE: "page_access_toggle", + DUPLICATE_BUTTON: "page_duplicate_button", +} as const; export const MEMBER_TRACKER_EVENTS = { invite: "member_invited", @@ -211,48 +193,78 @@ export const MEMBER_TRACKER_EVENTS = { leave: "workspace_member_left", }, }; +export const MEMBER_TRACKER_ELEMENTS = { + HEADER_ADD_BUTTON: "header_add_member_button", + ACCEPT_INVITATION_BUTTON: "accept_invitation_button", + ONBOARDING_JOIN_WORKSPACE: "workspace_join_continue_to_workspace_button", + ONBOARDING_INVITE_MEMBER: "invite_member_continue_button", + SIDEBAR_PROJECT_QUICK_ACTIONS: "sidebar_project_quick_actions", + PROJECT_MEMBER_TABLE_CONTEXT_MENU: "project_member_table_context_menu", + WORKSPACE_MEMBER_TABLE_CONTEXT_MENU: "workspace_member_table_context_menu", + WORKSPACE_INVITATIONS_LIST_CONTEXT_MENU: "workspace_invitations_list_context_menu", +} as const; export const AUTH_TRACKER_EVENTS = { - navigate: { - sign_up: "navigate_to_sign_up_page", - sign_in: "navigate_to_sign_in_page", - }, code_verify: "code_verified", sign_up_with_password: "sign_up_with_password", sign_in_with_password: "sign_in_with_password", - sign_in_with_code: "sign_in_with_magic_link", forgot_password: "forgot_password_clicked", + new_code_requested: "new_code_requested", }; - -export const PRODUCT_TOUR_TRACKER_EVENTS = { - start: "product_tour_started", - complete: "product_tour_completed", - skip: "product_tour_skipped", +export const AUTH_TRACKER_ELEMENTS = { + NAVIGATE_TO_SIGN_UP: "navigate_to_sign_up", + FORGOT_PASSWORD_FROM_SIGNIN: "forgot_password_from_signin", + SIGNUP_FROM_FORGOT_PASSWORD: "signup_from_forgot_password", + SIGN_IN_FROM_SIGNUP: "sign_in_from_signup", + SIGN_IN_WITH_UNIQUE_CODE: "sign_in_with_unique_code", + REQUEST_NEW_CODE: "request_new_code", + VERIFY_CODE: "verify_code", }; -export const GLOBAL_VIEW_TOUR_TRACKER_EVENTS = { +export const GLOBAL_VIEW_TRACKER_EVENTS = { create: "global_view_created", update: "global_view_updated", delete: "global_view_deleted", open: "global_view_opened", }; +export const GLOBAL_VIEW_TRACKER_ELEMENTS = { + RIGHT_HEADER_ADD_BUTTON: "global_view_right_header_add_button", + HEADER_SAVE_VIEW_BUTTON: "global_view_header_save_view_button", + QUICK_ACTIONS: "global_view_quick_actions", + LIST_ITEM: "global_view_list_item", +}; + +export const PRODUCT_TOUR_TRACKER_EVENTS = { + complete: "product_tour_completed", +}; +export const PRODUCT_TOUR_TRACKER_ELEMENTS = { + START_BUTTON: "product_tour_start_button", + SKIP_BUTTON: "product_tour_skip_button", + CREATE_PROJECT_BUTTON: "product_tour_create_project_button", +}; export const NOTIFICATION_TRACKER_EVENTS = { archive: "notification_archived", + unarchive: "notification_unarchived", + mark_read: "notification_marked_read", + mark_unread: "notification_marked_unread", all_marked_read: "all_notifications_marked_read", }; +export const NOTIFICATION_TRACKER_ELEMENTS = { + MARK_ALL_AS_READ_BUTTON: "mark_all_as_read_button", + ARCHIVE_UNARCHIVE_BUTTON: "archive_unarchive_button", + MARK_READ_UNREAD_BUTTON: "mark_read_unread_button", +}; export const USER_TRACKER_EVENTS = { add_details: "user_details_added", onboarding_complete: "user_onboarding_completed", }; - -export const ONBOARDING_TRACKER_EVENTS = { - root: "onboarding", - step_1: "onboarding_step_1", - step_2: "onboarding_step_2", +export const ONBOARDING_TRACKER_ELEMENTS = { + PROFILE_SETUP_FORM: "onboarding_profile_setup_form", }; -export const SIDEBAR_TRACKER_EVENTS = { - click: "sidenav_clicked", +export const SIDEBAR_TRACKER_ELEMENTS = { + USER_MENU_ITEM: "sidenav_user_menu_item", + CREATE_WORK_ITEM_BUTTON: "sidebar_create_work_item_button", }; diff --git a/space/core/components/account/auth-forms/unique-code.tsx b/space/core/components/account/auth-forms/unique-code.tsx index 750b52ccda1..abf233a297d 100644 --- a/space/core/components/account/auth-forms/unique-code.tsx +++ b/space/core/components/account/auth-forms/unique-code.tsx @@ -34,8 +34,6 @@ const defaultValues: TUniqueCodeFormValues = { export const AuthUniqueCodeForm: React.FC = (props) => { const { mode, email, nextPath, handleEmailClear, generateEmailUniqueCode } = props; - // hooks - // const { captureEvent } = useEventTracker(); // derived values const defaultResetTimerValue = 5; // states diff --git a/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx b/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx index 6100bc8d506..829ebdec7f6 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx @@ -4,7 +4,7 @@ import { useMemo } from "react"; import { observer } from "mobx-react"; import { useRouter } from "next/navigation"; // plane package imports -import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel, PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { type TabItem, Tabs } from "@plane/ui"; // components @@ -12,7 +12,8 @@ import AnalyticsFilterActions from "@/components/analytics/analytics-filter-acti import { PageHead } from "@/components/core"; import { ComicBoxButton, DetailedEmptyState } from "@/components/empty-state"; // hooks -import { useCommandPalette, useEventTracker, useProject, useUserPermissions, useWorkspace } from "@/hooks/store"; +import { captureClick } from "@/helpers/event-tracker.helper"; +import { useCommandPalette, useProject, useUserPermissions, useWorkspace } from "@/hooks/store"; import { useResolvedAssetPath } from "@/hooks/use-resolved-asset-path"; import { getAnalyticsTabs } from "@/plane-web/components/analytics/tabs"; @@ -36,7 +37,6 @@ const AnalyticsPage = observer((props: Props) => { // store hooks const { toggleCreateProjectModal } = useCommandPalette(); - const { setTrackElement } = useEventTracker(); const { workspaceProjectIds, loader } = useProject(); const { currentWorkspace } = useWorkspace(); const { allowPermissions } = useUserPermissions(); @@ -101,8 +101,8 @@ const AnalyticsPage = observer((props: Props) => { title={t("workspace_analytics.empty_state.general.primary_button.comic.title")} description={t("workspace_analytics.empty_state.general.primary_button.comic.description")} onClick={() => { - setTrackElement("Analytics empty state"); toggleCreateProjectModal(true); + captureClick({ elementName: PROJECT_TRACKER_ELEMENTS.EMPTY_STATE_CREATE_PROJECT_BUTTON }); }} disabled={!canPerformEmptyStateActions} /> diff --git a/web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx b/web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx index 0cd87200c9f..d33acbeb4fd 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx @@ -5,7 +5,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports import { Plus, Search } from "lucide-react"; -import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel, PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { setToast, TOAST_TYPE, Tooltip } from "@plane/ui"; import { cn, copyUrlToClipboard, orderJoinedProjects } from "@plane/utils"; @@ -122,6 +122,7 @@ export const ExtendedProjectSidebar = observer(() => { diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx index 7169a3d9191..242b5902e94 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx @@ -12,6 +12,7 @@ import { EUserPermissions, EUserPermissionsLevel, EProjectFeatureKey, + WORK_ITEM_TRACKER_ELEMENTS, } from "@plane/constants"; // types import { @@ -30,11 +31,9 @@ import { SwitcherIcon, SwitcherLabel } from "@/components/common"; import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "@/components/issues"; // constants import { ViewQuickActions } from "@/components/views"; -// helpers // hooks import { useCommandPalette, - useEventTracker, useIssues, useLabel, useMember, @@ -57,7 +56,6 @@ export const ProjectViewIssuesHeader: React.FC = observer(() => { const { issuesFilter: { issueFilters, updateFilters }, } = useIssues(EIssuesStoreType.PROJECT_VIEW); - const { setTrackElement } = useEventTracker(); const { toggleCreateIssueModal } = useCommandPalette(); const { allowPermissions } = useUserPermissions(); @@ -258,9 +256,9 @@ export const ProjectViewIssuesHeader: React.FC = observer(() => { {canUserCreateIssue ? (
diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx b/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx index 001c00dd27e..e05eb30f057 100644 --- a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx +++ b/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx @@ -5,12 +5,17 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Search } from "lucide-react"; // types -import { EUserPermissions, EUserPermissionsLevel, MEMBER_TRACKER_EVENTS } from "@plane/constants"; +import { + EUserPermissions, + EUserPermissionsLevel, + MEMBER_TRACKER_ELEMENTS, + MEMBER_TRACKER_EVENTS, +} from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IWorkspaceBulkInviteFormData } from "@plane/types"; // ui import { Button, TOAST_TYPE, setToast } from "@plane/ui"; -import { cn, getUserRole } from "@plane/utils"; +import { cn } from "@plane/utils"; // components import { NotAuthorizedView } from "@/components/auth-screens"; import { CountChip } from "@/components/common"; @@ -19,7 +24,8 @@ import { SettingsContentWrapper } from "@/components/settings"; import { WorkspaceMembersList } from "@/components/workspace"; // helpers // hooks -import { useEventTracker, useMember, useUserPermissions, useWorkspace } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; +import { useMember, useUserPermissions, useWorkspace } from "@/hooks/store"; // plane web components import { BillingActionsButton } from "@/plane-web/components/workspace/billing"; import { SendWorkspaceInvitationModal } from "@/plane-web/components/workspace/members"; @@ -32,7 +38,6 @@ const WorkspaceMembersSettingsPage = observer(() => { const { workspaceSlug } = useParams(); // store hooks const { workspaceUserInfo, allowPermissions } = useUserPermissions(); - const { captureEvent } = useEventTracker(); const { workspace: { workspaceMemberIds, inviteMembersToWorkspace }, } = useMember(); @@ -52,16 +57,11 @@ const WorkspaceMembersSettingsPage = observer(() => { return inviteMembersToWorkspace(workspaceSlug.toString(), data) .then(() => { setInviteModal(false); - captureEvent(MEMBER_TRACKER_EVENTS.invite, { - emails: [ - ...data.emails.map((email) => ({ - email: email.email, - role: getUserRole(email.role as unknown as EUserPermissions), - })), - ], - project_id: undefined, - state: "SUCCESS", - element: "Workspace settings member page", + captureSuccess({ + eventName: MEMBER_TRACKER_EVENTS.invite, + payload: { + emails: [...data.emails.map((email) => email.email)], + }, }); setToast({ type: TOAST_TYPE.SUCCESS, @@ -70,16 +70,12 @@ const WorkspaceMembersSettingsPage = observer(() => { }); }) .catch((err) => { - captureEvent(MEMBER_TRACKER_EVENTS.invite, { - emails: [ - ...data.emails.map((email) => ({ - email: email.email, - role: getUserRole(email.role as unknown as EUserPermissions), - })), - ], - project_id: undefined, - state: "FAILED", - element: "Workspace settings member page", + captureError({ + eventName: MEMBER_TRACKER_EVENTS.invite, + payload: { + emails: [...data.emails.map((email) => email.email)], + }, + error: err, }); setToast({ type: TOAST_TYPE.ERROR, @@ -129,7 +125,12 @@ const WorkspaceMembersSettingsPage = observer(() => { />
{canPerformWorkspaceAdminActions && ( - )} diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx b/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx index 65ea6270152..f94ca21416a 100644 --- a/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx +++ b/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx @@ -2,6 +2,7 @@ import Image from "next/image"; import Link from "next/link"; import { useTheme } from "next-themes"; +import { PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; import { Button, getButtonStyling } from "@plane/ui"; import { cn } from "@plane/utils"; import { useCommandPalette } from "@/hooks/store"; @@ -27,7 +28,11 @@ const ProjectSettingsPage = () => { Learn more about projects - diff --git a/web/app/(all)/accounts/forgot-password/page.tsx b/web/app/(all)/accounts/forgot-password/page.tsx index a7e3e7ed407..fa9ff935859 100644 --- a/web/app/(all)/accounts/forgot-password/page.tsx +++ b/web/app/(all)/accounts/forgot-password/page.tsx @@ -9,14 +9,15 @@ import { Controller, useForm } from "react-hook-form"; // icons import { CircleCheck } from "lucide-react"; // plane imports -import { AUTH_TRACKER_EVENTS } from "@plane/constants"; +import { AUTH_TRACKER_ELEMENTS, AUTH_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { Button, Input, TOAST_TYPE, getButtonStyling, setToast } from "@plane/ui"; import { cn, checkEmailValidity } from "@plane/utils"; // helpers import { EPageTypes } from "@/helpers/authentication.helper"; // hooks -import { useEventTracker, useInstance } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; +import { useInstance } from "@/hooks/store"; import useTimer from "@/hooks/use-timer"; // wrappers import { AuthenticationWrapper } from "@/lib/wrappers"; @@ -45,8 +46,6 @@ const ForgotPasswordPage = observer(() => { const email = searchParams.get("email"); // plane hooks const { t } = useTranslation(); - // store hooks - const { captureEvent } = useEventTracker(); const { config } = useInstance(); // hooks const { resolvedTheme } = useTheme(); @@ -71,8 +70,11 @@ const ForgotPasswordPage = observer(() => { email: formData.email, }) .then(() => { - captureEvent(AUTH_TRACKER_EVENTS.forgot_password, { - state: "SUCCESS", + captureSuccess({ + eventName: AUTH_TRACKER_EVENTS.forgot_password, + payload: { + email: formData.email, + }, }); setToast({ type: TOAST_TYPE.SUCCESS, @@ -82,8 +84,11 @@ const ForgotPasswordPage = observer(() => { setResendCodeTimer(30); }) .catch((err) => { - captureEvent(AUTH_TRACKER_EVENTS.forgot_password, { - state: "FAILED", + captureError({ + eventName: AUTH_TRACKER_EVENTS.forgot_password, + payload: { + email: formData.email, + }, }); setToast({ type: TOAST_TYPE.ERROR, @@ -120,7 +125,7 @@ const ForgotPasswordPage = observer(() => { {t("auth.common.new_to_plane")} captureEvent(AUTH_TRACKER_EVENTS.navigate.sign_up, {})} + data-ph-element={AUTH_TRACKER_ELEMENTS.SIGNUP_FROM_FORGOT_PASSWORD} className="font-semibold text-custom-primary-100 hover:underline" > {t("auth.common.create_account")} diff --git a/web/app/(all)/invitations/page.tsx b/web/app/(all)/invitations/page.tsx index 5e5f1958fe0..c3ba0e1527d 100644 --- a/web/app/(all)/invitations/page.tsx +++ b/web/app/(all)/invitations/page.tsx @@ -9,20 +9,21 @@ import { useTheme } from "next-themes"; import useSWR, { mutate } from "swr"; import { CheckCircle2 } from "lucide-react"; // plane imports -import { ROLE, EUserPermissions, MEMBER_TRACKER_EVENTS } from "@plane/constants"; +import { ROLE, MEMBER_TRACKER_EVENTS, MEMBER_TRACKER_ELEMENTS, GROUP_WORKSPACE_TRACKER_EVENT } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; // types import type { IWorkspaceMemberInvitation } from "@plane/types"; // ui import { Button, TOAST_TYPE, setToast } from "@plane/ui"; -import { truncateText, getUserRole } from "@plane/utils"; +import { truncateText } from "@plane/utils"; // components import { EmptyState } from "@/components/common"; import { WorkspaceLogo } from "@/components/workspace/logo"; import { USER_WORKSPACES_LIST } from "@/constants/fetch-keys"; // helpers // hooks -import { useEventTracker, useUser, useUserProfile, useWorkspace } from "@/hooks/store"; +import { captureError, captureSuccess, joinEventGroup } from "@/helpers/event-tracker.helper"; +import { useUser, useUserProfile, useWorkspace } from "@/hooks/store"; import { useAppRouter } from "@/hooks/use-app-router"; // services import { AuthenticationWrapper } from "@/lib/wrappers"; @@ -43,7 +44,6 @@ const UserInvitationsPage = observer(() => { const router = useAppRouter(); // store hooks const { t } = useTranslation(); - const { captureEvent, joinWorkspaceMetricGroup } = useEventTracker(); const { data: currentUser } = useUser(); const { updateUserProfile } = useUserProfile(); @@ -85,15 +85,17 @@ const UserInvitationsPage = observer(() => { const firstInviteId = invitationsRespond[0]; const invitation = invitations?.find((i) => i.id === firstInviteId); const redirectWorkspace = invitations?.find((i) => i.id === firstInviteId)?.workspace; - joinWorkspaceMetricGroup(redirectWorkspace?.id); - captureEvent(MEMBER_TRACKER_EVENTS.accept, { - member_id: invitation?.id, - // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain - role: getUserRole((invitation?.role as unknown as EUserPermissions)!), - project_id: undefined, - accepted_from: "App", - state: "SUCCESS", - element: "Workspace invitations page", + if (redirectWorkspace?.id) { + joinEventGroup(GROUP_WORKSPACE_TRACKER_EVENT, redirectWorkspace?.id, { + date: new Date().toDateString(), + workspace_id: redirectWorkspace?.id, + }); + } + captureSuccess({ + eventName: MEMBER_TRACKER_EVENTS.accept, + payload: { + member_id: invitation?.id, + }, }); updateUserProfile({ last_workspace_id: redirectWorkspace?.id }) .then(() => { @@ -111,12 +113,13 @@ const UserInvitationsPage = observer(() => { setIsJoiningWorkspaces(false); }); }) - .catch(() => { - captureEvent(MEMBER_TRACKER_EVENTS.accept, { - project_id: undefined, - accepted_from: "App", - state: "FAILED", - element: "Workspace invitations page", + .catch((err) => { + captureError({ + eventName: MEMBER_TRACKER_EVENTS.accept, + payload: { + member_id: invitationsRespond?.[0], + }, + error: err, }); setToast({ type: TOAST_TYPE.ERROR, @@ -194,6 +197,7 @@ const UserInvitationsPage = observer(() => { onClick={submitInvitations} disabled={isJoiningWorkspaces || invitationsRespond.length === 0} loading={isJoiningWorkspaces} + data-ph-element={MEMBER_TRACKER_ELEMENTS.ACCEPT_INVITATION_BUTTON} > {t("accept_and_join")} diff --git a/web/app/(all)/onboarding/page.tsx b/web/app/(all)/onboarding/page.tsx index 078d6fefaec..7e7d15a10ee 100644 --- a/web/app/(all)/onboarding/page.tsx +++ b/web/app/(all)/onboarding/page.tsx @@ -16,7 +16,8 @@ import { USER_WORKSPACES_LIST } from "@/constants/fetch-keys"; // helpers import { EPageTypes } from "@/helpers/authentication.helper"; // hooks -import { useUser, useWorkspace, useUserProfile, useEventTracker } from "@/hooks/store"; +import { captureSuccess } from "@/helpers/event-tracker.helper"; +import { useUser, useWorkspace, useUserProfile } from "@/hooks/store"; // wrappers import { AuthenticationWrapper } from "@/lib/wrappers"; import { WorkspaceService } from "@/plane-web/services"; @@ -35,7 +36,6 @@ const OnboardingPage = observer(() => { const [step, setStep] = useState(null); const [totalSteps, setTotalSteps] = useState(null); // store hooks - const { captureEvent } = useEventTracker(); const { isLoading: userLoader, data: user, updateCurrentUser } = useUser(); const { data: profile, updateUserProfile, finishUserOnboarding } = useUserProfile(); const { workspaces, fetchWorkspaces } = useWorkspace(); @@ -73,10 +73,12 @@ const OnboardingPage = observer(() => { await finishUserOnboarding() .then(() => { - captureEvent(USER_TRACKER_EVENTS.onboarding_complete, { - email: user.email, - user_id: user.id, - status: "SUCCESS", + captureSuccess({ + eventName: USER_TRACKER_EVENTS.onboarding_complete, + payload: { + email: user.email, + user_id: user.id, + }, }); }) .catch(() => { diff --git a/web/app/(all)/sign-up/page.tsx b/web/app/(all)/sign-up/page.tsx index 786b9738437..25deaf8f167 100644 --- a/web/app/(all)/sign-up/page.tsx +++ b/web/app/(all)/sign-up/page.tsx @@ -6,14 +6,12 @@ import Link from "next/link"; // ui import { useTheme } from "next-themes"; // components -import { AUTH_TRACKER_EVENTS } from "@plane/constants"; +import { AUTH_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { AuthRoot } from "@/components/account"; // constants // helpers import { EAuthModes, EPageTypes } from "@/helpers/authentication.helper"; -// hooks -import { useEventTracker } from "@/hooks/store"; // assets import { AuthenticationWrapper } from "@/lib/wrappers"; import PlaneBackgroundPatternDark from "@/public/auth/background-pattern-dark.svg"; @@ -26,8 +24,6 @@ export type AuthType = "sign-in" | "sign-up"; const SignInPage = observer(() => { // plane hooks const { t } = useTranslation(); - // store hooks - const { captureEvent } = useEventTracker(); // hooks const { resolvedTheme } = useTheme(); @@ -54,7 +50,7 @@ const SignInPage = observer(() => { {t("auth.common.already_have_an_account")} captureEvent(AUTH_TRACKER_EVENTS.navigate.sign_in, {})} + data-ph-element={AUTH_TRACKER_ELEMENTS.SIGN_IN_FROM_SIGNUP} className="font-semibold text-custom-primary-100 hover:underline" > {t("auth.common.login")} diff --git a/web/app/(home)/page.tsx b/web/app/(home)/page.tsx index 21e5c12d07c..c9f0c485011 100644 --- a/web/app/(home)/page.tsx +++ b/web/app/(home)/page.tsx @@ -6,7 +6,7 @@ import Link from "next/link"; // ui import { useTheme } from "next-themes"; // components -import { AUTH_TRACKER_EVENTS } from "@plane/constants"; +import { AUTH_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { AuthRoot } from "@/components/account"; import { PageHead } from "@/components/core"; @@ -14,7 +14,7 @@ import { PageHead } from "@/components/core"; // helpers import { EAuthModes, EPageTypes } from "@/helpers/authentication.helper"; // hooks -import { useEventTracker, useInstance } from "@/hooks/store"; +import { useInstance } from "@/hooks/store"; // layouts import DefaultLayout from "@/layouts/default-layout"; // wrappers @@ -29,8 +29,6 @@ const HomePage = observer(() => { const { resolvedTheme } = useTheme(); // plane hooks const { t } = useTranslation(); - // hooks - const { captureEvent } = useEventTracker(); // store const { config } = useInstance(); // derived values @@ -63,7 +61,7 @@ const HomePage = observer(() => { {t("auth.common.new_to_plane")} captureEvent(AUTH_TRACKER_EVENTS.navigate.sign_up, {})} + data-ph-element={AUTH_TRACKER_ELEMENTS.NAVIGATE_TO_SIGN_UP} className="font-semibold text-custom-primary-100 hover:underline" > {t("auth.common.create_account")} diff --git a/web/ce/components/issues/header.tsx b/web/ce/components/issues/header.tsx index fac54955bfa..7460967a58f 100644 --- a/web/ce/components/issues/header.tsx +++ b/web/ce/components/issues/header.tsx @@ -10,6 +10,7 @@ import { EUserPermissionsLevel, SPACE_BASE_PATH, SPACE_BASE_URL, + WORK_ITEM_TRACKER_ELEMENTS, EProjectFeatureKey, } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; @@ -21,7 +22,7 @@ import { CountChip } from "@/components/common"; import HeaderFilters from "@/components/issues/filters"; // helpers // hooks -import { useEventTracker, useProject, useCommandPalette, useUserPermissions } from "@/hooks/store"; +import { useProject, useCommandPalette, useUserPermissions } from "@/hooks/store"; import { useIssues } from "@/hooks/store/use-issues"; import { useAppRouter } from "@/hooks/use-app-router"; import { usePlatformOS } from "@/hooks/use-platform-os"; @@ -42,7 +43,6 @@ export const IssuesHeader = observer(() => { const { currentProjectDetails, loader } = useProject(); const { toggleCreateIssueModal } = useCommandPalette(); - const { setTrackElement } = useEventTracker(); const { allowPermissions } = useUserPermissions(); const { isMobile } = usePlatformOS(); @@ -104,9 +104,9 @@ export const IssuesHeader = observer(() => { {canUserCreateIssue ? ( diff --git a/web/ce/helpers/command-palette.ts b/web/ce/helpers/command-palette.ts index 28576735f72..1cb04b623dd 100644 --- a/web/ce/helpers/command-palette.ts +++ b/web/ce/helpers/command-palette.ts @@ -1,6 +1,14 @@ // types +import { + CYCLE_TRACKER_ELEMENTS, + MODULE_TRACKER_ELEMENTS, + PROJECT_PAGE_TRACKER_ELEMENTS, + PROJECT_TRACKER_ELEMENTS, + WORK_ITEM_TRACKER_ELEMENTS, +} from "@plane/constants"; import { TCommandPaletteActionList, TCommandPaletteShortcut, TCommandPaletteShortcutList } from "@plane/types"; // store +import { captureClick } from "@/helpers/event-tracker.helper"; import { store } from "@/lib/store-context"; export const getGlobalShortcutsList: () => TCommandPaletteActionList = () => { @@ -10,7 +18,10 @@ export const getGlobalShortcutsList: () => TCommandPaletteActionList = () => { c: { title: "Create a new work item", description: "Create a new work item in the current project", - action: () => toggleCreateIssueModal(true), + action: () => { + toggleCreateIssueModal(true); + captureClick({ elementName: WORK_ITEM_TRACKER_ELEMENTS.COMMAND_PALETTE_ADD_BUTTON }); + }, }, }; }; @@ -22,7 +33,10 @@ export const getWorkspaceShortcutsList: () => TCommandPaletteActionList = () => p: { title: "Create a new project", description: "Create a new project in the current workspace", - action: () => toggleCreateProjectModal(true), + action: () => { + toggleCreateProjectModal(true); + captureClick({ elementName: PROJECT_TRACKER_ELEMENTS.COMMAND_PALETTE_SHORTCUT_CREATE_BUTTON }); + }, }, }; }; @@ -40,17 +54,26 @@ export const getProjectShortcutsList: () => TCommandPaletteActionList = () => { d: { title: "Create a new page", description: "Create a new page in the current project", - action: () => toggleCreatePageModal({ isOpen: true }), + action: () => { + toggleCreatePageModal({ isOpen: true }); + captureClick({ elementName: PROJECT_PAGE_TRACKER_ELEMENTS.COMMAND_PALETTE_SHORTCUT_CREATE_BUTTON }); + }, }, m: { title: "Create a new module", description: "Create a new module in the current project", - action: () => toggleCreateModuleModal(true), + action: () => { + toggleCreateModuleModal(true); + captureClick({ elementName: MODULE_TRACKER_ELEMENTS.COMMAND_PALETTE_ADD_ITEM }); + }, }, q: { title: "Create a new cycle", description: "Create a new cycle in the current project", - action: () => toggleCreateCycleModal(true), + action: () => { + toggleCreateCycleModal(true); + captureClick({ elementName: CYCLE_TRACKER_ELEMENTS.COMMAND_PALETTE_ADD_ITEM }); + }, }, v: { title: "Create a new view", diff --git a/web/ce/store/event-tracker.store.ts b/web/ce/store/event-tracker.store.ts deleted file mode 100644 index 4f5074dd94a..00000000000 --- a/web/ce/store/event-tracker.store.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { RootStore } from "@/plane-web/store/root.store"; -import { CoreEventTrackerStore, ICoreEventTrackerStore } from "@/store/event-tracker.store"; - -// eslint-disable-next-line @typescript-eslint/no-empty-object-type -export interface IEventTrackerStore extends ICoreEventTrackerStore {} - -export class EventTrackerStore extends CoreEventTrackerStore implements IEventTrackerStore { - constructor(_rootStore: RootStore) { - super(_rootStore); - } -} diff --git a/web/core/components/account/auth-forms/password.tsx b/web/core/components/account/auth-forms/password.tsx index 3c2927418dd..6e05d0c22b4 100644 --- a/web/core/components/account/auth-forms/password.tsx +++ b/web/core/components/account/auth-forms/password.tsx @@ -6,7 +6,7 @@ import Link from "next/link"; // icons import { Eye, EyeOff, Info, X, XCircle } from "lucide-react"; // plane imports -import { API_BASE_URL, E_PASSWORD_STRENGTH, AUTH_TRACKER_EVENTS } from "@plane/constants"; +import { API_BASE_URL, E_PASSWORD_STRENGTH, AUTH_TRACKER_EVENTS, AUTH_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { Button, Input, Spinner } from "@plane/ui"; import { getPasswordStrength } from "@plane/utils"; @@ -16,7 +16,7 @@ import { ForgotPasswordPopover, PasswordStrengthMeter } from "@/components/accou // helpers import { EAuthModes, EAuthSteps } from "@/helpers/authentication.helper"; // hooks -import { useEventTracker } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; // services import { AuthService } from "@/services/auth.service"; @@ -46,8 +46,6 @@ export const AuthPasswordForm: React.FC = observer((props: Props) => { const { email, isSMTPConfigured, handleAuthStep, handleEmailClear, mode, nextPath } = props; // plane imports const { t } = useTranslation(); - // hooks - const { captureEvent } = useEventTracker(); // ref const formRef = useRef(null); // states @@ -77,7 +75,6 @@ export const AuthPasswordForm: React.FC = observer((props: Props) => { const redirectToUniqueCodeSignIn = async () => { handleAuthStep(EAuthSteps.UNIQUE_CODE); - captureEvent(AUTH_TRACKER_EVENTS.sign_in_with_code); }; const passwordSupport = @@ -85,7 +82,7 @@ export const AuthPasswordForm: React.FC = observer((props: Props) => {
{isSMTPConfigured ? ( captureEvent(AUTH_TRACKER_EVENTS.forgot_password)} + data-ph-element={AUTH_TRACKER_ELEMENTS.FORGOT_PASSWORD_FROM_SIGNIN} href={`/accounts/forgot-password?email=${encodeURIComponent(email)}`} className="text-xs font-medium text-custom-primary-100" > @@ -154,17 +151,32 @@ export const AuthPasswordForm: React.FC = observer((props: Props) => { : true; if (isPasswordValid) { setIsSubmitting(true); - captureEvent( - mode === EAuthModes.SIGN_IN - ? AUTH_TRACKER_EVENTS.sign_in_with_password - : AUTH_TRACKER_EVENTS.sign_up_with_password - ); + captureSuccess({ + eventName: + mode === EAuthModes.SIGN_IN + ? AUTH_TRACKER_EVENTS.sign_in_with_password + : AUTH_TRACKER_EVENTS.sign_up_with_password, + payload: { + email: passwordFormData.email, + }, + }); if (formRef.current) formRef.current.submit(); // Manually submit the form if the condition is met } else { setBannerMessage(true); } }} - onError={() => setIsSubmitting(false)} + onError={() => { + setIsSubmitting(false); + captureError({ + eventName: + mode === EAuthModes.SIGN_IN + ? AUTH_TRACKER_EVENTS.sign_in_with_password + : AUTH_TRACKER_EVENTS.sign_up_with_password, + payload: { + email: passwordFormData.email, + }, + }); + }} > @@ -292,6 +304,7 @@ export const AuthPasswordForm: React.FC = observer((props: Props) => { {isSMTPConfigured && (
-
)} - + {MENU_ITEMS.map((item) => { if (item.shouldRender === false) return null; @@ -176,6 +198,9 @@ export const ModuleQuickActions: React.FC = observer((props) => { onClick={(e) => { e.preventDefault(); e.stopPropagation(); + captureClick({ + elementName: MODULE_TRACKER_ELEMENTS.QUICK_ACTIONS, + }); item.action(); }} className={cn( diff --git a/web/core/components/onboarding/create-workspace.tsx b/web/core/components/onboarding/create-workspace.tsx index 157beec74a9..e37e3c311d9 100644 --- a/web/core/components/onboarding/create-workspace.tsx +++ b/web/core/components/onboarding/create-workspace.tsx @@ -5,10 +5,10 @@ import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; // constants import { - ONBOARDING_TRACKER_EVENTS, ORGANIZATION_SIZE, RESTRICTED_URLS, WORKSPACE_TRACKER_EVENTS, + WORKSPACE_TRACKER_ELEMENTS, } from "@plane/constants"; // types import { useTranslation } from "@plane/i18n"; @@ -16,7 +16,8 @@ import { IUser, IWorkspace, TOnboardingSteps } from "@plane/types"; // ui import { Button, CustomSelect, Input, Spinner, TOAST_TYPE, setToast } from "@plane/ui"; // hooks -import { useEventTracker, useUserProfile, useUserSettings, useWorkspace } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; +import { useUserProfile, useUserSettings, useWorkspace } from "@/hooks/store"; // services import { WorkspaceService } from "@/plane-web/services"; @@ -41,7 +42,6 @@ export const CreateWorkspace: React.FC = observer((props) => { const { updateUserProfile } = useUserProfile(); const { fetchCurrentUserSettings } = useUserSettings(); const { createWorkspace, fetchWorkspaces } = useWorkspace(); - const { captureWorkspaceEvent } = useEventTracker(); // form info const { handleSubmit, @@ -73,26 +73,18 @@ export const CreateWorkspace: React.FC = observer((props) => { title: t("workspace_creation.toast.success.title"), message: t("workspace_creation.toast.success.message"), }); - captureWorkspaceEvent({ + captureSuccess({ eventName: WORKSPACE_TRACKER_EVENTS.create, - payload: { - ...workspaceResponse, - state: "SUCCESS", - first_time: true, - element: ONBOARDING_TRACKER_EVENTS.root, - }, + payload: { slug: formData.slug }, }); await fetchWorkspaces(); await completeStep(workspaceResponse.id); }) .catch(() => { - captureWorkspaceEvent({ + captureError({ eventName: WORKSPACE_TRACKER_EVENTS.create, - payload: { - state: "FAILED", - first_time: true, - element: ONBOARDING_TRACKER_EVENTS.root, - }, + payload: { slug: formData.slug }, + error: new Error("Error creating workspace"), }); setToast({ type: TOAST_TYPE.ERROR, @@ -290,7 +282,14 @@ export const CreateWorkspace: React.FC = observer((props) => { )} - diff --git a/web/core/components/onboarding/invitations.tsx b/web/core/components/onboarding/invitations.tsx index 349b9143101..3d16af81b0e 100644 --- a/web/core/components/onboarding/invitations.tsx +++ b/web/core/components/onboarding/invitations.tsx @@ -2,17 +2,18 @@ import React, { useState } from "react"; // plane imports -import { ROLE, MEMBER_TRACKER_EVENTS } from "@plane/constants"; +import { ROLE, MEMBER_TRACKER_EVENTS, MEMBER_TRACKER_ELEMENTS } from "@plane/constants"; // types import { IWorkspaceMemberInvitation } from "@plane/types"; // ui import { Button, Checkbox, Spinner } from "@plane/ui"; -import { truncateText, getUserRole } from "@plane/utils"; +import { truncateText } from "@plane/utils"; // constants // helpers import { WorkspaceLogo } from "@/components/workspace/logo"; // hooks -import { useEventTracker, useUserSettings, useWorkspace } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; +import { useUserSettings, useWorkspace } from "@/hooks/store"; // services import { WorkspaceService } from "@/plane-web/services"; @@ -29,7 +30,6 @@ export const Invitations: React.FC = (props) => { const [isJoiningWorkspaces, setIsJoiningWorkspaces] = useState(false); const [invitationsRespond, setInvitationsRespond] = useState([]); // store hooks - const { captureEvent } = useEventTracker(); const { fetchWorkspaces } = useWorkspace(); const { fetchCurrentUserSettings } = useUserSettings(); @@ -50,26 +50,23 @@ export const Invitations: React.FC = (props) => { try { await workspaceService.joinWorkspaces({ invitations: invitationsRespond }); - captureEvent(MEMBER_TRACKER_EVENTS.accept, { - member_id: invitation?.id, - role: getUserRole(invitation?.role as any), - project_id: undefined, - accepted_from: "App", - state: "SUCCESS", - element: "Workspace invitations page", + captureSuccess({ + eventName: MEMBER_TRACKER_EVENTS.accept, + payload: { + member_id: invitation?.id, + }, }); await fetchWorkspaces(); await fetchCurrentUserSettings(); await handleNextStep(); - } catch (error) { + } catch (error: any) { console.error(error); - captureEvent(MEMBER_TRACKER_EVENTS.accept, { - member_id: invitation?.id, - role: getUserRole(invitation?.role as any), - project_id: undefined, - accepted_from: "App", - state: "FAILED", - element: "Workspace invitations page", + captureError({ + eventName: MEMBER_TRACKER_EVENTS.accept, + payload: { + member_id: invitation?.id, + }, + error: error, }); setIsJoiningWorkspaces(false); } @@ -117,6 +114,7 @@ export const Invitations: React.FC = (props) => { className="w-full" onClick={submitInvitations} disabled={isJoiningWorkspaces || !invitationsRespond.length} + data-ph-element={MEMBER_TRACKER_ELEMENTS.ONBOARDING_JOIN_WORKSPACE} > {isJoiningWorkspaces ? : "Continue to workspace"} diff --git a/web/core/components/onboarding/invite-members.tsx b/web/core/components/onboarding/invite-members.tsx index 6865b78565b..bb7b24f7a7b 100644 --- a/web/core/components/onboarding/invite-members.tsx +++ b/web/core/components/onboarding/invite-members.tsx @@ -20,7 +20,7 @@ import { usePopper } from "react-popper"; import { Check, ChevronDown, Plus, XCircle } from "lucide-react"; import { Listbox } from "@headlessui/react"; // plane imports -import { ROLE, ROLE_DETAILS, EUserPermissions, MEMBER_TRACKER_EVENTS } from "@plane/constants"; +import { ROLE, ROLE_DETAILS, EUserPermissions, MEMBER_TRACKER_EVENTS, MEMBER_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; // types import { IUser, IWorkspace } from "@plane/types"; @@ -28,9 +28,8 @@ import { IUser, IWorkspace } from "@plane/types"; import { Button, Input, Spinner, TOAST_TYPE, setToast } from "@plane/ui"; // constants // helpers -import { getUserRole } from "@plane/utils"; // hooks -import { useEventTracker } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; // services import { WorkspaceService } from "@/plane-web/services"; // assets @@ -276,8 +275,6 @@ export const InviteMembers: React.FC = (props) => { const [isInvitationDisabled, setIsInvitationDisabled] = useState(true); const { resolvedTheme } = useTheme(); - // store hooks - const { captureEvent } = useEventTracker(); const { control, @@ -311,16 +308,11 @@ export const InviteMembers: React.FC = (props) => { })), }) .then(async () => { - captureEvent(MEMBER_TRACKER_EVENTS.invite, { - emails: [ - ...payload.emails.map((email) => ({ - email: email.email, - role: getUserRole(email.role), - })), - ], - project_id: undefined, - state: "SUCCESS", - element: "Onboarding", + captureSuccess({ + eventName: MEMBER_TRACKER_EVENTS.invite, + payload: { + workspace: workspace.slug, + }, }); setToast({ type: TOAST_TYPE.SUCCESS, @@ -331,10 +323,12 @@ export const InviteMembers: React.FC = (props) => { await nextStep(); }) .catch((err) => { - captureEvent(MEMBER_TRACKER_EVENTS.invite, { - project_id: undefined, - state: "FAILED", - element: "Onboarding", + captureError({ + eventName: MEMBER_TRACKER_EVENTS.invite, + payload: { + workspace: workspace.slug, + }, + error: err, }); setToast({ type: TOAST_TYPE.ERROR, @@ -426,6 +420,7 @@ export const InviteMembers: React.FC = (props) => { size="lg" className="w-full" disabled={isInvitationDisabled || !isValid || isSubmitting} + data-ph-element={MEMBER_TRACKER_ELEMENTS.ONBOARDING_INVITE_MEMBER} > {isSubmitting ? : "Continue"} diff --git a/web/core/components/onboarding/profile-setup.tsx b/web/core/components/onboarding/profile-setup.tsx index 68c4d7c05a0..8fbafd6af8e 100644 --- a/web/core/components/onboarding/profile-setup.tsx +++ b/web/core/components/onboarding/profile-setup.tsx @@ -6,7 +6,7 @@ import Image from "next/image"; import { useTheme } from "next-themes"; import { Controller, useForm } from "react-hook-form"; import { Eye, EyeOff } from "lucide-react"; -import { E_PASSWORD_STRENGTH, ONBOARDING_TRACKER_EVENTS, USER_TRACKER_EVENTS } from "@plane/constants"; +import { E_PASSWORD_STRENGTH, ONBOARDING_TRACKER_ELEMENTS, USER_TRACKER_EVENTS } from "@plane/constants"; // types import { useTranslation } from "@plane/i18n"; import { IUser, TUserProfile, TOnboardingSteps } from "@plane/types"; @@ -20,7 +20,8 @@ import { OnboardingHeader, SwitchAccountDropdown } from "@/components/onboarding // constants // helpers // hooks -import { useEventTracker, useUser, useUserProfile } from "@/hooks/store"; +import { captureError, captureSuccess, captureView } from "@/helpers/event-tracker.helper"; +import { useUser, useUserProfile } from "@/hooks/store"; // assets import ProfileSetupDark from "@/public/onboarding/profile-setup-dark.webp"; import ProfileSetupLight from "@/public/onboarding/profile-setup-light.webp"; @@ -98,7 +99,6 @@ export const ProfileSetup: React.FC = observer((props) => { // store hooks const { updateCurrentUser } = useUser(); const { updateUserProfile } = useUserProfile(); - const { captureEvent } = useEventTracker(); // form info const { getValues, @@ -143,11 +143,12 @@ export const ProfileSetup: React.FC = observer((props) => { updateUserProfile(profileUpdatePayload), totalSteps > 2 && stepChange({ profile_complete: true }), ]); - captureEvent(USER_TRACKER_EVENTS.add_details, { - use_case: formData.use_case, - role: formData.role, - state: "SUCCESS", - element: ONBOARDING_TRACKER_EVENTS.step_1, + captureSuccess({ + eventName: USER_TRACKER_EVENTS.add_details, + payload: { + use_case: formData.use_case, + role: formData.role, + }, }); setToast({ type: TOAST_TYPE.SUCCESS, @@ -159,9 +160,8 @@ export const ProfileSetup: React.FC = observer((props) => { finishOnboarding(); } } catch { - captureEvent(USER_TRACKER_EVENTS.add_details, { - state: "FAILED", - element: ONBOARDING_TRACKER_EVENTS.step_1, + captureError({ + eventName: USER_TRACKER_EVENTS.add_details, }); setToast({ type: TOAST_TYPE.ERROR, @@ -183,9 +183,8 @@ export const ProfileSetup: React.FC = observer((props) => { formData.password && handleSetPassword(formData.password), ]).then(() => setProfileSetupStep(EProfileSetupSteps.USER_PERSONALIZATION)); } catch { - captureEvent(USER_TRACKER_EVENTS.add_details, { - state: "FAILED", - element: ONBOARDING_TRACKER_EVENTS.step_1, + captureError({ + eventName: USER_TRACKER_EVENTS.add_details, }); setToast({ type: TOAST_TYPE.ERROR, @@ -205,11 +204,12 @@ export const ProfileSetup: React.FC = observer((props) => { updateUserProfile(profileUpdatePayload), totalSteps > 2 && stepChange({ profile_complete: true }), ]); - captureEvent(USER_TRACKER_EVENTS.add_details, { - use_case: formData.use_case, - role: formData.role, - state: "SUCCESS", - element: ONBOARDING_TRACKER_EVENTS.step_2, + captureSuccess({ + eventName: USER_TRACKER_EVENTS.add_details, + payload: { + use_case: formData.use_case, + role: formData.role, + }, }); setToast({ type: TOAST_TYPE.SUCCESS, @@ -221,9 +221,8 @@ export const ProfileSetup: React.FC = observer((props) => { finishOnboarding(); } } catch { - captureEvent(USER_TRACKER_EVENTS.add_details, { - state: "FAILED", - element: ONBOARDING_TRACKER_EVENTS.step_2, + captureError({ + eventName: USER_TRACKER_EVENTS.add_details, }); setToast({ type: TOAST_TYPE.ERROR, @@ -235,6 +234,9 @@ export const ProfileSetup: React.FC = observer((props) => { const onSubmit = async (formData: TProfileSetupFormValues) => { if (!user) return; + captureView({ + elementName: ONBOARDING_TRACKER_ELEMENTS.PROFILE_SETUP_FORM, + }); if (profileSetupStep === EProfileSetupSteps.ALL) await handleSubmitProfileSetup(formData); if (profileSetupStep === EProfileSetupSteps.USER_DETAILS) await handleSubmitUserDetail(formData); if (profileSetupStep === EProfileSetupSteps.USER_PERSONALIZATION) await handleSubmitUserPersonalization(formData); diff --git a/web/core/components/onboarding/tour/root.tsx b/web/core/components/onboarding/tour/root.tsx index 90a183e0b3f..167ee752f54 100644 --- a/web/core/components/onboarding/tour/root.tsx +++ b/web/core/components/onboarding/tour/root.tsx @@ -5,13 +5,14 @@ import { observer } from "mobx-react"; import Image, { StaticImageData } from "next/image"; import { X } from "lucide-react"; // ui -import { PRODUCT_TOUR_TRACKER_EVENTS } from "@plane/constants"; +import { PRODUCT_TOUR_TRACKER_ELEMENTS } from "@plane/constants"; import { Button } from "@plane/ui"; // components import { TourSidebar } from "@/components/onboarding"; // constants // hooks -import { useCommandPalette, useEventTracker, useUser } from "@/hooks/store"; +import { captureClick } from "@/helpers/event-tracker.helper"; +import { useCommandPalette, useUser } from "@/hooks/store"; // assets import CyclesTour from "@/public/onboarding/cycles.webp"; import IssuesTour from "@/public/onboarding/issues.webp"; @@ -85,7 +86,6 @@ export const TourRoot: React.FC = observer((props) => { const [step, setStep] = useState("welcome"); // store hooks const { toggleCreateProjectModal } = useCommandPalette(); - const { setTrackElement, captureEvent } = useEventTracker(); const { data: currentUser } = useUser(); const currentStepIndex = TOUR_STEPS.findIndex((tourStep) => tourStep.key === step); @@ -112,7 +112,9 @@ export const TourRoot: React.FC = observer((props) => { diff --git a/web/core/components/project/card-list.tsx b/web/core/components/project/card-list.tsx index 606f533f195..d2c1f7dad89 100644 --- a/web/core/components/project/card-list.tsx +++ b/web/core/components/project/card-list.tsx @@ -1,15 +1,16 @@ import { observer } from "mobx-react"; import Image from "next/image"; // plane imports -import { EUserPermissionsLevel, EUserPermissions } from "@plane/constants"; +import { EUserPermissionsLevel, EUserPermissions, PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { ContentWrapper } from "@plane/ui"; // components import { ComicBoxButton, DetailedEmptyState } from "@/components/empty-state"; import { ProjectCard } from "@/components/project"; import { ProjectsLoader } from "@/components/ui"; +import { captureClick } from "@/helpers/event-tracker.helper"; // hooks -import { useCommandPalette, useEventTracker, useProject, useProjectFilter, useUserPermissions } from "@/hooks/store"; +import { useCommandPalette, useProject, useProjectFilter, useUserPermissions } from "@/hooks/store"; import { useResolvedAssetPath } from "@/hooks/use-resolved-asset-path"; // assets import AllFiltersImage from "@/public/empty-state/project/all-filters.svg"; @@ -26,7 +27,6 @@ export const ProjectCardList = observer((props: TProjectCardListProps) => { const { t } = useTranslation(); // store hooks const { toggleCreateProjectModal } = useCommandPalette(); - const { setTrackElement } = useEventTracker(); const { loader, fetchStatus, @@ -65,8 +65,8 @@ export const ProjectCardList = observer((props: TProjectCardListProps) => { title={t("workspace_projects.empty_state.general.primary_button.comic.title")} description={t("workspace_projects.empty_state.general.primary_button.comic.description")} onClick={() => { - setTrackElement("Project empty state"); toggleCreateProjectModal(true); + captureClick({ elementName: PROJECT_TRACKER_ELEMENTS.EMPTY_STATE_CREATE_PROJECT_BUTTON }); }} disabled={!canPerformEmptyStateActions} /> diff --git a/web/core/components/project/delete-project-modal.tsx b/web/core/components/project/delete-project-modal.tsx index d5888161e82..7c48fb30ad1 100644 --- a/web/core/components/project/delete-project-modal.tsx +++ b/web/core/components/project/delete-project-modal.tsx @@ -12,7 +12,8 @@ import type { IProject } from "@plane/types"; import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; // constants // hooks -import { useEventTracker, useProject } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; +import { useProject } from "@/hooks/store"; import { useAppRouter } from "@/hooks/use-app-router"; type DeleteProjectModal = { @@ -29,7 +30,6 @@ const defaultValues = { export const DeleteProjectModal: React.FC = (props) => { const { isOpen, project, onClose } = props; // store hooks - const { captureProjectEvent } = useEventTracker(); const { deleteProject } = useProject(); // router const router = useAppRouter(); @@ -62,9 +62,11 @@ export const DeleteProjectModal: React.FC = (props) => { if (projectId && projectId.toString() === project.id) router.push(`/${workspaceSlug}/projects`); handleClose(); - captureProjectEvent({ + captureSuccess({ eventName: PROJECT_TRACKER_EVENTS.delete, - payload: { ...project, state: "SUCCESS", element: "Project general settings" }, + payload: { + id: project.id, + }, }); setToast({ type: TOAST_TYPE.SUCCESS, @@ -73,9 +75,11 @@ export const DeleteProjectModal: React.FC = (props) => { }); }) .catch(() => { - captureProjectEvent({ + captureError({ eventName: PROJECT_TRACKER_EVENTS.delete, - payload: { ...project, state: "FAILED", element: "Project general settings" }, + payload: { + id: project.id, + }, }); setToast({ type: TOAST_TYPE.ERROR, diff --git a/web/core/components/project/form.tsx b/web/core/components/project/form.tsx index 27c8ec840f7..26c96596f27 100644 --- a/web/core/components/project/form.tsx +++ b/web/core/components/project/form.tsx @@ -3,7 +3,7 @@ import { FC, useEffect, useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { Info, Lock } from "lucide-react"; -import { NETWORK_CHOICES, PROJECT_TRACKER_EVENTS } from "@plane/constants"; +import { NETWORK_CHOICES, PROJECT_TRACKER_ELEMENTS, PROJECT_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; // plane types import { IProject, IWorkspace } from "@plane/types"; @@ -27,7 +27,8 @@ import { TimezoneSelect } from "@/components/global"; import { ProjectNetworkIcon } from "@/components/project"; // helpers // hooks -import { useEventTracker, useProject } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; +import { useProject } from "@/hooks/store"; import { usePlatformOS } from "@/hooks/use-platform-os"; // services import { ProjectService } from "@/services/project"; @@ -46,7 +47,6 @@ export const ProjectDetailsForm: FC = (props) => { const [isOpen, setIsOpen] = useState(false); const [isLoading, setIsLoading] = useState(false); // store hooks - const { captureProjectEvent } = useEventTracker(); const { updateProject } = useProject(); const { isMobile } = usePlatformOS(); @@ -58,7 +58,7 @@ export const ProjectDetailsForm: FC = (props) => { setValue, setError, reset, - formState: { errors, dirtyFields }, + formState: { errors }, getValues, } = useForm({ defaultValues: { @@ -92,15 +92,10 @@ export const ProjectDetailsForm: FC = (props) => { if (!workspaceSlug || !project) return; return updateProject(workspaceSlug.toString(), project.id, payload) .then((res) => { - const changed_properties = Object.keys(dirtyFields); - - captureProjectEvent({ + captureSuccess({ eventName: PROJECT_TRACKER_EVENTS.update, payload: { - ...res, - changed_properties: changed_properties, - state: "SUCCESS", - element: "Project general settings", + id: projectId, }, }); setToast({ @@ -110,9 +105,11 @@ export const ProjectDetailsForm: FC = (props) => { }); }) .catch((error) => { - captureProjectEvent({ + captureError({ eventName: PROJECT_TRACKER_EVENTS.update, - payload: { ...payload, state: "FAILED", element: "Project general settings" }, + payload: { + id: projectId, + }, }); setToast({ type: TOAST_TYPE.ERROR, @@ -397,7 +394,13 @@ export const ProjectDetailsForm: FC = (props) => {
<> - diff --git a/web/core/components/project/header.tsx b/web/core/components/project/header.tsx index e40280373c3..1abd5a91dbf 100644 --- a/web/core/components/project/header.tsx +++ b/web/core/components/project/header.tsx @@ -4,14 +4,15 @@ import { observer } from "mobx-react"; import { usePathname } from "next/navigation"; import { Briefcase } from "lucide-react"; // i18n -import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel, PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; // ui import { Breadcrumbs, Button, Header } from "@plane/ui"; // components import { BreadcrumbLink } from "@/components/common"; +import { captureClick } from "@/helpers/event-tracker.helper"; // hooks -import { useCommandPalette, useEventTracker, useUserPermissions } from "@/hooks/store"; +import { useCommandPalette, useUserPermissions } from "@/hooks/store"; // plane web constants // components import HeaderFilters from "./filters"; @@ -22,7 +23,6 @@ export const ProjectsBaseHeader = observer(() => { const { t } = useTranslation(); // store hooks const { toggleCreateProjectModal } = useCommandPalette(); - const { setTrackElement } = useEventTracker(); const { allowPermissions } = useUserPermissions(); const pathname = usePathname(); @@ -57,9 +57,9 @@ export const ProjectsBaseHeader = observer(() => { diff --git a/web/core/components/project/send-project-invitation-modal.tsx b/web/core/components/project/send-project-invitation-modal.tsx index 114ee3a4f1e..561dcd6a832 100644 --- a/web/core/components/project/send-project-invitation-modal.tsx +++ b/web/core/components/project/send-project-invitation-modal.tsx @@ -12,7 +12,8 @@ import { Avatar, Button, CustomSelect, CustomSearchSelect, TOAST_TYPE, setToast // helpers import { getFileURL } from "@plane/utils"; // hooks -import { useEventTracker, useMember, useUserPermissions } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; +import { useMember, useUserPermissions } from "@/hooks/store"; type Props = { isOpen: boolean; @@ -45,7 +46,6 @@ export const SendProjectInvitationModal: React.FC = observer((props) => { // plane hooks const { t } = useTranslation(); // store hooks - const { captureEvent } = useEventTracker(); const { getProjectRoleByWorkspaceSlugAndProjectId } = useUserPermissions(); const { project: { getProjectMemberDetails, bulkAddMembersToProject }, @@ -86,22 +86,22 @@ export const SendProjectInvitationModal: React.FC = observer((props) => { type: TOAST_TYPE.SUCCESS, message: "Members added successfully.", }); - captureEvent(MEMBER_TRACKER_EVENTS.project.add, { - members: [ - ...payload.members.map((member) => ({ - member_id: member.member_id, - role: ROLE[member.role], - })), - ], - state: "SUCCESS", - element: "Project settings members page", + + captureSuccess({ + eventName: MEMBER_TRACKER_EVENTS.project.add, + payload: { + members: [...payload.members.map((member) => member.member_id)], + }, }); }) .catch((error) => { console.error(error); - captureEvent(MEMBER_TRACKER_EVENTS.project.add, { - state: "FAILED", - element: "Project settings members page", + captureError({ + eventName: MEMBER_TRACKER_EVENTS.project.add, + payload: { + members: [...payload.members.map((member) => member.member_id)], + }, + error: error, }); }) .finally(() => { diff --git a/web/core/components/project/settings/delete-project-section.tsx b/web/core/components/project/settings/delete-project-section.tsx index d425af53e42..540a77f0965 100644 --- a/web/core/components/project/settings/delete-project-section.tsx +++ b/web/core/components/project/settings/delete-project-section.tsx @@ -4,6 +4,7 @@ import React from "react"; import { ChevronRight, ChevronUp } from "lucide-react"; import { Disclosure, Transition } from "@headlessui/react"; // types +import { PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; import { IProject } from "@plane/types"; // ui import { Button, Loader } from "@plane/ui"; @@ -43,7 +44,11 @@ export const DeleteProjectSection: React.FC = (props) =>
{projectDetails ? (
-
diff --git a/web/core/components/project/settings/features-list.tsx b/web/core/components/project/settings/features-list.tsx index faa41a0e1d7..b2b8c2c0bd5 100644 --- a/web/core/components/project/settings/features-list.tsx +++ b/web/core/components/project/settings/features-list.tsx @@ -2,12 +2,13 @@ import { FC } from "react"; import { observer } from "mobx-react"; +import { PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IProject } from "@plane/types"; import { ToggleSwitch, Tooltip, setPromiseToast } from "@plane/ui"; // hooks import { SettingsHeading } from "@/components/settings"; -import { useEventTracker, useProject, useUser } from "@/hooks/store"; +import { useProject, useUser } from "@/hooks/store"; // plane web components import { UpgradeBadge } from "@/plane-web/components/workspace"; // plane web constants @@ -23,7 +24,6 @@ export const ProjectFeaturesList: FC = observer((props) => { const { workspaceSlug, projectId, isAdmin } = props; // store hooks const { t } = useTranslation(); - const { captureEvent } = useEventTracker(); const { data: currentUser } = useUser(); const { getProjectById, updateProject } = useProject(); // derived values @@ -32,12 +32,6 @@ export const ProjectFeaturesList: FC = observer((props) => { const handleSubmit = async (featureKey: string, featureProperty: string) => { if (!workspaceSlug || !projectId || !currentProjectDetails) return; - // capturing event - captureEvent(`Toggle ${featureKey}`, { - enabled: !currentProjectDetails?.[featureProperty as keyof IProject], - element: "Project settings feature page", - }); - // making the request to update the project feature const settingsPayload = { [featureProperty]: !currentProjectDetails?.[featureProperty as keyof IProject], @@ -92,6 +86,7 @@ export const ProjectFeaturesList: FC = observer((props) => { onChange={() => handleSubmit(featureItemKey, featureItem.property)} disabled={!featureItem.isEnabled || !isAdmin} size="sm" + data-ph-element={PROJECT_TRACKER_ELEMENTS.TOGGLE_FEATURE} />
diff --git a/web/core/components/project/settings/member-columns.tsx b/web/core/components/project/settings/member-columns.tsx index ee0f7c61f79..74315bbd5f4 100644 --- a/web/core/components/project/settings/member-columns.tsx +++ b/web/core/components/project/settings/member-columns.tsx @@ -4,7 +4,7 @@ import { Controller, useForm } from "react-hook-form"; import { CircleMinus } from "lucide-react"; import { Disclosure } from "@headlessui/react"; // plane imports -import { ROLE, EUserPermissions } from "@plane/constants"; +import { ROLE, EUserPermissions, MEMBER_TRACKER_ELEMENTS } from "@plane/constants"; import { EUserProjectRoles, IUser, IWorkspaceMember, TProjectMembership } from "@plane/types"; import { CustomMenu, CustomSelect, TOAST_TYPE, setToast } from "@plane/ui"; import { getFileURL } from "@plane/utils"; @@ -70,6 +70,7 @@ export const NameColumn: React.FC = (props) => {
setRemoveMemberModal(rowData)} > diff --git a/web/core/components/views/update-view-component.tsx b/web/core/components/views/update-view-component.tsx index 5b3f8c79bbf..0e7990b50e0 100644 --- a/web/core/components/views/update-view-component.tsx +++ b/web/core/components/views/update-view-component.tsx @@ -1,4 +1,5 @@ import { SetStateAction, useEffect, useState } from "react"; +import { GLOBAL_VIEW_TRACKER_ELEMENTS } from "@plane/constants"; import { Button } from "@plane/ui"; import { LockedComponent } from "../icons/locked-component"; @@ -58,7 +59,13 @@ export const UpdateViewComponent = (props: Props) => { !areFiltersEqual && isAuthorizedUser && ( <> - {isOwner && <>{updateButton}} diff --git a/web/core/components/workspace-notifications/sidebar/header/options/root.tsx b/web/core/components/workspace-notifications/sidebar/header/options/root.tsx index 4de95375929..f15520ec326 100644 --- a/web/core/components/workspace-notifications/sidebar/header/options/root.tsx +++ b/web/core/components/workspace-notifications/sidebar/header/options/root.tsx @@ -2,14 +2,20 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { CheckCheck, RefreshCw } from "lucide-react"; // plane imports -import { ENotificationLoader, ENotificationQueryParamType, NOTIFICATION_TRACKER_EVENTS } from "@plane/constants"; +import { + ENotificationLoader, + ENotificationQueryParamType, + NOTIFICATION_TRACKER_ELEMENTS, + NOTIFICATION_TRACKER_EVENTS, +} from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { Spinner, Tooltip } from "@plane/ui"; // components import { NotificationFilter, NotificationHeaderMenuOption } from "@/components/workspace-notifications"; // constants // hooks -import { useEventTracker, useWorkspaceNotifications } from "@/hooks/store"; +import { captureSuccess } from "@/helpers/event-tracker.helper"; +import { useWorkspaceNotifications } from "@/hooks/store"; import { usePlatformOS } from "@/hooks/use-platform-os"; type TNotificationSidebarHeaderOptions = { @@ -21,7 +27,6 @@ export const NotificationSidebarHeaderOptions: FC { @@ -49,8 +54,11 @@ export const NotificationSidebarHeaderOptions: FC
{ - captureEvent(NOTIFICATION_TRACKER_EVENTS.all_marked_read); + captureSuccess({ + eventName: NOTIFICATION_TRACKER_EVENTS.all_marked_read, + }); handleMarkAllNotificationsAsRead(); }} > diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx b/web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx index 0c7c87411fc..9a03bd71143 100644 --- a/web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx +++ b/web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx @@ -3,14 +3,15 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { ArchiveRestore } from "lucide-react"; -import { NOTIFICATION_TRACKER_EVENTS } from "@plane/constants"; +import { NOTIFICATION_TRACKER_ELEMENTS, NOTIFICATION_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { ArchiveIcon, TOAST_TYPE, setToast } from "@plane/ui"; // components import { NotificationItemOptionButton } from "@/components/workspace-notifications"; // constants // hooks -import { useEventTracker, useWorkspaceNotifications } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; +import { useWorkspaceNotifications } from "@/hooks/store"; // store import { INotification } from "@/store/notifications/notification"; @@ -22,7 +23,6 @@ type TNotificationItemArchiveOption = { export const NotificationItemArchiveOption: FC = observer((props) => { const { workspaceSlug, notification } = props; // hooks - const { captureEvent } = useEventTracker(); const { currentNotificationTab } = useWorkspaceNotifications(); const { asJson: data, archiveNotification, unArchiveNotification } = notification; const { t } = useTranslation(); @@ -31,10 +31,12 @@ export const NotificationItemArchiveOption: FC = try { const request = data.archived_at ? unArchiveNotification : archiveNotification; await request(workspaceSlug); - captureEvent(NOTIFICATION_TRACKER_EVENTS.archive, { - issue_id: data?.data?.issue?.id, - tab: currentNotificationTab, - state: "SUCCESS", + captureSuccess({ + eventName: data.archived_at ? NOTIFICATION_TRACKER_EVENTS.unarchive : NOTIFICATION_TRACKER_EVENTS.archive, + payload: { + id: data?.data?.issue?.id, + tab: currentNotificationTab, + }, }); setToast({ title: data.archived_at ? t("notification.toasts.unarchived") : t("notification.toasts.archived"), @@ -42,11 +44,19 @@ export const NotificationItemArchiveOption: FC = }); } catch (e) { console.error(e); + captureError({ + eventName: data.archived_at ? NOTIFICATION_TRACKER_EVENTS.unarchive : NOTIFICATION_TRACKER_EVENTS.archive, + payload: { + id: data?.data?.issue?.id, + tab: currentNotificationTab, + }, + }); } }; return ( = observer((props) => { const { workspaceSlug, notification } = props; // hooks - const { captureEvent } = useEventTracker(); const { currentNotificationTab } = useWorkspaceNotifications(); const { asJson: data, markNotificationAsRead, markNotificationAsUnRead } = notification; const { t } = useTranslation(); @@ -31,10 +31,12 @@ export const NotificationItemReadOption: FC = obser try { const request = data.read_at ? markNotificationAsUnRead : markNotificationAsRead; await request(workspaceSlug); - captureEvent(NOTIFICATION_TRACKER_EVENTS.all_marked_read, { - issue_id: data?.data?.issue?.id, - tab: currentNotificationTab, - state: "SUCCESS", + captureSuccess({ + eventName: data.read_at ? NOTIFICATION_TRACKER_EVENTS.mark_unread : NOTIFICATION_TRACKER_EVENTS.mark_read, + payload: { + id: data?.data?.issue?.id, + tab: currentNotificationTab, + }, }); setToast({ title: data.read_at ? t("notification.toasts.unread") : t("notification.toasts.read"), @@ -42,11 +44,19 @@ export const NotificationItemReadOption: FC = obser }); } catch (e) { console.error(e); + captureError({ + eventName: data.read_at ? NOTIFICATION_TRACKER_EVENTS.mark_unread : NOTIFICATION_TRACKER_EVENTS.mark_read, + payload: { + id: data?.data?.issue?.id, + tab: currentNotificationTab, + }, + }); } }; return ( diff --git a/web/core/components/workspace/create-workspace-form.tsx b/web/core/components/workspace/create-workspace-form.tsx index 0f51e74b26f..d7d54c66148 100644 --- a/web/core/components/workspace/create-workspace-form.tsx +++ b/web/core/components/workspace/create-workspace-form.tsx @@ -3,7 +3,12 @@ import { Dispatch, SetStateAction, useEffect, useState, FC } from "react"; import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; -import { ORGANIZATION_SIZE, RESTRICTED_URLS, WORKSPACE_TRACKER_EVENTS } from "@plane/constants"; +import { + ORGANIZATION_SIZE, + RESTRICTED_URLS, + WORKSPACE_TRACKER_ELEMENTS, + WORKSPACE_TRACKER_EVENTS, +} from "@plane/constants"; import { useTranslation } from "@plane/i18n"; // constants // types @@ -11,7 +16,8 @@ import { IWorkspace } from "@plane/types"; // ui import { Button, CustomSelect, Input, TOAST_TYPE, setToast } from "@plane/ui"; // hooks -import { useEventTracker, useWorkspace } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; +import { useWorkspace } from "@/hooks/store"; import { useAppRouter } from "@/hooks/use-app-router"; // services import { WorkspaceService } from "@/plane-web/services"; @@ -51,7 +57,6 @@ export const CreateWorkspaceForm: FC = observer((props) => { // router const router = useAppRouter(); // store hooks - const { captureWorkspaceEvent } = useEventTracker(); const { createWorkspace } = useWorkspace(); // form info const { @@ -71,13 +76,9 @@ export const CreateWorkspaceForm: FC = observer((props) => { await createWorkspace(formData) .then(async (res) => { - captureWorkspaceEvent({ + captureSuccess({ eventName: WORKSPACE_TRACKER_EVENTS.create, - payload: { - ...res, - state: "SUCCESS", - element: "Create workspace page", - }, + payload: { slug: formData.slug }, }); setToast({ type: TOAST_TYPE.SUCCESS, @@ -88,12 +89,10 @@ export const CreateWorkspaceForm: FC = observer((props) => { if (onSubmit) await onSubmit(res); }) .catch(() => { - captureWorkspaceEvent({ + captureError({ eventName: WORKSPACE_TRACKER_EVENTS.create, - payload: { - state: "FAILED", - element: "Create workspace page", - }, + payload: { slug: formData.slug }, + error: new Error("Error creating workspace"), }); setToast({ type: TOAST_TYPE.ERROR, @@ -248,7 +247,14 @@ export const CreateWorkspaceForm: FC = observer((props) => {
{secondaryButton} - {!secondaryButton && ( diff --git a/web/core/components/workspace/delete-workspace-form.tsx b/web/core/components/workspace/delete-workspace-form.tsx index c668ad300c6..14cffe5459d 100644 --- a/web/core/components/workspace/delete-workspace-form.tsx +++ b/web/core/components/workspace/delete-workspace-form.tsx @@ -13,7 +13,8 @@ import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; // constants // hooks import { cn } from "@plane/utils"; -import { useEventTracker, useUserSettings, useWorkspace } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; +import { useUserSettings, useWorkspace } from "@/hooks/store"; import { useAppRouter } from "@/hooks/use-app-router"; type Props = { @@ -31,7 +32,6 @@ export const DeleteWorkspaceForm: React.FC = observer((props) => { // router const router = useAppRouter(); // store hooks - const { captureWorkspaceEvent } = useEventTracker(); const { deleteWorkspace } = useWorkspace(); const { t } = useTranslation(); const { getWorkspaceRedirectionUrl } = useWorkspace(); @@ -64,13 +64,9 @@ export const DeleteWorkspaceForm: React.FC = observer((props) => { await fetchCurrentUserSettings(); handleClose(); router.push(getWorkspaceRedirectionUrl()); - captureWorkspaceEvent({ + captureSuccess({ eventName: WORKSPACE_TRACKER_EVENTS.delete, - payload: { - ...data, - state: "SUCCESS", - element: "Workspace general settings page", - }, + payload: { slug: data.slug }, }); setToast({ type: TOAST_TYPE.SUCCESS, @@ -84,13 +80,10 @@ export const DeleteWorkspaceForm: React.FC = observer((props) => { title: t("workspace_settings.settings.general.delete_modal.error_title"), message: t("workspace_settings.settings.general.delete_modal.error_message"), }); - captureWorkspaceEvent({ + captureError({ eventName: WORKSPACE_TRACKER_EVENTS.delete, - payload: { - ...data, - state: "FAILED", - element: "Workspace general settings page", - }, + payload: { slug: data.slug }, + error: new Error("Error deleting workspace"), }); }); }; diff --git a/web/core/components/workspace/settings/invitations-list-item.tsx b/web/core/components/workspace/settings/invitations-list-item.tsx index dc815b52cc3..1fa1fce2f60 100644 --- a/web/core/components/workspace/settings/invitations-list-item.tsx +++ b/web/core/components/workspace/settings/invitations-list-item.tsx @@ -5,13 +5,14 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { ChevronDown, LinkIcon, Trash2 } from "lucide-react"; // plane imports -import { ROLE, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { ROLE, EUserPermissions, EUserPermissionsLevel, MEMBER_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { CustomSelect, TOAST_TYPE, setToast, TContextMenuItem, CustomMenu } from "@plane/ui"; import { cn, copyTextToClipboard } from "@plane/utils"; // components import { ConfirmWorkspaceMemberRemove } from "@/components/workspace"; // hooks +import { captureClick } from "@/helpers/event-tracker.helper"; import { useMember, useUserPermissions } from "@/hooks/store"; type Props = { @@ -93,7 +94,12 @@ export const WorkspaceInvitationsListItem: FC = observer((props) => { }, { key: "remove", - action: () => setRemoveMemberModal(true), + action: () => { + captureClick({ + elementName: MEMBER_TRACKER_ELEMENTS.WORKSPACE_INVITATIONS_LIST_CONTEXT_MENU, + }); + setRemoveMemberModal(true); + }, title: t("common.remove"), icon: Trash2, shouldRender: isAdmin, diff --git a/web/core/components/workspace/settings/member-columns.tsx b/web/core/components/workspace/settings/member-columns.tsx index 1e5036fefc2..edff3f15ad4 100644 --- a/web/core/components/workspace/settings/member-columns.tsx +++ b/web/core/components/workspace/settings/member-columns.tsx @@ -4,7 +4,7 @@ import { Controller, useForm } from "react-hook-form"; import { Trash2 } from "lucide-react"; import { Disclosure } from "@headlessui/react"; // plane imports -import { ROLE, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { ROLE, EUserPermissions, EUserPermissionsLevel, MEMBER_TRACKER_ELEMENTS } from "@plane/constants"; import { IUser, IWorkspaceMember } from "@plane/types"; // plane ui import { CustomSelect, PopoverMenu, TOAST_TYPE, setToast } from "@plane/ui"; @@ -74,6 +74,7 @@ export const NameColumn: React.FC = (props) => {
setRemoveMemberModal(rowData)} + data-ph-element={MEMBER_TRACKER_ELEMENTS.WORKSPACE_MEMBER_TABLE_CONTEXT_MENU} > {id === currentUser?.id ? "Leave " : "Remove "}
diff --git a/web/core/components/workspace/settings/members-list-item.tsx b/web/core/components/workspace/settings/members-list-item.tsx index 978b757b368..db7e7e2753e 100644 --- a/web/core/components/workspace/settings/members-list-item.tsx +++ b/web/core/components/workspace/settings/members-list-item.tsx @@ -13,7 +13,8 @@ import { MembersLayoutLoader } from "@/components/ui/loader/layouts/members-layo import { ConfirmWorkspaceMemberRemove } from "@/components/workspace"; // constants // hooks -import { useEventTracker, useMember, useUser, useUserPermissions, useUserSettings, useWorkspace } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; +import { useMember, useUser, useUserPermissions, useUserSettings, useWorkspace } from "@/hooks/store"; import { useAppRouter } from "@/hooks/use-app-router"; import { useMemberColumns } from "@/plane-web/components/workspace/settings/useMemberColumns"; @@ -32,7 +33,6 @@ export const WorkspaceMembersListItem: FC = observer((props) => { workspace: { removeMemberFromWorkspace }, } = useMember(); const { leaveWorkspace } = useUserPermissions(); - const { captureEvent } = useEventTracker(); const { getWorkspaceRedirectionUrl } = useWorkspace(); const { fetchCurrentUserSettings } = useUserSettings(); const { t } = useTranslation(); @@ -45,18 +45,27 @@ export const WorkspaceMembersListItem: FC = observer((props) => { .then(async () => { await fetchCurrentUserSettings(); router.push(getWorkspaceRedirectionUrl()); - captureEvent(MEMBER_TRACKER_EVENTS.workspace.leave, { - state: "SUCCESS", - element: "Workspace settings members page", + captureSuccess({ + eventName: MEMBER_TRACKER_EVENTS.workspace.leave, + payload: { + workspace: workspaceSlug, + }, }); }) - .catch((err: any) => + .catch((err: any) => { + captureError({ + eventName: MEMBER_TRACKER_EVENTS.workspace.leave, + payload: { + workspace: workspaceSlug, + }, + error: err, + }); setToast({ type: TOAST_TYPE.ERROR, title: "Error!", message: err?.error || t("something_went_wrong_please_try_again"), - }) - ); + }); + }); }; const handleRemoveMember = async (memberId: string) => { diff --git a/web/core/components/workspace/settings/workspace-details.tsx b/web/core/components/workspace/settings/workspace-details.tsx index e9a83784b58..577f5acd0b1 100644 --- a/web/core/components/workspace/settings/workspace-details.tsx +++ b/web/core/components/workspace/settings/workspace-details.tsx @@ -5,7 +5,13 @@ import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; import { Pencil } from "lucide-react"; // constants -import { ORGANIZATION_SIZE, EUserPermissions, EUserPermissionsLevel, WORKSPACE_TRACKER_EVENTS } from "@plane/constants"; +import { + ORGANIZATION_SIZE, + EUserPermissions, + EUserPermissionsLevel, + WORKSPACE_TRACKER_EVENTS, + WORKSPACE_TRACKER_ELEMENTS, +} from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IWorkspace } from "@plane/types"; import { Button, CustomSelect, Input, TOAST_TYPE, setToast } from "@plane/ui"; @@ -15,7 +21,8 @@ import { LogoSpinner } from "@/components/common"; import { WorkspaceImageUploadModal } from "@/components/core"; // helpers // hooks -import { useEventTracker, useUserPermissions, useWorkspace } from "@/hooks/store"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; +import { useUserPermissions, useWorkspace } from "@/hooks/store"; // plane web components import { DeleteWorkspaceSection } from "@/plane-web/components/workspace"; @@ -31,7 +38,6 @@ export const WorkspaceDetails: FC = observer(() => { const [isLoading, setIsLoading] = useState(false); const [isImageUploadModalOpen, setIsImageUploadModalOpen] = useState(false); // store hooks - const { captureWorkspaceEvent } = useEventTracker(); const { currentWorkspace, updateWorkspace } = useWorkspace(); const { allowPermissions } = useUserPermissions(); const { t } = useTranslation(); @@ -61,13 +67,9 @@ export const WorkspaceDetails: FC = observer(() => { await updateWorkspace(currentWorkspace.slug, payload) .then((res) => { - captureWorkspaceEvent({ + captureSuccess({ eventName: WORKSPACE_TRACKER_EVENTS.update, - payload: { - ...res, - state: "SUCCESS", - element: "Workspace general settings page", - }, + payload: { slug: currentWorkspace.slug }, }); setToast({ title: "Success!", @@ -76,12 +78,10 @@ export const WorkspaceDetails: FC = observer(() => { }); }) .catch((err) => { - captureWorkspaceEvent({ + captureError({ eventName: WORKSPACE_TRACKER_EVENTS.update, - payload: { - state: "FAILED", - element: "Workspace general settings page", - }, + payload: { slug: currentWorkspace.slug }, + error: err, }); console.error(err); }); @@ -282,7 +282,12 @@ export const WorkspaceDetails: FC = observer(() => { {isAdmin && (
-
diff --git a/web/core/components/workspace/sidebar/projects-list-item.tsx b/web/core/components/workspace/sidebar/projects-list-item.tsx index d6f4365793c..55278b0477b 100644 --- a/web/core/components/workspace/sidebar/projects-list-item.tsx +++ b/web/core/components/workspace/sidebar/projects-list-item.tsx @@ -12,7 +12,7 @@ import { createRoot } from "react-dom/client"; import { LinkIcon, Settings, Share2, LogOut, MoreHorizontal, ChevronRight } from "lucide-react"; import { Disclosure, Transition } from "@headlessui/react"; // plane helpers -import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel, MEMBER_TRACKER_ELEMENTS } from "@plane/constants"; import { useOutsideClickDetector } from "@plane/hooks"; import { useTranslation } from "@plane/i18n"; // ui @@ -23,7 +23,7 @@ import { Logo } from "@/components/common/logo"; import { LeaveProjectModal, PublishProjectModal } from "@/components/project"; // helpers // hooks -import { useAppTheme, useCommandPalette, useEventTracker, useProject, useUserPermissions } from "@/hooks/store"; +import { useAppTheme, useCommandPalette, useProject, useUserPermissions } from "@/hooks/store"; import { usePlatformOS } from "@/hooks/use-platform-os"; // plane-web components import { ProjectNavigationRoot } from "@/plane-web/components/sidebar"; @@ -59,7 +59,6 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { // store hooks const { sidebarCollapsed } = useAppTheme(); const { t } = useTranslation(); - const { setTrackElement } = useEventTracker(); const { getPartialProjectById } = useProject(); const { isMobile } = usePlatformOS(); const { allowPermissions } = useUserPermissions(); @@ -97,7 +96,6 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { ); const handleLeaveProject = () => { - setTrackElement("APP_SIDEBAR_PROJECT_DROPDOWN"); setLeaveProjectModal(true); }; @@ -376,7 +374,10 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { {/* leave project */} {!isAuthorized && ( - +
{t("leave_project")} diff --git a/web/core/components/workspace/sidebar/projects-list.tsx b/web/core/components/workspace/sidebar/projects-list.tsx index 2ef487468cd..14419ffe882 100644 --- a/web/core/components/workspace/sidebar/projects-list.tsx +++ b/web/core/components/workspace/sidebar/projects-list.tsx @@ -7,7 +7,7 @@ import { observer } from "mobx-react"; import { useParams, usePathname } from "next/navigation"; import { Briefcase, ChevronRight, Plus } from "lucide-react"; import { Disclosure, Transition } from "@headlessui/react"; -import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel, PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; // ui import { Loader, TOAST_TYPE, Tooltip, setToast } from "@plane/ui"; @@ -17,7 +17,7 @@ import { CreateProjectModal } from "@/components/project"; import { SidebarProjectsListItem } from "@/components/workspace"; // helpers // hooks -import { useAppTheme, useCommandPalette, useEventTracker, useProject, useUserPermissions } from "@/hooks/store"; +import { useAppTheme, useCommandPalette, useProject, useUserPermissions } from "@/hooks/store"; // plane web types import { TProject } from "@/plane-web/types"; @@ -33,7 +33,6 @@ export const SidebarProjectsList: FC = observer(() => { const { t } = useTranslation(); const { toggleCreateProjectModal } = useCommandPalette(); const { sidebarCollapsed } = useAppTheme(); - const { setTrackElement } = useEventTracker(); const { allowPermissions } = useUserPermissions(); const { loader, getPartialProjectById, joinedProjectIds: joinedProjects, updateProjectView } = useProject(); @@ -193,9 +192,9 @@ export const SidebarProjectsList: FC = observer(() => { ); export const OutlineHeading2 = ({ marking, onClick }: THeadingComponentProps) => ( - ); export const OutlineHeading3 = ({ marking, onClick }: THeadingComponentProps) => ( - ); diff --git a/web/core/components/pages/editor/toolbar/index.ts b/web/core/components/pages/editor/toolbar/index.ts index 66652b2dbd0..2c36785bd3e 100644 --- a/web/core/components/pages/editor/toolbar/index.ts +++ b/web/core/components/pages/editor/toolbar/index.ts @@ -1,5 +1,4 @@ export * from "./color-dropdown"; -export * from "./info-popover"; export * from "./options-dropdown"; export * from "./root"; export * from "./toolbar"; diff --git a/web/core/components/pages/editor/toolbar/info-popover.tsx b/web/core/components/pages/editor/toolbar/info-popover.tsx deleted file mode 100644 index 49ad06b9b0b..00000000000 --- a/web/core/components/pages/editor/toolbar/info-popover.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { useState } from "react"; -import { observer } from "mobx-react"; -import Link from "next/link"; -import { useParams } from "next/navigation"; -import { usePopper } from "react-popper"; -import { Info } from "lucide-react"; -// plane imports -import { Avatar } from "@plane/ui"; -import { calculateTimeAgoShort, getFileURL, getReadTimeFromWordsCount, renderFormattedDate } from "@plane/utils"; -// hooks -import { useMember } from "@/hooks/store"; -// store -import { TPageInstance } from "@/store/pages/base-page"; - -type Props = { - page: TPageInstance; -}; - -export const PageInfoPopover: React.FC = observer((props) => { - const { page } = props; - // states - const [isPopoverOpen, setIsPopoverOpen] = useState(false); - // refs - const [referenceElement, setReferenceElement] = useState(null); - const [popperElement, setPopperElement] = useState(null); - // router - const { workspaceSlug } = useParams(); - // popper-js - const { styles: infoPopoverStyles, attributes: infoPopoverAttributes } = usePopper(referenceElement, popperElement, { - placement: "bottom-start", - }); - // store hooks - const { getUserDetails } = useMember(); - // derived values - const editorInformation = page.updated_by ? getUserDetails(page.updated_by) : undefined; - const creatorInformation = page.created_by ? getUserDetails(page.created_by) : undefined; - - const documentsInfo = page.editorRef?.getDocumentInfo() || { words: 0, characters: 0, paragraphs: 0 }; - - const secondsToReadableTime = () => { - const wordsCount = documentsInfo.words; - const readTimeInSeconds = Number(getReadTimeFromWordsCount(wordsCount).toFixed(0)); - return readTimeInSeconds < 60 ? `${readTimeInSeconds}s` : `${Math.ceil(readTimeInSeconds / 60)}m`; - }; - - const documentInfoCards = [ - { - key: "words-count", - title: "Words", - info: documentsInfo.words, - }, - { - key: "characters-count", - title: "Characters", - info: documentsInfo.characters, - }, - { - key: "paragraphs-count", - title: "Paragraphs", - info: documentsInfo.paragraphs, - }, - { - key: "read-time", - title: "Read time", - info: secondsToReadableTime(), - }, - ]; - - return ( -
setIsPopoverOpen(true)} - onMouseLeave={() => setIsPopoverOpen(false)} - > - - {isPopoverOpen && ( -
-
- {documentInfoCards.map((card) => ( -
-
{card.info}
-

{card.title}

-
- ))} -
-
-
-

Edited by

- - - - {editorInformation?.display_name}{" "} - {calculateTimeAgoShort(page.updated_at ?? "")} ago - - -
-
-

Created by

- - - - {creatorInformation?.display_name}{" "} - {renderFormattedDate(page.created_at)} - - -
-
-
- )} -
- ); -}); diff --git a/web/core/components/pages/editor/toolbar/options-dropdown.tsx b/web/core/components/pages/editor/toolbar/options-dropdown.tsx index 407ee03c451..8ff97657125 100644 --- a/web/core/components/pages/editor/toolbar/options-dropdown.tsx +++ b/web/core/components/pages/editor/toolbar/options-dropdown.tsx @@ -2,18 +2,15 @@ import { useMemo, useState } from "react"; import { observer } from "mobx-react"; -import { useRouter } from "next/navigation"; -import { ArrowUpToLine, Clipboard, History } from "lucide-react"; +import { ArrowUpToLine, Clipboard } from "lucide-react"; // plane imports import { TContextMenuItem, TOAST_TYPE, ToggleSwitch, setToast } from "@plane/ui"; -// components import { copyTextToClipboard } from "@plane/utils"; +// components import { ExportPageModal, PageActions, TPageActions } from "@/components/pages"; -// helpers // hooks import { usePageFilters } from "@/hooks/use-page-filters"; -import { useQueryParams } from "@/hooks/use-query-params"; -// plane web hooks +// plane web imports import { EPageStoreType } from "@/plane-web/hooks/store"; // store import { TPageInstance } from "@/store/pages/base-page"; @@ -27,14 +24,14 @@ export const PageOptionsDropdown: React.FC = observer((props) => { const { page, storeType } = props; // states const [isExportModalOpen, setIsExportModalOpen] = useState(false); - // router - const router = useRouter(); // store values - const { name, isContentEditable, editorRef } = page; + const { + name, + isContentEditable, + editor: { editorRef }, + } = page; // page filters const { isFullWidth, handleFullWidth, isStickyToolbarEnabled, handleStickyToolbar } = usePageFilters(); - // update query params - const { updateQueryParams } = useQueryParams(); // menu items list const EXTRA_MENU_OPTIONS: (TContextMenuItem & { key: TPageActions })[] = useMemo( () => [ @@ -77,19 +74,6 @@ export const PageOptionsDropdown: React.FC = observer((props) => { icon: Clipboard, shouldRender: true, }, - { - key: "version-history", - action: () => { - // add query param, version=current to the route - const updatedRoute = updateQueryParams({ - paramsToAdd: { version: "current" }, - }); - router.push(updatedRoute); - }, - title: "Version history", - icon: History, - shouldRender: true, - }, { key: "export", action: () => setIsExportModalOpen(true), @@ -98,16 +82,7 @@ export const PageOptionsDropdown: React.FC = observer((props) => { shouldRender: true, }, ], - [ - editorRef, - handleFullWidth, - handleStickyToolbar, - isContentEditable, - isFullWidth, - isStickyToolbarEnabled, - router, - updateQueryParams, - ] + [editorRef, handleFullWidth, handleStickyToolbar, isContentEditable, isFullWidth, isStickyToolbarEnabled] ); return ( diff --git a/web/core/components/pages/editor/toolbar/root.tsx b/web/core/components/pages/editor/toolbar/root.tsx index 72c9da3d488..e779c618e58 100644 --- a/web/core/components/pages/editor/toolbar/root.tsx +++ b/web/core/components/pages/editor/toolbar/root.tsx @@ -1,6 +1,10 @@ import { observer } from "mobx-react"; -// components +import { PanelRight } from "lucide-react"; +// plane imports +import { useTranslation } from "@plane/i18n"; +import { Tooltip } from "@plane/ui"; import { cn } from "@plane/utils"; +// components import { PageToolbar } from "@/components/pages"; // helpers // hooks @@ -11,38 +15,74 @@ import { PageCollaboratorsList } from "@/plane-web/components/pages/header/colla import { TPageInstance } from "@/store/pages/base-page"; type Props = { + handleOpenNavigationPane: () => void; + isNavigationPaneOpen: boolean; page: TPageInstance; }; export const PageEditorToolbarRoot: React.FC = observer((props) => { - const { page } = props; + const { handleOpenNavigationPane, isNavigationPaneOpen, page } = props; + // translation + const { t } = useTranslation(); // derived values - const { isContentEditable, editorRef } = page; + const { + isContentEditable, + editor: { editorRef }, + } = page; // page filters const { isFullWidth, isStickyToolbarEnabled } = usePageFilters(); // derived values const shouldHideToolbar = !isStickyToolbarEnabled || !isContentEditable; return ( -
+ <>
-
- {editorRef && } - +
+
+ {editorRef && } +
+ + {!isNavigationPaneOpen && ( + + )} +
+
-
+ {shouldHideToolbar && ( +
+ {!isNavigationPaneOpen && ( + + + + )} +
+ )} + ); }); diff --git a/web/core/components/pages/header/actions.tsx b/web/core/components/pages/header/actions.tsx index 6c6cb2f6c75..ccf07191a3a 100644 --- a/web/core/components/pages/header/actions.tsx +++ b/web/core/components/pages/header/actions.tsx @@ -2,7 +2,7 @@ import { observer } from "mobx-react"; // components -import { PageInfoPopover, PageOptionsDropdown } from "@/components/pages"; +import { PageOptionsDropdown } from "@/components/pages"; // plane web components import { PageLockControl } from "@/plane-web/components/pages/header/lock-control"; import { PageMoveControl } from "@/plane-web/components/pages/header/move-control"; @@ -31,7 +31,6 @@ export const PageHeaderActions: React.FC = observer((props) => { - diff --git a/web/core/components/pages/navigation-pane/index.ts b/web/core/components/pages/navigation-pane/index.ts new file mode 100644 index 00000000000..52026510632 --- /dev/null +++ b/web/core/components/pages/navigation-pane/index.ts @@ -0,0 +1,11 @@ +// plane web imports +import { ORDERED_PAGE_NAVIGATION_TABS_LIST } from "@/plane-web/components/pages/navigation-pane"; + +export * from "./root"; + +export const PAGE_NAVIGATION_PANE_WIDTH = 294; + +export const PAGE_NAVIGATION_PANE_TABS_QUERY_PARAM = "sidebarTab"; +export const PAGE_NAVIGATION_PANE_VERSION_QUERY_PARAM = "version"; + +export const PAGE_NAVIGATION_PANE_TAB_KEYS = ORDERED_PAGE_NAVIGATION_TABS_LIST.map((tab) => tab.key); diff --git a/web/core/components/pages/navigation-pane/root.tsx b/web/core/components/pages/navigation-pane/root.tsx new file mode 100644 index 00000000000..a2497d3856f --- /dev/null +++ b/web/core/components/pages/navigation-pane/root.tsx @@ -0,0 +1,88 @@ +import React, { useCallback } from "react"; +import { observer } from "mobx-react"; +import { useRouter, useSearchParams } from "next/navigation"; +import { ArrowRightCircle } from "lucide-react"; +import { Tab } from "@headlessui/react"; +// plane imports +import { useTranslation } from "@plane/i18n"; +import { Tooltip } from "@plane/ui"; +// hooks +import { useQueryParams } from "@/hooks/use-query-params"; +// plane web components +import { TPageNavigationPaneTab } from "@/plane-web/components/pages/navigation-pane"; +// store +import { TPageInstance } from "@/store/pages/base-page"; +// local imports +import { TPageRootHandlers } from "../editor"; +import { PageNavigationPaneTabPanelsRoot } from "./tab-panels/root"; +import { PageNavigationPaneTabsList } from "./tabs-list"; +import { + PAGE_NAVIGATION_PANE_TAB_KEYS, + PAGE_NAVIGATION_PANE_TABS_QUERY_PARAM, + PAGE_NAVIGATION_PANE_VERSION_QUERY_PARAM, + PAGE_NAVIGATION_PANE_WIDTH, +} from "./index"; + +type Props = { + handleClose: () => void; + isNavigationPaneOpen: boolean; + page: TPageInstance; + versionHistory: Pick; +}; + +export const PageNavigationPaneRoot: React.FC = observer((props) => { + const { handleClose, isNavigationPaneOpen, page, versionHistory } = props; + // navigation + const router = useRouter(); + const searchParams = useSearchParams(); + // query params + const { updateQueryParams } = useQueryParams(); + // derived values + const navigationPaneQueryParam = searchParams.get( + PAGE_NAVIGATION_PANE_TABS_QUERY_PARAM + ) as TPageNavigationPaneTab | null; + const activeTab: TPageNavigationPaneTab = navigationPaneQueryParam || "outline"; + const selectedIndex = PAGE_NAVIGATION_PANE_TAB_KEYS.indexOf(activeTab); + // translation + const { t } = useTranslation(); + + const handleTabChange = useCallback( + (index: number) => { + const updatedTab = PAGE_NAVIGATION_PANE_TAB_KEYS[index]; + const isUpdatedTabInfo = updatedTab === "info"; + const updatedRoute = updateQueryParams({ + paramsToAdd: { [PAGE_NAVIGATION_PANE_TABS_QUERY_PARAM]: updatedTab }, + paramsToRemove: !isUpdatedTabInfo ? [PAGE_NAVIGATION_PANE_VERSION_QUERY_PARAM] : undefined, + }); + router.push(updatedRoute); + }, + [router, updateQueryParams] + ); + + return ( + + ); +}); diff --git a/web/core/components/pages/navigation-pane/tab-panels/assets.tsx b/web/core/components/pages/navigation-pane/tab-panels/assets.tsx new file mode 100644 index 00000000000..f770ae7b40e --- /dev/null +++ b/web/core/components/pages/navigation-pane/tab-panels/assets.tsx @@ -0,0 +1,109 @@ +import { observer } from "mobx-react"; +import { useParams } from "next/navigation"; +import { Download } from "lucide-react"; +// plane imports +import { CORE_EXTENSIONS, type TEditorAsset } from "@plane/editor"; +import { useTranslation } from "@plane/i18n"; +import { getEditorAssetDownloadSrc, getEditorAssetSrc } from "@plane/utils"; +// plane web imports +import { AdditionalPageNavigationPaneAssetItem } from "@/plane-web/components/pages/navigation-pane/tab-panels/assets"; +import { PageNavigationPaneAssetsTabEmptyState } from "@/plane-web/components/pages/navigation-pane/tab-panels/empty-states/assets"; +// store +import { TPageInstance } from "@/store/pages/base-page"; + +type Props = { + page: TPageInstance; +}; + +type AssetItemProps = { + asset: TEditorAsset; + page: TPageInstance; +}; + +const AssetItem = observer((props: AssetItemProps) => { + const { asset, page } = props; + // navigation + const { workspaceSlug } = useParams(); + // derived values + const { project_ids } = page; + // translation + const { t } = useTranslation(); + + const getAssetSrc = (path: string) => { + if (!path || !workspaceSlug) return ""; + if (path.startsWith("http")) { + return path; + } else { + return ( + getEditorAssetSrc({ + assetId: path, + projectId: project_ids?.[0], + workspaceSlug: workspaceSlug.toString(), + }) ?? "" + ); + } + }; + + const getAssetDownloadSrc = (path: string) => { + if (!path || !workspaceSlug) return ""; + if (path.startsWith("http")) { + return path; + } else { + return ( + getEditorAssetDownloadSrc({ + assetId: path, + projectId: project_ids?.[0], + workspaceSlug: workspaceSlug.toString(), + }) ?? "" + ); + } + }; + + if ([CORE_EXTENSIONS.IMAGE, CORE_EXTENSIONS.CUSTOM_IMAGE].includes(asset.type)) + return ( +
+
+ + + ); + + return ; +}); + +export const PageNavigationPaneAssetsTabPanel: React.FC = observer((props) => { + const { page } = props; + // derived values + const { + editor: { assetsList }, + } = page; + + if (assetsList.length === 0) return ; + + return ( +
+ {assetsList?.map((asset) => )} +
+ ); +}); diff --git a/web/core/components/pages/navigation-pane/tab-panels/info/actors-info.tsx b/web/core/components/pages/navigation-pane/tab-panels/info/actors-info.tsx new file mode 100644 index 00000000000..d4c166ddff0 --- /dev/null +++ b/web/core/components/pages/navigation-pane/tab-panels/info/actors-info.tsx @@ -0,0 +1,68 @@ +import { observer } from "mobx-react"; +import Link from "next/link"; +import { useParams } from "next/navigation"; +// plane imports +import { useTranslation } from "@plane/i18n"; +import { Avatar } from "@plane/ui"; +import { calculateTimeAgoShort, getFileURL, renderFormattedDate } from "@plane/utils"; +// hooks +import { useMember } from "@/hooks/store"; +// store +import { TPageInstance } from "@/store/pages/base-page"; + +type Props = { + page: TPageInstance; +}; + +export const PageNavigationPaneInfoTabActorsInfo: React.FC = observer((props) => { + const { page } = props; + // navigation + const { workspaceSlug } = useParams(); + // store hooks + const { getUserDetails } = useMember(); + // derived values + const { created_by, updated_by } = page; + const editorInformation = updated_by ? getUserDetails(updated_by) : undefined; + const creatorInformation = created_by ? getUserDetails(created_by) : undefined; + // translation + const { t } = useTranslation(); + + return ( +
+
+

+ {t("page_navigation_pane.tabs.info.actors_info.edited_by")} +

+
+ + + {editorInformation?.display_name ?? t("common.deactivated_user")} + + {calculateTimeAgoShort(page.updated_at ?? "")} ago +
+
+
+

+ {t("page_navigation_pane.tabs.info.actors_info.created_by")} +

+
+ + + {creatorInformation?.display_name ?? t("common.deactivated_user")} + + {renderFormattedDate(page.created_at)} +
+
+
+ ); +}); diff --git a/web/core/components/pages/navigation-pane/tab-panels/info/document-info.tsx b/web/core/components/pages/navigation-pane/tab-panels/info/document-info.tsx new file mode 100644 index 00000000000..b301e9cbe77 --- /dev/null +++ b/web/core/components/pages/navigation-pane/tab-panels/info/document-info.tsx @@ -0,0 +1,82 @@ +import { useCallback, useEffect, useMemo, useState } from "react"; +import { observer } from "mobx-react"; +// plane imports +import type { TDocumentInfo } from "@plane/editor"; +import { useTranslation } from "@plane/i18n"; +import { getReadTimeFromWordsCount } from "@plane/utils"; +// store +import { TPageInstance } from "@/store/pages/base-page"; + +type Props = { + page: TPageInstance; +}; + +const DEFAULT_DOCUMENT_INFO: TDocumentInfo = { + words: 0, + characters: 0, + paragraphs: 0, +}; + +export const PageNavigationPaneInfoTabDocumentInfo: React.FC = observer((props) => { + const { page } = props; + // states + const [documentInfo, setDocumentInfo] = useState(DEFAULT_DOCUMENT_INFO); + // derived values + const { + editor: { editorRef }, + } = page; + // translation + const { t } = useTranslation(); + // subscribe to asset changes + useEffect(() => { + const unsubscribe = editorRef?.onDocumentInfoChange(setDocumentInfo); + // for initial render of this component to get the editor assets + setDocumentInfo(editorRef?.getDocumentInfo() ?? DEFAULT_DOCUMENT_INFO); + return () => { + unsubscribe?.(); + }; + }, [editorRef]); + + const secondsToReadableTime = useCallback(() => { + const wordsCount = documentInfo.words; + const readTimeInSeconds = Number(getReadTimeFromWordsCount(wordsCount).toFixed(0)); + return readTimeInSeconds < 60 ? `${readTimeInSeconds}s` : `${Math.ceil(readTimeInSeconds / 60)}m`; + }, [documentInfo.words]); + + const documentInfoCards = useMemo( + () => [ + { + key: "words-count", + title: t("page_navigation_pane.tabs.info.document_info.words"), + info: documentInfo.words, + }, + { + key: "characters-count", + title: t("page_navigation_pane.tabs.info.document_info.characters"), + info: documentInfo.characters, + }, + { + key: "paragraphs-count", + title: t("page_navigation_pane.tabs.info.document_info.paragraphs"), + info: documentInfo.paragraphs, + }, + { + key: "read-time", + title: t("page_navigation_pane.tabs.info.document_info.read_time"), + info: secondsToReadableTime(), + }, + ], + [documentInfo, secondsToReadableTime, t] + ); + + return ( +
+ {documentInfoCards.map((card) => ( +
+
{card.info}
+

{card.title}

+
+ ))} +
+ ); +}); diff --git a/web/core/components/pages/navigation-pane/tab-panels/info/root.tsx b/web/core/components/pages/navigation-pane/tab-panels/info/root.tsx new file mode 100644 index 00000000000..77edc24e046 --- /dev/null +++ b/web/core/components/pages/navigation-pane/tab-panels/info/root.tsx @@ -0,0 +1,27 @@ +import { observer } from "mobx-react"; +// components +import { TPageRootHandlers } from "@/components/pages/editor"; +// store +import { TPageInstance } from "@/store/pages/base-page"; +// local imports +import { PageNavigationPaneInfoTabActorsInfo } from "./actors-info"; +import { PageNavigationPaneInfoTabDocumentInfo } from "./document-info"; +import { PageNavigationPaneInfoTabVersionHistory } from "./version-history"; + +type Props = { + page: TPageInstance; + versionHistory: Pick; +}; + +export const PageNavigationPaneInfoTabPanel: React.FC = observer((props) => { + const { page, versionHistory } = props; + + return ( +
+ + +
+ +
+ ); +}); diff --git a/web/core/components/pages/navigation-pane/tab-panels/info/version-history.tsx b/web/core/components/pages/navigation-pane/tab-panels/info/version-history.tsx new file mode 100644 index 00000000000..31069299f30 --- /dev/null +++ b/web/core/components/pages/navigation-pane/tab-panels/info/version-history.tsx @@ -0,0 +1,142 @@ +import { useCallback } from "react"; +import { observer } from "mobx-react"; +import Link from "next/link"; +import { useSearchParams } from "next/navigation"; +import useSWR from "swr"; +// plane imports +import { useTranslation } from "@plane/i18n"; +import { TPageVersion } from "@plane/types"; +import { Avatar } from "@plane/ui"; +import { cn, getFileURL, renderFormattedDate, renderFormattedTime } from "@plane/utils"; +// components +import { TPageRootHandlers } from "@/components/pages/editor"; +// hooks +import { useMember } from "@/hooks/store"; +import { useQueryParams } from "@/hooks/use-query-params"; +// store +import { TPageInstance } from "@/store/pages/base-page"; +// local imports +import { PAGE_NAVIGATION_PANE_VERSION_QUERY_PARAM } from "../.."; + +type Props = { + page: TPageInstance; + versionHistory: Pick; +}; + +type VersionHistoryItemProps = { + getVersionLink: (versionID: string) => string; + isVersionActive: boolean; + version: TPageVersion; +}; + +const VersionHistoryItem = observer((props: VersionHistoryItemProps) => { + const { getVersionLink, isVersionActive, version } = props; + // store hooks + const { getUserDetails } = useMember(); + // derived values + const versionCreator = getUserDetails(version.created_by); + // translation + const { t } = useTranslation(); + + return ( +
  • + {/* timeline icon */} +
    +
    +
    + {/* end timeline icon */} + +

    + {renderFormattedDate(version.last_saved_at)}, {renderFormattedTime(version.last_saved_at)} +

    +

    + + {versionCreator?.display_name ?? t("common.deactivated_user")} +

    + +
  • + ); +}); + +export const PageNavigationPaneInfoTabVersionHistory: React.FC = observer((props) => { + const { page, versionHistory } = props; + // navigation + const searchParams = useSearchParams(); + const activeVersion = searchParams.get(PAGE_NAVIGATION_PANE_VERSION_QUERY_PARAM); + // derived values + const { id } = page; + // translation + const { t } = useTranslation(); + // query params + const { updateQueryParams } = useQueryParams(); + // fetch all versions + const { data: versionsList } = useSWR( + id ? `PAGE_VERSIONS_LIST_${id}` : null, + id ? () => versionHistory.fetchAllVersions(id) : null + ); + + const getVersionLink = useCallback( + (versionID?: string) => { + if (versionID) { + return updateQueryParams({ + paramsToAdd: { [PAGE_NAVIGATION_PANE_VERSION_QUERY_PARAM]: versionID }, + }); + } else { + return updateQueryParams({ + paramsToRemove: [PAGE_NAVIGATION_PANE_VERSION_QUERY_PARAM], + }); + } + }, + [updateQueryParams] + ); + + return ( +
    +

    + {t("page_navigation_pane.tabs.info.version_history.label")} +

    +
    +
      + {/* timeline line */} +
      +
      +
      + {/* end timeline line */} +
    • + {/* timeline icon */} +
      +
      +
      + {/* end timeline icon */} + + {t("page_navigation_pane.tabs.info.version_history.current_version")} + +
    • + {versionsList?.map((version) => ( + + ))} +
    +
    +
    + ); +}); diff --git a/web/core/components/pages/navigation-pane/tab-panels/outline.tsx b/web/core/components/pages/navigation-pane/tab-panels/outline.tsx new file mode 100644 index 00000000000..d563e52ebfa --- /dev/null +++ b/web/core/components/pages/navigation-pane/tab-panels/outline.tsx @@ -0,0 +1,28 @@ +// plane web imports +import { PageNavigationPaneOutlineTabEmptyState } from "@/plane-web/components/pages/navigation-pane/tab-panels/empty-states/outline"; +// store +import { TPageInstance } from "@/store/pages/base-page"; +// local imports +import { PageContentBrowser } from "../../editor"; + +type Props = { + page: TPageInstance; +}; + +export const PageNavigationPaneOutlineTabPanel: React.FC = (props) => { + const { page } = props; + // derived values + const { + editor: { editorRef }, + } = page; + + return ( +
    + } + /> +
    + ); +}; diff --git a/web/core/components/pages/navigation-pane/tab-panels/root.tsx b/web/core/components/pages/navigation-pane/tab-panels/root.tsx new file mode 100644 index 00000000000..c9880f0d58c --- /dev/null +++ b/web/core/components/pages/navigation-pane/tab-panels/root.tsx @@ -0,0 +1,39 @@ +import React from "react"; +import { Tab } from "@headlessui/react"; +// components +import { TPageRootHandlers } from "@/components/pages/editor"; +// plane web imports +import { ORDERED_PAGE_NAVIGATION_TABS_LIST } from "@/plane-web/components/pages/navigation-pane"; +import { PageNavigationPaneAdditionalTabPanelsRoot } from "@/plane-web/components/pages/navigation-pane/tab-panels/root"; +// store +import { TPageInstance } from "@/store/pages/base-page"; +// local imports +import { PageNavigationPaneAssetsTabPanel } from "./assets"; +import { PageNavigationPaneInfoTabPanel } from "./info/root"; +import { PageNavigationPaneOutlineTabPanel } from "./outline"; + +type Props = { + page: TPageInstance; + versionHistory: Pick; +}; + +export const PageNavigationPaneTabPanelsRoot: React.FC = (props) => { + const { page, versionHistory } = props; + + return ( + + {ORDERED_PAGE_NAVIGATION_TABS_LIST.map((tab) => ( + + {tab.key === "outline" && } + {tab.key === "info" && } + {tab.key === "assets" && } + + + ))} + + ); +}; diff --git a/web/core/components/pages/navigation-pane/tabs-list.tsx b/web/core/components/pages/navigation-pane/tabs-list.tsx new file mode 100644 index 00000000000..bf438321683 --- /dev/null +++ b/web/core/components/pages/navigation-pane/tabs-list.tsx @@ -0,0 +1,37 @@ +import { Tab } from "@headlessui/react"; +// plane imports +import { useTranslation } from "@plane/i18n"; +// plane web components +import { ORDERED_PAGE_NAVIGATION_TABS_LIST } from "@/plane-web/components/pages/navigation-pane"; + +export const PageNavigationPaneTabsList = () => { + // translation + const { t } = useTranslation(); + + return ( + + {({ selectedIndex }) => ( + <> + {ORDERED_PAGE_NAVIGATION_TABS_LIST.map((tab) => ( + + {t(tab.i18n_label)} + + ))} + {/* active tab indicator */} +
    + + )} + + ); +}; diff --git a/web/core/components/pages/version/editor.tsx b/web/core/components/pages/version/editor.tsx index 8491408ac8c..1a2c23e2872 100644 --- a/web/core/components/pages/version/editor.tsx +++ b/web/core/components/pages/version/editor.tsx @@ -16,13 +16,11 @@ import { useIssueEmbed } from "@/plane-web/hooks/use-issue-embed"; export type TVersionEditorProps = { activeVersion: string | null; - currentVersionDescription: string | null; - isCurrentVersionActive: boolean; versionDetails: TPageVersion | undefined; }; export const PagesVersionEditor: React.FC = observer((props) => { - const { activeVersion, currentVersionDescription, isCurrentVersionActive, versionDetails } = props; + const { activeVersion, versionDetails } = props; // store hooks const { getUserDetails } = useMember(); // params @@ -49,7 +47,7 @@ export const PagesVersionEditor: React.FC = observer((props wideLayout: true, }; - if (!isCurrentVersionActive && !versionDetails) + if (!versionDetails) return (
    @@ -91,7 +89,7 @@ export const PagesVersionEditor: React.FC = observer((props
    ); - const description = isCurrentVersionActive ? currentVersionDescription : versionDetails?.description_html; + const description = versionDetails?.description_html; if (description === undefined || description?.trim() === "") return null; return ( diff --git a/web/core/components/pages/version/index.ts b/web/core/components/pages/version/index.ts index 8e04e4de9e0..5da43e95910 100644 --- a/web/core/components/pages/version/index.ts +++ b/web/core/components/pages/version/index.ts @@ -1,6 +1,3 @@ export * from "./editor"; export * from "./main-content"; export * from "./root"; -export * from "./sidebar-list-item"; -export * from "./sidebar-list"; -export * from "./sidebar-root"; diff --git a/web/core/components/pages/version/main-content.tsx b/web/core/components/pages/version/main-content.tsx index e94bfefa780..ab05ba25669 100644 --- a/web/core/components/pages/version/main-content.tsx +++ b/web/core/components/pages/version/main-content.tsx @@ -1,7 +1,7 @@ import { useState } from "react"; import { observer } from "mobx-react"; import useSWR from "swr"; -import { TriangleAlert } from "lucide-react"; +import { EyeIcon, TriangleAlert } from "lucide-react"; // plane types import { TPageVersion } from "@plane/types"; // plane ui @@ -13,7 +13,6 @@ import { TVersionEditorProps } from "@/components/pages"; type Props = { activeVersion: string | null; - currentVersionDescription: string | null; editorComponent: React.FC; fetchVersionDetails: (pageId: string, versionId: string) => Promise; handleClose: () => void; @@ -23,16 +22,8 @@ type Props = { }; export const PageVersionsMainContent: React.FC = observer((props) => { - const { - activeVersion, - currentVersionDescription, - editorComponent, - fetchVersionDetails, - handleClose, - handleRestore, - pageId, - restoreEnabled, - } = props; + const { activeVersion, editorComponent, fetchVersionDetails, handleClose, handleRestore, pageId, restoreEnabled } = + props; // states const [isRestoring, setIsRestoring] = useState(false); const [isRetrying, setIsRetrying] = useState(false); @@ -42,12 +33,10 @@ export const PageVersionsMainContent: React.FC = observer((props) => { error: versionDetailsError, mutate: mutateVersionDetails, } = useSWR( - pageId && activeVersion && activeVersion !== "current" ? `PAGE_VERSION_${activeVersion}` : null, - pageId && activeVersion && activeVersion !== "current" ? () => fetchVersionDetails(pageId, activeVersion) : null + pageId && activeVersion ? `PAGE_VERSION_${activeVersion}` : null, + pageId && activeVersion ? () => fetchVersionDetails(pageId, activeVersion) : null ); - const isCurrentVersionActive = activeVersion === "current"; - const handleRestoreVersion = async () => { if (!restoreEnabled) return; setIsRestoring(true); @@ -96,14 +85,18 @@ export const PageVersionsMainContent: React.FC = observer((props) => { ) : ( <>
    -
    - {isCurrentVersionActive - ? "Current version" - : versionDetails +
    +
    + {versionDetails ? `${renderFormattedDate(versionDetails.last_saved_at)} ${renderFormattedTime(versionDetails.last_saved_at)}` : "Loading version details"} -
    - {!isCurrentVersionActive && restoreEnabled && ( +
    + + + View only + +
    + {restoreEnabled && (
    - +
    )} diff --git a/web/core/components/pages/version/root.tsx b/web/core/components/pages/version/root.tsx index f1dd0248b42..64b4f43dae4 100644 --- a/web/core/components/pages/version/root.tsx +++ b/web/core/components/pages/version/root.tsx @@ -1,54 +1,56 @@ +import { useCallback } from "react"; import { observer } from "mobx-react"; -// plane types +import { useRouter, useSearchParams } from "next/navigation"; +// plane imports import { TPageVersion } from "@plane/types"; -// components import { cn } from "@plane/utils"; -import { PageVersionsMainContent, PageVersionsSidebarRoot, TVersionEditorProps } from "@/components/pages"; -// helpers +// components +import { PageVersionsMainContent, TVersionEditorProps } from "@/components/pages"; +// hooks +import { useQueryParams } from "@/hooks/use-query-params"; +// local imports +import { PAGE_NAVIGATION_PANE_VERSION_QUERY_PARAM, PAGE_NAVIGATION_PANE_WIDTH } from "../navigation-pane"; type Props = { - activeVersion: string | null; - currentVersionDescription: string | null; editorComponent: React.FC; - fetchAllVersions: (pageId: string) => Promise; fetchVersionDetails: (pageId: string, versionId: string) => Promise; handleRestore: (descriptionHTML: string) => Promise; - isOpen: boolean; - onClose: () => void; pageId: string; restoreEnabled: boolean; }; export const PageVersionsOverlay: React.FC = observer((props) => { - const { - activeVersion, - currentVersionDescription, - editorComponent, - fetchAllVersions, - fetchVersionDetails, - handleRestore, - isOpen, - onClose, - pageId, - restoreEnabled, - } = props; + const { editorComponent, fetchVersionDetails, handleRestore, pageId, restoreEnabled } = props; + // navigation + const router = useRouter(); + const searchParams = useSearchParams(); + // query params + const { updateQueryParams } = useQueryParams(); + // derived values + const activeVersion = searchParams.get(PAGE_NAVIGATION_PANE_VERSION_QUERY_PARAM); + const isOpen = !!activeVersion; - const handleClose = () => { - onClose(); - }; + const handleClose = useCallback(() => { + const updatedRoute = updateQueryParams({ + paramsToRemove: [PAGE_NAVIGATION_PANE_VERSION_QUERY_PARAM], + }); + router.push(updatedRoute); + }, [router, updateQueryParams]); return (
    = observer((props) => { pageId={pageId} restoreEnabled={restoreEnabled} /> -
    ); }); diff --git a/web/core/components/pages/version/sidebar-list-item.tsx b/web/core/components/pages/version/sidebar-list-item.tsx deleted file mode 100644 index c5df2c0d246..00000000000 --- a/web/core/components/pages/version/sidebar-list-item.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { observer } from "mobx-react"; -import Link from "next/link"; -// plane imports -import { useTranslation } from "@plane/i18n"; -import { TPageVersion } from "@plane/types"; -import { Avatar } from "@plane/ui"; -import { cn, renderFormattedDate, renderFormattedTime, getFileURL } from "@plane/utils"; -// helpers -// hooks -import { useMember } from "@/hooks/store"; - -type Props = { - href: string; - isActive: boolean; - version: TPageVersion; -}; - -export const PlaneVersionsSidebarListItem: React.FC = observer((props) => { - const { href, isActive, version } = props; - // store hooks - const { getUserDetails } = useMember(); - // derived values - const ownerDetails = getUserDetails(version.owned_by); - // translation - const { t } = useTranslation(); - - return ( - -

    - {renderFormattedDate(version.last_saved_at)} {renderFormattedTime(version.last_saved_at)} -

    -

    - - {ownerDetails?.display_name ?? t("common.deactivated_user")} -

    - - ); -}); diff --git a/web/core/components/pages/version/sidebar-list.tsx b/web/core/components/pages/version/sidebar-list.tsx deleted file mode 100644 index bff9c36988b..00000000000 --- a/web/core/components/pages/version/sidebar-list.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import { useState } from "react"; -import Link from "next/link"; -import useSWR from "swr"; -import { TriangleAlert } from "lucide-react"; -// plane types -import { TPageVersion } from "@plane/types"; -// plane ui -import { Button, Loader } from "@plane/ui"; -// components -import { cn } from "@plane/utils"; -import { PlaneVersionsSidebarListItem } from "@/components/pages"; -// helpers -// hooks -import { useQueryParams } from "@/hooks/use-query-params"; - -type Props = { - activeVersion: string | null; - fetchAllVersions: (pageId: string) => Promise; - isOpen: boolean; - pageId: string; -}; - -export const PageVersionsSidebarList: React.FC = (props) => { - const { activeVersion, fetchAllVersions, isOpen, pageId } = props; - // states - const [isRetrying, setIsRetrying] = useState(false); - // update query params - const { updateQueryParams } = useQueryParams(); - - const { - data: versionsList, - error: versionsListError, - mutate: mutateVersionsList, - } = useSWR( - pageId && isOpen ? `PAGE_VERSIONS_LIST_${pageId}` : null, - pageId && isOpen ? () => fetchAllVersions(pageId) : null - ); - - const handleRetry = async () => { - setIsRetrying(true); - await mutateVersionsList(); - setIsRetrying(false); - }; - - const getVersionLink = (versionID: string) => - updateQueryParams({ - paramsToAdd: { version: versionID }, - }); - - return ( -
    - -

    Current version

    - - {versionsListError ? ( -
    -
    - - - -
    -
    Something went wrong!
    -

    - There was a problem while loading previous -
    - versions, please try again. -

    -
    - -
    -
    - ) : versionsList ? ( - versionsList.map((version) => ( - - )) - ) : ( - - - - - - - - )} -
    - ); -}; diff --git a/web/core/components/pages/version/sidebar-root.tsx b/web/core/components/pages/version/sidebar-root.tsx deleted file mode 100644 index 793d7fed90f..00000000000 --- a/web/core/components/pages/version/sidebar-root.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { X } from "lucide-react"; -// plane types -import { TPageVersion } from "@plane/types"; -// components -import { PageVersionsSidebarList } from "@/components/pages"; - -type Props = { - activeVersion: string | null; - fetchAllVersions: (pageId: string) => Promise; - handleClose: () => void; - isOpen: boolean; - pageId: string; -}; - -export const PageVersionsSidebarRoot: React.FC = (props) => { - const { activeVersion, fetchAllVersions, handleClose, isOpen, pageId } = props; - - return ( -
    -
    -
    Version history
    - -
    - -
    - ); -}; diff --git a/web/core/hooks/use-query-params.ts b/web/core/hooks/use-query-params.ts index 8b689f0cbe0..84d65bebb30 100644 --- a/web/core/hooks/use-query-params.ts +++ b/web/core/hooks/use-query-params.ts @@ -1,3 +1,4 @@ +import { useCallback } from "react"; import { useSearchParams, usePathname } from "next/navigation"; type TParamsToAdd = { @@ -9,29 +10,27 @@ export const useQueryParams = () => { const searchParams = useSearchParams(); const pathname = usePathname(); - const updateQueryParams = ({ - paramsToAdd = {}, - paramsToRemove = [], - }: { - paramsToAdd?: TParamsToAdd; - paramsToRemove?: string[]; - }) => { - const currentParams = new URLSearchParams(searchParams.toString()); + const updateQueryParams = useCallback( + ({ paramsToAdd = {}, paramsToRemove = [] }: { paramsToAdd?: TParamsToAdd; paramsToRemove?: string[] }) => { + const currentParams = new URLSearchParams(searchParams.toString()); - // add or update query parameters - Object.keys(paramsToAdd).forEach((key) => { - currentParams.set(key, paramsToAdd[key]); - }); + // add or update query parameters + Object.keys(paramsToAdd).forEach((key) => { + currentParams.set(key, paramsToAdd[key]); + }); - // remove specified query parameters - paramsToRemove.forEach((key) => { - currentParams.delete(key); - }); + // remove specified query parameters + paramsToRemove.forEach((key) => { + currentParams.delete(key); + }); - // construct the new route with the updated query parameters - const newRoute = `${pathname}?${currentParams.toString()}`; - return newRoute; - }; + // construct the new route with the updated query parameters + const query = currentParams.toString(); + const newRoute = query ? `${pathname}?${query}` : pathname; + return newRoute; + }, + [pathname, searchParams] + ); return { updateQueryParams, diff --git a/web/core/store/pages/base-page.ts b/web/core/store/pages/base-page.ts index 294c370e7ec..e5ca4e4d5da 100644 --- a/web/core/store/pages/base-page.ts +++ b/web/core/store/pages/base-page.ts @@ -2,18 +2,18 @@ import set from "lodash/set"; import { action, computed, makeObservable, observable, reaction, runInAction } from "mobx"; // plane imports import { EPageAccess } from "@plane/constants"; -import { EditorRefApi } from "@plane/editor"; import { TDocumentPayload, TLogoProps, TNameDescriptionLoader, TPage } from "@plane/types"; import { TChangeHandlerProps } from "@plane/ui"; import { convertHexEmojiToDecimal } from "@plane/utils"; // plane web store import { ExtendedBasePage } from "@/plane-web/store/pages/extended-base-page"; import { RootStore } from "@/plane-web/store/root.store"; +// local imports +import { PageEditorInstance } from "./page-editor-info"; export type TBasePage = TPage & { // observables isSubmitting: TNameDescriptionLoader; - editorRef: EditorRefApi | null; // computed asJSON: TPage | undefined; isCurrentUserOwner: boolean; @@ -36,7 +36,8 @@ export type TBasePage = TPage & { removePageFromFavorites: () => Promise; duplicate: () => Promise; mutateProperties: (data: Partial, shouldUpdateName?: boolean) => void; - setEditorRef: (editorRef: EditorRefApi | null) => void; + // sub-store + editor: PageEditorInstance; }; export type TBasePagePermissions = { @@ -73,7 +74,6 @@ export type TPageInstance = TBasePage & export class BasePage extends ExtendedBasePage implements TBasePage { // loaders isSubmitting: TNameDescriptionLoader = "saved"; - editorRef: EditorRefApi | null = null; // page properties id: string | undefined; name: string | undefined; @@ -100,6 +100,9 @@ export class BasePage extends ExtendedBasePage implements TBasePage { disposers: Array<() => void> = []; // root store rootStore: RootStore; + // sub-store + editor: PageEditorInstance; + constructor( private store: RootStore, page: TPage, @@ -129,7 +132,6 @@ export class BasePage extends ExtendedBasePage implements TBasePage { makeObservable(this, { // loaders isSubmitting: observable.ref, - editorRef: observable.ref, // page properties id: observable.ref, name: observable.ref, @@ -170,11 +172,12 @@ export class BasePage extends ExtendedBasePage implements TBasePage { removePageFromFavorites: action, duplicate: action, mutateProperties: action, - setEditorRef: action, }); - this.rootStore = store; + // init this.services = services; + this.rootStore = store; + this.editor = new PageEditorInstance(); const titleDisposer = reaction( () => this.name, @@ -524,10 +527,4 @@ export class BasePage extends ExtendedBasePage implements TBasePage { set(this, key, value); }); }; - - setEditorRef = (editorRef: EditorRefApi | null) => { - runInAction(() => { - this.editorRef = editorRef; - }); - }; } diff --git a/web/core/store/pages/page-editor-info.ts b/web/core/store/pages/page-editor-info.ts new file mode 100644 index 00000000000..442b534f36d --- /dev/null +++ b/web/core/store/pages/page-editor-info.ts @@ -0,0 +1,41 @@ +import { action, makeObservable, observable, runInAction } from "mobx"; +// plane imports +import { EditorRefApi, TEditorAsset } from "@plane/editor"; + +export type TPageEditorInstance = { + // observables + assetsList: TEditorAsset[]; + editorRef: EditorRefApi | null; + // actions + setEditorRef: (editorRef: EditorRefApi | null) => void; + updateAssetsList: (assets: TEditorAsset[]) => void; +}; + +export class PageEditorInstance implements TPageEditorInstance { + // observables + editorRef: EditorRefApi | null = null; + assetsList: TEditorAsset[] = []; + + constructor() { + makeObservable(this, { + // observables + editorRef: observable.ref, + assetsList: observable, + // actions + setEditorRef: action, + updateAssetsList: action, + }); + } + + setEditorRef: TPageEditorInstance["setEditorRef"] = (editorRef) => { + runInAction(() => { + this.editorRef = editorRef; + }); + }; + + updateAssetsList: TPageEditorInstance["updateAssetsList"] = (assets) => { + runInAction(() => { + this.assetsList = assets; + }); + }; +} diff --git a/web/public/empty-state/pages/navigation-pane/assets-dark.webp b/web/public/empty-state/pages/navigation-pane/assets-dark.webp new file mode 100644 index 0000000000000000000000000000000000000000..e454d6dc17d77d199edb1cb18bf0e097fa5e1fab GIT binary patch literal 21086 zcmV)>K!d+hNk&FiQUCx~MM6+kP&il$0000G0000%0RUwI06|PpNT@vk009{XZ6rC8 zs(13-@h2SqAw=|l0{H*HL;yLtYZD-!fSnLZ&vSP2Lg5@f0-!P$8jVwGtJqx9Af~fR%9~IA|L^}_QZ|r7M~8!q15l9B z1Om9|atSE|#sJa4CINe4VY}^7Lq~;xf3-HK zknr&FsaC-1q0CNl6^{d=4pe+GfPp*VSis3*V5=3g-D+45)01<_b)5?Xt6?PIWE>C; zjHS_VDq=MXsB$%9VH6+(1GzsPl8)VInBZ1;bg{CQT!luVt*j%BwhCYDN5RTE z(vhpsXhIc^T!l|Du0o@Q?^Yqp)ppNfT!mIsoS-XD6>{aRLe?oxxZ16P)#Y2=Q;aTF zK2@-?7As#EU946k9k~jPF7~5fWsNktRmi&JDl~ExvQBZf3XLvSA#1Df6yqvnO?9!d ztMDntRcJ+{iFweS7a{HlJ|Px;!{ zXfaKr(KLwP+qb{{%3ul?$N@TdIX_crH-=Gu>v>(V^^_BX%zyZi3H_B#o_ z_t*4;zlQH^E%(pvm+PWwuHXFj@9ew3`N7+Kv!nmcufg(;>)CNx78c9;^6S5cuYdca zcJ#-6^wDA&v6h7imK`!JYcd22)B1gU{kQVXkJr&R`!qHq5!Qs!vi%uGEY`9XYZ`sN zSVoN2zWn-c?du<@qd%_C;)5YzfYzYVXo$IOw1o!Ewb9)7$M~M#$TvSmn?LoNJrct~ zxL8=H=gqZwzMQ}7KmMLCKRl28%#L2i_=V}od#=l3xvuqSEiCxyzm4zt$ZY=9K8Z&{ zgkXdiS(Y`L4vT47i{*NQ5!PZZmc^I9fuH_S+59{Hj+>25Bp49Ob-`j9IWKEX%V>>Q z7Rwr$*0TJ4zl-14mmiQj{Ek2WIxv7?(0~kDhDM`ljt$N6ay^U&&G9n)!$0lI55^rn zm!F?u14cr>$qv)R+_uAggQdA|XqML4YxLP~>!*GBfw;r3_UIgh%R8=huukjp&dVE{ z^Zw!A(3c;Cb)V_)_(8L%u^BB!3v0o$Mn+gqMr$qCwU)&)GA+NIzvjsA6|nB-_)Ioq za72XIixaHTa$P33ixCs+&{__YWeA65T7TcWdD0c%$N43E*hoNPjD%h=;AjwoOoMi5 z4Xw527;74u+eXtMMmh2ed^an)88I4U?)Mrp&24LFjxDAo z@Kye5C#~4leSe?vI))9SgO0jCVX@a}Sl+zXJY37+{lB0;Y=w5G*YaV3iII_!$Z&*Z zuN}}Xmh)PeEYsnA*ZV|*-}>+Pb*#YFeU9&uNDv4TBLN{22|_ZhWi4wRXoR(3TGl$O z2h(INqqVHbF_O3c1%JmYtvmg5$030x2oPxl(gx6IG}qQzjGX7bIcC}+YqW;u+FJ9_ z;Lgwd>s(Q-`#U}(oCG8o)AVi93^z|3jn*v9ZF6i|yAgv+qe0WOh%p9uu@_rG9rtB^ zQ~;5MMj|ZioL#Q1&%ATl(r5U0>}OF8Bc0I1Xjxb+)?&{V7R$0| z8q0AV)`NQk#17lOkS}>fwEyq;4Cu#EkqEIv1UeSebXm@mwH7R_<-8UPCfBtrYhhg= zMhFtT$xry5tb7jpia$((F<^xB1R~vl5g^X7wP3BwWMMK*(`cGlu$IYMBZjQe46VdS zIO&t!xzhRAzl?Q8h(PEYz!;1K(+Ng)a*WAZli|{w+XX`g&BKh=!ZZY841nRJ&-1HU z*?jh&9S6Mu3$+Ji*X8L5miu*K!Ng*D z7#oNTe-oen&XvhwU;gC~kl{{1fEbAoiNqkGwXhb;2-7mzP0Mj)oisEVtp%gCL?Xdp zOh>+rPhsauwees4o4>3b-X5KF z6S{=GeD)5SCWm%em-A|;dD!9p^f2or;urUO`U8A*@n8JhV7*~2?>OeXV3+lV+YZmy z<#~sNiFJ6-SS;t?)en6&@$37!E{ktA&5|e;_tT)WKE1}$sem=JPIBB))w`LF(=mBFv) zFV8IJc40a0)j>i#(cOa9E?cfm)*IRh3+*N$A#d$d-rgbq=Qq6)_!aydU*z)kwGLnC z@_bpB3+3|#bQmC zWntYdEv>cIx~yfb8(I(6zU!~>^yTjIfB1*FEKHW=yjT+&A=O$~Fb9NXU4~c_j3yRL ztgJOOLnH@@E^9){gsJ&BU(W93?ebs$mq&(%*3b@_+eWzzsW~>8mN_xmTa)QVZgUwzbDL>s9yiT>=C-va8hhbz z&3!n%Irn~>U)FN=xqX`4uESfGuhi9GS#BH6xgFj;A>U!Y_OD_2`t#nq3Cmg*)`RO> zrqg<`tYuADZr9|tVZnN^EY|6ES{93i$+|2Srs)~C{Q8!wkN=;ezhJpe&m;;$L8sAZS(Y_Hwbszk5;ZifL@n~TDS&zLKk&tuqy4Y-T-pYiYs-)|nOX?K z;hGvWt+~cr<1^QWc0<#+jHXWyqb4o6rg_{Yy4*j`Pquy;`kekchMVQa7e4Q}ym!NL zzZ~15HODOEVU9tLA@^w>e!S6Rg=I0pay!9tUZyoI%etVtNV$%f zWG%ER|LpwWU%J2`h*%QTsbM%G#wEu&>x zLuH5{c`%~2c8Q1q^DV!p^~=il_x&NkXs%78Wze*yWST{;IX1*-uB|lK2&A(FS}VZKlq z`9*(Q%g3HC_p}Buu5Gz44;RgK^+1PpSk8+^JFG@?ZjNg@EXR-0SLYh9e~m;2>*TH11*EY_p*nk=OCWO=$SvM`-M8lLQHSuQ@t zn*;*_36^PE3l?iMS+GVf(=Ll?nJ}6x%d%XDu$Cb#EG!AJ7MhmP2t%#4!&(vy(nS8b zW0r}p;zJ7p#6ZhrGL6>IvO=Rp4Uz_7!5Ud>u32lDOoLpPWihQe2DuiIYLba2*Ib(r zK{VpG{UvQ#7Jh?27cgJ|4VujR=gmz>*agjP)0!qmL!pu3z@owHzG# z#{h=NLE9eW+JnVhTcf)-HfY|s#j zICMGwXuq6a$}j1k{>D3eW&R2N+CR<c|7~Jqfs4@y z%d$qS$u(<@=9=YO|I~lzJM=&DSG`!M$h7XnT6b&7v~WO(05*KSPd@Wr?1L0zgmhY3 zB#B8xiP3-nVh}|HS@RM6hrWY)2{^-N_i1pyj^E}dx z0&>EK#4J&4%Rcrm%XkZQb&DaDZ1Oy{+*s;t`6+y%_ z;3y9k(=vG)BQb(`@fTY=!*2T#1~H(DL=$T?jc6U#kYGTJVgMr_@&(LPEvhKBM601$ zu4^K6K`e*_0j0rPepR#U*nd*NpahMEGcq}7hCz7)+ zW&EGyXIn<=9Sjjngsqzwiw0FxOO=MjvX;fVWIc-k3{<%5TbWJA{%RT(h!P`OnykfI zlQo@)y(mGDaNL?vf4o23U+cI$ST{ks5%^F);>AO&5JW+wI$9!Hme>ptAtHhZh%f$6 zZkb7+&ixDqz!+N7C?a!Bqt+4(5(5Un0Qa88{I$QoKV6flMTVLTl>nxK;h+^ts~kx? ztqGZHLIjMof&q|g{0cMav)vw>y z)~Iji-~|;H2t`vUtwFUA(F#mMUyOoT`&e6M&?o!}ReFn=bBAM;ELdsR96aW){e?7Y zEV9?6Ss);QAmh(|f|C~lN@vJ2JGE3Atw7L?8~t&NF@yv**!%Mu2GOMcQdW z(-Z3qF(Q4D;GR*X#S1T%>kHF_C=@nvlpgbP7lbOdB}LsxI!r2BBe9{0ksd$c*)!*_ zJ0Tz_NQ?vtYC*`5(Hh1W31Bb+EI@K?RBOmeh(fRcigEblE(k=WwKR4Sqe07B6~=S| zf&q*?-8E*-!JmUDt$?8w9h+;KplU$`34Q5~Q%locqms;P1QfA|0dW-SVt}ZYrD&C! z6bYKM0R#{Rz^whzw#=9lKQ7m0L=bmWl$u?YwfV=x%}Gyboc@*8YNK!O1wV8B61rIH*IN(`XV8ez|+V_vkT)x1_FC5Z;9 zfRb_)PzC5^3jwSWyIP_(X-G-HAc7IVfS_*r|7XcZ{f{$JMjMBDm~+koD6I_cA0_g# zh_vW6wFChKgN#>zDy_v38pkGYthpDELFpQJb`Sk{9Xn@FTD>>s5?uq=yZ zfe~VZM8_dmsOW-F8JPP)G)ZU;R%r zE6)0FfXHY^oEy1a$i0XI4jns2H0PGvU2ct`b=#=J?kS>D*e(dRH1p2uG}3{{ptt>Q zXT-_ItXZom)I#k7PX?Da3|n z`(|gvb&n9D1W6-+KwPKeG)z^h|=y~z_Km`i^&Lx49B;yW6cOYx?4Q?fU-E- zo?u~GaG6Fd2?8`0dG4Ywo+GQ`e52D94REokcbnFtmmq_dRNrGLopdP0k@L=Pt*H-^@(dc+EYG zi~!*v%@;2m_ux^F(+e(OfrjCu9=U3HI&Y8VVOWQpf5uGM`9ED@3`hWp4n;bw3CouC zrr1Ov67MkTFFqZc!PvwFM2J1EJZ-6ng~f7Rcgyi~UHtf&aQ4%Sil9hWAS&%b#fr2n z%OVm%h=36ocbn4%h$CVQU<@{GjGaS2fivYT_&bwA{;*h>Mh&>kfs$7 zLu;I9G7TCTv;v3$M5TMdsGsX}gTY_`3{3tq~!T z$6bb;2VHQ=40xOmZx0Y@Ls)o)dCwp$T;TXqM{IhZj5I8|lZ-y|`p2&_3nTBHKJ(T* zz26Mj`M^U#0b&bCj6jUJ&WknOEC>$89uZDFe(2V3tBDO@AP&R`0qI8rhU0H^!K&gS z=(NPd(x@j3>uz_L0ms~!Agw?kfC!+HQA0XRvRoq&L1K&u$KPN>Z}nFT5ePzr2t;CJ zd=Q8b<3n$B{3^0wn#EdBT4C*(F6-o| zzv;Q(*>lqxR!Q@*9x-a(+`K*VG>_{JOYgMpUAk_NfOHj=euN+-7BN{XM1aH|5+nT) zaRJ+}yp)A+dX;O51Cg!)$03mgc;ZcKI>>dgLaTN0xTW{>5n>ZCNH8Kuv!*2&A&sVp zfRTuRfH6iQ0Xi{Axb({HEb2G#atR0#0zznFFxbRmAw$c=nkGz3+1;8JglKZjl3VjX z8CoMsUqC{)q>M%$79ha}!~jSug27;n1mhdLK8yX*pOF}Z&>D=O6$&5<#!*zMsYTET zji}2~moAGMe4s}ywd0PXD*{Ml*xtkBY2GNq(#oJ={0S$r`1ij*7>1((sGu=M#K`EP zIX1`0Id5z<$EHEnEVVV~8fhbdM!;s_&2=4E>q&;j+JG7J22bRmy!Pv6F@u0qq!mYX zI~>>Lafjq_t2tUnExFT>R_Q7S{hd7N#-SkH2oQS*|0oP^`4&#vw}lN?UHS&M4{dp} zwXqXN6ob-@jP~+8*L9k=uFJ^6f;CI+s-uKR3_{GPAQPs=gwbRggCmegj8Oe$5_7_hxA!>v<^%+SK_Ubp0z^_QFgtX^gqF1?Cd<-DBn!Q2sjb-@L=+jBoceUU=U(&&%?IUU;jSOi;)!qhTd#5%0C zOjvoi&~)R)OU=uo(MTi)jEWjN6G}qqvd|?qQG!4aqks^b{rB2KfBkdpGZ^Hw3pO0{ z%|#;I{q7y!_4)_|42B{UZ6pP8F{E9VEYqTDS(e3`>t%?z)VK_!FRgTqfN^Y^+gwu= z06Ss4Vc6_>*d7L7>*)~MyWbr+<2D$>vDfXr*7J}6NF*SDpb?OT2u<=l=UkI>m)n}M z)GtO58$cE)2q{XJhXXQJw5NcLfj!sV!{FEa4h`MAKbZFCdV&CK{j_`cc{qkPVi+qL zgD&KL(t}(>7ipK=R)M;BsmUV75eI!@(F3Fb_S|d_gV#DE(tYrQ=|22T(S47-Yn?$G zSzM7Yz6U~g$2sTeI^Bx1AdU$L5r_~U?R8nKk!28x#DUlW!3f##FYjUST2Byx$aNk} z|Cs+U5%~Uk59mQ85^O@n(5-RCGR@nUSj@6cFP4>s&IBV6BcKrhB!bqud)}qpoN8P)kLW!P8Dwg&&*l$9tM6s+3e&)@!4~>KP=7#afuq5|Y*;L`;56sXz=y z3|#{vDvi=eNIAtI!AJ}W(i%|4ZWTp!3&ZCi>Ua5yd!N)*9YheR_FAvGHhCUF2%;tl zilvEIYt6O&7@?Yg0J2bt4eD_AxBx+nV2}U;24Eb5r5s>*>-Lh8ORnAflr}W|Y9#Sm zYx35+V?*AtHRN$2W$6uf78pUWeDQ)|F(d3Ap_ZaDUQzGAyZ4W)mRe%#+DMYU?HGBw zbQ3|2>o68L0|Z%cBuclen=Z@3bQ4)b1%an!Sj7GahwE3Md(?eZRP572ti6WzhJ`Vk z)@8{x=V`7h#}_V}0jIAqM2KSqfk;R#CW}IpOaKdsF$n~o_T&-e;34bBFmTE4-UH8V zP^Br?g}uBMym~~I=;|`LU5C#LzU2hIEZYLTigW z?VTA`K_HA&TG_px{$nGGBHfCt)vCd>7fquV*Ja(jeSx^t_MImE*ozo} z&^%rqE{jD3S#adaD;ZU`jNPCp>b4R0Q$!UN=)Bx7Uf$TnbXnFjtlTcF2f4a_sd+Ad z0gRCd2%+CD8M2lsITmA(AjB9DxbjK{_bVt10b69`R#6KrwQSKE4XWs|u=&R0WZ-TUDf#wgj~0 z#nP&k-U1n=MJuW~x0Wo`(o!wO150i7H30-L2JIk#4Y>_Dz0qJ$1OcvpeFhx_8Q!{1 zExTh7QLx1>HZzu2MfB9S?MPCdANS5op&KJG7_6ObX~BlgG`qD2+|d9^$9Y# z?NQS~9fL?YZrxT<=+KljdGmUv!AEiKu;9Q_J8-8a5+j1dD3M@X&=M^s z3R*zKNQ}XFt2;8d?PuPmq8?b!$Wlv{v5J(s^~9I@c+Nt#)DjaGioFPJ_HMR;Dx*czl5GrcrM02`_-?xu6xG*UQ_%7(&nsG&`yxs~9yW3eOa7s!AQ+@o zA|PROgOZjn(shq{{=mj}vkefuXk1iL#%?IPbrIe3Z+jzKkcF(B(w=qd@VE!_xMzZm zOYgAbWNZNG3PdbVhup7I9Kqkaj{e4XvynzUdyM7aC{z&+^my34J8HcglVkMEx?rzo zSeW}R=Y@s2dg<*snHZZ0Muu-Ul}c;J~zXbils7q zmvtQmn|4~>*pOveYh+zqWG&0Yv^2FS82lVh}&2sM)C_~c7(?|n5AA#@Fb zbQKyYYL1b6X$}AF`Mm?b{^=k{tsm10l#JCXgaaE#hyY4Av}*Lyvs@clBea6%nnGHG z)*OrHo&h&LpYa+Qf4Sz|p#&ja0Ur23`mf}0FaQS_-fCHtDkCjLv<@(=Xq9cvxsv7` zf@q;BZ*LcLK&NeF2HxSQ0Xsk(XC2PVyGOX&=HA!)i!gXJ!&^l}IdEWv2x7@tRj|dF zASU$at!wG1@p#btq#j#T`ZOs)?zIzmT5NJ$bbS7gc!hJfFjjIyR=IUB1j}Z#KFBc zbxBNf^r?(NES2$!!bV1xs3oAdTG#cm@ajt<}&XL?$i7!)L+T6Qwn>U>RQo zLEh1up5NK{A4>PsQyDy13I!RfHYg)EL!n?PQt7oM%JtcsizxTGwjA?3o_iMTec<_> z1q)$#F}EGw_2B!`z30Q}o_t+~w~A6a=6pvo(k?2t7+P4OdEQ%|uglxlgT;TzOg#9~ z#fjiRQKuZ&WjGM?2JhT^2L~E+`|}4Z6{Czj7#bE((!mxbRZHRMtmwr3~G#k1OsAZh?E#LQNbXQe7XLE!)+1raLG{#-*({+}O!7$gQTU@%fZRFnlqgGLiHK}!%Yv<4$Y2*O`H8~F1k zqX8N~Lo1MT%WVh+46Wgp+}wG<1CX%!m!vN$SY9;Zd__upuIFO#$^Y{M01_~U)(FxS zL^7_DbFP&rBCQ~(AV?VAcC8ulu+!+u!lj#Yy1f4vK=)B^LHp4EwzGLNmMSuGt1aq* zJ2Lp>_c%b;(3%E`j5RoJIPVzqIM4w{obe84#5s3rWDz6jvJU3jX}#%(@BM-Aj0m^8 zOXue=hsQX)gW=WpSPftpAE6j83-m^h*5z7bY{m-l4IeTi&cA=r^y1gBnyb73&X zRN|BNezFGvWZ<`v&P5wp2q+_0|ADI`L`KFY0zrsC1jjAY7%dC2EJT705F;@HL37LX zGlEB1hd_)GMTn6I3SyIG4Vf4t!T5*u-qSZoz-!*V^P~?2l#3X)#ZpGDzR5-;28lf& zqC_PY!6LE%Au46ETtf!I7*GTw5DkaCAhYtsTZsV?lmvqyNYW)qIVL6}-`|;?=lHjR z@#6Q_`3>It2Ai>h3LbM{X!T828!!d~Mgj%|6*P)L7MeWHu@x%xr7sbp0bcGqn;D1Q zkwGIE1nK5FkBcaZk>2*S&U4;1wAVYcIqma#f44j0c4v-Iiz-EiSHGgwEZ7(@253M8 z5l5M)xh>D7FMUJ*Rc@LY`~;WTLq^8NLO088-tkc$+*$pkMBr(kw&Bc2`EwuT2u2~O zjNJE%Rs(U!VCYAH&LYdY8_P0}r7H_}_idP+&wiM(NhcDC5el)8SQo5EF?YIIhu`KR z+BMg^qFLaX4%Utl`<{O_qoX0l5fNe&AueRHutY2B3B*Vo5sbj$htH719y@>pgxEna zNNQ3RG0K|61~~Vx?7iZDs|okL*&>Ld;6+0hJz_Nygh&L41cwxgwumkOX$d(7v#gU~ zBzA&EAlKSGL%97e1wk+%28pCH5mK3=N^1wf!2V&3F^7gkV>GI-J3KL(7! z7$d>ZHDDBs5Q(UxN@z4qqeas)z+j{+5kSJWpNm;~~#=z8E0RYqQMv5bsF7A|9B=iD*-I4*0k?w-cDIH$iLv-QTe zicJIw0+D7V>#z=3SOCF*@j8#*<0rg&fR}UIzw)tu)yMj=f3AyAaUtg`kqD8&2t;r~ zhyi1;B5?G@qg)Jt_r< z$|>{(kX9QdaxE>TNyRYId%yP{`~JCo^u?knXf7J14oD2GL1Hi%1S$xiUh&J_^omih z-rVLIWGEC6kgf#4;LClv%-VCWKhO%Yn0b2u(=+hjp3`IBv+e7ss1|DJ6%1c&S%P8E zU@&mSIhS8y7%2g8%^SRe(fhu6=tORt!K#s4j4?>RRj(net1 zT8p)0Zj0C%&KrDPL+pDcF9@R8e}lKWf?+LXXo0!-dRMTDz7nG`t(8t|orVz+S>Ux# zpFvx1x{DqX3C7SW6{(aMO$ZPnHssX148eKt^KhjUx#HA2-kY&%m4Yz{0f{mGZWptP zzR&Y0X(7zeVPOG6z({N&y!cyT7T@l$7}Esf0JH`{bks0lkN^nW>s}*($NCNKc4*2mrj9l)^Qg`AuB zHs-nRGU}Xr{mZw%%N;Mgit#o|A%J20v;WJh$c{&V+~z(S)LiWt`bOYYZkb73cp8L} zHtCdnWk%qC`s=P5v8X#vw=L0595Ud;9=3}7WT!K@&<*qckyg$)gW0_2hk!T`8NCI| zLWk8Qc4B1ks)t>9P+am3ZL!-xB+^E%{BKr?9q;KGalnOjk`~rY1R~PUeYVUfu74B` z1c?N#rDY=LRhB>}1_{O>S3c~h#oFB(?X<2z#yHN3$J_BV(fS;_q3|05|qLq#4v20>oE_q z9dG3UI}8|2=C&qPSXKZ8V?Z?WD!0rmu75EGFpLaxjn2r~&>C6^Ai+G^l{a3%j(7Mc zy_HRZ0=5*b0b?*2$#t)L(Cm0CZ)H=kVhp59jt$K<4vZAu;X7n@@40ZIH4e==4;#7W zY*@qyx%Uljv2zEo|rU0?if5=0axRlXtX{L8t$P*?;2p&e*WzoG)tBKH}z z2OW;KpbIRu9Ne^I!x;#9ZZ)g*aTw}M=0@Tv2O0yVXTL3j)8xRspCBb`O#u)Zh6P9a^U0k|3cOXXE z2t2`#Wn;sQH$>u?Wle{5I4HuBi?E#D;3^h+6Rpd-OzJXdWy!S)K_*lH0~kmWglMi!mc?2cnpOxUwXC2L>>$$` z5laMvgjfF-mX!_HJYN-PhlhFCIt(Fdq-mZTL4ry!GPssLU0Yex!g5=qLC_kF44o8$ zrZr9=PP*x(v%H>v=Upsfd73xp?I8w`;RFrA5JR7}w)%X1_UG?2drfN^x;)J}Z>)pm zjZHSd-UqPUKJ?fT>t^1!8!YsIjW!4pgMgr5ArlrRt05Mx*3G(LxvodYCD+x>ZRFLn z{2q3c#AsdCB$jnpnCr5PV6Al#DJ)t8q>>c3qg@senzWi|G;z6RnhGMxG-zOg&=qweG2qlRwY@&o1f#G-(juefTtS(} zVJbqc=mc!KHOuk&_ud6mZZq!EkRUlGt!2z57!Wa4Q-~0V(bV*fSAFBfG9jxqt&Abp zNFqaSt3i_;r0b>^WO?5FP~>qFk^7Kq+@ypwPaqOnfk1$ zA=go^H9;ZQjj}Gwx=c(OnG{x&YE1uh-{m+FsgT4Pqo?LQ5mk8nV}P!v%X2U+3TrEb`C%1^>~PEowCx z%rSJi-RtfhBj_#MljZ;4`Kh0-&(;ZpU4$veH4_lfI1!J(>EHX;oqQ+)CPfi?9;>m;R|P)^yUkEP_TJHWPadH3TAiUh0>8H?427GW^yLoQQVPq_tR--JP=|CP?o1quuyWR?#2-U;QgB+UxVx zag!2+))KAA(nzey`mUe9Lh!A>=t58;($qX{ge`1PATZtNhdOZstMHHiH-G#q5}%)o zrpcNTk)^rFxk1Z!{d_CNZ~aSML7ww<>1^>UVGIQ`Q z5G3|uV~a{OSQRWpNoChuIQV#$>d$-)qCpB21d(VEj84WT#zZG0<}KWimFINuE+q&C z3}6sYKu`!4kU*hYp28A-vNup<9weefj7W?`x&|>p5CJZFMpmMSo^~jM+G|xPRS*=l zN+t;tB}@7NkKt6I6=M)EQWJn65d%2UiWl9VmFc0UY#11;ilA7kfmA?ES;$g9&_*L!nwCAd?|$m)sG@-%t(UBrysgAY+4IdQbiY ztYFt|rZqw&paMNbf`KZkN^ii@Kbcog5EM`lf(+UO0}v#y`?*=sUbgNs0gWJlRsm5F zN=4cvC){cVaH~U}K>-2LC>TWT1ThALw{ZWxtZ?ht%OrpSBO)q-I$;o{z4i$ zAUc837%;~i$;x`&Wk@SsF<7OPDPZmPS#s%fzcb2d9*6-FX$1+uftS0U7503?9$M8> zQA0wAljSpLRfC?+Wjj41tMj%4LswQg4jl~gRWtY86~w$GOBd!G>mqA8Gw zlk^Xqv7QzA`pfo%01XJ3C{hnOff;+mU5g1x1T&!o5tv_n2`lykTi2j~MpK{#6j{4{ z)@*oZM`o^KDhd^pNVdI0S;5bzi?m7v(LhxtJj1cf+%x|#WpWZhX@#smV>c`OH@tH_ zf>p}gQYF5vGiT4G_dGADX`XT_gaX)m%+;*;cc1a2K@)&%M5wI}bj=*4eb>T2+%^&Cfo3UlD+;`~oB<)at{Z@!_->dch5|X~Qdd@yz$`-g(R>3IefN@rNLp0+DQa zoF{l&M;*S9obi5<(>GU3=1l-pb3JRX2RHV>U$qo55s7 zm(Z$+leD$|Rh~YpUiTjZMM88U1CW&*9U&w{OfawYkXg0+8YPMX(J6LT_7OsopavlD zGiO$D6Dxu+6$D7*ijEM9QbMcZ+hfVoXD<8h#@8bey;%%Ck-;;uFC8}!4j}!vI4{voq>X2Ai-T>Vs>wv zAdmpbByCvPe{PUS216XVV+FW?%6f%iold)f`E{) zqW?qyCKR1yBIUMOwT*I@Bt=yEab-7PCXIo~M45P7v+5)#3otlM!48lW+<;KQ2&E9M zZL{hUiZWuTB0xGT_%&@n$OHnBThFRnn`w$905O7%D>t)%kPyr?p~%~sRYy*!K{S{G z2`he)u1HCuJZSf9+Wnw7i9lj7Ktfh>8xSarAW==c^=x`N%Xt#P+Eu}T2C{N;GJ$KKd zotJ$5e2#DEcydUl>k*L zNnx|HAE?eN6+@`9WXcOZ-Rya~offe)go$WCAX&*-gfImRRZcL$yyj0md+y3!tU!bk z2q6>Tiq0ZRB$Y4`gvfn%&zeh~x^@X>LNZAL1qfNujX)@3G^$YZs*N|9HE*IQF_wv% z5&|T+!s}K78U!>T_t-sKF1ahpUX0NgCe(%%{z-tCK!mC)-S&CUmM`3tOlm|;72j)d z4X9Fu1x6}(jeE|L2mQ=dYCsWU80iX+gn+3`kwAb{=|40}{$7-+lu!YYII!YRM42kg zk~G*J05XT$$V~w0uZ1=fUNuwNDN>qkd#<+{fFMxthnSKQVW6wk-o_H8XR3s z04I=&bH&>BQ}3P)JMU8Ed|o96M8HG$O-jZTs9XX8RD#?Y{B(jeX9{r)J8x za_%*k)O-3rB^z5a&Dgl)BRDZLikGOodSTc6K4;!|3H>zx(C`T_jcsObKldSEbKDx+ z49z!IPSb62;gWg8BkHABueOaXeWtd9?L#nQ8{6hu?GyD1aL*^daO;xT{Y$ zvUl5`#D%NePxB9D?%a^^S&i2|we7Th4Cdj8BwDXmN{D&E*Lt`8tJDkr6)&B6mGx?^ zyqd7u=H|n=oB3ql*wvPZDHS3w{wE!C=l!e9C69FL!nC!xQC{rEQWJ7vIG*f|)3fXp>cl|1#VZ;8di?I7KUhtMjV&*DUbLPy$YhKH; zF*dg!jBSG;q>04<)+DK^LWM(a@mgQe|8<+!eaY_K>)Frl-Mrl0Z|j)1wKGn8QL40X zj?C4nUL&-OT|Ss|-qviJPf1J$5@SS5z|0@#o&5^0^0mI3AN%>8fRvGxmARFYDzp%p z!9K@wy?lN!Zo@`+=}IOI>f}^}SRxdbnUh3oqEH33v{DsHp|rddVXpg-Y$IF3=RQSA zAW#&ABBhjA;I5()tzc263Jal3y?R-zZMMyIl#l0NY9(4AF^B*YY5*xo6@n2ey%h5> zCncGKe7-)%w9yIk@tk8DY<7KRGBHU76r*TSP({Hsp9BF8T0x&6JEHkH+dF{eVC?;!~ z2Q4BLDTK;Wy&~-LQ62ka!#1lxm%QPS-WAEkM8Vnt-+v~iU0_~NCgvu21$j8 zXfQ<-J1;ZFu#eB&PEjOIv|@;nuBM{$T|S-B8dSaA)paJG7pmoDTqj*f+>PG80-V}Ii?i=gCPir8Vo{e z5}SZdrcz8r1VIQhMn1^pb`aVakpPkaQ6d3@v_@(|n969HF~ep)_8G0LSZr<9tQSE~ z(mrIzUG8US!F=*L*R95Dl|deFKIGGdKF1m(%&?gDT2s83bGEyX4|>R$3k!2?4O-Ch zFtgll^0D9CZkYQmR+hI8^DuvI4^~h(AczzI05Ev~odGIB0cHU{kwlzJrK7&0qPChl z&=Lt}ZsBO&hW=*5R?GlvllTrgK6#d-`8l8F1L*hi59vO^yud$I{Lw$ge=GL^<^%S- z)nm~&pa=CY_MK%OfFHBIn*X>T318X&=Xzjjp?x#_5Bbis-YEHz^w+k0r5?NQ_wRj* zc1OSq@?Yrx>O12*X*Qqso`D|I{kQ&Kt9;HpE$jvSr}@A9|6l*$_+EM^um|$5=^y4l z#C}%&NB^1sJMI(P7t_D>zs`O<{eu4@{*C^#`}g^O{r~1a|NsB{(Dl*#ckDy@Y4`Fy zgK7rX@=sj`**fXZ@)W2U1OT-0;e`g&4X@;xzSe=p9LZ|GGJG8-8g-&YNBz5&{1I1fbdH)<90?5On`4+fm0UUbFv=YoU(IvsIoe6u zNZS?&7#rwloM%-ey#7LE2*oqS7+zO++XbQV_1B*BjVHTkk}KCyum?PXi~%RA+)8Lt zjx@0paeg%a+wfvdpnDnrzWbSRT0cB*{YvPDnMs3@m4~ig7O964SO}ZoLR-*?gy`3} zPy{39*`UQI3(5K(t)P?KpnA-0sRlfRmp(3ne~zR$jxc;2+*pL|HJ`~m&Dj>P>$CmH zC^xw{kA52n2JHjC{8gp{dj`}EuirHD7ocNGwJHb!;t?J0B^p&8Pw-SH%;}bhWBWGm z&u4w+R5KXcraB2DhvD^u<6-5c#Di>|bkv0{=&S$!jYT_CXS2ru1eg6VgA8_DJcHw* z^jsppTyN~F#G8zE8kBfUsoPLLDyofK)k94CkQM(zKSUokL0bCWy}^nETQ5I&KBZ&p zr{0QNR@v3?Q?Lm$66`#}?cRfIopbrxwU)gCqrdN7<|9fZ3+?iSU_=NI)`tMsId3ra zRNpMI*50E;DACJ8b9_G|Tvbd#kRD5B*=9Xi5J`FHeOu zIpDL!J|4nBB;`*!&NK2n05i00R4Bf}`SHuAKgdjH>K|=dGp>)DksU@BSnCidON@Mb zL|=@aC5VribFA^AWt!Grxk#Ti*B-L~0RFrL04&~RR6`0;KmWzVzKhb30Qm&G13&>1 z?#h4w7hd3(<~0EaX#f<$+H?EgW$=PKx8H}z%>Bdz4)4d1p;biElNg~Pa>-HECjQ+qEY?jsfCzRZw6zAjN}&bQW;?{I1u zem!AbC)I&Hva$RB^dRnn;q&yQk`-r#T9v^_Ashg>xIXNq?coHWxbUE6&Gcp)#sM~9 za5VO+9g9w7&)MBDp%d(325tWDSTc;NUSG55OTN$m zfU4r53x4RP!9BSzS{i}g`NVTI-?n9D()jh}^d84$Wj&d34m|ffZdmxOv2Y7K$A>#L zLgXT~flEkzBcEfNMaf(O1Q^BEA~9MDO+?+wJC5S!4lKgccM(a8OF0z;TeR#&M9`N~ z78(UaZtOp~Fv2Hu92jIl5Bda-nAWlf>3Oho2iAf*q>I@O9wVTDt(coa2$TTFynq{N zSOSLs3(}dtG|^hGVp>0Y7CjsFTl-)_&5a<%=o3kC;XEo65z+y2a_;cfMn@_oLGvm| z7+y+>OweB6dg1T;7nhi7AN+VB2KdO<{CfSR7!nK@ae&XlIALiLd($&#rCjpFeL zXl_Mu;f1F%&4KZ+Tn^*AjurgWy+c!xR;2ZwJnmB$ZK@VYvtuJaME_jYfYiNodwo`H z?zxRii$-?YA0eoSGef@pkLr0ZLudI^obole$9$JFnZ|zK_k!%Mw8OzbG&%qNOkC0i zdSUZzyo^tS1OLf9-rCu4pA7pi{#ozw-xp%`X}gZoZ2a&vl(P){7giF?EJw+kpMUcB zEod_*$5dB5;;dg?9%%T;*yV4z@^BA${CwTsbtennV?;#xC|Ymk>rYpohshkRtcaBN znIV}+?YR>3PTlc$BSOUL$xKgdp$MZI>(v??7u4Gtjfe@vOf~*#; zGU?l?(v&6q*=fRMZ%C;6dpR_XP$@pA(;tng;J77!XUz=q>_-?*Mxwwq$in}F{wyUQ z^GWm+fFwyBaVsuIg>{Q<3<7m8clb|6@Y=(E<9(3I$je?YN3N3z_?yl2Oc_t9T#SF4 z$*aWKzXof4QNq5?tJfeO9?rD9mgvcRXK$Y*pCS|F3%6aq|j-4H> zD^^$u#Wedb&MZh0Zt@^5S(apXr6*duih}1=ms$Tvqk!nRis^maaq@Ux%efH&clqu_ z!A3$mw6o+Rzo=RO-wNbQ>?O3o!yNn6J8ShB>UN>lA!OTf@H}Yk&Mg)&I}lVp%M2u~ zV2+!_ABZE8M#rxP+Mw3^DTf0}tCn&;eKM2>=;Sa2gcqfd!|?<(wYY z!;bl(VfQc;iWP$TCfJn=S8D~USwPL2Y~N;~UZG_sqFfEXC@rd=`35YGUB;$#yP4WI z+}%HI`p;Y0LWt(tHZM;4H!kqeC(@Rq;mmAZOKE@1xmltG|G#JsjT&Wb@}esKG*q)8 zPrdgv1iSDK_KCon1tvNv(Y|7HcZ(L`>Tg6-I%f99s6(a(eyi{Y0f= zH?FbD^}^&jcMD~JRXe-*Ok;y#@Dt+a!Bqkg!b{T;d0O@$e)9O)SfWgs+8k@Zc-2Dtr0!Cb^1Uqj zbIeRv^Xhn<{0N7qsBPY}eUpD?q@kjdXvoIysY2X~)hJbRrADe$&XkxPybZ{gEqb#d zu?)887$}H6eK#Ip+1qP*nllntAlhO5v@>y^O`N<;&2nUG|28A+`pV8#<>5wJz#n|_ z@g^a@NPPaLeLx8R5wg~|H1>=C2zeqn0SM|MprNPlfK!eEoR+(DFFD*iv{QTWSx~g# z+a$x%c#8V_-dnJ40H{h!&07JP-Si*xG4TpPl&SVy z6xlhE+kAOGJXhVzk<2K#_C+1+w4v2=CDTlS`sp{4T5z3tWH7Unz-IiFD>WM4TRLt> zbv>^*rNj@Fx)J^uJ5v~5-u0l6)m^H{y*#gG_cR%}a=$WZaPr;$MfdGWeHB796@0A> z!TCX`nXG?clnmq8FV{SH#Kj@CA022g&1$LJl_jxa@gcIj7t?MT(0_uoK1e16q{Qpr zvOX(6gjuyo5{4$}r1=tLh)c}q7&A1Itz+UW7T1|xBc5j*(_iaK9mC#FaQA+9Z=Db7< zf)!!eZ+$Afel^g~a>d!pEsVu$Jgp6s*q)E=S)BwJF5uq#+GzIwqB)$q@J)LxKIx>U z@O9@{EWKwbf?QDK7-cWBXEs{HF$c5To=8eXg!+D1;YYv92&y!ihdUv?;n|K>#Dlr@ zN)$-zgCQg9h>3%P7zZd3S%HYbbwq-f*xVuW5v+v$GLtS&j#A2#Z7Ag816J2I;uihy zwVAr={N!IPPe9FWA2CJ|18t?w8&7;Q0T}uG{U=97F`Hn1ej}Sv4G{y*Eeaj4R zkPq+iDlf3jgsjBY(|wJyqBvas_#HzGk^Rv%_rW|ly5?jq$LUk zbyEC;7X1LmN&bsvS@B}nR$xnrIqFI`yWEbaAeqt@PQVY47 z_irvp0$x|KGGa(tp;J) zcT%EnLx6Znw&d0U=5VeOzsoklepu-bmg1;kFx+Ol$j!cOn6!(Xr9g0MNnP=30hX+} zZe3_lr1YZ+$ouo>6jrwQE}D%>qh0oSFo6%?e0-87Nx=qp@hvoVs~{l8 zE>g0{f0&XdN9wO}LCFN`v~F&WBq6c6J^Hq8peLc#C*L|oIpsX4_0(u~1<+%BaPTIb zp2mBu^a6G28^kl0ZcA^fA8F8{ReyfR#g9m;9Qpr>Jd2Gjj#V7PJ=*5w?(qU}v#J)@ zVelAF02$~GGBd?m=q>J@I#dhwcZ4bZA5W7cb)|AQeIwrms?@b7Afw%r$fMLGkOD_; zWrGc`K$RGSHPq8fBXO8II}PHord@MP3KxQ7dY_F2J`I34gg7W{(SAk=h7K;(m(x+e zeIrd-dfaI`JPH{P{vW=eyHCg_#>w`Nuck0+o_`8U9blS%i0Z%ESj{ zecod3(IW;VDlY?Kx-JvK?O7zSgTx*E(IXdxRup_K949{Pe%zJO)#GL33A7}_@LqyH zg|qoU_y^~bM93n;sd{Sc#qV*c1Mw0B5mg3XX0I0-2bL=CWFq%hiM|x{*P8&fe`|dh zLa_|z_%zf{-RpLgi!6asoCaQu?kJHA?wCbe2eqe1yF+w0OV?nnY0? zbI|^eGKvJovp&+gn?3o@B0pLtz3EUz!f-$Ke{hZ7w{mLMBgacp?DV?LYb;O{lS_&{ zbl%}W8QraRG;h1d@!Jab;ZmJPa#M=(+vyFKU-||BY958qT>cMzXUNXdnDM|WA;tU9 zw$Cw&vu_`~CDgtMP^~Z2WNrOsXdX^q4(RjA3-8kV!H6+8ydBhxXYATM~H`&B=yGO3xZMH8# z>T6kGNvZjp8f@2zf?c*v-ePc?Uf-(Ky2hde{sAO{ zT`g2BuEC?P&!`BS?`(ZgM`$gH{@EnESoU;&Z+dGONw%1bL2`9}!4Ur$l6kRUgmFn? z_u40ZruY!EfibzE;IU|L|2!w$gIDO1a7V3|GT+;;IWPV#clYkz4bVImUw1%PkI%io z5nUWXc2Ub4NN8bj<-RSIeCgH%bwvGKED59%)Wc*Wel)lFkwx8^(Wh7A666q79l1v7 z2L!h{wCK%FC%Z#OcJ0Q0`reZO0~^SNXnA=#h_CY9?0&PAfh_?m2${vte(a^Y78Ul2 zl5se1=JXj9@`X(VO;^{;*5JRS5m!|LgP{i}9UQ64n0|8TRo5tIL3>h?JhhR`-Qp(V zVBH4$`u|6N^X$$zIHHiIq=^M#AXfF*Gh*B1g)JmR=6T|!bimLVdDfGINKTZy_&r9@ z`?e`qRyV7#*g{PL6TYO5mk4mA_gjGMSrJg}&eirkqni7qQSw-Hwjw5S0iske#_QbO zXT1rbv9lmnwPECPtB8EveD2VLwRE3g0;Y~B1o5JiwAg;76`|aP%4A~Obo!noyCHr! zx&+qiX@`%8n%kUY>&-0$3T3Ys<1c96mo7p+q89IxB zKp^z?ZUzQ=ijdk z*(`0%79XJ9mI7;yYMk3Rna301$Y0XmjR2OxCd@vw6(mo)ok=w%%$<|KdPD&&R48P%tdLh)5}8Q zzU?z7oKuMGJ^F6vuxH&4V|xy^YC3nyJbu*wQM0^oLr(H_)+w&pi%PQ^u_Ut>W(8-j z7x4;-ufLpr|Ne#9C-$E5GuMlDrxo&Kub#cWeeY$)Q?pNd(pY!SiWCNJN0limE2Oms zj-TR&%$~Y_=CJg$C7EOQ&$^^-2KiqVX-@eHdEjct^V7*w9aV+`rv|91_*o9)cNT`>{-Yb)DPjXoweG)hsO!0~T zw%jMTv;~V*e>!Ws4*R#>y;@lRHNN?7HE*ot&dr6pg=fdVZ>FXmyL+ZEuqSf(X4Qg? zZ9vaq1`TUPOCf`DzeI11jLbcpS&EDrm6WfO4t?D(J&1%MaMl1)0m>sTG(`sz*M7e5uVGM)H}-@iU7(y%ATc+x53$&=99p{E0@ zvqK{rkD$o!G^kY}2Ib>#g)zW^vkAQ|5;%pCoNNXV;<{s``xd49*j+v#>}jXp2uA z$)MTlrMl-O(Xt&sf7(8Lv309{AM^Qk&{(eEs1o0>O3|#(ugCBSEWN=vJy&Pw$3|@$ zRO#2i?oJ|#NF=)AJiM{kIEoDl#qCLR)SwAXmmhB-Y?EGWOpPc#s)RT5H97=G$B0Q4 z-oj2kh+wIU%I+g7(ySsZRR2tdh+Wx8p5NEX&-g-P267-^LH<64-5%JJsYFM`0tHN> zhDA8U1HR-^AD*83r`B9`K3f3ZB@pr*W6)L_;7VdBi&132?Ew)aFJNgPZ~lg9N%EG= zywjuh7ut zqxjDH0tJP_PQx>v4`T>yLJUb!R8L5pGu`Cdo_(?LW7xZyh(w~OZER;f9FIrNyP-!E zQ-EveSphKbIG9FErUV9Hcw0-D+*KOdk{Q4MIZRV<+EWh%Mfrh{C=?ND4&kAYy1Lw_ zEoB5AyQPd|V3~@7vAU)X)o$%>hnlR%V-QrD8JyaJjf=5Jp<>PA7;r3;YTb$B6WbFI zZ`+74GfW$ggxJ$oXfjb~Ls6NlI{OrVCfXXE~>W=nMkG((*P%j>phYCwqH)XJmQ+EkG>W152|Pu`{!fRqsT0 z0Ag+I6}H>Y-L1M?Iyf}k3K5gZBZH8#nP`Lp1cu4rZ70m*ZPpO!whX~RKvxZ!+6oX@ z2$M#qYhv@4Op|y7B*TnJKubxB#j=T11d#}Xc*`(I&g_doF~MH3(lZg=_FT3EqGg;kfvw7d=aL-J$SzBpVBiDY+ic? z0evEs8OH*BO9R*ll)4I=5C&Hueb+f-Sk-S2IPmJStUMfLB7iG;P=z?`{I2s0x zrliK1?}PZHe1EeE&TXk*X~@2;zw5b?e7tokbl0R$(GIaJJ!2n8M78QL_1E2hg)lQ6 z>o%P7Bk+Oy*O{7P`*y_e2-0R&2$y%}2%p2Lq!_06;g^hm4N*sTJvCmZhkng#rzG78 z{Q7RVl5eFRuZEa*V0x!>UlidnYSE`q1zC9|yOhzoMZ zPnS{6MZZnV_8iz%Fgv;IK_Wd0D;bybYc2B#V^-)xxgxRFOazqfW$k&}H06{B|9le$3WQDUGh7FG_!_A!Qew1cz3HvfgL z2wv=TR1%au=iCWw!!QHCqW^%1E-w(@zLw^6BAk6P6vqyX{O+{XxBYvY=8NKcx96AY z5K-uSk?nMQKKW@y)wi4jc^<(`Ft)>+$74pqqn8itN>|z_R)!HJb>$=g6p(PZS@P%L z`NA@f(uY6Ujc~l=)kG)5r?o?-*`zO7_Wv<;)p*Rtq*vhf4~8Y|=cPCLd3=4nSWx!P zK~OCB>8%Wpr3U55Gv1vFzN_#n@R9?A(|sDc(* zD6!(VndobyV!NSI@?L{MqcKbWlk4O*>!nF}>OIgyAyL9lQrkYJ~!n? zCJbw(n_YAOsf*U(^njp5$D_P>nwAn=Ul&0zZ{iQ~(@@PQq_YTo^Mmc5upH&#!sYiF z=)FnJ$q@V#1fPjbI&6+0KGFwsUv(3AqMGvXdk_dNpU*5q;4N|4=%p*}9n{g?xf14d zJ!mSCM?BvMV&kDi0$fS%qG8@~6pDvx264}O^Kfhi+!708d%@zUT<;8p!LN0jPi^7a z8|$=;OfZHC7F4@|45CGF)Y2Ve8vwt)WW=JoKXVQFOm9$+b$T?QCJ zsv9_&3ma}#-95&Ho0%~^GSC?oW*H&`GWK5d<3z*z#apX>Si8nJhES~pDZ+p;?6efE zq=%Plc1C^<69;dD1Q7cKL15(r9VnoTlh2*`^U19RX)A_II?)TlfHNdcWa19eLgEV9i+!8%#Dga9)SB_yb60@wH_gB%jj3eRphWYblw+VtAwM65Wizt$~}d%k{r9l@(tF1lyyHj`mF?wLvh7X3Xkw zrO*!q)&u+(pZhEfgazS{p0Sx6;K`0}O$Aeh(dVc@3|oUF_Yqef{lTm#r|< z>A?k!y8d{l1*|lNq|xiVA93_ism_lZGgmDR&Hcoh0k{$>$sa=zkNkv(dI{og(- zbo)6;KoVkb;0Ye@<=&B{=40LW1t&mY3vo(O5(j3GP}=qDsmWHsPs`ajVJcMMY^@f< z$kLhsS@;jsPk3n0i;%auGKl(~Z1?hV2~}@s!iSTk$Fc=^mMfJn_S1w1ot?952RFs+}H6 z&JUe<>U9sQlkBWYRx7Q%kFEK=_<3;a5`m|+i^m0nVdJj{>e_8f_MX^d1_2)j$nUOG z*41+-?En5(OuL9+F!yG0DQ~AxL8F~@Gg-D17?IJ)H6x#PenPpWb+wuK6CMt850B5fy)TJ__dbNO~#;^gIhc zLlZ}0^kEvkaa_j(hFPUApZ2s6nQ|x}{PVGoX9LRD|8`{+*}CGkbGiVB#g4r;cH`%l z4l_02j>-Y;&uj2)T1;n@#$HikUhMkG+`gVaFV8At<0RTN2rg)t5}&5*?QA{!dTKz4 z!2i^uLQPRBAzk5V%nh8iKWXVoMEQ9aX_+Giz2&3SkG%Da1e71WatW-CHwVGbTp54% zE6@f`5su~IE(X9{@N%)t8@Kj>Jw)`z_P+Y6x%$mtf4e1t&kK@}`${4%rd`jtZPzs` zcv<@(Jnz(D))FFR|8rFV!dVn1`158>>qz_T)p<6GNFZ`D!7lJlgf5~Z3mx$JRBoGy zN2~`H3+Kg@lD>cu`(QO?^kZ;Xpv{X{bFl}_X8!6acN@0w0S!2X%%p$>e_!l4yI_1a z`J+a=MuDFI{#zmY`9M8W9i*N*RC77j*;fL6D{mSs$rC9R`RtnvN`RlT-q##5^no{g$33bC*{RqHa84L1F>R%WwxWAqMTu zU=udrT_qFh?g+kh3QR``LP3!+RkIgQLruT#xC#ZDg(l5T3ra;bv$K~#6fBlZAjIDC z0D;YTjjcyoFAjSltaS2-O$1#4!9kEYDI5-y!1*U}FS_&1vKiokm2Bt#VJZX+6$cIN z*r4Y$Yk#C+U<8TF7zm!MlUTwO9r>G5Fq-BsPqQG>U?)UKR+w1w?RIBciUoYLd)YPJ zgGp%5V8nqGtk?Gx*G%PXIpFfdP`mN%guO%@AZ^ve{XDmCr^M_;aLfY&K^LWy>XX^D z2l7l4Ql_c-)xdf2bkqe)>NclCA=^Pp!e3Fdlh11GX&F>Bg9jrh9LAC6j_9Fa&@ltNn^R)a}dSfxl z0mieN`_}b(LcaPOGlr4ErZO2^4IIBr}?+G(A|r;^(SwS-(KY80%Cr&`zLYFkkEae@tEOcr3&s3Fz)3jv=k( zAdnn4X`GDD2cA&5QoXD^JS#t+lLy16d~1E-cI`$wh{3hjX}7ilcqHh;RMn(lG9^84 zn=3-Z@(7%SJ$urinl*nkuVy;Itbmw|G_n@F8z3YiyMbPIUZMN<_x*?5u`vvJqK>9vm8^_fd`Tz3;iR< zKQ^cT!5Da4%xKp`f-wkd0LR_yzdm=Y>(z)RevcTi%`EbOClHp8{;Yj^?p5tSOr|0x z#Oxw&ramMV@U@KTQz*DgNSuA9g@GMtJAj8+O>)SWkEQ&V;{ z{M;kiw_Rn&0|iOeKK92X^NnSf@G6JU}z%G=~L$JwY;vMt?`6cw8rwb!xG9 zRHtWs;v2FC!HAFvQb+-19^7A8x&5@}X(t&GFjdPEts>I3Mb=3hBSJY$Lm`t9EZH)u zab|VNz5QRI$@N)$rbatB7BItq+A1m94@e%6#P%|0!eO?i<8GFm6eh@o<*^Pp9zB<)SvVtr#=a; zjx+Qz`(;HG#1BuMmRwW`9pibT5}G4)-i@YwRM1B!F8??0HWBDl(JhuIazEJOmtxjF z0|F9>Z0Jl3>`T5{Mt#x7W)ss-FLDqpmJb54-I2WeAeM7v@tVoBMNOBqEuKkC%YM#X z4E*u@zYn6d*!V5Z5uTP3naq%i|A(Nf#AD;J3yyO-IX^JpCFfT*SajNX zK!;=A*H>8Z*gguw2} zn3$vr{nGn!J`yxCDCApRtU*%6EeZY0FTtKFFn#4HatlcRS4>yn?geAhfxD%$Xa2e8 znAWVzY3=gXRl`Yc9*O~<*2f-z2^<`iTK>pe?HWF71XX%;b`n{j_C=u}j7m#33 zBgDooqw`DgM&!G5n{B_&B)@{eYwMDY*Y3GhcrbadkbX#HX&~R}I2WTrhS2o@2);Sa zP|-hF8{*oi#f2&oNeD!li)aeSF<`Udn#sZux5;bAxvv_vuNAld-qhz-D0!gK@NO`w zh}G}oP+d~`9-))gWjcCq)D5H%N7WMKgByumL=jq!!txrmA6^#K(EHQ=#) z!{^`iG80|V4anj-t4A6NeS$x5!N2H8GiK=}El_h>5D}&H-{`#vGqgqN53xAtxkeC7 z(8nTGeqY@#b|-Gl$6}M#hIXvzM|tt9J421vPP-w9a?hR5`*nk{j|wv~L@3r0VhEO@ z;_w{}ICei$LeN)~iKAi{_!-AM;MlLLBfnR*>SxlMh&3Yx3en@*t=#a)#g}iQFQM4v z(;g*(bK!sjjS0rk&?li#ggL#x`Ug9l@(2u%kvI?=cNiR-r|GOH3Pm94<%v;07hKlw zG~CWG{nuliyOvA;x78Ijo(|zO)LHO?z#APIO*3tiMfcK4O}+DzPQ6RKM8odu=z0fD$L`UoN8*&T!Za z;XWo00@W2}0CpJIy?`#U{ubtTQfMQ_GC>d>o$U!2UO+(Yfo_-#Jbp;=T3Daut=K+F z&T%StIF0Jl%TiuZ*#<7SfCh5`iDXj9vS`AUraC}|hGsJ|&!ETe|YuVSpVTmW_WZTaexR~07A8x8Qyj&;8s080D?lB)xLS(YRN#8;j!w{ zaU2A&tyb)zqf$B8;HMPK$hoyS_qbWN+_TeqJ$h922Z#$NvMX+mTLUpnm`=ME)aubK z8QiY*mpVyDj{>?(`aK+4M{uwJFC@@O@%5%I_9v3GFvw`r%%S-Ec0&y4`BcAV=Ve2( zy_Xu=PMD~JKmdq5ber^yw*!cZZpGgEuJyo7lLa8GQqD6dG9q)4l{ZKX+lng2wO&;u zUVtW3%c)X@4Tlgch6)*JL4gp!x5*aPW9;Z#;iP0O91H7=B2XW-2Z2tZUCK6PU!H#c z=linwQT4D{#!|zA`DxG7U>0Z(%khvT#Uc@ON0^$g$ux7^6_vYdu-8q@p4xH{k#;lz zpXU0XPnk1pq{+AMgu<=ExZR-bP^(^H6f6PNQnLx=n`?tyh&c1r}%P134atx%DmL1G5UH0 znT7Usl}!{W-vh0lVu#;ahy@_0v*6-;mEPif5mtD~mFnbhU!hsenI*>E+o?LGE>CI^+IVHqwMAO+duKDfuQFu3l^hn}4K67N& ziP2xqSiGI#Jx|jreb@MVoAAT7tFUqcCe!(5MV0BO$~wMzw34Xp111vFE<%nE&*{Eg zDQPB@;PvI--F@Hk?!`Exz&z{Ct5?^va{~N@m-k&MxdSij(*hhX@k&=(x*ESVyM35Q zbZ2B|oy)xaUv1ckcvmpS7l!P9mJU08`5nCS!fJ~2j7IS&S3=Yv50~dsRHe>$j`%hb z-x^={kW}fLx#REok~qn} z7CFU?esrQ!Jt%QUc<}OrM=pB%hTknI;Cb^-(T3JyN=hdUm`umIN(FOLRV=K<=UB(t zrW?`YXJhhQ`hcA@MP@0sH$$l<(*3KKoXV1y2@25m4r3LmJehB`?z+?via_~20rO(9 zd)1k;`b9}z*?}LW0)~FQ6QCdkAgHVE_7z$xc8j~F6WuqmK-5^=68StJd`4=Pf4RQ- z6gcI#i)m5Ujs)1eVq zbKa?J{~~OnR@9#f^D8-MAw^RseN5}MXzWnhd?yr zB@lcfp3ipPv~>4gx)#+W>LRE8!lI3L_)EK|e{sexkUk1H@4O{}Wx}>$MGuSV*cKOI z;K2pWtAb;?LQn@EB+ddpDWVH3?(AEC6}^AK^&lJcR=(e)@Yn7#yxAOG?xGyD54bpn z-rB2Eh=ls)L9#^@JimXvYa~{DFc*LzQm_z+=W{8k1%y^}$>+@{{YonhAT7ok8R52$ z&lWtobIS8ci?5<6g0! zgGacY3AU7JLt~}TF6c$GBTZhmcGe$K8&@C(c?mR1ZcwHWISIp7E+?a z#O@#UiTF_PjLBq~v6uuF-VyFW=6d{LekQI}?C;3a-l~;-h;*rwxIgsq0RpMyjLfFS zhys2rk2XMrh5<9uES$Zsj7kMAn(LZF%%1?9ZJ?$$fppYxf+>Z2SAyDoo4C88;f@!M zrk{RDsf@PKgj@va=hH4r(_NRd04g5(42@S1e}FgBljvVPytqztqIv zCm^UzJohm{>bZY9x29F=H>XpI7cj_CFO%-<{gL~+QmIQ3#bH1Hq}QREi99wzjeo)L zt2Bj+q>{-X`|TMuLCTrZ9huA-F#XB}E8G%c5L%qKHOIqd6u37{JG{4Dy6zEZ|E6@N z+n->!ri{rA#VU{a|GFTkgCh&2S8IwF%1}a7ObG%o;PNHyEYO~Z9i(6qV5!46B=}6T zeb{D!j;5zIL?>S}CLy28si2zKzWHmqc@OTtzWL5=sm2O%Y3dTW`OqHwX`T(193*Y}jqyMQmX%M>C;~ zlc#Z5L0#sK0{J%I{3cgv5Cbr+Sk5<@pgn5b2Oic|e?Dhzu)Ad1bO(KwE>N4aw_Z7~ zht6DttfCC)^C^#C?IL3#42TTUzKpu_>xf6B6$}kmAcGk&3SiODb1QJ2UxP+xdXbXv z+~J|YG96UGmd;wM+W}tJ;s@!dOsAuL$qVaR!)wC;p(|QVPCG2?SQ7zB1cCK;7qNm~ zo?3Q$h5$Gj=`C~~m>_a+x<45;6V$4OC$j(?fah|o0FfYF9#yk z)71@Lt0pej8?*;x@Az7K{aAg9INMqv^l)nu@GL|*8Vd;|G0n_32lKRIHrKLMcdmDn zGN@n%h*D$?JkbJzaBlx>Qp4Bj*6yQ^r1!6i?63Y7)z$V*J75+SGq9dCNox51P}_rq z6Y{L{bksP!j}4$>QUnS~aBxBjnTeibBp>{5e}q6+#!JUi$HfJ-4Gu7?Hn*=msp6YN zorulqjsZv=_CPHd{!WJt@sE@ z5R=_nd%aDeJwNhJ!(X=Qq?u0F8nVln9bUWVQCRO|qvTbQ=pX7rU4pKzLMj`9UjQkW zZ#S%QuJudDZ1inq(+CL60(PaO)lkScKGZp_6u!^8;jQTeZFxmLh4*4*OWQlDKluu{ z5NeHRFG69g@`FbL$=wOe47t(_bcxKIwY-YD{P5Ks9EJ%%E>)&*cl!KO%{2&X>pG5D zCylI8W>)f3kn+*LUXZuVn44&YoG>8Wh-T$WmJ1M7VGGv}R& zQe-=upg(Wc6Qu7=g{J@XjsE>>X5}T4I{Y{IjBvf|@xNK4tNYd4>0j9&lTC~KnHr+c z!HGXTRW6rb&DH455P(zjtmIOmCSQYvn`;Jd_3kaI)?WQtCLgsg6C~eoGcnVB#bN8v zLJooa&gwM23ii%*(RQcbJg8I7bKcTHa1HMFlK zOZmck@y)-w^|?y>!A?1${nzEo{v<@N(B<5Rs@@!Q@`C)-NCYeOn*RQF;PYBThGpuw z^MF{%>1#`~3r}86P($-h`9kR`lXG1mt<$W}fprH&>sFrb_n!ZFNK)S=o7;ZhbiLGN zZPJwflc)6Q%@^(QnIoMcBQ*hif-e$zm%o+XyC7JMDifFVhC8h*>^L{y5uuzGblzHW zt5SQVZ}Ry+k7#~B*fns@IlNgZ=)1`u{dmFak0F{71-8ax*G&5tKdJZby*DK$m;1Zl zSx@dVbHLon2A{8-|(P`-T*fLdo5D zcce#RMy)p^s}GHamHN<%^ew9<*N&xsy;gN~Nt9GEU@}u2cFfUjQcmkj%vbpu*5#kU zDlK|CDE=oAsrc1v_ihwiU9gV@!zr&k;B9m)*h8Ph&)76+=o0&SEqc?pZmwxycqyi; zmi6)TD@lFqN!QVR?pc?AF1~=$zJmH=uzZl~*!XATl$c*t`rYX<*b}ADHjbS>-y0{3Qeca1djSfSV*fu{Z7Py;b>=C%b?r0 zY5U+MuNO(LV1S2X+;yn}sRCgWPsnsVGz#7Et7&BY213aXf{0NFOMhJR`_)%U^p72F zgG_c4IR)NC1Q1B%HKC_rS@G+x6C_K9w;VYRT>1mX?a45mls1_o?%&3RNL--=)bj#% zeNj8$=Gm3mbz=h_T!E94^2k~uHI5|qb@w}!v*+9=E)aE73BYb0Efy0iK_oz-LjKor zx9M@ofYBXSXZ^?E))GP@ISo-VyHs=N-2U3-I&HQDKMQ==lG#tTpjfdPgX<*a(a(b( z@tXOXNHtwGA$NS+AxR)U!Ytvn|CqZkC)DsI_OFB8e@GQil=0*4#IZeSf|c*ZE9N6h zJe9wBs&ipceDO|VA4G>o45GCQ5pVMlGa*Zw#x)~%0BXuxfThD}1HDAyq%qs{mWU$A zse{_d5L|2{v7Lx&CXf*^+$4H4IiHYnK5idn+wG8%{L1LazXLlCNxR4}&}f2(8O+im zgCxe*%U~Z*v2JtLM+u3U@nAvFVP_BZi+#X#Ss1JnhedU00l=TdgWson1d%gJa@%O$ zf~LsADIO3UnE(1Wnh*|~j@q_DWr1Z0ls3Wy z1yejJ`n|1T=^t|2GzPhCfuR!AEx^}Bfvq* zfNh&WEa>Q$Rj?7#WbC0GPaWOM(250EZCobs)EOY;c~cx5EEwB1T$rA&E|a5~0kWrb z%K-TtW|lo@TMWM3*lYt|ex2-1u^WGu2RjP4qMx8xVmcZ@GUOByFva2oh9q|aGltm~ z3l0Mm3$(*+DJcqp=kWgWIq~s_=j#gECXgCl-?!^nitB-zzL)j;FBe+w66&( z<=KiA5oyN4^d5fM^&8YEVPs^o(%NO0%H*<{Itse?v5-AXJb=Ul2p@$MF`0m4FZ=bZ z#8{dW6bTC%^j#y51&9J^v2pM`7Z{@bEo0y)lL^ts5A-u1 zXgZ3*(1(?)xBJFv&8w>!;idjKJHsOvacP_|<&wCtqKhCH!OG_-Jbaq8hs+gG@35B! z=!)cDDNG;4X&`@#lR9;B_&OAB6a(Z@yG#Dl%)?6TMPbZt?Sz6+ESfk!Ni5Ly^i5Ea zkC`tEY1e{={qF9ZjS32zyR#$iQxW&hzHN;jEYm`lVw5++9h4}DX{B3FArzQLw;7Ej z*=i_5)=g*y=w5-TNE)2&~CTL>?C_LrkFBKLO^tOr2&V71gQl?bB``bdPP zWT{KjZ`Ee%>L({d*YmO6xP5RL%@e|;AJdZF7%Xqx+me9gxw52?X3TvDl%vG;VlHi6 zFr?;&_DY(e3tfA%o+4x$<+3WMf}2VfGCD&YgGFOs``&*sU~^n7rN#cU6Q`wm`L|Km z>O+mXx269)irjMrFt~E|?S%JJJ68z~Kl90<4)Sd_sFYior^%0NuB3u1zdf#BYfoIO zN6|#-hCXmXzEv!t$1)BL7~+F9l5v9{SS1o2Ac8^CAq3|#pYBx}(RkM=(|x&--y-z( zZ3d~)D0D3;GO9%=1^+Qu;>;j!7dpy-*ztq;rG9u`AO#GuqFt6E~O zI{&^Fq;E6A2CN$4Btd_EjKJ)7c;0CJ06XC4WVrQlOTl&nmL6o|7CDwXuCXQMM}=8P z$=I2}oQtY-vdoy^Xp_h6&{t{BN_Jd0m?6klKOI>Ga4y$BaU^TP(ac zP!j2xD3+7}gFxsd_&l~xGk5;po5x~juF3OaAVe+}n#yB?hIl&-#I!``;yt;WX)of;_+X=yK=={0=>G3R z^0&dr#ZwJEDpaY~I3+TW`UJEGueguH3U_OJ`n_((OcpK@BV&b5A(}5Gv27c-a9ci`*={H;eOO)iBtsr;0rN1ctT|HdN%?zfQz3Mm zy*}&ylLorfKJm%>E0@Dc&_s&S)}CpP-CnqWWQllc5h3p@Ls-XeAFuk+=;YRkytWuj zDq*oum=xeBif`?k{G{?tfY{Vo)NV|fH3V_vP+xgS-*vxp1BPq2bNG{6zpAB}*U_ie zN=tJrj>2vQEIppMeWl@=C?3a;XNzI2f4K5`m9SS&keazReCwG1-`Vi#Hm~cLG&)(fY0y6{;ylQMVyi@o0Jq(e# z%MK}Ww9NlJ%_;C(Lt~WMjW)Wu@CInNC+XtsJNcjsHSQNEa>w`Z-@bG9&TD&@8X#lx z+jiq$;=o8IR<(L*!~jSG!bLukUQN+NG?DcJFd|$_Z}ZWOl%_+9BU$7^_V)z&Q1G zN~!7Jb7O50EQ5e{%Yk|YB{*zc1C0t?K4y4*cG7A}$p(pl zbpNRJba?i^{Ld=t2ggDq^z{pGOW^fyga|rbjLOuiba_lw`eOrYJ0@l}zch&4{NU^V z2Vr1U87cmy@Q~-Vh)GYI&g972MrMdrpL*WA+8-51#CKdhiz`c2Q1<0mhFH~Fis9k`$stkF!bon8!3yc!YS#co$IuK7Bn z6v^*t78yx>a~?spNUpWBfj+DmY0;e`86&5ICU(^uAo#%mH!M$75CSEe4QTJ zur@qn!xU^fyB|CCFs{L8qEP4bzl;hulT7|vy>6Gjn0B|~^X2~j5YW$ZvQ*2SEXPVSYuo2(&9x zo&42RwW*L1rmJEJwBebfj8+sO! zHMg!`9N~Y_?P-5n?`+Ka;r+Tf({#*j`-S2Qrjk=aZ;;5XX+O2A24PzS1F0h7WfD%PBjTZu4}zq8x?-b`knQmgzkw zjYO%ypx9D^vFfSikuN$;&qMg_yCb297_-|wvr!HkGxvHVM2G`EZ6^)wE$;-#qpvO% zOa4vQBm5^z7d^dlA{pZ44?Elo54#;^7c-z(Z+N_$R2W8MOpMj~c zzr?C6phD(`KK;UPWrQD$c)>v>_+M&Zr44prluT`H>nUI6VV`RbGtS16B_$?g%0P^#=|`!I8F1`cI<6{GJSUMeG__JKQHjYz zfxne^=M8FELcdfdsQjzQxjOQ9Z?)d&!3SmiROl*6WE0Zvt~R{bVoFb`Xe){U*;KLL5UXp~(1>XZ?7{`;(({p@ zUp@ywB71G$$W_ZC@g*JXvo+BajoU##>_zFML(rJlIsad%vT`j_0w-JrXQdmU7`hiEMCkI zJrn-o)mGQWmuD~iz!kgqh-I}o*r**wlkvCqvGuPVs9rh~xRpDXOCK;) zIyWSy#aXhu&ir2P(5;8@d2_UYyfTzKv-#QNuX1?H$ihLT0YOMw=gT+fYU!+$xV*1F z+4&GF2qocs%^NE}YW@4!72~CEzFjeErki7?kMt|YlKykWl&Igrwa{}MEkzJg4={IN zYjV4@Uk$CEG97xk&P;a;|A{-Z$go{XNgu0}9jFXUOVYO*G%mk6VD1S1^uo#6D(W&_uWYA_>M4PrRqsP*D=y5Sm{Me zkiKES>r%~cGGxtx_Cv9Qm7s$Ytk3_NqmGTt`)^+P%~T>>?5VW(Q>u97#X0{Z!!Whi zCLYAT_?{C^rG;l+^t14DRVi>h;b3>sFEFPyPENzGMN{Y67jR5|%e#zehz~+3+uqNw z74F)dnN(7FNI!WX*&w;VCpGD~fw%|(6k{lHiY%Vrme(Ga%^!Azd`NpEMUe87RC*JH zQYsM{t?Z~4Z_CfA*I=n#s5xKe59_J-y6D#}fUnKllr>iR+g~Yi^@GurFy+su^jbZP zQr=%l)t4eyE?wyI)a-9*N(d^5^nJ-C>xImre8=@ZBK$M}oDqHv9^-m-+ELm6oX>!V zr~iNfM}l=+pVdcy*~bFe`jSHf(q*(@g9a0DJ2GS7QuY0FM$&J>Z{Je7?T5*G2(uCHSN$lLR^G)Q<^jJk&vCLDb! zPP+dAGe_&%wU6B>?o*Cp%{LoZ2?=1nF(Wgrgb)9#%bJ4xK;!Z$7&)vD>xLhCTNHo1 zXaj&{+Q@%V(>fQLE1gKm(2&!P&~kBz7#L2gNX@1;!gYc58%yN!BENI9t2svsz zhe4jZH0rkj;)Ax=^GIYjAUo9RQX`^1Cv4WeOBO=^c635FoK|*RiJ~2x-r`@&+S)k< z-spV-?S?Kvd(D^DMs=6nm(C5ZZKyn3ez4WCSiF91!*@wu_~voslkv9qv%}$1)A7tB zC0if-J(=3V=;E!qMgJUqvg+H0{OE?o<_&}OTor%aCD5kFhUj|eN|!MCN%F$hujq&C zCzcxiPHvbkM1!K+q6?zSwnR5Qx6)VLbGqCcUb!`GJvNR0t|zJe*~|oDt|%)1>%J;T zt)M$7D7xD5&_)=`96VX$boZu0&HD$6J;~8-G|u>|&U4vxIp z1QWhFvVlLSR`cSdo_q&xGQve3`keyvdoK8&z#E&om_=R>j4O^heL+CoA7;SnY{_1> zNO*0gc4kKmTp3#~DjoMCfJ0L|r>9@&W4O%KyaADo%;2e(&7(ymF#jS*JX!_%HT(F9Wuj}p*WUlo7?RN zz(oa-KaDwBZNFy!f9xlpiHfZ4?V9`NF>ARW$4>-`F=yV7Zk_Q=BK>jeZKrKNkN}3H zT5kjTTSE^3+PMUp5uY zC?ClEO|w{5?5hrT^($9QR?T^xi;S(iO;i8?{`G(W00f`^!9I0$t^i&8ba(&$x~F7@rd z))5cX@AB4FFKjre53QQ+qGJltV`okoiZG$kC0&D9aNLqZ718h#ey|q)L51L1Jq2ax zb96}m5xb9;_l|xmG+J@`%8h;y`xQzfVZDbyQ;xTuc+KT1Nxf}Q5xNk!b!Z^mn3^lAA?}p$?SQGq zYJ^Z!N*+M&*^N|e@y|IKU;rW*$cZ98$90)f7}wiiAa2UTGm4J3{LWEk=+#hYJ*3`& zD=P3L`dYAXQ?%O(gt?LzY`qU+S1IJ-;~wh|$fK;wlqAcf=(fBEOlNJ5Ei{s+d=zxq zH9uI{W&u<`hm2$#v_JVhgWCS{HqsZE+@%f`DAeiRsz+oN9ya(=6Nss^PyXn@r>bPz zd_HiBC8drD_KsOgU;q0NX^Rjl|-&Gf8Np4T3W% zyFQ~v^=Jf&7lpc_8-+5)D>VFtBWR($R3r!pdB*M7W#|Qe{2luz04<8@nqC4R>`yCo z4F%@~4B)X6zX+y#mg72{*&NqrVrMpD3C`zgBf3R zJQE?&{Um3JM4SLa7Cg|8P<=^5ZnB~E^;Y<= z$`uqgrN0NT)B>1|jAsD+KoXzN4a^DOR+vJZ#^CmUD1clqB=bskNT8UK;{~-$(qbWG zuF=sSp{PSuHfT@QARFl04W`*{j{^GiS?V6_eTN~kYKL8Q55<6a)Zk|=h3@nV9&G_Y zwh7gtHw#Gj;(V>mVj)JfHj?1>~myu*!dZ+B7#}r~yv6JTP#uftd7{{C@~R z&j@2?=vRMWc^iEXzoPXxuC3@SUaq%Shw#Ej5N2w4?ngk8m+Cr}P=~O=;`uxh9ssOL z><)dcq1ZpnK|WXg4kyUq#%VbCQ3WmQ-v*xsW5{UFAb}KO5G4V_8DwyR=lfQ_cZB zEAKDo5ecUl;yY0kLp)+xz)Zzn(h-+l*(SfrQ&~ivqC|L}Cyx~U-jik-Ota!Cq}eYk z{bu>g7L8tqY7_oO7N13c(jf$fKh8!+%x{&D#vlY9Fr)?q!^6K15hCt;0Pa0o|4Hy)b0X>t&&q@=rKBu~E4|tumxJqNV z&Dg)3^3*a88SqGJb8aET&jyri&80EW7R>7Fc4*kn!C}a$`6hV^KVNcPI!Xt+j5P4s4scec!JfrU@h{YWVuV~! zcoc?T4_Ie94HQZtS%L*tred}8N||`0#{GqSMO?ZDS-J*@yR&SJhK(W{5D4t<2@d}o?!`+XLDRqFd&A@sIYUoSrv#JC77os4_bVYEv>!9}YkHtLrD(Tyj8 z5El&$i11$kmjR(YDa~+3;=qu<<{lRD2meP7a7)&LI+)LqFPjpUa!^oU-R|yhTwp4S6S-4s&A35TQ#G=9Y`*^ z4KKo%DFfI|KNUuV_#{j^*>G$rtGSWw@=E5}B8W!T?y;!`!kW9B)MRy;RxyJrxH;;e*1M>@@BUmgrSLbA1sSWcL?a-A)?e`q( z0MCVs#f>Ufah(`t4MyyaFF6(Hj z+W}OXsn-i!Hk+yO|CoJUy99j~hq*>`+CmWQ{U$xyRsKMXUv44Y9Nz1P;JXPt;UQA$Pn?os&%Tbhg zFcCi|Rl8gXbHS?>V$+MIiEk->X!2-h=`oa1$CTb{oBzkE2u-Sr9Nx*Me`J-r75I2V zx2eUdy0pP-F|bM^hFUe5Ba@Fre?{_gw0^F>K`MQnAYLC2(QA1Vx`GrkJB`oJfscn? zx5DMin;jnJld(zBPvVz+Eb<_K9mPf&$Rh1&STf#Ys8_phE9PSB@y_j_zIjeL?vGUO z{;g{AdSOXU318oEE~=Z;N)*?#^T_^zIhZu)>J_D04O!z1D0pw_x_hB(R1>U{Uq|FL z93_>#2{|~@oHds#Hxs`Y^&iSp{DLb5XLIZ6YR%I6@A6LSC+`*X8n*K^2SadpFcE<( z06wea)=)r)$}HELLgFN*-jmvr(7&--p|~#-QE#Q0Ayia8m<<5b*;ol^(LE0bk|f`u zdk0Q)%!jCn8{03J%S2J3!W4PPpd`mykwb_n?-QiBoow(|UF*GdwAG)c?L2v0xdQ)b zo0fb&BmIsCW#8+~YWF5XD7{HKOa|Y28FE_bAD`(N-8Y2WB#QDi@2j{&zl*cVpSN5P z8h#mVdyr+9f}*NA{DbacU%(Zg4D(&cQu3YM^^5LH_h>65maA`)Hg`3b$B|_G8xI4d zJfTw{G!;9ZxOH@524C6%W}Bs`4aAwRZ5gUm7Nf_G`}tyDO4=zrrdNJc5kl1~qQ28K(s$C2v|V>OGJJ|Oky^*Q*mI}y;>ij^<0AZdttcZ$6W;r0p_dc=g`5JL z!_!)%b=WMN%{PPr?LNnpIe4U=VUWzVkXtraJ6@y(Wy+a5B~h}caOfHoww9Zii!K2# zbY72}1Rw?w)cW7=Ed)ysZD-t^R!i#FO)J=+QKKt-?TgC`b!@-p(~XJ#2j>GpBupAs ztHwp~1<`u`{TqJ$=T40L0d(ocM~WzO>s1q3grC`)gU|%+DZM$otb*`?5rCH|K$vsgq_+`Nw7VhlD0U#pa1?drcY{F@dd3*Nl_u5hD zrna~j$qnp3vu_^(u#h5~$S{)fxg#EDI30ERm21FG?dDetTGj%~uM*TwxHBt9B>%e* z!+1p10+a7Z000yG+*~SdeX@5ibEye zX69LnZg9jHcq|Y(I?=knPGF>J%xDsE<-BScl0uw|-|6xNgBTDM)Z@#1CqNvL*zo{YbjhiQBV8I=4#N;rsR-Z_yYwrKh6wf;@>@ zO6Fm_{{v)3B^Nz#g_84talI*g__KNOn>As_d^;@wK_eexgM2mCW$0Orj&<>b(_a>j zmZKHY+u5(Mw*yj5^)b>a0SB3ep1@<1xexFL^{W6^Rc>$q+ShF$!!;GLprfpf8&c>= z-4htLQJDMJ)@qZC=-ORR`NanOXbMf#B(Pa`g==M*-g|LRMi6~?DxTx@+1Z)=E>7cnV`OKpKK@q@{|;Tdg}~d|&r!=z z!y(j2&xh(}EL2P9r)nc|ZmR`4ngMeMOY#}Ufr=&mS;Qf%@+m+7FRvt7dN6ixREUiM zf7)w{n6&OwD$RZ;0fw1(luZO5M~?){FZ(UZ5?wM)YA7{w6*oo=a{I zzkI|VOgOJ|_8Cc>(48S6lkx>?C7rO~0@%_iIih&X5OR zAzyO(FWVIQQ28@4-Qv7U?jEy@hcHGOkovgz8_R#Rb({79PdY>nQ%Y4kr)olSPD-ud z=PF8~X`C&Ic`$&pam}cH-P%W`fj)PCl;Hc1^Dbr!R4}+W0BYeW@Hmt49JfhWpThFd zm@Nn2Xgvhx=~}W@lQ~ujus;f6>#%sO5PZP&`u7`{lC%FSS^8+3?jANnCg6wddoa?$ KzUb%x0000IRB(p? literal 0 HcmV?d00001 diff --git a/web/public/empty-state/pages/navigation-pane/outline-dark.webp b/web/public/empty-state/pages/navigation-pane/outline-dark.webp new file mode 100644 index 0000000000000000000000000000000000000000..dcd26c3950b75609dbf14a2f9abbe1247739da8e GIT binary patch literal 18452 zcmYhCXIK->7wD4^5Co(NgeZ_e45*=n0HV^7qCspggdjbkNK+7$-a?ZWKmq}zDmHqR z-kYI{h7KxCq=WR5%m3alclOy2yZh|ynLRUS&iv+_2l_fX9C`qN@h#1JM)$7a&H?}c z?$c8P2)GXfXkhQ@T~z`AfI=)Wh|9MPDJM;hmcDE}$C-c=*C{-h%o%a3;V1m{1?#N! z-p4Hx)F{oIegmVOqEF=6f{I%zXTK?0;u)ncFxqWk^6g=wv!tL%Y#Gi)^rCO3vuUGY zLYeLVU-BZT|F5j{FC6+!f7(54a3!pa#((@#y`40#mX+%JV_#b#-YZKH{elqvN!*?J zUH5x&o9}$ot9#v$?WW5MPP+cVXkD#$y{1v|AIl*oQb|a3@?}veo!o@md{lf?e6{=M z;J;ni%ouDzY>(Z&EiTk+<AsP1EoY)#@VJ#1iH{n5G>}^Nf<(EU5_VtOuGeLns09BZp3nEylRl3M z=m?mNO*Z!2&C8szIMq$vr@AMM#wQF0IX2+CsuS0BhK6X8==Ts+2v=}zE40!1FyO!} zpmusCEr2$?xpX2mtukXe&5$@^YdAJ!(5vj_3~~oC5f*EVea6xJ3*YI+xmqRPC5e5F zfCH|BlivDl<-=cY(!Jx1g%`e^MLT{B%G%xaLjCab8TM$mHB1LESYFklJDw2UUcHj=y&~o@-=g>=;*4APzfcJjbetDazumK zhYq$ISCaQ)UF%N1HZIuhQBXKO9oo)e94?Q?>I?qu>T-e zh!Y>8lMA0O85DqG>~g(Us~G-jry|lBAJH)$MJe3w|@AXLCZvo;YQ!czkFj1Q_C_c^<&0*V?J zeFg?@Dt2WN?J=qIV*`)lw$M<_u+3gZ09~oEd2c6k#dUMSp6ZimmKW*el)S)lXKP{r zRZt?MYq5QYVKRNh@_U?-t=1~|#rHQ}aH%rZ&|Gz7Vpk;~*3~~`UBy3dZ9DhiyGOJ@ zZfJ$2iMV*aQf>vsy?|H}jit$KDNWCFudAHYWNw(Inxp8>2E{tGYOIK$IFkOZ;xUrO zEln#w`4uqlA-t#hOl>XhlDMOkdzwzJ1_zpRY!Hff>{Xy+FmW+?8qsyV$;+9_18`O6mU|_=4qLPAzH4yf-kXyb0e9`$y2?E#Zg}2Qa=j2k zNA;ez2k*ljk~^5?fKQ<|U2XUc{JUH<)(LDHSuEWfQMu7aH{PF}_bBsq3+Wh3_8Xh} zsj=w(?}ezHaayw9yGqJw@5V*do8nNk90$~}hlxxEU$Kz%{x{!u=d?Q+tNp;ON_r_y zkX4sB3ylsdexE`suzo{8v1jpcyvV;wCJGb9a`) zEv2Bac@9tmK6X0V#IcR6fJbx6&vN?LNZCdEIXgY))R(7FlvebMMM{)w^SWq{iru$5*S^NB7f0SR zjf@uougz3NCjW6?Z)tGy3yyFxqd&7y>7hyYS0$S$@u+PUZCwcP+n8oJHXk(MRiE|v zv2`9a&8%#c#_pO4An9}RHYF1QNoz;mzuzAZUySlVQQTv~!pJzIJ|lcoqz6hy5QV49 zmDrPV2Jwz2hC_HNrQ+z*^!|2hX2qyf^Ro6k z4Bon=26w)hYrn5Z@MN3ehk=5l6uizQ_-s|q%MCw{ns@Fa^q%3jR#%10)yUN9*(-Uc%1=_{pM)o?SPneY)Knca-rSJhhff!VG{qg)`^D2bhih&Q z&sF25WR|`ZYN>jten~Hht#IjQG#fAblroNgt{rFQ+tjC0I@?QS6$%80TJSWJ)vJj{ z0*+5i1n5KGzTq7UY@{4j2E0pljt^7oBac^krnk?-@Q|d`u;l{7oQr5yBiipACRVY>L`bOe=MHp#wEqCm3rGA z9g4}$o#@ILd@}H@97W*q%Ut#7XxOPZ#C=h)b9Xk#JLAeuIs@r$HU z7oHwI%{VOdQ`jk!>9LFK^w|HiSyAIAy>)SOWMznNb8=Z}@j_|9@ghS%j3~vv)Lup_UQ5Qn6CtUv7C} z;?)$Nigb-xm?kE*VH5r2TY`M=QtY3X{;8P<(SCo}H-}4VOhkNtZAET%FOEFR^a-2I z2(9Z;=u((f?p-SCRdQnN^D!jokLjB3uC4;Kn(dNOnOfB0H$2U6TN76nY{J*M^J=c) z3`&4jFLCHSY28@;d%Ds4&0*=|VT=?#dpkaq=w*JHzgZKPr%)gu`0?E3g$RARW|W8c z^IGV@?wo6bRi@XWAeD@-Z7ZjjqN3Y0u>C|v6}dA4o5mcvHw zt4ycSZn+nl|0$KG`SH{gtP{_;S&TbZht)l%&v_g+{pGjRTc2eta#>FA{U;jdkzCbT zQ{TUZ4G8s7%k^@=W7ZakHhg=OJSsPdBX6H$raiODG@%%d|=x(tMRDxdR)&abblg!|IY`H zMT)(Jd5R2XY4d*P=%6}P*8@n9)U!>* zl{tvGH|ncnLtf5I=l6QfFU<6U!Bpj~>%!+hf)gB&d>kBITz=0Lc7GU8LJQ33(c3l) z&K_RXOAi|c<`UD!f4TLBhomTKv8Zh; z*(JW&4;4q~!-BVi7DFip2qt)sZ4YX}*&ElHDnc(2pyTOR5_>qv^vxz~JkqsSHl*$s zzu~xLz&~9>vFul}e2$nHdowz#J~E7r0J9phrc$~I&#w(T=mP0#p=-sf?Ez5A;kDkgi&}@lU?2$XX;$EmlFsm#}=_I zKCE0zgksJBZ*C}gCKQvANK zSOEFfCYz9_`m4;jL$-;YQmh($tJS)M!b2HsL-JZSMa!9;+R%LQr8jH{4zGrVNvz#T z7?By5a{pa7K3~CPD5O_N50KFITsV&AjayAzYAHvt(>a3fBe@d_26zWc+aN7X5in5B zg_8|-#cy^qaD5N~-K)bxm5;$kA*?h(2yTdNo`Mjk5Qa+0R*2EbC8Ei1vB6?6v2kaE zu5^dfS)V%72&k?Nfc|KT3 zg1yDLPoWVMd5Ioffmw&f3FZrb9`0Ng>RYj0H7mSdIzz5V)X}nOZkYInvY>TfB82C+ zts7VvDKBb*8m@^#^K2b4^0?KdE~h-@G>7h{;z*5<_RTLhcmK=xFzxiVvNY*P4I2%r zz;;o$EdvXRsV@$Qqc@A@?U;%QeJOX@Q>Sn*WNrM|5Rpl=t(x>9>tGt*Whp2SmLeZ0 ztoIoCicT^}Ns;R`+?*V}7BH!+%X+qjgY7=MW>_@6tA|?;P2xu5D9RTK6bNV&Y+S$IDD_XHoGRV~4-UJTkS7d;NG z-y0|J&oZAv|Lq*GtN7J!;gNg_5G1LWn&)7z*BuLxhr?y%6J@>9^EL7!HKN+d?j{0y zWOdDiL^4F#bV*E0N0A34o`_g9^k!U`Q}U4qlMrA{&5(rKm#UE)$y2@J>0B^D;Pr6&*;*I%x1C8*Dy1 z&^3{#-%a+S`mDlzyF{K!r5%iIC9eq)5|-DsHu7I6?{@|4Cm$0VTN|^x&p2iwrHw?SBoz}UUcbEL)Sv0sY$|o9zeu%Pw)_^g$80mi?Yo(cY z8HA7{+XY!so-lA_-}R1CbJR?HX0dMRXi+WG(uJn*zf7 zM$eW@bpO|JP8h2`-KCFPN+t?y9vQGe-gT@BOK zrSUfn8|J&tBVJXtZf~ZKMe7QTOQ#BiMo2F_syH_uWp(dLFj?Hp0I58ly7h*~JwRPf~_AAeDKwnQC!+u`}L8+i5oOKX; zdMq*Xnsaxh+BAU*C%7FS-!)N~qE!Nzm?B8B!ru*|VF9ZQ8~Mj4vcX_IBOOqASg@~c z%Z8w;L+<4KUG*@mR^I#R!?)GX(zf&@;q#JoCvnZ==1*IL$me6{4fpphQhjAs55PQasXSY7sohw|HkneM)u&sZO@;uo;9iN$ zfZ4ZvZ&fg3T0VoS-(8Y#_Re(_{_m#y+QDB}!jw_LIZCpXnHytCsf8$-t81&tN~-w! zrxb}YrH6Ag0b12r<&my}s5QYQD=8G8V;WFVqV2ffh6rSVK+064hR3V-_>@|XWnx}s zMT`Qj=CSi%{Z@)%ZcYU~i3UR$dngq(RGwF1Y2Y5#M#3g2@Lg#N z?7>O~2J74r|1du4-No{9C$1?z;=lV~44)>i*svatCbIi0n6*ry#Twt5GnhK>G^J<{ z115|T7KFIZpO4QUmz!1n(-eB)r-O)xf+hBrr@57?ysT&Xvj5hiU(zs5km@L8+2-=T zXmha6uZ!i&vXz7eaO6Czd=qBDw>wotfMAx^s*X0b5w_0{uYgn+>9}Wlwj-EA0d!DP@;Wz_CO?mPDsk z32~_NGKpuQLG-CboRV(esE-=?3_leCR$z+HX04#0c2jM^daUxp-53LQdg>BUmuAfw zgBoJxa1f&=o|^XD9PnA$AZ`bPLF2RsWWRR41iHw?=QgTVsD2&$3E@B+Bo%5wdSBRtHya%9D~&RiW`HHMUU zzSTVMh^8v!mClT`ca7JHyqNY8tQYFy=dCPL7~Zz#V81i(d;kVMJ`1)NVX%_3s4=GAySV=@T9u8`qXO*8H#)%d$D_WV+Tiu*R zLD63FFeAYm3X5V3)}cmAe@=z@7-T>~AjBiOQz@1tOe#kchrBFYzLg_cK?rJs(?Ojc z9E1dn96&1p5yZiUO#no)`rwCxxeeZwF5KN$OK{MU6XiymKF|@DVP|Dyk_Ym_TJs#F zhVVnBbc~63ex!1m0E9P?O^6qr{VK4S6$XdF{^I`r!F~VvRorJ~xr`bEXu(ZR&}N-g zQ}VHagob_V3z*$`F9jIVkG&J0(+hwkqsK%KZEMeF?`N5h zhn>yn#QKqHIoD-tIY;-+L62w@>Kd`g?`14FOy9EblAIMD3o*#k$1};EI+VpXWptt< zi3P3JLRP6LauYJl>N0|GZK&tb75Qi+lJ-px5#{~wR5ag6N%Yy4rw`QG4eTF%zYS`| zwty43^{h`vOH@S|GVGd8tU$DSs$L30-}b>hW=j~5nR_6c(lz=G%@Mm?q1#Bco@BLF zWZi_!_0$>KCMLnD1CLD|?FX`|S%xMqVEWle*hIvr7eFosMt3gkwPDrqS&4t&R$jet zOWwbp?`eu!Qp{Yo_14NAOkdjh_<2ye1Wf2!)o};5rS_gLt?RK-@h3#m1|y4t*X zQS{oc~3MSO$$Eo?Rg`uAXZ%WD7^s60si#c&JksiC2QFI(j=%qrf#mf2# zmMRm&C6tQ%3Oc^ix?tuCK|ZiIC5TGUQwJ*A=;-0Rst5iJRQMDuNzr7nU9Y~{B43lf zl?+(%F|m<*)LXnqH0YRW>8Lp?tJC=m%gLn0izZ2;gHW=tub+q}0*-w)dga4kM66Zw zQKx-X+_EwCyOR5DiuxsW>bO$4-wB^x2e0Zc!1Ru?MLMz~oaQ6W0zk5$K4wt4T5NuL=+pnxFWq8-SN)`Es&sNU_r^b!SJ}npDY{ z7ztGHpqn@(#RFvr@JjvqsnW)cZ)Ti!h7azMQWVs$pI|#p_67a=8||B|rLcJ(4%wmH z)FU_%h!pB}(j=AZ(Cy(B7w4H)d&AUbVkRT7e6a2_6KM(oF##n!iA21ko{{}mykp-H z{C5f~u4lu|&eevFN9bJh?^1b4}*<4RcM@LHX;{BC@da4(gcm8u_@DC2@mAK1EiZ_B6WrdvdH}O^7*M-j`qp(A-!iLmXPYm ztFGnq4HFmUR_wWZsWO$rgmGT-b zu5)$#7IJfbPRM5^Xe|;qR2*4wT@baTnK(B(vOTx0X;DGxf86JR%YQR^MYcA7Zq6Hr z@M*d3Y5H`=ymn)XuQeLh(?WI%-U$pU z$+N0N#w|e%!qezPXbBxr?NFrBEL_yDDaJ-4MPm(e9#fD@+zALF+dwNoFr=J*aRBBR zT#=Gb#DhWlFj=NnKt)*Ipmh~7n`nQwLc8>rkWb9+^Gid4dU-%F57^78PiIQvbnze? zqC?&ul83n7?BqWggY*v9QMT$72M~EA#)jK zd7cgfb&4>o5u*FAr$gt`4yI_xoOQK$_pa&SS{ zSmJSfj#kZ090-7^RRU3Jm{@Wyir-3#-eOHvZ0(fJ281+$6Tq*G?8gRUg8{8%4nz+d z0a`BL*oDRjrRvb|98%p#mX3T9phU+rSHT`n8@+D-1n=1P*(rEv6*3ep+<9<|dzLQ| z0jDB+**TNBs+eN(27jv0Cn_Wo7O2Rr5m+yExA$-i+$rKY*AvTRQlHW(ojJxUu|5}d zx=FytDI16Y&VVgCJBOp%8BIFA(E)ZZIPjOAcY6ru@*{zjImC#9@QPDl!AJ4X3aN-C z1{rYlq$qgS#cuy@m_pS#thi2aEM(SbrpCiq%Xrv_c3>3JDYamdb&#UHFCq#jwzmYg zf9H@bt9V;cj5_Th`D{y1^KDAz)+V?!*;?MBnKXHGy0|aPJ;_0^wd#k#sX!zfoJ3Vm z&<|4wfss}qHhs-N1enDZsSiRR*br<44fVTvco3g{gL7JtnqN0>3gC2%OqhyjNs>=J z5o#FXh5@T3It`mhB0x2fLxlJ6GCtPCQ7|i3GXcyRd^Y&?k7Qq6#kQ+vZBENKZQTt! z7bJ!V#}qfW-v)WgK&Jw5S7eE8=~f%gI3n0ccYn^uNUKZqEK>OA9AA6d3^_ERuOY8~H7v7S~ z>}ljk+bZ+)b8kykEE#CsOsU%SM=BmE^n3PRzgj;dUozjn;obuYv&z3vR& zx_h)us8u#Z6NR7$ZLbTOmoI)9uC0s=3aU676fD>RtAQ-BoUmblyc1`4;BM(8OhT>F}OscFnr+4D(Q?DApDrBik@)zOZ(?FQV?NXYS44w~Tu_R&`z%XHgseM7h)m`iu|v z%=R2@F+MESRiqW*-6d*|_MGSoY7Jo}WAl_aif)MR$){nLFI5c9o-zFUqd&ui-X+s( zK`B86_+h6PQ*9m>=67C{L~7^-%9(W69cXwOq7?b(ed@|z^l`k4#Lxwnfjz&kJC7dOPoPHNaU|^zq%@P z^$(xA%T2b{Q)Jl3(6`^T(Tjy?VWQib^Gp#A2CutJ@V67uRPzlZk?L%hnjZ>?EjFPP zxbe-I%l#*_Ro03?Ue+LPUXZmSvwgO4Ku1UQZ+&BI$Vjj6O?7md`jf_cCFV2p{Nid>XJGQ2bCs5 zs$+qyCD%>H;g%4{4X2Ktl**pTbz`TjGe<{|hfH)+#}Z19jg|aoPNzO(n8DjfGU;+j zDE|s;Z37J9#>!k$c zE6UCf$#ReYHmP7x5P^lIqYf^V!i}De2C{%P!wfiFUj9M;HZfFm7aKim&l&vZQ#_dj z0J7+X355Z8S-PSVPmPa6AlQ8+X$n!|TU!((E2ND` z?T=yTeL_IA6Fgim404SEljp5s|BP+H2}4P#1%$j;1LNB6|B899V9p#tMaP`vaAE#WDN&kOcMvskc)pNh2 z=HLYqP=?guO-)@W=k9|eqQTZic^|S#BOGaQW`gqE*-1+Fx^A~lKbsN@?{T=WAq4~$2;ev%=SWm@xRu8x}!*E)#*o@8b23d)nWbX=6=ku(rcuWr<1V9U3 z#8D0dt4UiTUr+Y`j6=08OQi=(>FfzPXVoF#px`{zMK9WNv(ko>VOg}^MVHB(kRG@; zpt5UJidOx6fN+2xHFQ0+_dMV(uo33Fg@7=(VRXRKA>+r&%iVSiJM$%@Y(TW^S#nC4 zr683af#XOZTdZ&T&E=qXmw5oaPISA>gqWkDt)g@6N?(Y4}*9itWp3iSRR{D z&1JBGBOZqTTW4C_XzrDnyKL>17MBW$Y~ZaKRor#=m~Gk2ajg0|gabtXvD#5)zm-g57dt-1f&BWOrK4GL`sZ-n89@R=WnV7^ z-RcnXAy85NRiUR|qn{Z3GU^orm6m5PWx0{`4-n*?c z@b-sxZlriN;G_Cg_HVO|H53*9oy%2{I;`hNSdIvFY6tO(rqrqTQ+xGrBS|zQSA9-y z<}xRL858drfMja`&BKi$&Z7B9vH>HhQXt^2d&#t(_@3lO3>#=?Faghk zH7+va^bTnLc8Wj!GUgRon9qsZ-T|FePCV=ym#}GUIOOs4(mewvaKBSvW!?Bw2rG$) zU}cR8ZQ5G!R=}znwZlDEzmgxs0*^F$2#>&dLTJz(E+6g-n@8?bi%oLTZ9I?eE~lhm z(3kTmUuJ(TFG#4&WZrgsK9G=;#C$IW5y(^AUe(&+8zfiHTY{?p3wfQ*1P>RXP)*k*t<-%$R1#H@Y>LDnYC;p}FTzy|9nU zj*078cFN-Jv$!x;Qd89SYR$`ni(tl^fXdcX7knr0g9u=BTStrAAbaus{_3A*O!@%v z$d=N4wx~g^r5o2E{=-~#JS%zn>`j&c#Q7%Slh`svb}sLVdsL?L)~WdTck#Hy?eKt1 zrr@;$zH`C6@p(d;StaUCzrXxuShi+tn`cbCwKCGS)N}8u*Pw}>_+5lFE=@0z4ddW? zDfg6)`ixzmeGDBrYjax?xqp?50c?mpGW5@yn~4Nx0h$9T6DLHciNl7~J1w%oR)EWy zHGeXXfDMI5g`zmR_X~d5bA%XeK;9+bWd2t|?YFG>p!<5RbhPkTSWHq5P{d01$0=x(WdEk6U1Bb=&GJY)CPe-M5S00c; ztxmKva|%lH2RJUi!zv&7Z>Dvo4Bv!^Kev>I&%9)u?t5x zc13TIDqsmbdLX@*tB1eUeU2B0&%D;?iRQVcgS0unOVpa4>l?sT3f*ZNfJI_ir33!R zo%=G=v!n$BUS){}=xPnDged;t0peLq!?Xw}Rw*g4)Z?vt=b9vh?N)BXpv@y45xUNw z0_<+!uLM>ajcE1=Je^cgW{rCoE2Ai`u3#SpZ2P@wtN6n&WCac34to?&0(MT(gs;IY zo=)d}{xm3g7CJw2Znd_AVlyxhC6tY#4yAZBU(zwT|%l4-1V;5BRX$l9Q zE^;<;IxJ*+ahOjmv`N=nsAr8aiNP{{a;SLw2`w|*&N;9 zEC7T#3yRUooi&P%6Kha`%=3->JTmVfuqvK z{Y~ef4Xva@Gb9-J_-WPWYh5x=-z&Xj>4wBWbDc*W(*9z?lI7jFIf7^b!)f0`(z`sk z0#Z8yu`H7OkmU)tw7V)L?A!UfEG|3EC@xu6@0p3tL&d7Ert>+mAw1M zQc3U`@aip`z{W2%hVA~oYb0J1#`!pz`_SH(3RsB3`tjK?_(?m*?R}b&hJbitw#{SEn z(g^SX&{a~hjGe7K=6Bv5#ZCvM0oDtW&^v+Gl)*??loaesao6CxlcK9i?cFl1rKqUl zz^q?l7tgW0dZpKpxsn2kcX+`jwLk;I-<4-?uhr#pzuVfJ_|x8(*tF z(@2*DB@u(&zC7YZ%>S@T!uWS5x;Atc`cRpnHF{u3%OJn-Sv?JH?#CSWE_(j!GoJ7@ zR9QWYBi(21%7Ei7sNJ^z8vl-mH%EjDzyyMV z*xgd@ou~GazJd60FNXt$qeP~eWVUh}HR3q!Z)eTrD6*zs6bR9Xz^jXx={+;Oz8*H+ zwEH~gP>2CMV{-xZvB#LLD_?~7{QG-3(wN{dK#r;F@!t%_UgTe*fAx#rl1e#yfDl^_ zs^`^3C=<8kv-o?@Oza)m=dWFN`7&(4rR<+my_)Qk{mV02Cl`d!e!#SF{U+?QE<7fJ z63WfO(y-(+`Hws!@oH)6#}=pZyuIw#@{$&HS%7l%2g#3`T1oKI^Anrq!@>b=Y&&SR z85-tVM^;CZPBCkrO-~pz$KAgE}sxNX!Mxk#ZM_w zv%J#xA>q-ZtY^+k z#sV++Wo1J=8+=bPK1K4ZxFyGBh`#9=-6}%seU1)GZ4LFHh%aF7@C%#?K*=^S#5pMU zU{gG2CoKGBH78WJ>ig3>;uq9e&x6ImK=`?$vxwKBat2Kr$`Q@7oe@Dckfxt*VdKOb zAE4Y!%;(ROkXhk88i4?PK@9JD*V;o; zf3Y~1*uqU4gQ7WXuBE6{K91#&?mBz>kvlx1b#=^n?>3&=0V)M(+?yG(bgHtsBU@?n zoo>|yLx3ee!7qsf+p@^de@?g7IS=C_U_R(LJ-fg&UI`G7NYdg?O5a*{t52V!Q7@H& zx>$4c($2NW>4mI#JNNq*<;25D;FgAZvuqM+DwdTt1Y|5ACwL?Hs*xNEMF^je~GghAs2If#tp~X`#@kvWH@U_ z0S4rG_5mZb=j3SBBst3nWR2<+N^m9Icg_UhF(M6V2@>?SZl(60k7|ti{r)pvTC5iH zdounGR)6{F^n|{mX4W(`O^WSPU`z}b=JiK9QrdYm_TM0F` zG)C_RqC(ovE=dsj-Zi@5@Y}u2HQL1qhO=6iDo5{jIp_V>jS)6{pNf(d8j;x%M`Mov&ihW%e-p;#GCNk|8_ziH6WCl;U?((-Zdm+Ft>Fi*th5(#-*nF?w~v*l?5N! zH7S4k-_R;8I1SD6!mJ@LU7w5QOh)gRyLx_3-`KvMhB_Qrc6lz+kwfy*ZBI*BcUyR` z=cSzh|HF3kf=lE1yWBV5N5U^UQE3mG3wSIj1~*iq9R8!uHjkZMM1IGv&pCzLK|*m- zU>VA89CQxd+1V(5VhXv;%Sw83|3?Dnd-7}RDYfb$`)5J9v2Oul@a*6-)%hx7!q={v z3lkb&sFbfht<1)#h;6y4#6Vj%qJ=v$CwErn>SZMyJ}zxVz|Zk9fh2x*BcWqLOI~4vSMNUX%NNiJoin?4eNiF$#hWuF9|7R{ z_C}sd$;*pLfvl*vY##!S zFLym0;2KU3dOm@|7TjO=csg?aZC^H%?i)qYc_Uq=?sXn1sN|QorZQ-l_2coKx)$Ia zZxbda#h@gHxQgYI&fZbBzP|iYp@I7i1y z$_nH5*EKidvSc@~4b#*FTzwxIAm_fZ1c+UY>Z$S45eY|$Ad0gKAw(Ng)^?r*P=jY?=%(fxcD z?FBBK0Zn&D8Px3A39rc3g-3@c52O1b>sQR4cgDYjmALrM7dQpp$pkU+{Q06L6m)M) zH0dSmGBi{(cWfJe!`5Bty0qcmu0z+A@20Nd6IyqgSqrbl8bbjE<*OFjl*u+l$B)bi z-tkQtQNtB(HK_RAw}&S_1^m_KmSkuRJ+_i4{F(W;VA{9&!)ocVYf}Tv(w9S?NCLcl z9VW^z_!jzE?>u<&UGbi&{Q8r+j(}|kQT{(`yY%qCnAg?7 zdggamZ>#tu{E9f>?OkbcJMj9;ET_b8v+ywA2G;t_kFPqWXgq^olJ zZ~N_&&tk|9TadtI;RS*K)di@i#rg6{LQC%TFei;GSAQM`WKHoqSl?(T*bfN3>ctV<%_HQ_MUip$gP~lG{GVx0nv)ohg`cwVyH9`` zgOW|Z-Me+erBcUV+wsL}!tg)qrZ$sG`ip+gjLbJn5|^0X-;VtB^cM5JP}V1;B#8YDT!MR{Jy0rcD$Ie9cx^u=2Uhdw8)lOt1>O$ZY;eXl+H z(Y=`bx~Tl}$JpWKn$3NFbfLm-IrD_&l#RTj=c}YoBVRZRnkNYBI3X>c=j(@pmIwUZ zw}ZmTWb5m%6U*t&v~Gsq>s|lR2%adqM?=+mG^<+`f#?9v-Q-vt6FTY z<6smoCWMkvW|H&kEAGc`<9xmHAExV-=UzGg)#>HURhXZE#&Uk|f|aX8yqHo@loj56 z0}pD9^1Wdw$8uFwGj8gPpXSrS=+9?^A&89oEHw+>Kh}=9MfIH>?_HwQF7OUk?7QhU zyBNW5u&=($n1Om$1&)88`4W)Whf3`Ve-HTnFTnbl&v8^SA!eAI3WNE#w|^i3tGRm`4tPhKf4V{Jg1{BHQt)hD+376>RS zli2nu7mN|hH(GT9ZWgoXF100~zBGMo*4Zagz`7?N6U0iPw#eb=)WL{dtYl&=rw~rI z-G$yin9re*I8%S7L5`&T$l7*t!r$_2?{B=I-MB9488}s~dOQgN{|*2KAU3tioaYyE z_kBpRrNyyMqn%G#mzv*H7lpKb1rK@2z|ZtrzAgLVy(x{a*Z7Lrd(78T3P>bqJt{Ys z+;nTEy4d=7t)wVT0;ybKA-HClZZrj*QX-aGv<<$GwLVi9v97L%ZC6Rw} zt0W!KKuxp#&@Gt_95Wh^0ZMz@K>y|z>57&wtb5u{{p{$+VYpSU{ajTY*j^mz^Cb^6 zGAy6s7%K&Lc6DpwR!l~!$`VNaX10H%^GE467thBv@wP?7glZ(cB%W*YsQR5BXaq&C zeqcy64o$i5xtLhzGc}LJ&r8LJ`o3+fKrFo0aNTbPPbb2(hPYNq=7B9G?boah{>q!g zKai}B+&)IX6HM2XW64$F_bbU-4-tZKze8*v`~>a9^!liWH@A2L>%0j53hdA@fgY{K zZE+p|>r@r9Zugl6)CN*e8fb888NUwR&aqZ_$(xGn!Dv+knNNI<>pG)!Nv8oceVF{7C%hPbMA2OX^QuW$WuGsS@rn|`$O48=z8lm0 z?9}>ox4w)!NCIK@N|@4Z-rpv`QVdG^%*Lu~*R|k;j;a{Q24amJe(uiej{SSo4cBt; z0W1u)84GOVIpEj}LR`XV(}un_@+L+V=O?k#4`(*u5|Z+fixL-Vxeq{fRHt#YX@`=( zw>kvSSxQyQ^BoWd73@$;S+5PD$SO9d4euh5;F8dWB~mN3^KR7=Gdi6P;j%MREj>~g z1S3PdQbsWZ31~vGUL>Z2eQtGYoIpmGuJVpAnWsq^3HOf4fTQE|8kdCwrGkC9PM*4+~2(8 zgF&%W*G4ts4d)NM;J*EP>Yb=h-JP1N!E^YpI~Up+Ldc89Lb}F3QJ4-ZtkA)O?dVNZ zk1^}gW33ja|3>}rQ~yWJKw)r8(Y=QK!_12ACKL93;+adR=DAp}R-R;!Ay#w=J#9hE zOxteK63U#AmOQw*Gvr&sMj_tvNi>2&IS48KmEeEN*&~I5y02c09>P6ZfNfV(UA}Oq z#Xq`{W1yGnJE>bF%Z>8AY6vVhNcX#g0=o`815IeA(7NvR4Zz4QUZpd(wV3;`E40Huj{vqewWQ-_RIXmU7p~jT zS29blYcSH1`L08hFa39h*(EbmbUCH^b4R46Y%Hb^IojfEr(C0DGDYq1BJxLH9b1Wr zYx*QRt)Ldl)Y8Z5IG(CibE(iizA@w|0BtZa41f$@kJ6U%drLEFhf_AQ?HB%69)11* z!tFMZs0G}Pmx1H@c`BOO&zEi&M+YCK$)}8pTR&_f{QkDUt+Na`R(FMIQlI77k#)GO z4mUdVSKf<1yf4iO?fl!y60qe1)3PHruDzplI&e*yRtS;88~h~NFj{$r_1&yMgQ&#W zqq};F2ZuFtx4m9R(5Jacl>7~wI@hrQrrsw;>~}E1VN8(^n$(_B5d?T1K7DaZ*Y4BV z%I6S;l2%>*CwXysXJ*2Fa7HAPr$7jg`ypT3{VVPVY9c&81k_U1qbQ*_{=8$8*hzIu z{X1tPB1oiopAOtbAgY+c4~fmwnnN~qWsw^17WzIbJY=WSjZp! zi~59>A4AV0gvHSVqlR@S?SiVJ{FU2jaS)b&d};U*KEYt&*7kJk!+IXlb%|4lVZG~g zz`n#hur0hNvbbN|($#MM6+kP&il$0000G0000&0RT|}06|PpNJ}^X009{VZ6qm~ zhr@sWf>}aD|0jU|8WFMyKt&4Z0-B(@8#fh16tvF@EIBur;D;V-g`=Qt8zv2Z*4?2H z5fcC)YkJ6h%1PaThid47A90Kv+m;l``BB<|w#LlNE`v7=mRK@dvKSX24?U*l?&0R) zIHxOeK$Q_GR>TBAkR-WnGYf#g5s(%KIfn;m!?x|%=E%Cvx0s5mf=Y!|?X>Ogv2EM7 zZQEv>Vm464f`iUlCAhh9b=Ad+xE3>+cv)0wr$(CeeYg#cdt2zd!{S?&y(?wnmOBfZ-0#l zh>~Oljh;D01l)c5K-A_@UwGsYgEQhNA_p1N1EkO@%u`E+tGjtjY%00X7u$XFlVGd$;31`(vLT%+DX8pHp}VaEdz@ zd-IPz-FsO_s+_F?`X5U;Y&rXfb9oIj`{C zm_V(}I0(H`h(v3o$`soN!PFE7M?Vx@x>(IqfBEWK_RD*k=7cv3>N7t(?-6;yN7fO~ znH>F=FHcT~_^osmS;}S>#CF2E%y83_a>h@huQfmzPA>C`ZWZ=MfAQ+2V8p^vwwgm3 z+DrSoN%DD`tYeG~Uhu77I$6w;83*IM!>$YEKm{D3OUP70Fl5YF6A^p#u#~HR|DjP{ zKoIduhZW4?_o#cRHh?a879W4sDp_XorQdwP;%l0lqE2n-6ZHK`;KBvO;2cw5(ZJ3Z z&d9=kYIy%CwrnXm6^U z-HJ>-0iio%3I~{aOw)f5XavrMxPU$jt45+#1Ys+Ksw+WXibPfk+XC zZ=*5@nD`F30t2eXaqM{50T3oP0>ULg-g-8bhy3PMrEX}g2m+PEw6d%NL9yeML?8`i zw?Aw_UMFx6y4?rpWf)Tli}F}K7|5k8mRSKgU~Yfm?e|1q&pIEz!pxO*VHngWrgVr` zKxs*w8iqm%DkG{rf{v=3T1Mc4f|SxJr~rA(C44+CM zHAU~jruq|*l%C4iAuD=BD(ADu@GfP`r`~XtmV+NW{Ib{H(|r9T%Z`vyWvGjw=@Jr( zY+;f{wBP2j3|1JlP3_-M!&Z6&fv3a{KoEfN4MK0Z74aWld(ZOq6EeSkaqpJbXqphF zP`Y5yNBt78u~5dO2+E~z5TJxa*ak%$@p3+S9GuFRm{`JIdfeaNlYD;CkBe&EGIwgx zK~$9zXunE^&<>TzCOJ&C@mC2~((h~vO5v)6qp|c6#w!G1h)}!F*O|d5{zS3liO-=_ zG7e>c8{??51tT-5>PTJXbYXvUKV_b3I+7DoQwbdnRnF(6ftUQpJFKWbR!9Yj)KHG} z71YYbV87(6-lE|uidV{NZmW;}5 zI$mZH8iSKYhGN2qGff2Uz!fPQ_`%2qhS0^D?JQVu<%@Rj>Ki6gv|63!nx@SGXpMz0 zWeYU+Yq;T!P*J!Q(w?uUaA>FX3=#-71yHliJNoM%ToH8IGuz>HwxnX*n$<0(Y0!Gk zh9#f|YSu)!`Bk`6Qd=D%v*hZ+9vsJ)}0Pn4) zns57T>1d)S=<6mtat49UVGwjMed=6-)K%Kcq*iCRAJ=O9L4zk@<}eW7tlc3zps8|37t;ISQYE_@fkYxWoc zIw&#{3GMcRQm**zD<(#%1;H}a#2&>1TaLCIuESx?dIc&u|2dbdNSpUL&2eC-ddeMe z0yl(+XJUqgkN|AUWS50)=QNo1{Whr4$hUlE8snrH%WjU-?P6?k3bhAC00Lt-#*xw4 zgbjFXC>j$fJrwep-`rM}Fo?|4PBEvn65AwlJ3xt+FEN0~cVie#GZaR`j6Ff;P>cvS zy;Af|`r`}w8D`WH5axz*=3B!Wm6KDj%=Yy+Tyu#y1sY>aD5}{^-JCzYJP(pG1d{N* zV`J(UgMxvLy-&waWKDo&zvxYIu@|EVphjav*!XBaWplptOR8HPMzq{fF}wj;xtD43 zg?-Ji5?nyaw#8x}<(7V`c+9U&%SNjs;ZdMm-ZpdXAY={iGcmxa7z4m)w@#3%nQz&l z2nG^H#5TmdgI>|}Tz_~uii?i`djxHU(RB0j@X|;+xSFLz9peNTm)%&1oP{myt7scV zp|Ah+z9Fa)a7t$s1&+tr!DMIO2zEP^BwRa+4qw88khWC z$qmtEHXV+~mJm9Q4FUsZ=ti#uC`UkJ2sDtlN>Fh%45h6awF54kha=R4UT}FbjiLn~ z1W<^HLXjra{4ok+prr*eyA#)#aZwN?1``+kB1Ab9wh7Hy;b_%llTM4atJA?3eWBTC zUH~otrIte}WQV}ONdvRv#H{`eF4{O81V$Vv0rSU(BKrXG)mwc_)Ryc z;PU5+VUJGLqQPB&Q<*UB!yGv^167EyTj^i*QYsB3+k>52K<-ueMlS2sNF;~Q?Er;< zgTx{>>WJgCZkHkr{OHpxx~DC3pbYJG@7)MvfYb@B_Uh3vF#u@GA*moVAVl{ZeOV;? zlad$gaTP<6ssz!^EtG>dj#0oze5a=E?_R@{<_BfVFfg1N6I7;92uIus=40QWp&Nv! z@crd$^e||*j<4VXZ5$R@SUh4U&arXa8~*d`6BgE7CKF=MB-j`#ndrlCsT6@G5g1+Q zw6ttjt1QeRn9^%bMIq7NyNpVB$AVl#Mqqrx&%pt{`48W-_VopyKm1@q>Nr-CtBF(s zg-sp89tA;h;Eduv`j+DiD?oq(;#|Tg)YM6VQfMrOOp0KPWC%&4*M)(;Lwmu0UHLlk zbC)4mD@&^ornQ*2U-}`9Y3=2Z{POem7FHgl%=gGgrQg~f(k**Ex^EpSu-e(;t8^$#*3{|K5^|i zC7D=2ek-xyc>@I@FCC!jEJ8ke-QP|;Lo&KM+b_C`a-3Q52M{h50-?m#2%!LF?Kng^ zlhvQd6j}lpG|LhT5(Zs(EhPZ8#T|e^l^&-llqc9w;5&Zl&NZ)Z{V<;^&&p`e0AuTsI9V-=w)9Vdij2%?M*U?gLK7Mp^@n8cuX{ok$m`yZCt zEj>=Gv8c{cjrLti(#H~9G)3XOk;(vh1JADj7Qu-H zq}&oq@qXa+de=99SdbU8i<|fcp{_XGoq3cAvWhH&U}vcV3=x?yX3d@$JhC@x-1&ov zgHVnD!-VL%{_gKryDs~KkxY`Sb~PRC1q>=pvNIZG*OD{) zMC*lMD2_>EBqI}zi~OO}tNs2VHC*{|(UM(!WV6E&4IpqBfdXrW4yY*AXqEAFL=Mn^ zlC!SZP%`ppNj;I_{OR>;{r>ynfNooy(hPK_l!b9vQE6BK3b_=d-DpWwN@350H? zVy3h^J}96{%}_y-LE%8=sUV3$gl#$UT|e~RmHt!L$0vJ}BSv%KUIXL|?y&Fr1v9Y5 z*TsCz5{Q7NXR5TdmDf3RBw&5?)-?{eS~H4If2CP z4cL${EhLIxeCztw*L_gU@8PsR8s)rT=q+~ufL$R5LL~CQL1j&-Y@j)y8z&9|dXTIp zFu?X2*?)e~>elh!TzJ>&7{I${$ceqX7&0QQ&n`MAu0>Gw%qy9oI{m$?JNN^?X4vXl znH4cQpfh1RTM0J|83LHtMGUaDo_cby7j9@Ft{Y)gvlWgVAevv=3~ff|AHRBS>u2s` z!a9v1_FljQXmAE6bVAJLP@Dy)qfl@zH(?l&a*rgv>bF+5?(@^hlv>&}dbm*RG?ZK> zO_}4_Fb#Sip~}EH9f*raVy_6Hq5)@W;eYjQ>snv^0qs~4(O??hriYon_Mp%fqeYI{ zo2z8;mC;CGFNE=Q-Fp6Y>sr5dsc6@&aEH{Z6Qmp2s*AaXj$LxV#!GPXl?`Gr2#`YP zpbLxPAz&J#lJU}mXU=K^b9;|ned6fZGX4vVPQ2kgj5=smq|p3CV96-$$5yrZmG7Ts z2bSA^q$_YGl0=B3A9$eF`*HC2kvFJ~trwub<{$fz3oQSePEQRLg&;4*h$8>`AJ(*f zY0R!(v{r_ObO9Q8VC~4V9WC;_4?MS4{c-F)@2EIJMsV)?A9j-M%g$z|WM=V&d-{i0 zv`+qbf1ZiJO_fxH0P~>7)XG0D{@-UYvid+t;8Q0P*lXVu{OBEg?tUmlhOQj^$rWvW z?ng2|2ip!6B$btbl;@+4u6^x$$895W_uKO)9!~4@4MCL9fyxI4OM!c6b&eO_;L$IU zolK(>o>*wD)I=mG>sNU`t5*MU+gm0sPdvW)eNh-Pm8XX)Mu9YGF3T}q^IP6<>CdHP zVDsg30$*arECiO%S^s*=SfG8WnMdUH43!0n6LNg{wUS=v#sUSu#~Yshr3Jbfo%U!# zWeA6%2uRquTOV_5_3O2_jV9EHcxUnIbJDu=xy919R2euJV5@W)mgqBp-}dK+HBSq# zEin^%6b=4gdJGK7ydzOG8rmZtx%PGEOU~|cOI+C_3eGu^*8llC5oIEV8bj1&8Z!!Y z{X1{?tRq&+?$K)Eh$~q`hl=9r$^?zBdGKS;TlsqV%Z3-3YsrZb`OwFNuy_9Loh4*d zkxa!1$^ee#%9+IErM=iSA2kwbQV0MgZb3+l#n|N0!dL1erSy z+5@Z)`=|>biOTfRL(6fpWfF`@;Y`Nv(VYmAnt}vTSWDA!8JzMGi7Y?_Fr-_9W{QcZ z*oLVnkxR*_bOJ$Tbu1p$haLGecn#E)mQk__0`tjf#|_WggKnug)o4KKGdv~~lRWr> z)&cDVnt)cA@Fv0tsu?wbVi}VOsWIXfM==xk|EgWAwUw&*;RzFND60#>k@6U`tWVq&B4f5eNsA@f5>I!1;T;Uk`T9C#tboKYx3~ zLnIPa$LyF|>ZXKd_!`QJfHSTm;LPc!sAXZ~^R0PC#aa4?2F?KYu>07P&_G^Ko_2De z&;TrZIf*ibInx#>v_&5!3%qpUSvcR&;KRwpFw=Y4`*NJ=oJO zD}w!0&rCWs`}ABjx|UxKGr2G-30MmTIJ6%_^kB2poWoF)yLMn7dcOJ6N9eH3IctErSwM?5}%OZN;W=iAr(Vhj;sQR)A$c&0wSmYuA6x+fF?`)u4v@BBwdHmLVmSbp{%&ro;Jc#8loT zC^Oo&o&P`gdsJtN@&@$WSsxv6P7n2tGK++c1Y7iG1IGjq=qw8gAu=VASQ`3-8N!$H;@3a3vqi_3yO_6h(y|7xO>xu=^tBi6h)jOM$b67*HNM zB5)C%M8ZkK?!eI5ZIZ@FZ7rdL`L3{?ojnd%jtslZ-%bwv_^Z|Q#2Z-WlS?NajGC7t zD&Rcm9wJ3IXnyVD%+#64`P-8&>AE1AhOlisXkOas7J4K)lZgZ>4P9VNpkT)l@^gBR z)1t@?9fMHtfZcPZfTMB#)^|^Torq(K$(C&4k5uL!jQk>~84PcuJ>T+lqN;&!q2|AO z?6CsbSn@M5)Hsn|SRq?`R! z!qRAJG=QF0p&BkQ^Y^I9SqW^S;rw5E9o9g$MYiF) zZ28GRZB=EA8ID;L(77f#z(tMh!Tl@fi6P18c^&Jc*$4|VV382xMFTd#(dA_)4+{ze z4}^jufD{~E>6A?0Af*x@rB&Xy+;qmnHnm9V<0lWj`=+;2ti|IhAULvMBmoW5&h!7x zpINhjDI+}}voFU}u!MBJn}81?q43doZvY zKFh6BsLN3*013|^kXgR$a}TfkzsdVE)OKWT8cJc$JpZO)Abd@fECSV{dL3utj!P-# zZXZw~HK>Uwk>oK&7ABh{!7&;R+@qhj_Ww@)Z~rrj?cumEg+232XR2aNf}nId>2k^_ zkbVl8K_41=RM~>}WzncW@SO0^@XyzUCwxS$e4Y8lGbMS&hl;5ues}`A{<^eRpeTz* z6U3%|6>%l&{kg+ede7ngNH2s%AB!cAff2U#|1+P~l00KUk|@*IlQh%F_6Q;RiC<_wV*wxq=lc zk$MD}?rSh8k%dUUDN=(#GYN$NsG$leDOq)7d`p1;e^~$g&qK2QNDYBM)U42e0(dK= zfe5WAG%m3xO?vPf0Ea!X1cj#3EmmN1Y0*wZ_{z&yzn=A4#EXy^X}>CO{487&%v129 zPm6itvoCM6m%LC__@PRW!k&4-Yb#pl83F)> zBGU;)Rr28rX-)LOYJx;Dq-VSO1Y=Mf{gnHzcb)mie+Nl79-Co3_Q?|V|NiBhwA3Aw z9Yz?Z+hQZHqaexuz0mR0$<)M1NzEnbTxV*AbB+7{E z*f@SQEeuWNl70$XHcfK2#ueDe9iqKUt(OOw^bRl8VH+;93p9=IWlvK4*gyo{42< ziM=~~*&5@)shq@;1dRKudXLFB`ya93e$i2|Ap!H0WtlTpCy+J-r-AzGU>P1*ck`9w z*i(}Kj}?#cAj{^h(B@@FO3Zk_o4gW2M=T{L^mC8<;%wV6B5~gR=zVi}EG65T*rH8A zH2;|nXgoRFUXL#5h~Sczgbj8ZoJQ-sF%T!;)WZ*PQY2?EA|D%=DU;JcvxF0nuv}PB zHnAku1Q8cGVm|yW`IW~s7cHf0uPHI?(z6$~V1Vbfwh5=1!DfM7I)jT)IuGibewXq&F@5D znn(gY-trEXagD?aE)cjAXPiMa3N0xS4Get*RtFyFVN(Lhf?W*KiMG_r<_vK16k1)- z6R3nyH_;)2`Ao!Y{d+-UC1s32M}~R8*~g@mjYg@9f}n=CgCj_{{2;QFa6mtA!jNE6 zwZ@dsR22a_B2F*35j!pfYFNQ$u9Rq$4_teQaS*j8XQ;BR-c?W;JvHtUS3m*#0ft~1 zJvecHFq-zx)FczM3FHXK0Ivp(K^(B;kCi?wys#)yLO6x+{b={-qq$HP-I{O+#@7|2 zYr%;-h%^OGJA%}pLC9ypQVwh(2o`7N24w-ZAy8DNm-i?yIOiHO>G4PpC{7rr5EPz3 zWk48YNmgtq_251eN$4^mJCETRdBE^=A-0JLVanK(7TIr9WW@x&pN#N=BlnYhB_fyx zXXH{A!nl%72_CP_+=AgHc`$ouI5nDez(k&*tCYEihUXFdq>1Jw@Dx3OV$&FQOaet# z;stj-itRW_R{Ep6FesxLC<+8a?QgB()N26~li5Ti@I=;43)AlpehuMHB}=BhG7IjDO5DP z9}56#F?p}j&;Uwc1yKnbREPk5gFvf1DXua|X2Sr5qS)XG=U=5U5WUFhN<&+4(IKXi zh*Fyva4ubi$)n*Zts!OO2*(Mk$D{BoUAjyRjm?A)62a7f2}n3}ItGpX=Wi6Efo@1h z^Mtz|Dx)AnulX3HP;5dM2O5P)r^o>X7>XziYBK4DNvq&f}6V9W_C^P~<+0vXscL(^Q3ojOBqnh6;QEtDZL=tGXWEcw|K+B zYbZH1DrsiRVpr5bPp=eiI~t4n#GO1EP4la@@&vKMpdkjmMo@&9A_g<;7~QdoA)5}G zFw?GKmnrbC@rFAeHquxmNp9hdBtWT%LZFLMuetUJu^^fvDcCGQ4B9Z>{JOg&m~=9> z#wsnTPF{QDuGih1nH5YBq$F!fUpIu6ZAljXS8q6b*?Gm0R=tcZR}rn~3~6EoiN##< zrPtPKKi>ZDUR*ZZ64B!qFV(Pb|M9o0qI5oZ@k3VdL%~*2s_mVx@+Ujz9oI#xMdH$m zlFT;r`WOuPaMd;6b)?q(@h`uvF)i9zluN(sl3Mr2GyVol9l$QQ?+#(_`li!rtz;{)wLcS0N~kpd z`HVlDzILDNr5TclQd!;z79xOhe)#9s%GX`ruzLZKX1Ndhq8Clx?}=!rRW@Rre%YGb z9KJaAku6M&kG}!3ryo06YybH9|CV~uDc|r%Po?#?Z%BLMYmu9>H^^>pdHtH!+56g#WX~+V>r+n(#*W14Rv?kA)KQ)HE?$={Y zGmEqLzyEq>UF-Cv=T>p=I3prPmFNEC@s+RVKcA3{`Q~usr$X4b{@~kkW5o1RW@B~h ztJh}dz-1HdGz)(5P4;{02al|JUH7X~C2SbNp8nPU#;&P`f{nf;?p3$0ZQXI-jn}ng zXcmyw@vnN=de`aa{bfyu{pyE~_3A(Pe+w>BESkqxymxJDd(nCGw`XR&1wXpaLznLa zHO7KqlR!7V`gBi|-tN@Hj@05 zn-qK^JO^$jV(|RRTH(im&{b_n=T1MlqdJC+~$;1Y&WcFyO4$kf)YSXV=D}0#|0wBNE7E%-bjWK z%kt0cocZ|Im)08B78f_3#ul+HP*IW!s0|9zBDr0&0^XISap*-D+NR{4Hd`Hwy+|~c zziw*HdBH7jtyO;9esbR~Txi8Ym)9e1l1Q;6fY}UT5DH{e<8j07K4#%&x;V-z+7}0c zb?AsDVDf@n!lA5Wh|o~I{$>*b#e*ZSjV!GAW)hUj3*&*($S zn7s9FcJSOVnzP0>BtXj|iG`trKsW`=RG`lV2TGWeeF>JbF;M-t_pNok@0<&myx5t< z8PzaDegVjY!sVq@Ai;3A2^lsbvSjJAEsS0lC_`_*7RFmLLdu!jMg~{3Vt`Vv-J)6) z1pT|AmHzmYFFQ5IBkYkv5@aNG%^NgkH(R-Ggu6^AWm&v^_nOgOfipq`Km zLc@WBNn?1>&352Yw*?1!`59Q>O+)}w_S}|0mkWC1ioaLgam7Z%+Hs-^I{=fC?5G$8 zGJj$xnAB2WFhWw!g>fd`EpH$JO7l>%>;MLrRxG2vSpIAO;VKG8yJzY zgx?xi>Tnzs)3OU_b4jQb!xbXD;f+XSA9C1X+a0$3 z4%_GR@Js%7>92qH*WWZ)i8^4cE{EU_;XqC(Fi}sS)L6=(bTn`+QW$Yl69EOa>e@qP znWdC4epZ63pdXh&SbQpoCwvTvPeC9~BOuM-Z-sbO~;!bHbw)7PXRteVg_LeiWcg%mOv~HVnGPSB~sDFWrd{nsCU;5Q-xo{boOcTN3FU|Z^OqOy;4+RpP1Uo%RAVGjTUgz8suQKi5y#Et!nZtsdnF57br9U+? zJB5)ro_vfmMP&LSj;S=z!TtyAGaK;N5pD#8OM`GsIIB7j0#}p@r{(pk;$FJN&3D)= z#Q*xHPv<9+RO098!cGo_7iX-ZSXuJ$Q;RQ_7Vr~clfF_yoqy#R@i5Y2z~aM5m^e`U zQ&WOMfFmSJd<~f2{4Ub==1IKq)1my33|$F}CP}P#qqZSil^!C4(k`TTK#i_EUzPPA z8ASwYNyS5yRH~H#(2yWoN)6NfCq3Y>%}V{RkNgwD1GGe+v^1O{0D@LYTWkYR9{H(Z zEu1t~Fij8pPwi)_iVlDvOhAaXP%vNt=1kMf#noaQV(Bio-0bAv_@-zD4Uvoh=v7E& z1>y-22K{Ui!3fQW>mkBsq=6!xcg0BGjEbOkeXvH!~bL(0-03&*t65EToEjCuny zao4-fjsEN3NIGFbM?)|{G^WU=^iGjRip|wIB@LA6z~!5npD}khK~-lw01XtFkQu;Z zuQ$)H)qXe1gu-Mv(ut}OtGK|2-FO-#=A?+scn8$!(xa&$PcJ0h_h~&Tmz)?VCOJdE z9)G>L(%ezWR`R!eLX$1_j9J8L+W=HqOU4Opp z58vw>#xli-B-}6&IOfKPnD{Jy1;u}(oCf)Ezx&VUh}g*^b9_6aD}kxMw^gmaE02vshcCmK&MX194r5A;v@^REfL`qRUroR%J3 zyJXe2O42~BrvHmuFb~!$c+{O>dbWM`ec}$*#pg4ZjD;#Kaz`-4T3w>Oc0Veb0gB5x z-6UCEEr>*YG|OgzENsx5!`(U=$xiuTDkjs60A-Y4<3NUdipVgm0yOKyes5|hn=28l zKEs#@nu7}#vwL6I3;W%+`-VJo3tAmX@^pw*q6st&rpEvnX(<5J?7L(iO%cbVwZz6* zddvufn>tTGnD6(De&`?n<$tDJmZzFzYn)Wd{%$v)R{^GFfN~u;wlOy#gAb$$6BH(H zgN`NYPPgF=J9b3>ppS+yqY!6Ng-8&bzPC|V{B0rq1tnc%D=rW623ps%%`lka8E}Ie zb@jOAFTV_gjv0i~&5F~$5I>rm1WnYuufPE9KPIXgNxpO*>EfpJqZ_4%XDiR%u`BjR zeB{bzQXoM;OI;Lu_g`{m{6q1% zmf+LO-`er|-b zRh7Q*s2w}B8wV+pp@?H65{XOzi5;|kMC2K=d3j)va2{A=0$@}*vY#+HqDn4@@PUikBUE1j@klaY_ z;}CKJS&6*mjA2R{n5FH(gP`o7e1)lNE+yoDRKw4nK=74qLxhTj!Gv#4u zdvpuSmWPJxdS~?dWkDoSID_=jv)Kp`aAIOAo8>%)dBLVi>Bv!T%$XyK`JE5x_4P+f z8#UlZ&~g=#4M;zcnhG!x9yqAyqc6I=P0^boZ$)mmZ?7w}wl6nEX!(Ot^@4fKc^Oqq z0V}mVywP7j#&NW;+`u5+nc>3&cI?%{WZ*SQ-H`|)_sm3Z#t1M}+sy%lZ9j)ux(A*l{W9vHyec4)7LOyo(U>0=^NH_Uce z;vHa_66A4r+j!mq-PzavNMm@mt=mi>3>T0f5`lTBoN^{yuRD7eC|`lf%wdFZRHF6| zvV^yE?wLEXc%EtFxxLwO>kQ6`;i^#1d}jU)*`ro<1wzn)E3C81J1tB9Dnmv_3q(WV zg4vIhtKpb_^aSERJH9VF{%4I7bps$-L^K*HRvr>ck=>5vNGO)d zS!6AH?l2mbe{+*ATKw5^o{a%HMDt3v)DFgUbBRwBpVBR|rJr8!oDS?azhSxc!dfm{ zp{S5foafNpbhK$NHyf^Z%G~YiUo#3NNPsXQNGm8&5{MZRmQ)=J5WP|}fSVjQ?+3i! zgnVPd^}(8#v%35V+aN$7CDZJ3U8B|2mb~7vbG3D!H0l*n=(Su<_Bwh{hT`6ICe+nH z;y}*t?c8}DeEz36S}Wm%@&nuftAVme>HvBcZ8~$RoNmqYr=C5(zvm?l%6l45c5)g6 zZKBz5TqWYmOB;xWMaLL2baCL>^O=_}Kk8F6S_lWvy5?>Y8ACRy*+J<}=}7TsFzct5 znZJCKrFp!re&og#p+E+c4rnF}LqbIv2jfzG2~cu;aP?}89FWcVWlNjC)C*oP!;Fwo zNH~?ipa57rThl>T=1%5715o}+NJB9g2EuLqb(c18?vsBK9JAdRQ!gV3YIwj{=`NN7 z2I{fmS9%tUgwhT~D~gLRK6djZHazJQXp)U&+bi=5llFv{28yBxjc69>X}L@b0GJK% z(dEX_>}Q)RvEha9@|a<4xvd0}L`XnD4!KeBIk;ddPjqSIY1GXLV?fwYh8V}X<)!_v zdOI)p=7?6z!e)^nFf}&|Lw;lp;k!^w90@%ESxQi^InMH(8-ez-Z~E>_SEc-W-?Ltx z69?H2A%qL4q!27}L76O?c0?%6Pr1A~zjg)~J*SZRix|7)3*Y$dHcM-npe}#&o1fgs z25lS}dI$}I1U*Bf@*JBM)gl_X#3PW6X><}LTHRZM^l+JX#XrCQ-YxI*;j%)2)=o!)10n0b{rcOV zde2+oWn>Ngg+0SK!b%Gg^D-|}3@%$Ps!a)Z2}&7xgJt*x64e$a(<+HrMoNS-802Mc zOxS^FXi7T`R6?id1Z4!9P7#YJtClmDP!`3s-)H}ya&;;z$3`|VA@VjD^7}!_F=|&x zH6daFtQja$0*h=g2C069isb5RXo4B-ut>Rr6@y^3_M!aG2LaLWW7K%iy@W58SbQPX ztzIQdaJp!v^;q4Wpx~)e%MB(Z*$`4SvOQ~9MB+rtMnwS#c2eLku7%SmL@)tE8F`(c zWj+K;!x4jk2sesCfl+Yk6%Uaz$p^08V>M=rs{zC-L7Jkov<=A@m1q&U9mmLfAGQ-P zIC{v6Qd+R<<)0C$cjBnL7F&%%RJ+kOG2v)RKr=-JMW%8Ggpn|*8%Dv0iQ9ujIgc^pDvkD`>ne9|19j188;H~S$ zSw;Jj<5IF_rh+&{12QjJruq=&DOw^(m2$XEq6%eGLRfvl?p~s2uSx`_SS~bXc zCyQDEic$hE0ZnN=HJB{mMZL=qFew2^l>)jLsmy~i#lmo%UoYHgt6Q- zrjRNsSD7+l74!>unL8Go7GR`6=y->96~L=KcV`lmAQqQTJ8zee0X{ z!`PSf>~{ucW@ct)W@ct)W@ct(@5=-#89&ukRaI40RXyDa?IY8Ba=PvRv+nNh?%wu~ z31((yI~L-uTq3HfqKikvvLYfP9rgjsUNbW(Sk+ZkRaG>G8Z_SfZq69h1VltcL<_IW z_k`?uHO$Q#e|3nKY49C1uau(@3wY6$(Kjg}bn=o6NoTMx6H4Q3Fj8+5g#lUBMJ<;c zy3`oQ7sC8`y4DYDcW8_?;slWaL}cBj=jU}`)^zONLASt_7G_rERl886&lm>3+%qz_ zEO7@e{lfR;xgpo3(y3Aa+d9(&o^bUss3lnnf7xg@V7`z9`N(NZtkvjQR77xss9yQcp>+YE*!or+=Rrkdl3v(e@MRN z&?QwzPzBNknVCnii-zNFSlvmCN&4keuItXQ0LYWNSe5^6>)O*dzPCarR9%TQtCqE_ zI;y8`diIBnn|}Xu(x7SXH_=gw@Ah~b|L&*kf*H?U%+axnfGk0p9y_Jr7n=^#Gcz+Y zDSe?zGqgT3eOt-@$|1^|NTtPNEM!{}LpK;JctGY>AWDV=flaw0)6W|4*&GX6)m2qh z9fS$t@f2y^=mBbiFne_~?xW*BHu@xhEEdjDwD`v@LWyOp7d#Tgj9-dErWxEyl%%ez zs;Q(!QPj>=*;u_5o3=1I+--2avL9V@T7}hZ-Q6$%{`KI%0Cs-_{Lx?(9~h7S|E{b4 zTz~-4{t5lRZrT72FW{fs>dgQnze7L(p!mw4|JO}m0)cD~b)kEY?K3-&X^NaiX2iV7Wi{(aZJwhBnU(l^m?s+Yst9GI$b0k3VYJ%qEGIOG!-l;5(1H~ zKeIX;07~><|Ml{;75Gl6u|oAx3ec_-BadMQc4dYKqsFy67MDma9WWb~)sHGHxomJI z{FM08jg-;cXE+oNMtr@|hIGLCgra_ROOOx5&#-L@v1mVD5hV+t;;D?Hj2p|asVh%a z&PbYA6{&A!Lvbunk@+#N|LE277t}o!!WNj3cqB@&A*U_+xD%CtAwf-+2GX70H32O@ zgRBgY>CUr59-lE!=TLr4&pSF^B1%1SpW^fPF9x7&6Nbej9--j(@OCsrcdl34(yN{1 zX&YJx=SU(rP_exNT1h}V-@(ttkA5S|FOp~BqsF}t z*i|$GS;x&jwfRq#POlL44!T(ErJUN|FuB%s73-zp!<0Ph3t--rP$wZH}W{4p= zsuas;kT(S@ol;!}-&ysmht{A!_+iA~tvo<32Qr7sSAMIVG%e79sL8V+K)W{Z3$}Y? z*BfkIiQ^uRZ6!RA(J$`{4uSe`H`NrSY$@tJy%aLdWJ(Cty2*A|Mz2azP?W8w_z&$c zlh4;+zNn4<5w=P}A;m#@wznZ;-wlW7#f~TiPwgzMo}-$=zlRLhwyFTcVR2+g8UyjL zpzBcy?*T#p7T*+h(B4F&V8;CgkUsA>`S*e?+_gZE@L=X=|BofQj?T0G{@iT$yDt57 z**+e>()Eh!%i)?}7P0%)PnU}%CfcV#xJcM-iVGYKBEgMW%2U6R=lx__;!)L6d9`)N z>*e_4_-)$i5B@N_!1;#mnhz}}g298(u6ORm$}ZvZ#U53i0uBOnuGz%_W;-V_CGZ^@ z(5OuvN?=C}>^VEGORG)%LR{u@4s-bxASMUCWI!oil?PB-FKzuZ-~R>VR0)3s6XII}3oEqce> zVLsr_3LB);GAs>-AiCQ<_|v?y4remEV(CEQt+<+Ho~+VC&hY{ zU-!ZM_slaCtSP!ORz!+vX#pe&+xD!l*jWKz;*XDDv&tGaRi~WrZy;wEL|>Hz=RUNw zX%v*AAzJh@gs(}#3(^h$w^ms^;3&BD7Hh?;nET-i*9*i_6Nx3sqK|qU6zZt5eRXX_f15lQJ%CMnk9Z^Jh={LzNd?e zDF?qzQsjzRu}+D_TN_KNED}Z&ra|e7_`L(~aB=JyS~-qdP0|73DfxO3RLw@rch+;{-sSVc2#{ln_O$b=(b)@t>tZlpwpkN zsWxDca{;J+eF%UtuFz#;8M{_GDv<*75Bs$(|48hjsgf}7&)2XJyEGfEj zdCBJe`j#ktRj~U{1>#>YNlE5s&Qu~2Q(1FBf*S z_|NB=x>r0nu6K40fB>!~^|YhGV2noA=v(7)y+ChjaMt1q#$V?g@KZD*pd*ls7a@W^ znDqsp^M`7IVs0v2!h?vI8{D;WgtV>R7R{y8l@hl5lOJ;N*M_VF@VkI@uI z1`Id4mh8qED+>Q+Yt_m{iNyn7n!05rmCtkm^;y?@k+f)4C;8nP$v|fL7 zF5mTDM$lFNw}%bv057{mF@2mAc;ztj{B+#&F}UdwD0ItVLajk*XSbT&*2TdgK| z_vO0gH=J~JKlt`j8{x7%JL*Y0)lz=G=O`6yqo8nIq$&L0Ec%%dVr}m&YCDrccRR%w z)j#-7q7k&-JSH$kcTMpXg|$ynwrq|JjEot z<*SBzVa1yrx&a_#SFNX))?$iK<+;^=eo$ESppYEKE1zlcf30#!T(gBIcGrHBmi)-3 zj()^GM90X!jicLK5$2S(FCmdApx+}5I?PcRDJ03zC^!d4wM0WgWPzsw)XI! zv^vVyYn$q(iZ~UX+d=gE2=m`*LIjo(IIsoe7h(#xq*7zWs>IK%u0S9Fzdl)~v)nU= zru;25n3PJ*BLOnQaLlS)R(?6&>5=Z=nxn)KY#gX>NBzW@ELt=MS z%!czR@+Z1@LKM%W&$}6PJj6uT;T~crZ;pFsI7yn8m?qegjPgo+vr}$`<48SXLb9## z+`Lrv$MW7=puOWtx1O0aMgbkSDX)XrM2Q$afOxnU1@N)&;^&G2JnEZ$b*Dj4UiG6P zEx&SNGOF5ES>d2Z7|8n&wpS?-AG1hh3as@*#R6-V_pnCMyfti<4}+v8Fxo~1#%saB z+6jxhs;Uk)wxbr2pGP^)FxIOVRtRh3{T7br6KBT5Vf6V51|4Sa_2}mmk%m ze4X#=HIwLCX=W$Z45*dWC@-h^oE?xd0}sXgUnIOq`G6F@H_Y&56wooAb4Q7I*}eaq zT|20LdXs+$SfW_uLKOa{;R+_#$c39-fh1v-fTPe_a0U9;XWSPsg%{8F`fKGiZ&i;L zcf(bhxcoA5P$^XHP^WcGr1!FD`;P%W0S8X_c6(9y#}R$8XbZ=>Am`tH`rb?Iz8JGM zNV*~y@se;p9JI&r($2}I*M%0L+iyeh2V>K>VjZM^-iMO#R(3W^fn)>xl zR`28K^_6<1l(HRIUa}lE$0Yu3v_(Zf>jA@mQggGD6Ae!}-M3_C3>;3zGSlKh#~$vG z!jSBfwJx5p(RM-tof3)HC_0#PzqgBS(cMpwb-Nog*;k2|rR*M73R-_H-+k#mUN+By z?yXy3$@Q8yPo&p@%`}I{-Um^PLS!8|MaI|>n~|Gu-fs$Tnai%c6KY$1#j~$wrWeHx z^$(SfAXc~-`vLrBZ&fN!oo_VdP{S~JCmv7{j-pBy$lNiH7pHzz964~{Mlt?EBl0o% zO0Y6S;K)uvQa%p8z~A63_R1TdmK+&#`sZa3bm0PKp7G7?Cc1eT zhM;_SbQ=zv2033y=STq(>}OD;MXunHiX1u~AIK2o+?=4iSA$KXrYQMm{IwC<3d4vS#>SiY;XjGWy8dXKa;v4eQB5k_ar04pTO$kz zedi;kX2dxCQ-4{~Z`r=oQbB$Ve1)HOt0`7RXR<V9rpZDgtIywT8*8! zIHwDlf3w+`T(WDt$-NO-vI+M9gB$(b>kj0_dHeZ}5OBe9QFNRZ6<2KDXQvF2eOl(M zY%M1U*gJ=)2*Ca|a!g9U!KT%I4C;=uTy5s{pJ!LE2bl3tO|F$zx=bABniCV(aqJ7L Z*A=aXJM{{G%bCUr@ Date: Wed, 2 Jul 2025 15:27:48 +0530 Subject: [PATCH 009/130] [WIKI-491] [WIKI-496] [WIKI-499] refactor: tables width and selection UI (#7274) * refactor: tables width and selection UI * fix: drag handle position * refactor: selection decorator logic * refactor: adjacent cells logic * refactor: folder structure * chore: default column width for new columns * refactor: plugin location --- .../editor/src/core/extensions/side-menu.ts | 2 +- .../plugins/table-selection-outline/plugin.ts | 58 ++++++ .../plugins/table-selection-outline/utils.ts | 75 +++++++ .../src/core/extensions/table/table-cell.ts | 10 +- .../src/core/extensions/table/table-header.ts | 5 +- .../src/core/extensions/table/table/index.ts | 2 + .../extensions/table/table/table-view.tsx | 2 +- .../src/core/extensions/table/table/table.ts | 20 +- .../table/table/utilities/create-table.ts | 22 +- .../src/core/helpers/editor-commands.ts | 5 +- .../editor/src/core/plugins/drag-handle.ts | 6 +- packages/editor/src/styles/drag-drop.css | 5 +- packages/editor/src/styles/table.css | 193 ++++++++++-------- packages/editor/src/styles/variables.css | 15 +- 14 files changed, 304 insertions(+), 116 deletions(-) create mode 100644 packages/editor/src/core/extensions/table/plugins/table-selection-outline/plugin.ts create mode 100644 packages/editor/src/core/extensions/table/plugins/table-selection-outline/utils.ts diff --git a/packages/editor/src/core/extensions/side-menu.ts b/packages/editor/src/core/extensions/side-menu.ts index 34e3c45e5f2..ca139f72311 100644 --- a/packages/editor/src/core/extensions/side-menu.ts +++ b/packages/editor/src/core/extensions/side-menu.ts @@ -131,7 +131,7 @@ const SideMenu = (options: SideMenuPluginProps) => { } } - if (node.matches(".table-wrapper")) { + if (node.matches("table")) { rect.top += 8; rect.left -= 8; } diff --git a/packages/editor/src/core/extensions/table/plugins/table-selection-outline/plugin.ts b/packages/editor/src/core/extensions/table/plugins/table-selection-outline/plugin.ts new file mode 100644 index 00000000000..0e88d8c7797 --- /dev/null +++ b/packages/editor/src/core/extensions/table/plugins/table-selection-outline/plugin.ts @@ -0,0 +1,58 @@ +import { findParentNode, type Editor } from "@tiptap/core"; +import { Plugin, PluginKey } from "@tiptap/pm/state"; +import { CellSelection, TableMap } from "@tiptap/pm/tables"; +import { Decoration, DecorationSet } from "@tiptap/pm/view"; +// local imports +import { getCellBorderClasses } from "./utils"; + +type TableCellSelectionOutlinePluginState = { + decorations?: DecorationSet; +}; + +const TABLE_SELECTION_OUTLINE_PLUGIN_KEY = new PluginKey("table-cell-selection-outline"); + +export const TableCellSelectionOutlinePlugin = (editor: Editor): Plugin => + new Plugin({ + key: TABLE_SELECTION_OUTLINE_PLUGIN_KEY, + state: { + init: () => ({}), + apply(tr, prev, oldState, newState) { + if (!editor.isEditable) return {}; + const table = findParentNode((node) => node.type.spec.tableRole === "table")(newState.selection); + const hasDocChanged = tr.docChanged || !newState.selection.eq(oldState.selection); + if (!table || !hasDocChanged) { + return table === undefined ? {} : prev; + } + + const { selection } = newState; + if (!(selection instanceof CellSelection)) return {}; + + const decorations: Decoration[] = []; + const tableMap = TableMap.get(table.node); + const selectedCells: number[] = []; + + // First, collect all selected cell positions + selection.forEachCell((_node, pos) => { + const start = pos - table.pos - 1; + selectedCells.push(start); + }); + + // Then, add decorations with appropriate border classes + selection.forEachCell((node, pos) => { + const start = pos - table.pos - 1; + const classes = getCellBorderClasses(start, selectedCells, tableMap); + + decorations.push(Decoration.node(pos, pos + node.nodeSize, { class: classes.join(" ") })); + }); + + return { + decorations: DecorationSet.create(newState.doc, decorations), + }; + }, + }, + props: { + decorations(state) { + return TABLE_SELECTION_OUTLINE_PLUGIN_KEY.getState(state).decorations; + }, + }, + }); diff --git a/packages/editor/src/core/extensions/table/plugins/table-selection-outline/utils.ts b/packages/editor/src/core/extensions/table/plugins/table-selection-outline/utils.ts new file mode 100644 index 00000000000..f4c43e77ee6 --- /dev/null +++ b/packages/editor/src/core/extensions/table/plugins/table-selection-outline/utils.ts @@ -0,0 +1,75 @@ +import type { TableMap } from "@tiptap/pm/tables"; + +/** + * Calculates the positions of cells adjacent to a given cell in a table + * @param cellStart - The start position of the current cell in the document + * @param tableMap - ProseMirror's table mapping structure containing cell positions and dimensions + * @returns Object with positions of adjacent cells (undefined if cell doesn't exist at table edge) + */ +const getAdjacentCellPositions = ( + cellStart: number, + tableMap: TableMap +): { top?: number; bottom?: number; left?: number; right?: number } => { + // Extract table dimensions + // width -> number of columns in the table + // height -> number of rows in the table + const { width, height } = tableMap; + + // Find the index of our cell in the flat tableMap.map array + // tableMap.map contains start positions of all cells in row-by-row order + const cellIndex = tableMap.map.indexOf(cellStart); + + // Safety check: if cell position not found in table map, return empty object + if (cellIndex === -1) return {}; + + // Convert flat array index to 2D grid coordinates + // row = which row the cell is in (0-based from top) + // col = which column the cell is in (0-based from left) + const row = Math.floor(cellIndex / width); // Integer division gives row number + const col = cellIndex % width; // Remainder gives column number + + return { + // Top cell: same column, one row up + // Check if we're not in the first row (row > 0) before calculating + top: row > 0 ? tableMap.map[(row - 1) * width + col] : undefined, + + // Bottom cell: same column, one row down + // Check if we're not in the last row (row < height - 1) before calculating + bottom: row < height - 1 ? tableMap.map[(row + 1) * width + col] : undefined, + + // Left cell: same row, one column left + // Check if we're not in the first column (col > 0) before calculating + left: col > 0 ? tableMap.map[row * width + (col - 1)] : undefined, + + // Right cell: same row, one column right + // Check if we're not in the last column (col < width - 1) before calculating + right: col < width - 1 ? tableMap.map[row * width + (col + 1)] : undefined, + }; +}; + +export const getCellBorderClasses = (cellStart: number, selectedCells: number[], tableMap: TableMap): string[] => { + const adjacent = getAdjacentCellPositions(cellStart, tableMap); + const classes: string[] = []; + + // Add border-right if right cell is not selected or doesn't exist + if (adjacent.right === undefined || !selectedCells.includes(adjacent.right)) { + classes.push("selectedCell-border-right"); + } + + // Add border-left if left cell is not selected or doesn't exist + if (adjacent.left === undefined || !selectedCells.includes(adjacent.left)) { + classes.push("selectedCell-border-left"); + } + + // Add border-top if top cell is not selected or doesn't exist + if (adjacent.top === undefined || !selectedCells.includes(adjacent.top)) { + classes.push("selectedCell-border-top"); + } + + // Add border-bottom if bottom cell is not selected or doesn't exist + if (adjacent.bottom === undefined || !selectedCells.includes(adjacent.bottom)) { + classes.push("selectedCell-border-bottom"); + } + + return classes; +}; diff --git a/packages/editor/src/core/extensions/table/table-cell.ts b/packages/editor/src/core/extensions/table/table-cell.ts index 2ba06845a6c..988fcbb14d2 100644 --- a/packages/editor/src/core/extensions/table/table-cell.ts +++ b/packages/editor/src/core/extensions/table/table-cell.ts @@ -1,6 +1,10 @@ import { mergeAttributes, Node } from "@tiptap/core"; // constants import { CORE_EXTENSIONS } from "@/constants/extension"; +// local imports +import { TableCellSelectionOutlinePlugin } from "./plugins/table-selection-outline/plugin"; +import { DEFAULT_COLUMN_WIDTH } from "./table"; + export interface TableCellOptions { HTMLAttributes: Record; } @@ -25,7 +29,7 @@ export const TableCell = Node.create({ default: 1, }, colwidth: { - default: null, + default: [DEFAULT_COLUMN_WIDTH], parseHTML: (element) => { const colwidth = element.getAttribute("colwidth"); const value = colwidth ? [parseInt(colwidth, 10)] : null; @@ -46,6 +50,10 @@ export const TableCell = Node.create({ isolating: true, + addProseMirrorPlugins() { + return [TableCellSelectionOutlinePlugin(this.editor)]; + }, + parseHTML() { return [{ tag: "td" }]; }, diff --git a/packages/editor/src/core/extensions/table/table-header.ts b/packages/editor/src/core/extensions/table/table-header.ts index 491889eefae..315ada5ec90 100644 --- a/packages/editor/src/core/extensions/table/table-header.ts +++ b/packages/editor/src/core/extensions/table/table-header.ts @@ -1,6 +1,9 @@ import { mergeAttributes, Node } from "@tiptap/core"; // constants import { CORE_EXTENSIONS } from "@/constants/extension"; +// local imports +import { DEFAULT_COLUMN_WIDTH } from "./table"; + export interface TableHeaderOptions { HTMLAttributes: Record; } @@ -25,7 +28,7 @@ export const TableHeader = Node.create({ default: 1, }, colwidth: { - default: null, + default: [DEFAULT_COLUMN_WIDTH], parseHTML: (element) => { const colwidth = element.getAttribute("colwidth"); const value = colwidth ? [parseInt(colwidth, 10)] : null; diff --git a/packages/editor/src/core/extensions/table/table/index.ts b/packages/editor/src/core/extensions/table/table/index.ts index 8efc4312099..328422b73d4 100644 --- a/packages/editor/src/core/extensions/table/table/index.ts +++ b/packages/editor/src/core/extensions/table/table/index.ts @@ -1 +1,3 @@ export { Table } from "./table"; + +export const DEFAULT_COLUMN_WIDTH = 150; diff --git a/packages/editor/src/core/extensions/table/table/table-view.tsx b/packages/editor/src/core/extensions/table/table/table-view.tsx index f78d964ed49..c3466ba59a1 100644 --- a/packages/editor/src/core/extensions/table/table/table-view.tsx +++ b/packages/editor/src/core/extensions/table/table/table-view.tsx @@ -387,7 +387,7 @@ export class TableView implements NodeView { this.root = h( "div", { - className: "table-wrapper horizontal-scrollbar scrollbar-md controls--disabled", + className: "table-wrapper editor-full-width-block horizontal-scrollbar scrollbar-sm controls--disabled", }, this.controls, this.table diff --git a/packages/editor/src/core/extensions/table/table/table.ts b/packages/editor/src/core/extensions/table/table/table.ts index 4810706b395..aa2c79aaf3d 100644 --- a/packages/editor/src/core/extensions/table/table/table.ts +++ b/packages/editor/src/core/extensions/table/table/table.ts @@ -29,6 +29,7 @@ import { createTable } from "./utilities/create-table"; import { deleteTableWhenAllCellsSelected } from "./utilities/delete-table-when-all-cells-selected"; import { insertLineAboveTableAction } from "./utilities/insert-line-above-table-action"; import { insertLineBelowTableAction } from "./utilities/insert-line-below-table-action"; +import { DEFAULT_COLUMN_WIDTH } from "."; export interface TableOptions { HTMLAttributes: Record; @@ -42,12 +43,7 @@ export interface TableOptions { declare module "@tiptap/core" { interface Commands { [CORE_EXTENSIONS.TABLE]: { - insertTable: (options?: { - rows?: number; - cols?: number; - withHeaderRow?: boolean; - columnWidth?: number; - }) => ReturnType; + insertTable: (options?: { rows?: number; cols?: number; withHeaderRow?: boolean }) => ReturnType; addColumnBefore: () => ReturnType; addColumnAfter: () => ReturnType; deleteColumn: () => ReturnType; @@ -81,7 +77,7 @@ declare module "@tiptap/core" { } } -export const Table = Node.create({ +export const Table = Node.create({ name: CORE_EXTENSIONS.TABLE, addOptions() { @@ -116,9 +112,15 @@ export const Table = Node.create({ addCommands() { return { insertTable: - ({ rows = 3, cols = 3, withHeaderRow = false, columnWidth = 150 } = {}) => + ({ rows = 3, cols = 3, withHeaderRow = false } = {}) => ({ tr, dispatch, editor }) => { - const node = createTable(editor.schema, rows, cols, withHeaderRow, undefined, columnWidth); + const node = createTable({ + schema: editor.schema, + rowsCount: rows, + colsCount: cols, + withHeaderRow, + columnWidth: DEFAULT_COLUMN_WIDTH, + }); if (dispatch) { const offset = tr.selection.anchor + 1; diff --git a/packages/editor/src/core/extensions/table/table/utilities/create-table.ts b/packages/editor/src/core/extensions/table/table/utilities/create-table.ts index 5e9c4ba2451..0ba2757db7b 100644 --- a/packages/editor/src/core/extensions/table/table/utilities/create-table.ts +++ b/packages/editor/src/core/extensions/table/table/utilities/create-table.ts @@ -3,14 +3,18 @@ import { Fragment, Node as ProsemirrorNode, Schema } from "@tiptap/pm/model"; import { createCell } from "@/extensions/table/table/utilities/create-cell"; import { getTableNodeTypes } from "@/extensions/table/table/utilities/get-table-node-types"; -export function createTable( - schema: Schema, - rowsCount: number, - colsCount: number, - withHeaderRow: boolean, - cellContent?: Fragment | ProsemirrorNode | Array, - columnWidth: number = 100 -): ProsemirrorNode { +type Props = { + schema: Schema; + rowsCount: number; + colsCount: number; + withHeaderRow: boolean; + cellContent?: Fragment | ProsemirrorNode | Array; + columnWidth: number; +}; + +export const createTable = (props: Props): ProsemirrorNode => { + const { schema, rowsCount, colsCount, withHeaderRow, cellContent, columnWidth } = props; + const types = getTableNodeTypes(schema); const headerCells: ProsemirrorNode[] = []; const cells: ProsemirrorNode[] = []; @@ -38,4 +42,4 @@ export function createTable( } return types.table.createChecked(null, rows); -} +}; diff --git a/packages/editor/src/core/helpers/editor-commands.ts b/packages/editor/src/core/helpers/editor-commands.ts index 415a42bb3b4..43543d57539 100644 --- a/packages/editor/src/core/helpers/editor-commands.ts +++ b/packages/editor/src/core/helpers/editor-commands.ts @@ -109,9 +109,8 @@ export const insertTableCommand = (editor: Editor, range?: Range) => { } } } - if (range) - editor.chain().focus().deleteRange(range).clearNodes().insertTable({ rows: 3, cols: 3, columnWidth: 150 }).run(); - else editor.chain().focus().clearNodes().insertTable({ rows: 3, cols: 3, columnWidth: 150 }).run(); + if (range) editor.chain().focus().deleteRange(range).clearNodes().insertTable({ rows: 3, cols: 3 }).run(); + else editor.chain().focus().clearNodes().insertTable({ rows: 3, cols: 3 }).run(); }; export const insertImage = ({ diff --git a/packages/editor/src/core/plugins/drag-handle.ts b/packages/editor/src/core/plugins/drag-handle.ts index e04bbaba47e..342da57402c 100644 --- a/packages/editor/src/core/plugins/drag-handle.ts +++ b/packages/editor/src/core/plugins/drag-handle.ts @@ -16,7 +16,7 @@ const generalSelectors = [ "blockquote", "h1.editor-heading-block, h2.editor-heading-block, h3.editor-heading-block, h4.editor-heading-block, h5.editor-heading-block, h6.editor-heading-block", "[data-type=horizontalRule]", - ".table-wrapper", + "table", ".issue-embed", ".image-component", ".image-upload-component", @@ -90,7 +90,7 @@ export const nodeDOMAtCoords = (coords: { x: number; y: number }) => { for (const elem of elements) { // Check for table wrapper first - if (elem.matches(".table-wrapper")) { + if (elem.matches("table")) { return elem; } @@ -99,7 +99,7 @@ export const nodeDOMAtCoords = (coords: { x: number; y: number }) => { } // Skip table cells - if (elem.closest(".table-wrapper")) { + if (elem.closest("table")) { continue; } diff --git a/packages/editor/src/styles/drag-drop.css b/packages/editor/src/styles/drag-drop.css index 7db6ed87554..7b9577cc40e 100644 --- a/packages/editor/src/styles/drag-drop.css +++ b/packages/editor/src/styles/drag-drop.css @@ -35,7 +35,7 @@ } /* end ai handle */ -.ProseMirror:not(.dragging) .ProseMirror-selectednode:not(.node-imageComponent):not(.node-image) { +.ProseMirror:not(.dragging) .ProseMirror-selectednode:not(.node-imageComponent):not(.node-image):not(.table-wrapper) { position: relative; cursor: grab; outline: none !important; @@ -61,7 +61,8 @@ } &.node-imageComponent, - &.node-image { + &.node-image, + &.table-wrapper { --horizontal-offset: 0px; &::after { diff --git a/packages/editor/src/styles/table.css b/packages/editor/src/styles/table.css index b4a1ab82071..8c0b1786af7 100644 --- a/packages/editor/src/styles/table.css +++ b/packages/editor/src/styles/table.css @@ -1,57 +1,84 @@ .table-wrapper { overflow-x: auto; - width: fit-content; - max-width: 100%; -} -.table-wrapper table { - border-collapse: collapse; - table-layout: fixed; - margin: 0.5rem 0 1rem 0; - border: 1px solid rgba(var(--color-border-200)); - width: 100%; -} + table { + border-collapse: collapse; + table-layout: fixed; + margin: 0.5rem 0 1rem 0; + border: 1px solid rgba(var(--color-border-200)); + width: 100%; -.table-wrapper table td, -.table-wrapper table th { - min-width: 1em; - border: 1px solid rgba(var(--color-border-200)); - padding: 7px 10px; - vertical-align: top; - box-sizing: border-box; - position: relative; - transition: background-color 0.3s ease; - - > * { - margin-bottom: 0; - } -} + td, + th { + min-width: 1em; + border: 1px solid rgba(var(--color-border-300)); + padding: 7px 10px; + vertical-align: top; + box-sizing: border-box; + position: relative; + transition: background-color 0.3s ease; -.table-wrapper table { - th { - font-weight: 500; - text-align: left; - } + > * { + margin-bottom: 0; + } + + &.selectedCell { + user-select: none; + + &::after { + position: absolute; + content: ""; + top: -1px; + left: -1px; + height: calc(100% + 2px); + width: calc(100% + 2px); + } + + &.selectedCell-border-top::after { + border-top: 2px solid rgba(var(--color-primary-100)); + } + + &.selectedCell-border-left::after { + border-left: 2px solid rgba(var(--color-primary-100)); + } + + &.selectedCell-border-bottom::after { + border-bottom: 2px solid rgba(var(--color-primary-100)); + } + + &.selectedCell-border-right::after { + border-right: 2px solid rgba(var(--color-primary-100)); + } + } + } - tr[background="none"], - tr:not([background]) { th { - background-color: rgba(var(--color-background-90)); + font-weight: 500; + text-align: left; + } + + tr[background="none"], + tr:not([background]) { + th { + background-color: rgba(var(--color-background-90)); + } } } -} -.table-wrapper table .selectedCell { - outline: 0.5px solid rgba(var(--color-primary-100)); + &.ProseMirror-selectednode { + table { + background-color: rgba(var(--color-primary-100), 0.2); + } + } } /* table dropdown */ .table-wrapper table .column-resize-handle { position: absolute; - right: 0; - top: 0; + right: -1px; + top: -1px; width: 2px; - height: 100%; + height: calc(100% + 2px); z-index: 5; background-color: rgba(var(--color-primary-100)); pointer-events: none; @@ -59,57 +86,57 @@ .table-wrapper .table-controls { position: absolute; -} -.table-wrapper .table-controls .columns-control, -.table-wrapper .table-controls .rows-control { - transition: opacity ease-in 100ms; - position: absolute; - z-index: 5; - display: flex; - justify-content: center; - align-items: center; -} + .columns-control, + .rows-control { + transition: opacity ease-in 100ms; + position: absolute; + z-index: 5; + display: flex; + justify-content: center; + align-items: center; + } -.table-wrapper .table-controls .columns-control { - height: 20px; - transform: translateY(-50%); -} + .columns-control { + height: 20px; + transform: translateY(-50%); -.table-wrapper .table-controls .columns-control .columns-control-div { - color: white; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath fill='%238F95B2' d='M4.5 10.5c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5S6 12.825 6 12s-.675-1.5-1.5-1.5zm15 0c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5S21 12.825 21 12s-.675-1.5-1.5-1.5zm-7.5 0c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5 1.5-.675 1.5-1.5-.675-1.5-1.5-1.5z'/%3E%3C/svg%3E"); - width: 30px; - height: 15px; -} + .columns-control-div { + color: white; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath fill='%238F95B2' d='M4.5 10.5c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5S6 12.825 6 12s-.675-1.5-1.5-1.5zm15 0c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5S21 12.825 21 12s-.675-1.5-1.5-1.5zm-7.5 0c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5 1.5-.675 1.5-1.5-.675-1.5-1.5-1.5z'/%3E%3C/svg%3E"); + width: 30px; + height: 15px; + } + } -.table-wrapper .table-controls .rows-control { - width: 20px; - transform: translateX(-50%); - left: -8px; -} + .rows-control { + width: 20px; + transform: translateX(-50%); + left: -8px; -.table-wrapper .table-controls .rows-control .rows-control-div { - color: white; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath fill='%238F95B2' d='M12 3c-.825 0-1.5.675-1.5 1.5S11.175 6 12 6s1.5-.675 1.5-1.5S12.825 3 12 3zm0 15c-.825 0-1.5.675-1.5 1.5S11.175 21 12 21s1.5-.675 1.5-1.5S12.825 18 12 18zm0-7.5c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5 1.5-.675 1.5-1.5-.675-1.5-1.5-1.5z'/%3E%3C/svg%3E"); - height: 30px; - width: 15px; -} + .rows-control-div { + color: white; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath fill='%238F95B2' d='M12 3c-.825 0-1.5.675-1.5 1.5S11.175 6 12 6s1.5-.675 1.5-1.5S12.825 3 12 3zm0 15c-.825 0-1.5.675-1.5 1.5S11.175 21 12 21s1.5-.675 1.5-1.5S12.825 18 12 18zm0-7.5c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5 1.5-.675 1.5-1.5-.675-1.5-1.5-1.5z'/%3E%3C/svg%3E"); + height: 30px; + width: 15px; + } + } -.table-wrapper .table-controls .rows-control-div, -.table-wrapper .table-controls .columns-control-div { - background-color: rgba(var(--color-background-80)); - border: 0.5px solid rgba(var(--color-border-200)); - border-radius: 4px; - background-size: 1.25rem; - background-repeat: no-repeat; - background-position: center; - transition: - transform ease-out 100ms, - background-color ease-out 100ms; - outline: none; - box-shadow: rgba(var(--color-shadow-2xs)); - cursor: pointer; + .columns-control-div, + .rows-control-div { + background-color: rgba(var(--color-background-80)); + border: 0.5px solid rgba(var(--color-border-200)); + border-radius: 4px; + background-size: 1.25rem; + background-repeat: no-repeat; + background-position: center; + transition: + transform ease-out 100ms, + background-color ease-out 100ms; + outline: none; + box-shadow: rgba(var(--color-shadow-2xs)); + cursor: pointer; + } } .resize-cursor .table-wrapper .table-controls .rows-control, diff --git a/packages/editor/src/styles/variables.css b/packages/editor/src/styles/variables.css index 6d6e2d9b642..8d4e41a3c49 100644 --- a/packages/editor/src/styles/variables.css +++ b/packages/editor/src/styles/variables.css @@ -179,9 +179,18 @@ } .ProseMirror { - max-width: var(--editor-content-width); - margin: 0 auto; - transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + & > *:not(.editor-full-width-block) { + max-width: var(--editor-content-width); + margin-left: auto !important; + margin-right: auto !important; + transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + } + + & > .editor-full-width-block { + max-width: 100%; + padding-inline-start: calc((100% - var(--editor-content-width)) / 2); + padding-inline-end: var(--wide-content-margin); + } } } From 295eb1ef725bdae5f19b67555ae421b874c0d6d8 Mon Sep 17 00:00:00 2001 From: "M. Palanikannan" <73993394+Palanikannan1437@users.noreply.github.com> Date: Wed, 2 Jul 2025 15:29:32 +0530 Subject: [PATCH 010/130] [WIKI-506] fix: close the link view after 300ms of hovering out #7283 --- .../editors/link-view-container.tsx | 86 +++++++++++++++++-- 1 file changed, 80 insertions(+), 6 deletions(-) diff --git a/packages/editor/src/core/components/editors/link-view-container.tsx b/packages/editor/src/core/components/editors/link-view-container.tsx index 68fa33dde4f..3d15de069b5 100644 --- a/packages/editor/src/core/components/editors/link-view-container.tsx +++ b/packages/editor/src/core/components/editors/link-view-container.tsx @@ -1,6 +1,6 @@ import { autoUpdate, flip, hide, shift, useDismiss, useFloating, useInteractions } from "@floating-ui/react"; import { Editor, useEditorState } from "@tiptap/react"; -import { FC, useCallback, useEffect, useState } from "react"; +import { FC, useCallback, useEffect, useRef, useState } from "react"; // components import { LinkView, LinkViewProps } from "@/components/links"; @@ -13,6 +13,7 @@ export const LinkViewContainer: FC = ({ editor, containe const [linkViewProps, setLinkViewProps] = useState(); const [isOpen, setIsOpen] = useState(false); const [virtualElement, setVirtualElement] = useState(null); + const hoverTimeoutRef = useRef(null); const editorState = useEditorState({ editor, @@ -44,9 +45,26 @@ export const LinkViewContainer: FC = ({ editor, containe const { getReferenceProps, getFloatingProps } = useInteractions([dismiss]); + // Clear any existing timeout + const clearHoverTimeout = useCallback(() => { + if (hoverTimeoutRef.current) { + window.clearTimeout(hoverTimeoutRef.current); + hoverTimeoutRef.current = null; + } + }, []); + + // Set timeout to close link view after delay + const setCloseTimeout = useCallback(() => { + clearHoverTimeout(); + hoverTimeoutRef.current = window.setTimeout(() => { + setIsOpen(false); + editorState.linkExtensionStorage.isPreviewOpen = false; + }, 400); + }, [clearHoverTimeout, editorState.linkExtensionStorage]); + const handleLinkHover = useCallback( (event: MouseEvent) => { - if (!editor || editorState.linkExtensionStorage.isBubbleMenuOpen) return; + if (!editor || editorState.linkExtensionStorage?.isBubbleMenuOpen) return; // Find the closest anchor tag from the event target const target = (event.target as HTMLElement)?.closest("a"); @@ -72,6 +90,9 @@ export const LinkViewContainer: FC = ({ editor, containe setVirtualElement(target); + // Clear any pending close timeout when hovering over a link + clearHoverTimeout(); + // Only update if not already open or if hovering over a different link if (!isOpen || (linkViewProps && (linkViewProps.from !== pos || linkViewProps.to !== pos + node.nodeSize))) { setLinkViewProps({ @@ -92,7 +113,46 @@ export const LinkViewContainer: FC = ({ editor, containe console.error("Error handling link hover:", error); } }, - [editor, editorState.linkExtensionStorage, getReferenceProps, isOpen, linkViewProps] + [editor, editorState.linkExtensionStorage, getReferenceProps, isOpen, linkViewProps, clearHoverTimeout] + ); + + // Handle mouse enter on floating element (cancel close timeout) + const handleFloatingMouseEnter = useCallback(() => { + clearHoverTimeout(); + }, [clearHoverTimeout]); + + // Handle mouse leave from floating element (start close timeout) + const handleFloatingMouseLeave = useCallback(() => { + setCloseTimeout(); + }, [setCloseTimeout]); + + const handleContainerMouseEnter = useCallback(() => { + // Cancel any pending close timeout when mouse enters container + clearHoverTimeout(); + }, [clearHoverTimeout]); + + const handleContainerMouseLeave = useCallback( + (event: MouseEvent) => { + if (!editor || !isOpen) return; + + // Check if mouse is truly leaving the container area + const relatedTarget = event.relatedTarget as HTMLElement; + const container = containerRef.current; + const floatingElement = refs.floating; + + // Only start close timeout if mouse is not moving to the floating element + // and is actually leaving the container + if ( + container && + relatedTarget && + !container.contains(relatedTarget) && + (!floatingElement || !floatingElement.current?.contains(relatedTarget)) + ) { + setCloseTimeout(); + } + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [editor, isOpen, setCloseTimeout, refs.floating] ); // Set up event listeners @@ -101,15 +161,23 @@ export const LinkViewContainer: FC = ({ editor, containe if (!container) return; container.addEventListener("mouseover", handleLinkHover); + container.addEventListener("mouseenter", handleContainerMouseEnter); + container.addEventListener("mouseleave", handleContainerMouseLeave); return () => { container.removeEventListener("mouseover", handleLinkHover); + container.removeEventListener("mouseenter", handleContainerMouseEnter); + container.removeEventListener("mouseleave", handleContainerMouseLeave); }; - }, [handleLinkHover]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [handleLinkHover, handleContainerMouseEnter, handleContainerMouseLeave]); + + // Cleanup timeout on unmount + useEffect(() => () => clearHoverTimeout(), [clearHoverTimeout]); // Close link view when bubble menu opens useEffect(() => { - if (editorState.linkExtensionStorage.isBubbleMenuOpen && isOpen) { + if (editorState.linkExtensionStorage?.isBubbleMenuOpen && isOpen) { setIsOpen(false); } }, [editorState.linkExtensionStorage, isOpen]); @@ -117,7 +185,13 @@ export const LinkViewContainer: FC = ({ editor, containe return ( <> {isOpen && linkViewProps && virtualElement && ( -
    +
    )} From 757019bf43b2c492e58e93bd322661b41f3e6c7b Mon Sep 17 00:00:00 2001 From: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com> Date: Wed, 2 Jul 2025 15:30:40 +0530 Subject: [PATCH 011/130] [WEB-4427] fix: header alignments #7311 --- .../projects/(detail)/[projectId]/modules/(detail)/header.tsx | 2 +- web/ce/components/issues/header.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx index 0d63407a702..3575b2eb4b5 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx @@ -159,7 +159,7 @@ export const ModuleIssuesHeader: React.FC = observer(() => { />
    -
    +
    { return (
    -
    +
    router.back()} isLoading={loader === "init-loader"} className="flex-grow-0"> Date: Wed, 2 Jul 2025 15:32:07 +0530 Subject: [PATCH 012/130] [WIKI-402] feat: emoji support for all editors (#7275) * feat: basic emoji * feat:emoji slash command * update slice command * refactor: emoji storage * refactor:types * refactor: emoji list * refactor: restructure extension * chore: add comments * chore: update comments * fix: fallback image --- packages/editor/package.json | 1 + packages/editor/src/ce/types/storage.ts | 14 +- packages/editor/src/ce/types/utils.ts | 1 + .../editor/src/core/constants/extension.ts | 1 + .../src/core/extensions/core-without-props.ts | 2 + .../emoji/components/emojis-list.tsx | 151 +++++ .../src/core/extensions/emoji/extension.ts | 30 + .../src/core/extensions/emoji/suggestion.ts | 126 ++++ .../editor/src/core/extensions/enter-key.ts | 6 +- .../editor/src/core/extensions/extensions.ts | 2 + .../extensions/mentions/extension-config.ts | 7 +- .../src/core/extensions/mentions/utils.ts | 12 +- .../slash-commands/command-items-list.tsx | 12 + .../editor/src/core/extensions/utility.ts | 6 + packages/editor/src/core/types/editor.ts | 3 +- packages/editor/src/styles/editor.css | 10 + yarn.lock | 606 +++++++++++++++++- 17 files changed, 969 insertions(+), 21 deletions(-) create mode 100644 packages/editor/src/ce/types/utils.ts create mode 100644 packages/editor/src/core/extensions/emoji/components/emojis-list.tsx create mode 100644 packages/editor/src/core/extensions/emoji/extension.ts create mode 100644 packages/editor/src/core/extensions/emoji/suggestion.ts diff --git a/packages/editor/package.json b/packages/editor/package.json index fe41a48f4c2..f6118c22f66 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -46,6 +46,7 @@ "@tiptap/extension-blockquote": "2.10.4", "@tiptap/extension-character-count": "2.11.0", "@tiptap/extension-collaboration": "2.11.0", + "@tiptap/extension-emoji": "^2.22.3", "@tiptap/extension-image": "2.11.0", "@tiptap/extension-list-item": "2.11.0", "@tiptap/extension-mention": "2.11.0", diff --git a/packages/editor/src/ce/types/storage.ts b/packages/editor/src/ce/types/storage.ts index da90d529ea1..666c135344e 100644 --- a/packages/editor/src/ce/types/storage.ts +++ b/packages/editor/src/ce/types/storage.ts @@ -1,21 +1,21 @@ import { CharacterCountStorage } from "@tiptap/extension-character-count"; // constants +import type { EmojiStorage } from "@tiptap/extension-emoji"; import { CORE_EXTENSIONS } from "@/constants/extension"; // extensions -import { type HeadingExtensionStorage } from "@/extensions"; -import { type CustomImageExtensionStorage } from "@/extensions/custom-image/types"; -import { type CustomLinkStorage } from "@/extensions/custom-link"; -import { type ImageExtensionStorage } from "@/extensions/image"; -import { type MentionExtensionStorage } from "@/extensions/mentions"; -import { type UtilityExtensionStorage } from "@/extensions/utility"; +import type { HeadingExtensionStorage } from "@/extensions"; +import type { CustomImageExtensionStorage } from "@/extensions/custom-image/types"; +import type { CustomLinkStorage } from "@/extensions/custom-link"; +import type { ImageExtensionStorage } from "@/extensions/image"; +import type { UtilityExtensionStorage } from "@/extensions/utility"; export type ExtensionStorageMap = { [CORE_EXTENSIONS.CUSTOM_IMAGE]: CustomImageExtensionStorage; [CORE_EXTENSIONS.IMAGE]: ImageExtensionStorage; [CORE_EXTENSIONS.CUSTOM_LINK]: CustomLinkStorage; [CORE_EXTENSIONS.HEADINGS_LIST]: HeadingExtensionStorage; - [CORE_EXTENSIONS.MENTION]: MentionExtensionStorage; [CORE_EXTENSIONS.UTILITY]: UtilityExtensionStorage; + [CORE_EXTENSIONS.EMOJI]: EmojiStorage; [CORE_EXTENSIONS.CHARACTER_COUNT]: CharacterCountStorage; }; diff --git a/packages/editor/src/ce/types/utils.ts b/packages/editor/src/ce/types/utils.ts new file mode 100644 index 00000000000..25a666b9382 --- /dev/null +++ b/packages/editor/src/ce/types/utils.ts @@ -0,0 +1 @@ +export type TAdditionalActiveDropbarExtensions = never; \ No newline at end of file diff --git a/packages/editor/src/core/constants/extension.ts b/packages/editor/src/core/constants/extension.ts index db070cb7bfd..eaec3e88f5b 100644 --- a/packages/editor/src/core/constants/extension.ts +++ b/packages/editor/src/core/constants/extension.ts @@ -41,4 +41,5 @@ export enum CORE_EXTENSIONS { UNDERLINE = "underline", UTILITY = "utility", WORK_ITEM_EMBED = "issue-embed-component", + EMOJI = "emoji", } diff --git a/packages/editor/src/core/extensions/core-without-props.ts b/packages/editor/src/core/extensions/core-without-props.ts index d66cae7bde9..421f48e0a6b 100644 --- a/packages/editor/src/core/extensions/core-without-props.ts +++ b/packages/editor/src/core/extensions/core-without-props.ts @@ -14,6 +14,7 @@ import { CustomCodeInlineExtension } from "./code-inline"; import { CustomColorExtension } from "./custom-color"; import { CustomImageExtensionConfig } from "./custom-image/extension-config"; import { CustomLinkExtension } from "./custom-link"; +import { EmojiExtension } from "./emoji/extension"; import { CustomHorizontalRule } from "./horizontal-rule"; import { ImageExtensionConfig } from "./image"; import { CustomMentionExtensionConfig } from "./mentions/extension-config"; @@ -55,6 +56,7 @@ export const CoreEditorExtensionsWithoutProps = [ }, dropcursor: false, }), + EmojiExtension, CustomQuoteExtension, CustomHorizontalRule.configure({ HTMLAttributes: { diff --git a/packages/editor/src/core/extensions/emoji/components/emojis-list.tsx b/packages/editor/src/core/extensions/emoji/components/emojis-list.tsx new file mode 100644 index 00000000000..86443cc9d40 --- /dev/null +++ b/packages/editor/src/core/extensions/emoji/components/emojis-list.tsx @@ -0,0 +1,151 @@ +import { Editor } from "@tiptap/react"; +import { forwardRef, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useRef, useState } from "react"; +// plane imports +import { cn } from "@plane/utils"; + +export interface EmojiItem { + name: string; + emoji: string; + shortcodes: string[]; + tags: string[]; + fallbackImage?: string; +} + +export interface EmojiListProps { + items: EmojiItem[]; + command: (item: { name: string }) => void; + editor: Editor; +} + +export interface EmojiListRef { + onKeyDown: (props: { event: KeyboardEvent }) => boolean; +} + +export const EmojiList = forwardRef((props, ref) => { + const { items, command } = props; + const [selectedIndex, setSelectedIndex] = useState(0); + // refs + const emojiListContainer = useRef(null); + + const selectItem = useCallback( + (index: number): void => { + const item = items[index]; + if (item) { + command({ name: item.name }); + } + }, + [command, items] + ); + + const upHandler = useCallback(() => { + setSelectedIndex((prevIndex) => (prevIndex + items.length - 1) % items.length); + }, [items.length]); + + const downHandler = useCallback(() => { + setSelectedIndex((prevIndex) => (prevIndex + 1) % items.length); + }, [items.length]); + + const enterHandler = useCallback(() => { + setSelectedIndex((prevIndex) => { + selectItem(prevIndex); + return prevIndex; + }); + }, [selectItem]); + + useEffect(() => setSelectedIndex(0), [items]); + + // scroll to the dropdown item when navigating via keyboard + useLayoutEffect(() => { + const container = emojiListContainer?.current; + if (!container) return; + + const item = container.querySelector(`#emoji-item-${selectedIndex}`) as HTMLElement; + if (item) { + const containerRect = container.getBoundingClientRect(); + const itemRect = item.getBoundingClientRect(); + + const isItemInView = itemRect.top >= containerRect.top && itemRect.bottom <= containerRect.bottom; + + if (!isItemInView) { + item.scrollIntoView({ block: "nearest" }); + } + } + }, [selectedIndex]); + + useImperativeHandle( + ref, + () => ({ + onKeyDown: ({ event }: { event: KeyboardEvent }): boolean => { + if (event.key === "ArrowUp") { + upHandler(); + return true; + } + + if (event.key === "ArrowDown") { + downHandler(); + return true; + } + + if (event.key === "Enter") { + enterHandler(); + event.preventDefault(); + event.stopPropagation(); + + return true; + } + + return false; + }, + }), + [upHandler, downHandler, enterHandler] + ); + return ( +
    + {items.length ? ( + items.map((item, index) => { + const isSelected = index === selectedIndex; + const emojiKey = item.shortcodes.join(" - "); + + return ( + + ); + }) + ) : ( +
    No emojis found
    + )} +
    + ); +}); + +EmojiList.displayName = "EmojiList"; diff --git a/packages/editor/src/core/extensions/emoji/extension.ts b/packages/editor/src/core/extensions/emoji/extension.ts new file mode 100644 index 00000000000..362b0244980 --- /dev/null +++ b/packages/editor/src/core/extensions/emoji/extension.ts @@ -0,0 +1,30 @@ +import Emoji, { EmojiItem, gitHubEmojis, shortcodeToEmoji } from "@tiptap/extension-emoji"; +// local imports +import { MarkdownSerializerState } from "@tiptap/pm/markdown"; +import { Node as ProseMirrorNode } from "@tiptap/pm/model"; +import suggestion from "./suggestion"; + +export const EmojiExtension = Emoji.extend({ + addStorage() { + return { + ...this.parent?.(), + markdown: { + serialize(state: MarkdownSerializerState, node: ProseMirrorNode) { + const emojiItem = shortcodeToEmoji(node.attrs.name, this.options.emojis) + if(emojiItem?.emoji) { + state.write(emojiItem?.emoji); + } else if(emojiItem?.fallbackImage) { + state.write(`\n![${emojiItem.name}-${emojiItem.shortcodes[0]}](${emojiItem?.fallbackImage})\n`); + } else { + state.write(`:${node.attrs.name}:`); + } + }, + }, + + }; + }, +}).configure({ + emojis: gitHubEmojis, + suggestion: suggestion, + enableEmoticons: true, +}); diff --git a/packages/editor/src/core/extensions/emoji/suggestion.ts b/packages/editor/src/core/extensions/emoji/suggestion.ts new file mode 100644 index 00000000000..459d605a5de --- /dev/null +++ b/packages/editor/src/core/extensions/emoji/suggestion.ts @@ -0,0 +1,126 @@ +import type { EmojiOptions } from "@tiptap/extension-emoji"; +import { ReactRenderer, Editor } from "@tiptap/react"; +import { SuggestionProps, SuggestionKeyDownProps } from "@tiptap/suggestion"; +import tippy, { Instance as TippyInstance } from "tippy.js"; +// constants +import { CORE_EXTENSIONS } from "@/constants/extension"; +// helpers +import { getExtensionStorage } from "@/helpers/get-extension-storage"; +// local imports +import { EmojiItem, EmojiList, EmojiListRef, EmojiListProps } from "./components/emojis-list"; + +const DEFAULT_EMOJIS = ["+1", "-1", "smile", "orange_heart", "eyes"]; + +const emojiSuggestion: EmojiOptions["suggestion"] = { + items: ({ editor, query }: { editor: Editor; query: string }): EmojiItem[] => { + if (query.trim() === "") { + const { emojis } = getExtensionStorage(editor, CORE_EXTENSIONS.EMOJI); + const defaultEmojis = DEFAULT_EMOJIS.map((name) => + emojis.find((emoji: EmojiItem) => emoji.shortcodes.includes(name) || emoji.name === name) + ) + .filter(Boolean) + .slice(0, 5); + return defaultEmojis as EmojiItem[]; + } + return getExtensionStorage(editor, CORE_EXTENSIONS.EMOJI) + .emojis.filter(({ shortcodes, tags }) => { + const lowerQuery = query.toLowerCase(); + return ( + shortcodes.find((shortcode: string) => shortcode.startsWith(lowerQuery)) || + tags.find((tag: string) => tag.startsWith(lowerQuery)) + ); + }) + .slice(0, 5) as EmojiItem[]; + }, + + allowSpaces: false, + + render: () => { + let component: ReactRenderer; + let popup: TippyInstance[] | null = null; + + return { + onStart: (props: SuggestionProps): void => { + const emojiListProps: EmojiListProps = { + items: props.items, + command: props.command, + editor: props.editor, + }; + + getExtensionStorage(props.editor, CORE_EXTENSIONS.UTILITY).activeDropbarExtensions.push(CORE_EXTENSIONS.EMOJI); + + component = new ReactRenderer(EmojiList, { + props: emojiListProps, + editor: props.editor, + }); + + if (!props.clientRect) return; + + popup = tippy("body", { + getReferenceClientRect: props.clientRect as () => DOMRect, + appendTo: () => + document.querySelector(".active-editor") ?? + document.querySelector('[id^="editor-container"]') ?? + document.body, + content: component.element, + showOnCreate: true, + interactive: true, + trigger: "manual", + placement: "bottom-start", + hideOnClick: false, + sticky: "reference", + animation: false, + duration: 0, + offset: [0, 8], + }); + }, + + onUpdate: (props: SuggestionProps): void => { + const emojiListProps: EmojiListProps = { + items: props.items, + command: props.command, + editor: props.editor, + }; + + component.updateProps(emojiListProps); + + if (popup && props.clientRect) { + popup[0]?.setProps({ + getReferenceClientRect: props.clientRect as () => DOMRect, + }); + } + }, + + onKeyDown: (props: SuggestionKeyDownProps): boolean => { + if (props.event.key === "Escape") { + if (popup) { + popup[0]?.hide(); + } + if (component) { + component.destroy(); + } + return true; + } + + return component.ref?.onKeyDown(props) || false; + }, + + onExit: (props: SuggestionProps): void => { + const utilityStorage = getExtensionStorage(props.editor, CORE_EXTENSIONS.UTILITY); + const index = utilityStorage.activeDropbarExtensions.indexOf(CORE_EXTENSIONS.EMOJI); + if (index > -1) { + utilityStorage.activeDropbarExtensions.splice(index, 1); + } + + if (popup) { + popup[0]?.destroy(); + } + if (component) { + component.destroy(); + } + }, + }; + }, +}; + +export default emojiSuggestion; diff --git a/packages/editor/src/core/extensions/enter-key.ts b/packages/editor/src/core/extensions/enter-key.ts index 65119425fc1..e36adde3cb0 100644 --- a/packages/editor/src/core/extensions/enter-key.ts +++ b/packages/editor/src/core/extensions/enter-key.ts @@ -11,11 +11,13 @@ export const EnterKeyExtension = (onEnterKeyPress?: () => void) => addKeyboardShortcuts(this) { return { Enter: () => { - const isMentionOpen = getExtensionStorage(this.editor, CORE_EXTENSIONS.MENTION)?.mentionsOpen; - if (!isMentionOpen) { + const { activeDropbarExtensions } = getExtensionStorage(this.editor, CORE_EXTENSIONS.UTILITY); + + if (activeDropbarExtensions.length === 0) { onEnterKeyPress?.(); return true; } + return false; }, "Shift-Enter": ({ editor }) => diff --git a/packages/editor/src/core/extensions/extensions.ts b/packages/editor/src/core/extensions/extensions.ts index cc888200589..1833dec461c 100644 --- a/packages/editor/src/core/extensions/extensions.ts +++ b/packages/editor/src/core/extensions/extensions.ts @@ -39,6 +39,7 @@ import { CoreEditorAdditionalExtensions } from "@/plane-editor/extensions"; import type { IEditorProps } from "@/types"; // local imports import { CustomImageExtension } from "./custom-image/extension"; +import { EmojiExtension } from "./emoji/extension"; type TArguments = Pick< IEditorProps, @@ -97,6 +98,7 @@ export const CoreEditorExtensions = (args: TArguments): Extensions => { }, ...(enableHistory ? {} : { history: false }), }), + EmojiExtension, CustomQuoteExtension, CustomHorizontalRule.configure({ HTMLAttributes: { diff --git a/packages/editor/src/core/extensions/mentions/extension-config.ts b/packages/editor/src/core/extensions/mentions/extension-config.ts index e75fc9156f5..e7b6dbe2a3f 100644 --- a/packages/editor/src/core/extensions/mentions/extension-config.ts +++ b/packages/editor/src/core/extensions/mentions/extension-config.ts @@ -12,11 +12,7 @@ export type TMentionExtensionOptions = MentionOptions & { getMentionedEntityDetails: TMentionHandler["getMentionedEntityDetails"]; }; -export type MentionExtensionStorage = { - mentionsOpen: boolean; -}; - -export const CustomMentionExtensionConfig = Mention.extend({ +export const CustomMentionExtensionConfig = Mention.extend({ addAttributes() { return { [EMentionComponentAttributeNames.ID]: { @@ -54,7 +50,6 @@ export const CustomMentionExtensionConfig = Mention.extend): SuggestionOptions["render"] => @@ -28,7 +30,9 @@ export const renderMentionsDropdown = }, editor: props.editor, }); - props.editor.storage.mentionsOpen = true; + getExtensionStorage(props.editor, CORE_EXTENSIONS.UTILITY).activeDropbarExtensions.push( + CORE_EXTENSIONS.MENTION + ); // @ts-expect-error - Tippy types are incorrect popup = tippy("body", { getReferenceClientRect: props.clientRect, @@ -64,7 +68,11 @@ export const renderMentionsDropdown = return false; }, onExit: (props: { editor: Editor; event: KeyboardEvent }) => { - props.editor.storage.mentionsOpen = false; + const utilityStorage = getExtensionStorage(props.editor, CORE_EXTENSIONS.UTILITY); + const index = utilityStorage.activeDropbarExtensions.indexOf(CORE_EXTENSIONS.MENTION); + if (index > -1) { + utilityStorage.activeDropbarExtensions.splice(index, 1); + } popup?.[0]?.destroy(); component?.destroy(); }, diff --git a/packages/editor/src/core/extensions/slash-commands/command-items-list.tsx b/packages/editor/src/core/extensions/slash-commands/command-items-list.tsx index d3ca4856e1c..54d717de38b 100644 --- a/packages/editor/src/core/extensions/slash-commands/command-items-list.tsx +++ b/packages/editor/src/core/extensions/slash-commands/command-items-list.tsx @@ -14,6 +14,7 @@ import { ListTodo, MessageSquareText, MinusSquare, + Smile, Table, TextQuote, } from "lucide-react"; @@ -189,6 +190,17 @@ export const getSlashCommandFilteredSections = icon: , command: ({ editor, range }) => editor.chain().focus().deleteRange(range).setHorizontalRule().run(), }, + { + commandKey: "emoji", + key: "emoji", + title: "Emoji", + description: "Insert an emoji", + searchTerms: ["emoji", "icons", "reaction", "emoticon", "emotags"], + icon: , + command: ({ editor, range }) => { + editor.chain().focus().insertContentAt(range, "

    :

    ").run(); + }, + }, ], }, { diff --git a/packages/editor/src/core/extensions/utility.ts b/packages/editor/src/core/extensions/utility.ts index 571a66da0ba..a1b138a6d26 100644 --- a/packages/editor/src/core/extensions/utility.ts +++ b/packages/editor/src/core/extensions/utility.ts @@ -1,13 +1,17 @@ import { Extension } from "@tiptap/core"; import codemark from "prosemirror-codemark"; // helpers +import { CORE_EXTENSIONS } from "@/constants/extension"; import { restorePublicImages } from "@/helpers/image-helpers"; // plugins +import { TAdditionalActiveDropbarExtensions } from "@/plane-editor/types/utils"; import { DropHandlerPlugin } from "@/plugins/drop"; import { FilePlugins } from "@/plugins/file/root"; import { MarkdownClipboardPlugin } from "@/plugins/markdown-clipboard"; // types + import type { IEditorProps, TEditorAsset, TFileHandler, TReadOnlyFileHandler } from "@/types"; +type TActiveDropbarExtensions = CORE_EXTENSIONS.MENTION | CORE_EXTENSIONS.EMOJI | TAdditionalActiveDropbarExtensions; declare module "@tiptap/core" { interface Commands { @@ -30,6 +34,7 @@ export interface UtilityExtensionStorage { assetsList: TEditorAsset[]; assetsUploadStatus: TFileHandler["assetsUploadStatus"]; uploadInProgress: boolean; + activeDropbarExtensions: TActiveDropbarExtensions[]; } type Props = Pick & { @@ -70,6 +75,7 @@ export const UtilityExtension = (props: Props) => { assetsList: [], assetsUploadStatus: isEditable && "assetsUploadStatus" in fileHandler ? fileHandler.assetsUploadStatus : {}, uploadInProgress: false, + activeDropbarExtensions: [], }; }, diff --git a/packages/editor/src/core/types/editor.ts b/packages/editor/src/core/types/editor.ts index 68d8424ab39..129e8cd0b14 100644 --- a/packages/editor/src/core/types/editor.ts +++ b/packages/editor/src/core/types/editor.ts @@ -47,7 +47,8 @@ export type TEditorCommands = | "background-color" | "text-align" | "callout" - | "attachment"; + | "attachment" + | "emoji"; export type TCommandExtraProps = { image: { diff --git a/packages/editor/src/styles/editor.css b/packages/editor/src/styles/editor.css index ba910d1449e..e4aabde9ece 100644 --- a/packages/editor/src/styles/editor.css +++ b/packages/editor/src/styles/editor.css @@ -490,3 +490,13 @@ p.editor-paragraph-block + p.editor-paragraph-block { background-color: var(--editor-colors-purple-background); } /* end background colors */ + +/* emoji styles */ +span[data-name][data-type="emoji"] img { + display: inline !important; + vertical-align: middle; + margin: 0; + padding: 0; + max-width: 1.25em; + max-height: 1.25em; +} diff --git a/yarn.lock b/yarn.lock index 70ac5e62455..2b9ebf4891d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -148,6 +148,7 @@ "@babel/helpers@7.26.10", "@babel/helpers@^7.27.4": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384" integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g== dependencies: "@babel/template" "^7.26.9" @@ -161,6 +162,586 @@ "@babel/types" "^7.27.3" "@babel/runtime@7.26.10", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749" + integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA== + dependencies: + "@babel/types" "^7.26.10" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-typescript@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-async-generator-functions@^7.26.8": + version "7.26.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8" + integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.26.8" + +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + +"@babel/plugin-transform-block-scoped-functions@^7.26.5": + version "7.26.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e" + integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" + +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-exponentiation-operator@^7.26.3": + version "7.26.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" + integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-for-of@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" + integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-commonjs@^7.25.9", "@babel/plugin-transform-modules-commonjs@^7.26.3": + version "7.26.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== + dependencies: + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": + version "7.26.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe" + integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-template-literals@^7.26.8": + version "7.26.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5" + integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-typeof-symbol@^7.26.7": + version "7.26.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz#d0e33acd9223744c1e857dbd6fa17bd0a3786937" + integrity sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-typescript@^7.25.9": + version "7.26.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz#2e9caa870aa102f50d7125240d9dbf91334b0950" + integrity sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" + +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/preset-env@^7.25.4": + version "7.26.8" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.8.tgz#7af0090829b606d2046db99679004731e1dc364d" + integrity sha512-um7Sy+2THd697S4zJEfv/U5MHGJzkN2xhtsR3T/SWRbVSic62nbISh51VVfU9JiO/L/Z97QczHTaFVkOU8IzNg== + dependencies: + "@babel/compat-data" "^7.26.8" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.26.8" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.26.5" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.26.3" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.25.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.26.3" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.26.8" + "@babel/plugin-transform-typeof-symbol" "^7.26.7" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.11.0" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.40.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.24.7": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" + integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-typescript" "^7.25.9" + +"@babel/runtime@7.26.10", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2" integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== @@ -2031,9 +2612,18 @@ integrity sha512-7MnILbhRZRyROlMUgyntzRZ/EZlqNB8fO761RNjJxR2WMb49R4yc04fz7/+f/QH/hwxoS13bKfsNUDAsDxA5Aw== "@tiptap/extension-dropcursor@^2.11.0": + version "2.11.5" + resolved "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.11.5.tgz#a1d6fad3379551449534bdb8135da2577a8ec8fb" + integrity sha512-uIN7L3FU0904ec7FFFbndO7RQE/yiON4VzAMhNn587LFMyWO8US139HXIL4O8dpZeYwYL3d1FnDTflZl6CwLlg== + +"@tiptap/extension-emoji@^2.22.3": version "2.22.3" - resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.22.3.tgz#729ddd6d6b15432c2e15ba196162b7dce16c5fd4" - integrity sha512-yQxSfTWjdUQS+bh6KiNLR9KIMsn1SElzycQe4XE+0eoaetapGtKqxfwkTbbQdNgQOU5wQG1KOda221mnPvkpAA== + resolved "https://registry.yarnpkg.com/@tiptap/extension-emoji/-/extension-emoji-2.22.3.tgz#f149933a9f62eb65cb9b86c6a64852ea471c3e14" + integrity sha512-OuMQjlY5OjysJgLA75eBUe+RWoh+apwjWydUfimFpMcNa55HQTnFsPZXxIcbcTxqHbimhjgUlyd8S+F8/011VA== + dependencies: + emoji-regex "^10.4.0" + emojibase-data "^15" + is-emoji-supported "^0.0.5" "@tiptap/extension-floating-menu@^2.11.0": version "2.22.3" @@ -4846,7 +5436,7 @@ emoji-picker-react@^4.5.16: dependencies: flairup "1.0.0" -emoji-regex@^10.3.0: +emoji-regex@^10.3.0, emoji-regex@^10.4.0: version "10.4.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== @@ -4861,6 +5451,11 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +emojibase-data@^15: + version "15.3.2" + resolved "https://registry.yarnpkg.com/emojibase-data/-/emojibase-data-15.3.2.tgz#2742246bfe14f16a7829b42ca156dec09934cf85" + integrity sha512-TpDyTDDTdqWIJixV5sTA6OQ0P0JfIIeK2tFRR3q56G9LK65ylAZ7z3KyBXokpvTTJ+mLUXQXbLNyVkjvnTLE+A== + enabled@2.0.x: version "2.0.0" resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" @@ -6407,6 +7002,11 @@ is-docker@^2.0.0, is-docker@^2.1.1: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-emoji-supported@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/is-emoji-supported/-/is-emoji-supported-0.0.5.tgz#f22301b22c63d6322935e829f39dfa59d03a7fe2" + integrity sha512-WOlXUhDDHxYqcSmFZis+xWhhqXiK2SU0iYiqmth5Ip0FHLZQAt9rKL5ahnilE8/86WH8tZ3bmNNNC+bTzamqlw== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" From f679628365e78889755ea81c039b57994f1a595a Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com> Date: Wed, 2 Jul 2025 15:36:06 +0530 Subject: [PATCH 013/130] [WIKI-449] feat: image block download and alignment options (#7254) * refactor: custom image extension * refactor: extension config * revert: image full screen component * fix: undo operation * chore: add download and alignment options * chore: render image full screen modal in a portal * chore: add missing attribute to image extension * chore: minor bugs and improvements * chore: add aria attributes * chore: remove unnecessary file * fix: full screen modal z-index --- packages/editor/package.json | 1 + .../custom-image/components/block.tsx | 222 ++++++++++-------- .../custom-image/components/node-view.tsx | 5 + .../components/toolbar/alignment.tsx | 63 +++++ .../components/toolbar/download.tsx | 24 ++ .../components/toolbar/full-screen/index.ts | 1 + .../modal.tsx} | 195 ++++++++------- .../components/toolbar/full-screen/root.tsx | 56 +++++ .../custom-image/components/toolbar/root.tsx | 44 ++-- .../core/extensions/custom-image/extension.ts | 3 +- .../src/core/extensions/custom-image/types.ts | 5 + .../src/core/extensions/custom-image/utils.ts | 25 +- .../extensions/image/extension-config.tsx | 3 + packages/editor/src/core/types/config.ts | 1 + space/app/layout.tsx | 1 + web/app/layout.tsx | 1 + web/core/hooks/editor/use-editor-config.ts | 16 +- 17 files changed, 456 insertions(+), 210 deletions(-) create mode 100644 packages/editor/src/core/extensions/custom-image/components/toolbar/alignment.tsx create mode 100644 packages/editor/src/core/extensions/custom-image/components/toolbar/download.tsx create mode 100644 packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen/index.ts rename packages/editor/src/core/extensions/custom-image/components/toolbar/{full-screen.tsx => full-screen/modal.tsx} (57%) create mode 100644 packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen/root.tsx diff --git a/packages/editor/package.json b/packages/editor/package.json index f6118c22f66..d1d85433676 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -39,6 +39,7 @@ "@headlessui/react": "^1.7.3", "@hocuspocus/provider": "^2.15.0", "@plane/constants": "*", + "@plane/hooks": "*", "@plane/types": "*", "@plane/ui": "*", "@plane/utils": "*", diff --git a/packages/editor/src/core/extensions/custom-image/components/block.tsx b/packages/editor/src/core/extensions/custom-image/components/block.tsx index c895d19ccf4..45c66f428bd 100644 --- a/packages/editor/src/core/extensions/custom-image/components/block.tsx +++ b/packages/editor/src/core/extensions/custom-image/components/block.tsx @@ -17,6 +17,7 @@ type CustomImageBlockProps = CustomImageNodeViewProps & { setEditorContainer: (editorContainer: HTMLDivElement | null) => void; setFailedToLoadImage: (isError: boolean) => void; src: string | undefined; + downloadSrc: string | undefined; }; export const CustomImageBlock: React.FC = (props) => { @@ -32,9 +33,16 @@ export const CustomImageBlock: React.FC = (props) => { setEditorContainer, setFailedToLoadImage, src: resolvedImageSrc, + downloadSrc: resolvedDownloadSrc, updateAttributes, } = props; - const { width: nodeWidth, height: nodeHeight, aspectRatio: nodeAspectRatio, src: imgNodeSrc } = node.attrs; + const { + width: nodeWidth, + height: nodeHeight, + aspectRatio: nodeAspectRatio, + src: imgNodeSrc, + alignment: nodeAlignment, + } = node.attrs; // states const [size, setSize] = useState({ width: ensurePixelString(nodeWidth, "35%") ?? "35%", @@ -131,12 +139,17 @@ export const CustomImageBlock: React.FC = (props) => { const clientX = "touches" in e ? e.touches[0].clientX : e.clientX; - const newWidth = Math.max(clientX - containerRect.current.left, MIN_SIZE); - const newHeight = newWidth / size.aspectRatio; - - setSize((prevSize) => ({ ...prevSize, width: `${newWidth}px`, height: `${newHeight}px` })); + if (nodeAlignment === "right") { + const newWidth = Math.max(containerRect.current.right - clientX, MIN_SIZE); + const newHeight = newWidth / size.aspectRatio; + setSize((prevSize) => ({ ...prevSize, width: `${newWidth}px`, height: `${newHeight}px` })); + } else { + const newWidth = Math.max(clientX - containerRect.current.left, MIN_SIZE); + const newHeight = newWidth / size.aspectRatio; + setSize((prevSize) => ({ ...prevSize, width: `${newWidth}px`, height: `${newHeight}px` })); + } }, - [size.aspectRatio] + [nodeAlignment, size.aspectRatio] ); const handleResizeEnd = useCallback(() => { @@ -188,7 +201,7 @@ export const CustomImageBlock: React.FC = (props) => { // show the image upload status only when the resolvedImageSrc is not ready const showUploadStatus = !resolvedImageSrc; // show the image utils only if the remote image's (post upload) src is set and the initial resize is complete (but not while we're showing the preview imageFromFileSystem) - const showImageUtils = resolvedImageSrc && initialResizeComplete; + const showImageToolbar = resolvedImageSrc && resolvedDownloadSrc && initialResizeComplete; // show the image resizer only if the editor is editable, the remote image's (post upload) src is set and the initial resize is complete (but not while we're showing the preview imageFromFileSystem) const showImageResizer = editor.isEditable && resolvedImageSrc && initialResizeComplete; // show the preview image from the file system if the remote image's src is not set @@ -197,108 +210,117 @@ export const CustomImageBlock: React.FC = (props) => { return (
    - {showImageLoader && ( -
    - )} - { - // for old image extension this command doesn't exist or if the image failed to load for the first time - if (!extension.options.restoreImage || hasTriedRestoringImageOnce) { - setFailedToLoadImage(true); - return; - } - - try { - setHasErroredOnFirstLoad(true); - // this is a type error from tiptap, don't remove await until it's fixed - if (!imgNodeSrc) { - throw new Error("No source image to restore from"); - } - await extension.options.restoreImage?.(imgNodeSrc); - if (!imageRef.current) { - throw new Error("Image reference not found"); - } - if (!resolvedImageSrc) { - throw new Error("No resolved image source available"); - } - imageRef.current.src = resolvedImageSrc; - } catch { - // if the image failed to even restore, then show the error state - setFailedToLoadImage(true); - console.error("Error while loading image", e); - } finally { - setHasErroredOnFirstLoad(false); - setHasTriedRestoringImageOnce(true); - } - }} - width={size.width} - className={cn("image-component block rounded-md", { - // hide the image while the background calculations of the image loader are in progress (to avoid flickering) and show the loader until then - hidden: showImageLoader, - "read-only-image": !editor.isEditable, - "blur-sm opacity-80 loading-image": !resolvedImageSrc, - })} +
    - {showUploadStatus && node.attrs.id && } - {showImageUtils && ( - - )} - {selected && displayedImageSrc === resolvedImageSrc && ( -
    - )} - {showImageResizer && ( - <> + > + {showImageLoader && (
    -
    { + // for old image extension this command doesn't exist or if the image failed to load for the first time + if (!extension.options.restoreImage || hasTriedRestoringImageOnce) { + setFailedToLoadImage(true); + return; + } + + try { + setHasErroredOnFirstLoad(true); + // this is a type error from tiptap, don't remove await until it's fixed + if (!imgNodeSrc) { + throw new Error("No source image to restore from"); + } + await extension.options.restoreImage?.(imgNodeSrc); + if (!imageRef.current) { + throw new Error("Image reference not found"); + } + if (!resolvedImageSrc) { + throw new Error("No resolved image source available"); } - )} - onMouseDown={handleResizeStart} - onTouchStart={handleResizeStart} + imageRef.current.src = resolvedImageSrc; + } catch { + // if the image failed to even restore, then show the error state + setFailedToLoadImage(true); + console.error("Error while loading image", e); + } finally { + setHasErroredOnFirstLoad(false); + setHasTriedRestoringImageOnce(true); + } + }} + width={size.width} + className={cn("image-component block rounded-md", { + // hide the image while the background calculations of the image loader are in progress (to avoid flickering) and show the loader until then + hidden: showImageLoader, + "read-only-image": !editor.isEditable, + "blur-sm opacity-80 loading-image": !resolvedImageSrc, + })} + style={{ + width: size.width, + ...(size.aspectRatio && { aspectRatio: size.aspectRatio }), + }} + /> + {showUploadStatus && node.attrs.id && } + {showImageToolbar && ( + + updateAttributesSafely({ alignment }, "Failed to update attributes while changing alignment:") + } /> - - )} + )} + {selected && displayedImageSrc === resolvedImageSrc && ( +
    + )} + {showImageResizer && ( + <> +
    +
    + + )} +
    ); }; diff --git a/packages/editor/src/core/extensions/custom-image/components/node-view.tsx b/packages/editor/src/core/extensions/custom-image/components/node-view.tsx index 74ea2c38c54..eb38ab40542 100644 --- a/packages/editor/src/core/extensions/custom-image/components/node-view.tsx +++ b/packages/editor/src/core/extensions/custom-image/components/node-view.tsx @@ -26,6 +26,7 @@ export const CustomImageNodeView: React.FC = (props) = const [isUploaded, setIsUploaded] = useState(false); const [resolvedSrc, setResolvedSrc] = useState(undefined); + const [resolvedDownloadSrc, setResolvedDownloadSrc] = useState(undefined); const [imageFromFileSystem, setImageFromFileSystem] = useState(undefined); const [failedToLoadImage, setFailedToLoadImage] = useState(false); @@ -53,12 +54,15 @@ export const CustomImageNodeView: React.FC = (props) = useEffect(() => { if (!imgNodeSrc) { setResolvedSrc(undefined); + setResolvedDownloadSrc(undefined); return; } const getImageSource = async () => { const url = await extension.options.getImageSource?.(imgNodeSrc); setResolvedSrc(url); + const downloadUrl = await extension.options.getImageDownloadSource?.(imgNodeSrc); + setResolvedDownloadSrc(downloadUrl); }; getImageSource(); }, [imgNodeSrc, extension.options]); @@ -73,6 +77,7 @@ export const CustomImageNodeView: React.FC = (props) = setEditorContainer={setEditorContainer} setFailedToLoadImage={setFailedToLoadImage} src={resolvedSrc} + downloadSrc={resolvedDownloadSrc} {...props} /> ) : ( diff --git a/packages/editor/src/core/extensions/custom-image/components/toolbar/alignment.tsx b/packages/editor/src/core/extensions/custom-image/components/toolbar/alignment.tsx new file mode 100644 index 00000000000..3790fa54712 --- /dev/null +++ b/packages/editor/src/core/extensions/custom-image/components/toolbar/alignment.tsx @@ -0,0 +1,63 @@ +import { ChevronDown } from "lucide-react"; +import { useEffect, useRef, useState } from "react"; +// plane imports +import { useOutsideClickDetector } from "@plane/hooks"; +import { Tooltip } from "@plane/ui"; +// local imports +import type { TCustomImageAlignment } from "../../types"; +import { IMAGE_ALIGNMENT_OPTIONS } from "../../utils"; + +type Props = { + activeAlignment: TCustomImageAlignment; + handleChange: (alignment: TCustomImageAlignment) => void; + toggleToolbarViewStatus: (val: boolean) => void; +}; + +export const ImageAlignmentAction: React.FC = (props) => { + const { activeAlignment, handleChange, toggleToolbarViewStatus } = props; + // states + const [isDropdownOpen, setIsDropdownOpen] = useState(false); + // refs + const dropdownRef = useRef(null); + // derived values + const activeAlignmentDetails = IMAGE_ALIGNMENT_OPTIONS.find((option) => option.value === activeAlignment); + + useOutsideClickDetector(dropdownRef, () => setIsDropdownOpen(false)); + + useEffect(() => { + toggleToolbarViewStatus(isDropdownOpen); + }, [isDropdownOpen, toggleToolbarViewStatus]); + + return ( +
    + + + + {isDropdownOpen && ( +
    + {IMAGE_ALIGNMENT_OPTIONS.map((option) => ( + + + + ))} +
    + )} +
    + ); +}; diff --git a/packages/editor/src/core/extensions/custom-image/components/toolbar/download.tsx b/packages/editor/src/core/extensions/custom-image/components/toolbar/download.tsx new file mode 100644 index 00000000000..2f0a665ae5d --- /dev/null +++ b/packages/editor/src/core/extensions/custom-image/components/toolbar/download.tsx @@ -0,0 +1,24 @@ +import { Download } from "lucide-react"; +// plane imports +import { Tooltip } from "@plane/ui"; + +type Props = { + src: string; +}; + +export const ImageDownloadAction: React.FC = (props) => { + const { src } = props; + + return ( + + + + ); +}; diff --git a/packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen/index.ts b/packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen/index.ts new file mode 100644 index 00000000000..1efe34c51ec --- /dev/null +++ b/packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen/index.ts @@ -0,0 +1 @@ +export * from "./root"; diff --git a/packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen.tsx b/packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen/modal.tsx similarity index 57% rename from packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen.tsx rename to packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen/modal.tsx index 1d2e52ca016..9a30908c2c1 100644 --- a/packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen.tsx +++ b/packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen/modal.tsx @@ -1,37 +1,39 @@ -import { ExternalLink, Maximize, Minus, Plus, X } from "lucide-react"; -import { useCallback, useEffect, useMemo, useState, useRef } from "react"; +import { Download, ExternalLink, Minus, Plus, X } from "lucide-react"; +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import ReactDOM from "react-dom"; // plane imports import { cn } from "@plane/utils"; -type Props = { - image: { - width: string; - height: string; - aspectRatio: number; - src: string; - }; - isOpen: boolean; - toggleFullScreenMode: (val: boolean) => void; -}; - const MIN_ZOOM = 0.5; const MAX_ZOOM = 2; const ZOOM_SPEED = 0.05; const ZOOM_STEPS = [0.5, 1, 1.5, 2]; -export const ImageFullScreenAction: React.FC = (props) => { - const { image, isOpen: isFullScreenEnabled, toggleFullScreenMode } = props; - const { src, width, aspectRatio } = image; +type Props = { + aspectRatio: number; + isFullScreenEnabled: boolean; + downloadSrc: string; + src: string; + toggleFullScreenMode: (val: boolean) => void; + width: string; +}; + +const ImageFullScreenModalWithoutPortal = (props: Props) => { + const { aspectRatio, isFullScreenEnabled, downloadSrc, src, toggleFullScreenMode, width } = props; + // refs + const dragStart = useRef({ x: 0, y: 0 }); + const dragOffset = useRef({ x: 0, y: 0 }); const [magnification, setMagnification] = useState(1); const [initialMagnification, setInitialMagnification] = useState(1); const [isDragging, setIsDragging] = useState(false); - const dragStart = useRef({ x: 0, y: 0 }); - const dragOffset = useRef({ x: 0, y: 0 }); const modalRef = useRef(null); const imgRef = useRef(null); - const widthInNumber = useMemo(() => Number(width?.replace("px", "")), [width]); + const widthInNumber = useMemo(() => { + if (!width) return 0; + return Number(width.replace("px", "")); + }, [width]); const setImageRef = useCallback( (node: HTMLImageElement | null) => { @@ -148,7 +150,7 @@ export const ImageFullScreenAction: React.FC = (props) => { e.preventDefault(); // Handle pinch-to-zoom - if (e.ctrlKey) { + if (e.ctrlKey || e.metaKey) { const delta = e.deltaY; setMagnification((prev) => { const newZoom = prev * (1 - delta * ZOOM_SPEED); @@ -165,7 +167,7 @@ export const ImageFullScreenAction: React.FC = (props) => { return; } }, - [isFullScreenEnabled, magnification] + [isFullScreenEnabled] ); // Event listeners @@ -185,84 +187,99 @@ export const ImageFullScreenAction: React.FC = (props) => { }; }, [isFullScreenEnabled, handleKeyDown, handleMouseMove, handleMouseUp, handleWheel]); + if (!isFullScreenEnabled) return null; + return ( - <> +
    e.target === modalRef.current && handleClose()} + className="relative size-full grid place-items-center overflow-hidden" > -
    e.target === modalRef.current && handleClose()} - className="relative size-full grid place-items-center overflow-hidden" + - -
    -
    - - {Math.round(100 * magnification)}% - -
    + + + +
    +
    + + {Math.round(100 * magnification)}%
    + +
    - - +
    ); }; + +export const ImageFullScreenModal: React.FC = (props) => { + let modal = ; + const portal = document.querySelector("#editor-portal"); + if (portal) { + modal = ReactDOM.createPortal(modal, portal); + } else { + console.warn("Portal element #editor-portal not found. Rendering inline."); + } + return modal; +}; diff --git a/packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen/root.tsx b/packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen/root.tsx new file mode 100644 index 00000000000..2108bfeaaee --- /dev/null +++ b/packages/editor/src/core/extensions/custom-image/components/toolbar/full-screen/root.tsx @@ -0,0 +1,56 @@ +import { Maximize } from "lucide-react"; +import { useEffect, useState } from "react"; +// plane imports +import { Tooltip } from "@plane/ui"; +// local imports +import { ImageFullScreenModal } from "./modal"; + +type Props = { + image: { + downloadSrc: string; + src: string; + height: string; + width: string; + aspectRatio: number; + }; + toggleToolbarViewStatus: (val: boolean) => void; +}; + +export const ImageFullScreenActionRoot: React.FC = (props) => { + const { image, toggleToolbarViewStatus } = props; + // states + const [isFullScreenEnabled, setIsFullScreenEnabled] = useState(false); + // derived values + const { downloadSrc, src, width, aspectRatio } = image; + + useEffect(() => { + toggleToolbarViewStatus(isFullScreenEnabled); + }, [isFullScreenEnabled, toggleToolbarViewStatus]); + + return ( + <> + + + + + + ); +}; diff --git a/packages/editor/src/core/extensions/custom-image/components/toolbar/root.tsx b/packages/editor/src/core/extensions/custom-image/components/toolbar/root.tsx index f9cd28d48d0..06277fa252b 100644 --- a/packages/editor/src/core/extensions/custom-image/components/toolbar/root.tsx +++ b/packages/editor/src/core/extensions/custom-image/components/toolbar/root.tsx @@ -2,35 +2,43 @@ import { useState } from "react"; // plane imports import { cn } from "@plane/utils"; // local imports -import { ImageFullScreenAction } from "./full-screen"; +import type { TCustomImageAlignment } from "../../types"; +import { ImageAlignmentAction } from "./alignment"; +import { ImageDownloadAction } from "./download"; +import { ImageFullScreenActionRoot } from "./full-screen"; type Props = { - containerClassName?: string; - image: { - width: string; - height: string; - aspectRatio: number; - src: string; - }; + alignment: TCustomImageAlignment; + width: string; + height: string; + aspectRatio: number; + src: string; + downloadSrc: string; + handleAlignmentChange: (alignment: TCustomImageAlignment) => void; }; export const ImageToolbarRoot: React.FC = (props) => { - const { containerClassName, image } = props; - // state - const [isFullScreenEnabled, setIsFullScreenEnabled] = useState(false); + const { alignment, downloadSrc, handleAlignmentChange } = props; + // states + const [shouldShowToolbar, setShouldShowToolbar] = useState(false); return ( <>
    - setIsFullScreenEnabled(val)} + + +
    ); diff --git a/packages/editor/src/core/extensions/custom-image/extension.ts b/packages/editor/src/core/extensions/custom-image/extension.ts index ec795da842b..3ce93ecd87c 100644 --- a/packages/editor/src/core/extensions/custom-image/extension.ts +++ b/packages/editor/src/core/extensions/custom-image/extension.ts @@ -20,7 +20,7 @@ type Props = { export const CustomImageExtension = (props: Props) => { const { fileHandler, isEditable } = props; // derived values - const { getAssetSrc, restore: restoreImageFn } = fileHandler; + const { getAssetSrc, getAssetDownloadSrc, restore: restoreImageFn } = fileHandler; return CustomImageExtensionConfig.extend({ selectable: isEditable, @@ -31,6 +31,7 @@ export const CustomImageExtension = (props: Props) => { return { ...this.parent?.(), + getImageDownloadSource: getAssetDownloadSrc, getImageSource: getAssetSrc, restoreImage: restoreImageFn, uploadImage: upload, diff --git a/packages/editor/src/core/extensions/custom-image/types.ts b/packages/editor/src/core/extensions/custom-image/types.ts index 675d8a22155..4ed5cd6ce4a 100644 --- a/packages/editor/src/core/extensions/custom-image/types.ts +++ b/packages/editor/src/core/extensions/custom-image/types.ts @@ -8,6 +8,7 @@ export enum ECustomImageAttributeNames { HEIGHT = "height", ASPECT_RATIO = "aspectRatio", SOURCE = "src", + ALIGNMENT = "alignment", } export type Pixel = `${number}px`; @@ -20,12 +21,15 @@ export type TCustomImageSize = { aspectRatio: number | null; }; +export type TCustomImageAlignment = "left" | "center" | "right"; + export type TCustomImageAttributes = { [ECustomImageAttributeNames.ID]: string | null; [ECustomImageAttributeNames.WIDTH]: PixelAttribute<"35%" | number> | null; [ECustomImageAttributeNames.HEIGHT]: PixelAttribute<"auto" | number> | null; [ECustomImageAttributeNames.ASPECT_RATIO]: number | null; [ECustomImageAttributeNames.SOURCE]: string | null; + [ECustomImageAttributeNames.ALIGNMENT]: TCustomImageAlignment; }; export type UploadEntity = ({ event: "insert" } | { event: "drop"; file: File }) & { hasOpenedFileInputOnce?: boolean }; @@ -37,6 +41,7 @@ export type InsertImageComponentProps = { }; export type CustomImageExtensionOptions = { + getImageDownloadSource: TFileHandler["getAssetDownloadSrc"]; getImageSource: TFileHandler["getAssetSrc"]; restoreImage: TFileHandler["restore"]; uploadImage?: TFileHandler["upload"]; diff --git a/packages/editor/src/core/extensions/custom-image/utils.ts b/packages/editor/src/core/extensions/custom-image/utils.ts index 88d8032c72b..10f2bb1e2cb 100644 --- a/packages/editor/src/core/extensions/custom-image/utils.ts +++ b/packages/editor/src/core/extensions/custom-image/utils.ts @@ -1,10 +1,11 @@ import type { Editor } from "@tiptap/core"; +import { AlignCenter, AlignLeft, AlignRight, type LucideIcon } from "lucide-react"; // constants import { CORE_EXTENSIONS } from "@/constants/extension"; // helpers import { getExtensionStorage } from "@/helpers/get-extension-storage"; // local imports -import { ECustomImageAttributeNames, type Pixel, type TCustomImageAttributes } from "./types"; +import { ECustomImageAttributeNames, TCustomImageAlignment, type Pixel, type TCustomImageAttributes } from "./types"; export const DEFAULT_CUSTOM_IMAGE_ATTRIBUTES: TCustomImageAttributes = { [ECustomImageAttributeNames.SOURCE]: null, @@ -12,6 +13,7 @@ export const DEFAULT_CUSTOM_IMAGE_ATTRIBUTES: TCustomImageAttributes = { [ECustomImageAttributeNames.WIDTH]: "35%", [ECustomImageAttributeNames.HEIGHT]: "auto", [ECustomImageAttributeNames.ASPECT_RATIO]: null, + [ECustomImageAttributeNames.ALIGNMENT]: "left", }; export const getImageComponentImageFileMap = (editor: Editor) => @@ -32,4 +34,25 @@ export const ensurePixelString = ( return value; }; +export const IMAGE_ALIGNMENT_OPTIONS: { + label: string; + value: TCustomImageAlignment; + icon: LucideIcon; +}[] = [ + { + label: "Left", + value: "left", + icon: AlignLeft, + }, + { + label: "Center", + value: "center", + icon: AlignCenter, + }, + { + label: "Right", + value: "right", + icon: AlignRight, + }, +]; export const getImageBlockId = (id: string) => `editor-image-block-${id}`; diff --git a/packages/editor/src/core/extensions/image/extension-config.tsx b/packages/editor/src/core/extensions/image/extension-config.tsx index 6dbad2d24d6..7456e3dfb06 100644 --- a/packages/editor/src/core/extensions/image/extension-config.tsx +++ b/packages/editor/src/core/extensions/image/extension-config.tsx @@ -19,6 +19,9 @@ export const ImageExtensionConfig = BaseImageExtension.extend< aspectRatio: { default: null, }, + alignment: { + default: "left", + }, }; }, }); diff --git a/packages/editor/src/core/types/config.ts b/packages/editor/src/core/types/config.ts index 60ccfa84123..7ef685ad02d 100644 --- a/packages/editor/src/core/types/config.ts +++ b/packages/editor/src/core/types/config.ts @@ -3,6 +3,7 @@ import { TWebhookConnectionQueryParams } from "@plane/types"; export type TReadOnlyFileHandler = { checkIfAssetExists: (assetId: string) => Promise; + getAssetDownloadSrc: (path: string) => Promise; getAssetSrc: (path: string) => Promise; restore: (assetSrc: string) => Promise; }; diff --git a/space/app/layout.tsx b/space/app/layout.tsx index 96a19227371..d0c7435da93 100644 --- a/space/app/layout.tsx +++ b/space/app/layout.tsx @@ -33,6 +33,7 @@ export default function RootLayout({ children }: { children: React.ReactNode }) +
    <>{children} diff --git a/web/app/layout.tsx b/web/app/layout.tsx index fc454e54bb0..433dea7f915 100644 --- a/web/app/layout.tsx +++ b/web/app/layout.tsx @@ -80,6 +80,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
    +
    { const res = await fileService.checkIfAssetExists(workspaceSlug, assetId); return res?.exists ?? false; }, + getAssetDownloadSrc: async (path) => { + if (!path) return ""; + if (path?.startsWith("http")) { + return path; + } else { + return ( + getEditorAssetDownloadSrc({ + assetId: path, + projectId, + workspaceSlug, + }) ?? "" + ); + } + }, getAssetSrc: async (path) => { if (!path) return ""; if (path?.startsWith("http")) { From 5874636b0b1bb664e41ade7efc4df7ea55d3d0b2 Mon Sep 17 00:00:00 2001 From: "M. Palanikannan" <73993394+Palanikannan1437@users.noreply.github.com> Date: Wed, 2 Jul 2025 15:41:31 +0530 Subject: [PATCH 014/130] [WIKI-508] fix: select all with table select #7285 --- packages/editor/src/core/extensions/keymap.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/editor/src/core/extensions/keymap.ts b/packages/editor/src/core/extensions/keymap.ts index a4961bb9617..a9534469198 100644 --- a/packages/editor/src/core/extensions/keymap.ts +++ b/packages/editor/src/core/extensions/keymap.ts @@ -117,11 +117,15 @@ export const CustomKeymap = Extension.create({ const endNodePos = tr.selection.$to.end(); const isCurrentTextSelectionNotExtendedToNodeBoundaries = startSelectionPos > startNodePos || endSelectionPos < endNodePos; + if (isCurrentTextSelectionNotExtendedToNodeBoundaries) { + // First press: select text within node boundaries editor.chain().selectTextWithinNodeBoundaries().run(); return true; + } else { + editor.commands.selectAll(); + return true; } - return false; }, }; }, From 7153064ebb5392e676e7f1c88ab5bf5d4a270b95 Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Wed, 2 Jul 2025 18:20:18 +0530 Subject: [PATCH 015/130] fix: live server runtime errors (#7314) * fix: live tsconfig and tsup config * fix: lock file updates * feat: adding build process to constants and types packages * chore: coderabbit suggestions --- live/.eslintrc.json | 5 +- live/package.json | 18 +- live/src/ee/lib/authentication.ts | 1 - live/src/ee/lib/update-document.ts | 2 +- live/src/server.ts | 182 +++--- live/tsconfig.json | 7 +- live/tsup.config.ts | 25 +- packages/constants/.eslintrc.js | 5 + packages/constants/package.json | 35 +- packages/constants/tsconfig.json | 15 + packages/constants/tsup.config.ts | 10 + packages/editor/.eslintrc.js | 4 - packages/editor/src/core/helpers/parser.ts | 3 +- packages/editor/tsconfig.json | 12 +- packages/types/.eslintrc.js | 5 + packages/types/package.json | 30 +- packages/types/src/index.ts | 1 + packages/types/tsconfig.json | 15 + packages/types/tsup.config.ts | 10 + space/core/store/issue-detail.store.ts | 3 +- space/helpers/editor.helper.ts | 19 +- .../pages/(detail)/[pageId]/page.tsx | 3 +- web/ce/components/estimates/helper.tsx | 3 +- .../analytics/work-items/priority-chart.tsx | 3 +- .../components/core/image-picker-popover.tsx | 4 +- .../core/modals/user-image-upload-modal.tsx | 2 +- .../modals/workspace-image-upload-modal.tsx | 2 +- .../dropdowns/estimate-type-dropdown.tsx | 3 +- web/core/components/dropdowns/estimate.tsx | 11 +- web/core/components/estimates/inputs/root.tsx | 3 +- .../modals/create-modal/issue-description.tsx | 11 +- .../components/issues/description-input.tsx | 3 +- .../issue-detail/issue-activity/helper.tsx | 3 +- .../components/description-editor.tsx | 3 +- .../issues/workspace-draft/root.tsx | 3 +- web/core/hooks/use-page-operations.ts | 5 +- .../layouts/auth-layout/project-wrapper.tsx | 2 +- web/core/services/workspace.service.ts | 7 +- web/core/store/user/index.ts | 6 +- yarn.lock | 581 ------------------ 40 files changed, 282 insertions(+), 783 deletions(-) delete mode 100644 live/src/ee/lib/authentication.ts create mode 100644 packages/constants/.eslintrc.js create mode 100644 packages/constants/tsconfig.json create mode 100644 packages/constants/tsup.config.ts create mode 100644 packages/types/.eslintrc.js create mode 100644 packages/types/tsconfig.json create mode 100644 packages/types/tsup.config.ts diff --git a/live/.eslintrc.json b/live/.eslintrc.json index 96651c6fa12..db20d9097ba 100644 --- a/live/.eslintrc.json +++ b/live/.eslintrc.json @@ -1,8 +1,5 @@ { "root": true, "extends": ["@plane/eslint-config/server.js"], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": true - } + "parser": "@typescript-eslint/parser" } diff --git a/live/package.json b/live/package.json index fe7a45e6703..54899d6914a 100644 --- a/live/package.json +++ b/live/package.json @@ -8,10 +8,14 @@ "type": "module", "scripts": { "dev": "tsup --watch --onSuccess 'node --env-file=.env dist/server.js'", - "build": "tsup", - "start": "node dist/server.js", - "lint": "eslint src --ext .ts,.tsx", - "lint:errors": "eslint src --ext .ts,.tsx --quiet" + "build": "tsc --noEmit && tsup", + "start": "node --env-file=.env dist/server.js", + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist" }, "keywords": [], "author": "", @@ -20,10 +24,7 @@ "@hocuspocus/extension-logger": "^2.15.0", "@hocuspocus/extension-redis": "^2.15.0", "@hocuspocus/server": "^2.15.0", - "@plane/constants": "*", - "@plane/decorators": "*", "@plane/editor": "*", - "@plane/logger": "*", "@plane/types": "*", "@tiptap/core": "2.10.4", "@tiptap/html": "2.11.0", @@ -45,6 +46,8 @@ "yjs": "^13.6.20" }, "devDependencies": { + "@plane/eslint-config": "*", + "@plane/typescript-config": "*", "@types/compression": "^1.7.5", "@types/cors": "^2.8.17", "@types/dotenv": "^8.2.0", @@ -52,7 +55,6 @@ "@types/express-ws": "^3.0.4", "@types/node": "^20.14.9", "@types/pino-http": "^5.8.4", - "@plane/typescript-config": "*", "concurrently": "^9.0.1", "nodemon": "^3.1.7", "ts-node": "^10.9.2", diff --git a/live/src/ee/lib/authentication.ts b/live/src/ee/lib/authentication.ts deleted file mode 100644 index 16a4fb11eb8..00000000000 --- a/live/src/ee/lib/authentication.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "../../ce/lib/authentication.js" \ No newline at end of file diff --git a/live/src/ee/lib/update-document.ts b/live/src/ee/lib/update-document.ts index 20aed8fd89f..0f9c964e778 100644 --- a/live/src/ee/lib/update-document.ts +++ b/live/src/ee/lib/update-document.ts @@ -1 +1 @@ -export * from "../../ce/lib/update-document.js" \ No newline at end of file +export * from "../../ce/lib/update-document.js"; diff --git a/live/src/server.ts b/live/src/server.ts index 6a47ef7912c..8ffa38a60d2 100644 --- a/live/src/server.ts +++ b/live/src/server.ts @@ -1,135 +1,129 @@ import compression from "compression"; import cors from "cors"; import expressWs from "express-ws"; -import express from "express"; +import express, { Request, Response } from "express"; import helmet from "helmet"; // hocuspocus server import { getHocusPocusServer } from "@/core/hocuspocus-server.js"; // helpers import { convertHTMLDocumentToAllFormats } from "@/core/helpers/convert-document.js"; import { logger, manualLogger } from "@/core/helpers/logger.js"; -import { errorHandler } from "@/core/helpers/error-handler.js"; // types import { TConvertDocumentRequestBody } from "@/core/types/common.js"; -const app: any = express(); -expressWs(app); - -app.set("port", process.env.PORT || 3000); - -// Security middleware -app.use(helmet()); - -// Middleware for response compression -app.use( - compression({ - level: 6, - threshold: 5 * 1000, - }) -); - -// Logging middleware -app.use(logger); - -// Body parsing middleware -app.use(express.json()); -app.use(express.urlencoded({ extended: true })); - -// cors middleware -app.use(cors()); - -const router = express.Router(); - -const HocusPocusServer = await getHocusPocusServer().catch((err) => { - manualLogger.error("Failed to initialize HocusPocusServer:", err); - process.exit(1); -}); - -router.get("/health", (_req, res) => { - res.status(200).json({ status: "OK" }); -}); +export class Server { + private app: any; + private router: any; + private hocuspocusServer: any; + private serverInstance: any; + + constructor() { + this.app = express(); + this.router = express.Router(); + expressWs(this.app); + this.app.set("port", process.env.PORT || 3000); + this.setupMiddleware(); + this.setupHocusPocus(); + this.setupRoutes(); + } -router.ws("/collaboration", (ws, req) => { - try { - HocusPocusServer.handleConnection(ws, req); - } catch (err) { - manualLogger.error("WebSocket connection error:", err); - ws.close(); + private setupMiddleware() { + // Security middleware + this.app.use(helmet()); + // Middleware for response compression + this.app.use(compression({ level: 6, threshold: 5 * 1000 })); + // Logging middleware + this.app.use(logger); + // Body parsing middleware + this.app.use(express.json()); + this.app.use(express.urlencoded({ extended: true })); + // cors middleware + this.app.use(cors()); + this.app.use(process.env.LIVE_BASE_PATH || "/live", this.router); } -}); -router.post("/convert-document", (req, res) => { - const { description_html, variant } = req.body as TConvertDocumentRequestBody; - try { - if (description_html === undefined || variant === undefined) { - res.status(400).send({ - message: "Missing required fields", - }); - return; - } - const { description, description_binary } = convertHTMLDocumentToAllFormats({ - document_html: description_html, - variant, - }); - res.status(200).json({ - description, - description_binary, - }); - } catch (error) { - manualLogger.error("Error in /convert-document endpoint:", error); - res.status(500).send({ - message: `Internal server error. ${error}`, + private async setupHocusPocus() { + this.hocuspocusServer = await getHocusPocusServer().catch((err) => { + manualLogger.error("Failed to initialize HocusPocusServer:", err); + process.exit(1); }); } -}); -app.use(process.env.LIVE_BASE_PATH || "/live", router); + private setupRoutes() { + this.router.get("/health", (_req: Request, res: Response) => { + res.status(200).json({ status: "OK" }); + }); -app.use((_req, res) => { - res.status(404).send("Not Found"); -}); + this.router.ws("/collaboration", (ws: any, req: Request) => { + try { + this.hocuspocusServer.handleConnection(ws, req); + } catch (err) { + manualLogger.error("WebSocket connection error:", err); + ws.close(); + } + }); -app.use(errorHandler); + this.router.post("/convert-document", (req: Request, res: Response) => { + const { description_html, variant } = req.body as TConvertDocumentRequestBody; + try { + if (description_html === undefined || variant === undefined) { + res.status(400).send({ + message: "Missing required fields", + }); + return; + } + const { description, description_binary } = convertHTMLDocumentToAllFormats({ + document_html: description_html, + variant, + }); + res.status(200).json({ + description, + description_binary, + }); + } catch (error) { + manualLogger.error("Error in /convert-document endpoint:", error); + res.status(500).send({ + message: `Internal server error. ${error}`, + }); + } + }); -const liveServer = app.listen(app.get("port"), () => { - manualLogger.info(`Plane Live server has started at port ${app.get("port")}`); -}); + this.app.use((_req: Request, res: Response) => { + res.status(404).send("Not Found"); + }); + } -const gracefulShutdown = async () => { - manualLogger.info("Starting graceful shutdown..."); + public listen() { + this.serverInstance = this.app.listen(this.app.get("port"), () => { + manualLogger.info(`Plane Live server has started at port ${this.app.get("port")}`); + }); + } - try { + public async destroy() { // Close the HocusPocus server WebSocket connections - await HocusPocusServer.destroy(); + await this.hocuspocusServer.destroy(); manualLogger.info("HocusPocus server WebSocket connections closed gracefully."); - // Close the Express server - liveServer.close(() => { + this.serverInstance.close(() => { manualLogger.info("Express server closed gracefully."); process.exit(1); }); - } catch (err) { - manualLogger.error("Error during shutdown:", err); - process.exit(1); } +} - // Forcefully shut down after 10 seconds if not closed - setTimeout(() => { - manualLogger.error("Forcing shutdown..."); - process.exit(1); - }, 10000); -}; +const server = new Server(); +server.listen(); // Graceful shutdown on unhandled rejection -process.on("unhandledRejection", (err: any) => { +process.on("unhandledRejection", async (err: any) => { manualLogger.info("Unhandled Rejection: ", err); manualLogger.info(`UNHANDLED REJECTION! 💥 Shutting down...`); - gracefulShutdown(); + await server.destroy(); }); // Graceful shutdown on uncaught exception -process.on("uncaughtException", (err: any) => { +process.on("uncaughtException", async (err: any) => { manualLogger.info("Uncaught Exception: ", err); manualLogger.info(`UNCAUGHT EXCEPTION! 💥 Shutting down...`); - gracefulShutdown(); + await server.destroy(); }); diff --git a/live/tsconfig.json b/live/tsconfig.json index 622dc2232e5..810a68a5cbf 100644 --- a/live/tsconfig.json +++ b/live/tsconfig.json @@ -1,9 +1,10 @@ { "extends": "@plane/typescript-config/base.json", "compilerOptions": { - "module": "NodeNext", - "moduleResolution": "NodeNext", + "module": "ES2015", + "moduleResolution": "Bundler", "lib": ["ES2015"], + "target": "ES2015", "outDir": "./dist", "rootDir": ".", "baseUrl": ".", @@ -16,6 +17,8 @@ "skipLibCheck": true, "sourceMap": true, "inlineSources": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, "sourceRoot": "/" }, "include": ["src/**/*.ts", "tsup.config.ts"], diff --git a/live/tsup.config.ts b/live/tsup.config.ts index ac79b760826..05fbe7e86c0 100644 --- a/live/tsup.config.ts +++ b/live/tsup.config.ts @@ -1,20 +1,15 @@ -import { defineConfig, Options } from "tsup"; +import { defineConfig } from "tsup"; -export default defineConfig((options: Options) => ({ +export default defineConfig({ entry: ["src/server.ts"], - format: ["esm"], - dts: false, - clean: true, - target: "node18", - sourcemap: true, + format: ["esm", "cjs"], + dts: true, splitting: false, - bundle: true, + sourcemap: true, + minify: false, + target: "node18", outDir: "dist", - esbuildOptions(options) { - options.alias = { - "@/core": "./src/core", - "@/plane-live": "./src/ce" - }; + env: { + NODE_ENV: process.env.NODE_ENV || "development", }, - ...options, -})); +}); diff --git a/packages/constants/.eslintrc.js b/packages/constants/.eslintrc.js new file mode 100644 index 00000000000..c9472ec2020 --- /dev/null +++ b/packages/constants/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + root: true, + extends: ["@plane/eslint-config/library.js"], + parser: "@typescript-eslint/parser", +}; diff --git a/packages/constants/package.json b/packages/constants/package.json index e007dc10be4..f0de91401ca 100644 --- a/packages/constants/package.json +++ b/packages/constants/package.json @@ -2,6 +2,37 @@ "name": "@plane/constants", "version": "0.27.0", "private": true, - "main": "./src/index.ts", - "license": "AGPL-3.0" + "license": "AGPL-3.0", + "type": "module", + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist/**/*" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "require": "./dist/index.js", + "import": "./dist/index.js" + } + }, + "scripts": { + "dev": "tsup --watch", + "build": "tsc --noEmit && tsup", + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist" + }, + "dependencies": { + "@plane/types": "*" + }, + "devDependencies": { + "@plane/eslint-config": "*", + "@plane/typescript-config": "*", + "tsup": "8.4.0" + } } diff --git a/packages/constants/tsconfig.json b/packages/constants/tsconfig.json new file mode 100644 index 00000000000..f64308b49d6 --- /dev/null +++ b/packages/constants/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "@plane/typescript-config/base.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "module": "ESNext", + "moduleResolution": "bundler", + "target": "ESNext", + "sourceMap": true, + "strictNullChecks": true, + "allowSyntheticDefaultImports": true + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/constants/tsup.config.ts b/packages/constants/tsup.config.ts new file mode 100644 index 00000000000..4688d2c2ca0 --- /dev/null +++ b/packages/constants/tsup.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + outDir: "dist", + format: ["esm"], + dts: true, + clean: true, + minify: true, +}); diff --git a/packages/editor/.eslintrc.js b/packages/editor/.eslintrc.js index b5bd13a3c93..c9472ec2020 100644 --- a/packages/editor/.eslintrc.js +++ b/packages/editor/.eslintrc.js @@ -2,8 +2,4 @@ module.exports = { root: true, extends: ["@plane/eslint-config/library.js"], parser: "@typescript-eslint/parser", - parserOptions: { - project: true, - }, - rules: {}, }; diff --git a/packages/editor/src/core/helpers/parser.ts b/packages/editor/src/core/helpers/parser.ts index 13b10532363..bf84b2fdb2d 100644 --- a/packages/editor/src/core/helpers/parser.ts +++ b/packages/editor/src/core/helpers/parser.ts @@ -1,6 +1,5 @@ // plane imports -import { TDocumentPayload, TDuplicateAssetData, TDuplicateAssetResponse } from "@plane/types"; -import { TEditorAssetType } from "@plane/types/src/enums"; +import { TDocumentPayload, TDuplicateAssetData, TDuplicateAssetResponse, TEditorAssetType } from "@plane/types"; // plane web imports import { extractAdditionalAssetsFromHTMLContent, diff --git a/packages/editor/tsconfig.json b/packages/editor/tsconfig.json index 58b8640e694..1bb68d838f1 100644 --- a/packages/editor/tsconfig.json +++ b/packages/editor/tsconfig.json @@ -1,16 +1,16 @@ { "compilerOptions": { "jsx": "react-jsx", - "lib": ["ES2015", "DOM"], + "lib": ["ES2022", "DOM"], "module": "ESNext", - "moduleResolution": "Node", - "target": "ES6", + "moduleResolution": "bundler", + "target": "ESNext", "sourceMap": true, "baseUrl": ".", "paths": { - "@/*": ["src/core/*"], - "@/styles/*": ["src/styles/*"], - "@/plane-editor/*": ["src/ce/*"] + "@/*": ["./src/core/*"], + "@/styles/*": ["./src/styles/*"], + "@/plane-editor/*": ["./src/ce/*"] }, "strictNullChecks": true, "allowSyntheticDefaultImports": true diff --git a/packages/types/.eslintrc.js b/packages/types/.eslintrc.js new file mode 100644 index 00000000000..c9472ec2020 --- /dev/null +++ b/packages/types/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + root: true, + extends: ["@plane/eslint-config/library.js"], + parser: "@typescript-eslint/parser", +}; diff --git a/packages/types/package.json b/packages/types/package.json index b75745e6959..f4ae5083186 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -3,6 +3,32 @@ "version": "0.27.0", "license": "AGPL-3.0", "private": true, - "types": "./src/index.ts", - "main": "./src/index.ts" + "type": "module", + "types": "./dist/index.d.ts", + "main": "./dist/index.js", + "module": "./dist/index.js", + "files": [ + "dist/**/*" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "require": "./dist/index.js", + "import": "./dist/index.js" + } + }, + "scripts": { + "dev": "tsup --watch", + "build": "tsc --noEmit && tsup", + "check:types": "tsc --noEmit", + "check:lint": "eslint src --ext .ts,.tsx", + "check:format": "prettier --check \"**/*.{ts,tsx,md}\"", + "fix:lint": "eslint src --ext .ts,.tsx --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md}\"" + }, + "devDependencies": { + "@plane/eslint-config": "*", + "@plane/typescript-config": "*", + "tsup": "8.4.0" + } } diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index ba70ec5c72e..ae35062e58a 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -4,6 +4,7 @@ export * from "./cycle"; export * from "./dashboard"; export * from "./de-dupe"; export * from "./description_version"; +export * from "./enums"; export * from "./project"; export * from "./state"; export * from "./issues"; diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json new file mode 100644 index 00000000000..9d48e155ee0 --- /dev/null +++ b/packages/types/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "@plane/typescript-config/base.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "baseUrl": "./src", + "module": "ESNext", + "moduleResolution": "bundler", + "target": "ESNext", + "allowSyntheticDefaultImports": true, + "strictNullChecks": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/types/tsup.config.ts b/packages/types/tsup.config.ts new file mode 100644 index 00000000000..4688d2c2ca0 --- /dev/null +++ b/packages/types/tsup.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + outDir: "dist", + format: ["esm"], + dts: true, + clean: true, + minify: true, +}); diff --git a/space/core/store/issue-detail.store.ts b/space/core/store/issue-detail.store.ts index 71583694600..8eee2f8b55d 100644 --- a/space/core/store/issue-detail.store.ts +++ b/space/core/store/issue-detail.store.ts @@ -5,8 +5,7 @@ import { computedFn } from "mobx-utils"; import { v4 as uuidv4 } from "uuid"; // plane imports import { SitesFileService, SitesIssueService } from "@plane/services"; -import { TFileSignedURLResponse, TIssuePublicComment } from "@plane/types"; -import { EFileAssetType } from "@plane/types/src/enums"; +import { EFileAssetType, TFileSignedURLResponse, TIssuePublicComment } from "@plane/types"; // store import { CoreRootStore } from "@/store/root.store"; // types diff --git a/space/helpers/editor.helper.ts b/space/helpers/editor.helper.ts index e63ba8834c4..1b114ea581f 100644 --- a/space/helpers/editor.helper.ts +++ b/space/helpers/editor.helper.ts @@ -27,16 +27,19 @@ type TArgs = { export const getReadOnlyEditorFileHandlers = (args: Pick): TReadOnlyFileHandler => { const { anchor, workspaceId } = args; + const getAssetSrc = async (path: string) => { + if (!path) return ""; + if (path?.startsWith("http")) { + return path; + } else { + return getEditorAssetSrc(anchor, path) ?? ""; + } + }; + return { checkIfAssetExists: async () => true, - getAssetSrc: async (path) => { - if (!path) return ""; - if (path?.startsWith("http")) { - return path; - } else { - return getEditorAssetSrc(anchor, path) ?? ""; - } - }, + getAssetDownloadSrc: getAssetSrc, + getAssetSrc: getAssetSrc, restore: async (src: string) => { if (src?.startsWith("http")) { await sitesFileService.restoreOldEditorAsset(workspaceId, src); diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx index eacabf8f859..8566b04d271 100644 --- a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx +++ b/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx @@ -6,8 +6,7 @@ import Link from "next/link"; import { useParams } from "next/navigation"; import useSWR from "swr"; // plane types -import { TSearchEntityRequestPayload, TWebhookConnectionQueryParams } from "@plane/types"; -import { EFileAssetType } from "@plane/types/src/enums"; +import { EFileAssetType, TSearchEntityRequestPayload, TWebhookConnectionQueryParams } from "@plane/types"; // plane ui import { getButtonStyling } from "@plane/ui"; // plane utils diff --git a/web/ce/components/estimates/helper.tsx b/web/ce/components/estimates/helper.tsx index 4d219652798..5a1d9eaf441 100644 --- a/web/ce/components/estimates/helper.tsx +++ b/web/ce/components/estimates/helper.tsx @@ -1,5 +1,4 @@ -import { TEstimateSystemKeys } from "@plane/types"; -import { EEstimateSystem } from "@plane/types/src/enums"; +import { TEstimateSystemKeys, EEstimateSystem } from "@plane/types"; export const isEstimateSystemEnabled = (key: TEstimateSystemKeys) => { switch (key) { diff --git a/web/core/components/analytics/work-items/priority-chart.tsx b/web/core/components/analytics/work-items/priority-chart.tsx index 61ae19b8c2b..ac7704628f6 100644 --- a/web/core/components/analytics/work-items/priority-chart.tsx +++ b/web/core/components/analytics/work-items/priority-chart.tsx @@ -15,8 +15,7 @@ import { } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { BarChart } from "@plane/propel/charts/bar-chart"; -import { ChartXAxisProperty, ChartYAxisMetric } from "@plane/types"; -import { TBarItem, TChart, TChartDatum } from "@plane/types/src/charts"; +import { TBarItem, TChart, TChartDatum, ChartXAxisProperty, ChartYAxisMetric } from "@plane/types"; // plane web components import { Button } from "@plane/ui"; import { generateExtendedColors, parseChartData } from "@/components/chart/utils"; diff --git a/web/core/components/core/image-picker-popover.tsx b/web/core/components/core/image-picker-popover.tsx index 0634a231269..925e24b895d 100644 --- a/web/core/components/core/image-picker-popover.tsx +++ b/web/core/components/core/image-picker-popover.tsx @@ -11,9 +11,7 @@ import { Tab, Popover } from "@headlessui/react"; // plane imports import { ACCEPTED_COVER_IMAGE_MIME_TYPES_FOR_REACT_DROPZONE, MAX_FILE_SIZE } from "@plane/constants"; import { useOutsideClickDetector } from "@plane/hooks"; -// plane types -import { EFileAssetType } from "@plane/types/src/enums"; -// ui +import { EFileAssetType } from "@plane/types"; import { Button, Input, Loader, TOAST_TYPE, setToast } from "@plane/ui"; // helpers import { getFileURL } from "@plane/utils"; diff --git a/web/core/components/core/modals/user-image-upload-modal.tsx b/web/core/components/core/modals/user-image-upload-modal.tsx index a7693b8da61..e411c0234ff 100644 --- a/web/core/components/core/modals/user-image-upload-modal.tsx +++ b/web/core/components/core/modals/user-image-upload-modal.tsx @@ -7,7 +7,7 @@ import { UserCircle2 } from "lucide-react"; import { Transition, Dialog } from "@headlessui/react"; // plane imports import { ACCEPTED_AVATAR_IMAGE_MIME_TYPES_FOR_REACT_DROPZONE, MAX_FILE_SIZE } from "@plane/constants"; -import { EFileAssetType } from "@plane/types/src/enums"; +import { EFileAssetType } from "@plane/types"; import { Button, TOAST_TYPE, setToast } from "@plane/ui"; import { getAssetIdFromUrl, getFileURL, checkURLValidity } from "@plane/utils"; // helpers diff --git a/web/core/components/core/modals/workspace-image-upload-modal.tsx b/web/core/components/core/modals/workspace-image-upload-modal.tsx index 0bebeb65317..314702346ce 100644 --- a/web/core/components/core/modals/workspace-image-upload-modal.tsx +++ b/web/core/components/core/modals/workspace-image-upload-modal.tsx @@ -7,7 +7,7 @@ import { UserCircle2 } from "lucide-react"; import { Transition, Dialog } from "@headlessui/react"; // plane imports import { ACCEPTED_AVATAR_IMAGE_MIME_TYPES_FOR_REACT_DROPZONE, MAX_FILE_SIZE } from "@plane/constants"; -import { EFileAssetType } from "@plane/types/src/enums"; +import { EFileAssetType } from "@plane/types"; import { Button, TOAST_TYPE, setToast } from "@plane/ui"; import { getAssetIdFromUrl, getFileURL, checkURLValidity } from "@plane/utils"; // helpers diff --git a/web/core/components/cycles/dropdowns/estimate-type-dropdown.tsx b/web/core/components/cycles/dropdowns/estimate-type-dropdown.tsx index e3276b7326a..db3950780af 100644 --- a/web/core/components/cycles/dropdowns/estimate-type-dropdown.tsx +++ b/web/core/components/cycles/dropdowns/estimate-type-dropdown.tsx @@ -1,7 +1,6 @@ import React from "react"; import { observer } from "mobx-react"; -import { TCycleEstimateType } from "@plane/types"; -import { EEstimateSystem } from "@plane/types/src/enums"; +import { EEstimateSystem, TCycleEstimateType } from "@plane/types"; import { CustomSelect } from "@plane/ui"; import { useCycle, useProjectEstimates } from "@/hooks/store"; import { cycleEstimateOptions } from "../analytics-sidebar"; diff --git a/web/core/components/dropdowns/estimate.tsx b/web/core/components/dropdowns/estimate.tsx index 4f80d061bc0..1fe850a772d 100644 --- a/web/core/components/dropdowns/estimate.tsx +++ b/web/core/components/dropdowns/estimate.tsx @@ -4,18 +4,13 @@ import { useParams } from "next/navigation"; import { usePopper } from "react-popper"; import { Check, ChevronDown, Search, Triangle } from "lucide-react"; import { Combobox } from "@headlessui/react"; -// ui +// plane imports import { useTranslation } from "@plane/i18n"; -import { EEstimateSystem } from "@plane/types/src/enums"; +import { EEstimateSystem } from "@plane/types"; import { ComboDropDown } from "@plane/ui"; import { convertMinutesToHoursMinutesString, cn } from "@plane/utils"; -// helpers // hooks -import { - useEstimate, - useProjectEstimates, - // useEstimate -} from "@/hooks/store"; +import { useEstimate, useProjectEstimates } from "@/hooks/store"; import { useDropdown } from "@/hooks/use-dropdown"; // components import { DropdownButton } from "./buttons"; diff --git a/web/core/components/estimates/inputs/root.tsx b/web/core/components/estimates/inputs/root.tsx index 672892178d8..c7338fd4455 100644 --- a/web/core/components/estimates/inputs/root.tsx +++ b/web/core/components/estimates/inputs/root.tsx @@ -1,6 +1,5 @@ import { FC } from "react"; -import { TEstimateSystemKeys } from "@plane/types"; -import { EEstimateSystem } from "@plane/types/src/enums"; +import { EEstimateSystem, TEstimateSystemKeys } from "@plane/types"; // components import { EstimateNumberInput, EstimateTextInput } from "@/components/estimates/inputs"; import { EstimateTimeInput } from "@/plane-web/components/estimates/inputs"; diff --git a/web/core/components/inbox/modals/create-modal/issue-description.tsx b/web/core/components/inbox/modals/create-modal/issue-description.tsx index b2511e5d534..c116d0cef20 100644 --- a/web/core/components/inbox/modals/create-modal/issue-description.tsx +++ b/web/core/components/inbox/modals/create-modal/issue-description.tsx @@ -4,24 +4,19 @@ import { FC, RefObject } from "react"; import { observer } from "mobx-react"; // plane imports import { ETabIndices } from "@plane/constants"; -// editor import { EditorRefApi } from "@plane/editor"; -// i18n import { useTranslation } from "@plane/i18n"; -// types -import { TIssue } from "@plane/types"; -import { EFileAssetType } from "@plane/types/src/enums"; -// ui +import { EFileAssetType, TIssue } from "@plane/types"; import { Loader } from "@plane/ui"; import { getDescriptionPlaceholderI18n, getTabIndex } from "@plane/utils"; // components import { RichTextEditor } from "@/components/editor/rich-text-editor/rich-text-editor"; -// helpers // hooks import { useEditorAsset, useProjectInbox } from "@/hooks/store"; import { usePlatformOS } from "@/hooks/use-platform-os"; -// plane web services +// services import { WorkspaceService } from "@/plane-web/services"; + const workspaceService = new WorkspaceService(); type TInboxIssueDescription = { diff --git a/web/core/components/issues/description-input.tsx b/web/core/components/issues/description-input.tsx index b12a45c509b..b8f7b00e977 100644 --- a/web/core/components/issues/description-input.tsx +++ b/web/core/components/issues/description-input.tsx @@ -7,8 +7,7 @@ import { Controller, useForm } from "react-hook-form"; // plane imports import { EditorReadOnlyRefApi, EditorRefApi } from "@plane/editor"; import { useTranslation } from "@plane/i18n"; -import { TIssue, TNameDescriptionLoader } from "@plane/types"; -import { EFileAssetType } from "@plane/types/src/enums"; +import { EFileAssetType, TIssue, TNameDescriptionLoader } from "@plane/types"; import { Loader } from "@plane/ui"; // components import { getDescriptionPlaceholderI18n } from "@plane/utils"; diff --git a/web/core/components/issues/issue-detail/issue-activity/helper.tsx b/web/core/components/issues/issue-detail/issue-activity/helper.tsx index af30a389f61..b4332afd17c 100644 --- a/web/core/components/issues/issue-detail/issue-activity/helper.tsx +++ b/web/core/components/issues/issue-detail/issue-activity/helper.tsx @@ -1,7 +1,6 @@ import { useMemo } from "react"; import { useTranslation } from "@plane/i18n"; -import { TCommentsOperations, TIssueActivity, TIssueComment } from "@plane/types"; -import { EFileAssetType } from "@plane/types/src/enums"; +import { EFileAssetType, TCommentsOperations, TIssueComment } from "@plane/types"; import { setToast, TOAST_TYPE } from "@plane/ui"; import { formatTextList } from "@plane/utils"; import { useEditorAsset, useIssueDetail, useMember, useUser } from "@/hooks/store"; diff --git a/web/core/components/issues/issue-modal/components/description-editor.tsx b/web/core/components/issues/issue-modal/components/description-editor.tsx index b1bbce5b904..2540756a87d 100644 --- a/web/core/components/issues/issue-modal/components/description-editor.tsx +++ b/web/core/components/issues/issue-modal/components/description-editor.tsx @@ -11,8 +11,7 @@ import { EditorRefApi } from "@plane/editor"; // i18n import { useTranslation } from "@plane/i18n"; // types -import { TIssue } from "@plane/types"; -import { EFileAssetType } from "@plane/types/src/enums"; +import { EFileAssetType, TIssue } from "@plane/types"; // ui import { Loader, setToast, TOAST_TYPE } from "@plane/ui"; import { getDescriptionPlaceholderI18n, getTabIndex } from "@plane/utils"; diff --git a/web/core/components/issues/workspace-draft/root.tsx b/web/core/components/issues/workspace-draft/root.tsx index 39a90227b7d..499a42c81d0 100644 --- a/web/core/components/issues/workspace-draft/root.tsx +++ b/web/core/components/issues/workspace-draft/root.tsx @@ -4,8 +4,7 @@ import { FC, Fragment } from "react"; import { observer } from "mobx-react"; import useSWR from "swr"; // plane imports -import { EDraftIssuePaginationType, PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; -import { EUserPermissionsLevel } from "@plane/constants/src/user"; +import { EUserPermissionsLevel, EDraftIssuePaginationType, PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { EUserWorkspaceRoles } from "@plane/types"; // components diff --git a/web/core/hooks/use-page-operations.ts b/web/core/hooks/use-page-operations.ts index 0465024cf6c..f3c635748e3 100644 --- a/web/core/hooks/use-page-operations.ts +++ b/web/core/hooks/use-page-operations.ts @@ -1,9 +1,8 @@ import { useMemo } from "react"; -// constants +// plane imports import { IS_FAVORITE_MENU_OPEN, PROJECT_PAGE_TRACKER_EVENTS } from "@plane/constants"; import { EditorRefApi } from "@plane/editor"; -import { EPageAccess } from "@plane/types/src/enums"; -// ui +import { EPageAccess } from "@plane/types"; import { setToast, TOAST_TYPE } from "@plane/ui"; import { copyUrlToClipboard } from "@plane/utils"; // helpers diff --git a/web/core/layouts/auth-layout/project-wrapper.tsx b/web/core/layouts/auth-layout/project-wrapper.tsx index 25f93d32061..a11732b20d9 100644 --- a/web/core/layouts/auth-layout/project-wrapper.tsx +++ b/web/core/layouts/auth-layout/project-wrapper.tsx @@ -6,8 +6,8 @@ import useSWR from "swr"; // plane imports import { EUserPermissions, EUserPermissionsLevel, PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; +import { EProjectNetwork } from "@plane/types"; // components -import { EProjectNetwork } from "@plane/types/src/enums"; import { JoinProject } from "@/components/auth-screens"; import { LogoSpinner } from "@/components/common"; import { ComicBoxButton, DetailedEmptyState } from "@/components/empty-state"; diff --git a/web/core/services/workspace.service.ts b/web/core/services/workspace.service.ts index bb91bc12198..4bc042e1c3d 100644 --- a/web/core/services/workspace.service.ts +++ b/web/core/services/workspace.service.ts @@ -1,4 +1,3 @@ -// services import { IWorkspace, IWorkspaceMemberMe, @@ -17,11 +16,11 @@ import { TSearchEntityRequestPayload, TWidgetEntityData, TActivityEntityData, + IWorkspaceSidebarNavigationItem, + IWorkspaceSidebarNavigation, } from "@plane/types"; -import { IWorkspaceSidebarNavigationItem, IWorkspaceSidebarNavigation } from "@plane/types/src/workspace"; +// services import { APIService } from "@/services/api.service"; -// helpers -// types export class WorkspaceService extends APIService { constructor(baseUrl: string) { diff --git a/web/core/store/user/index.ts b/web/core/store/user/index.ts index 27a8a7362fe..09c0f749873 100644 --- a/web/core/store/user/index.ts +++ b/web/core/store/user/index.ts @@ -1,11 +1,9 @@ import cloneDeep from "lodash/cloneDeep"; import set from "lodash/set"; import { action, makeObservable, observable, runInAction, computed } from "mobx"; +// plane imports import { EUserPermissions, API_BASE_URL } from "@plane/constants"; -// types -import { IUser } from "@plane/types"; -import { TUserPermissions } from "@plane/types/src/enums"; -// helpers +import { IUser, TUserPermissions } from "@plane/types"; // local import { persistence } from "@/local-db/storage.sqlite"; // plane web imports diff --git a/yarn.lock b/yarn.lock index 2b9ebf4891d..fcc75cf0d4f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -148,7 +148,6 @@ "@babel/helpers@7.26.10", "@babel/helpers@^7.27.4": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384" integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g== dependencies: "@babel/template" "^7.26.9" @@ -162,586 +161,6 @@ "@babel/types" "^7.27.3" "@babel/runtime@7.26.10", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.26.10" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749" - integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA== - dependencies: - "@babel/types" "^7.26.10" - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" - integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" - integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" - integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" - integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" - integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-import-assertions@^7.26.0": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" - integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-import-attributes@^7.26.0": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" - integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-jsx@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" - integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-typescript@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" - integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" - integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-async-generator-functions@^7.26.8": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8" - integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-remap-async-to-generator" "^7.25.9" - "@babel/traverse" "^7.26.8" - -"@babel/plugin-transform-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" - integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-remap-async-to-generator" "^7.25.9" - -"@babel/plugin-transform-block-scoped-functions@^7.26.5": - version "7.26.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e" - integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-block-scoping@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" - integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-class-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" - integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-class-static-block@^7.26.0": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" - integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-classes@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" - integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - "@babel/traverse" "^7.25.9" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" - integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/template" "^7.25.9" - -"@babel/plugin-transform-destructuring@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" - integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-dotall-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" - integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-duplicate-keys@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" - integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" - integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-dynamic-import@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" - integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-exponentiation-operator@^7.26.3": - version "7.26.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" - integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-export-namespace-from@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" - integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-for-of@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" - integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-function-name@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" - integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-json-strings@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" - integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" - integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-logical-assignment-operators@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" - integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-member-expression-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" - integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-amd@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" - integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-commonjs@^7.25.9", "@babel/plugin-transform-modules-commonjs@^7.26.3": - version "7.26.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" - integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== - dependencies: - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-systemjs@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" - integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-modules-umd@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" - integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" - integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-new-target@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" - integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": - version "7.26.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe" - integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-numeric-separator@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" - integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-object-rest-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" - integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - -"@babel/plugin-transform-object-super@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" - integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - -"@babel/plugin-transform-optional-catch-binding@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" - integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" - integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-parameters@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" - integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-private-methods@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" - integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-private-property-in-object@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" - integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-property-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" - integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-regenerator@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" - integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-regexp-modifiers@^7.26.0": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" - integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-reserved-words@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" - integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-shorthand-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" - integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" - integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-sticky-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" - integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-template-literals@^7.26.8": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5" - integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-typeof-symbol@^7.26.7": - version "7.26.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz#d0e33acd9223744c1e857dbd6fa17bd0a3786937" - integrity sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-typescript@^7.25.9": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz#2e9caa870aa102f50d7125240d9dbf91334b0950" - integrity sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/plugin-syntax-typescript" "^7.25.9" - -"@babel/plugin-transform-unicode-escapes@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" - integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-property-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" - integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" - integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-sets-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" - integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/preset-env@^7.25.4": - version "7.26.8" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.8.tgz#7af0090829b606d2046db99679004731e1dc364d" - integrity sha512-um7Sy+2THd697S4zJEfv/U5MHGJzkN2xhtsR3T/SWRbVSic62nbISh51VVfU9JiO/L/Z97QczHTaFVkOU8IzNg== - dependencies: - "@babel/compat-data" "^7.26.8" - "@babel/helper-compilation-targets" "^7.26.5" - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.26.0" - "@babel/plugin-syntax-import-attributes" "^7.26.0" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.25.9" - "@babel/plugin-transform-async-generator-functions" "^7.26.8" - "@babel/plugin-transform-async-to-generator" "^7.25.9" - "@babel/plugin-transform-block-scoped-functions" "^7.26.5" - "@babel/plugin-transform-block-scoping" "^7.25.9" - "@babel/plugin-transform-class-properties" "^7.25.9" - "@babel/plugin-transform-class-static-block" "^7.26.0" - "@babel/plugin-transform-classes" "^7.25.9" - "@babel/plugin-transform-computed-properties" "^7.25.9" - "@babel/plugin-transform-destructuring" "^7.25.9" - "@babel/plugin-transform-dotall-regex" "^7.25.9" - "@babel/plugin-transform-duplicate-keys" "^7.25.9" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-dynamic-import" "^7.25.9" - "@babel/plugin-transform-exponentiation-operator" "^7.26.3" - "@babel/plugin-transform-export-namespace-from" "^7.25.9" - "@babel/plugin-transform-for-of" "^7.25.9" - "@babel/plugin-transform-function-name" "^7.25.9" - "@babel/plugin-transform-json-strings" "^7.25.9" - "@babel/plugin-transform-literals" "^7.25.9" - "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" - "@babel/plugin-transform-member-expression-literals" "^7.25.9" - "@babel/plugin-transform-modules-amd" "^7.25.9" - "@babel/plugin-transform-modules-commonjs" "^7.26.3" - "@babel/plugin-transform-modules-systemjs" "^7.25.9" - "@babel/plugin-transform-modules-umd" "^7.25.9" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-new-target" "^7.25.9" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6" - "@babel/plugin-transform-numeric-separator" "^7.25.9" - "@babel/plugin-transform-object-rest-spread" "^7.25.9" - "@babel/plugin-transform-object-super" "^7.25.9" - "@babel/plugin-transform-optional-catch-binding" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - "@babel/plugin-transform-private-methods" "^7.25.9" - "@babel/plugin-transform-private-property-in-object" "^7.25.9" - "@babel/plugin-transform-property-literals" "^7.25.9" - "@babel/plugin-transform-regenerator" "^7.25.9" - "@babel/plugin-transform-regexp-modifiers" "^7.26.0" - "@babel/plugin-transform-reserved-words" "^7.25.9" - "@babel/plugin-transform-shorthand-properties" "^7.25.9" - "@babel/plugin-transform-spread" "^7.25.9" - "@babel/plugin-transform-sticky-regex" "^7.25.9" - "@babel/plugin-transform-template-literals" "^7.26.8" - "@babel/plugin-transform-typeof-symbol" "^7.26.7" - "@babel/plugin-transform-unicode-escapes" "^7.25.9" - "@babel/plugin-transform-unicode-property-regex" "^7.25.9" - "@babel/plugin-transform-unicode-regex" "^7.25.9" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.11.0" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.40.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-typescript@^7.24.7": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" - integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-syntax-jsx" "^7.25.9" - "@babel/plugin-transform-modules-commonjs" "^7.25.9" - "@babel/plugin-transform-typescript" "^7.25.9" - -"@babel/runtime@7.26.10", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2" integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== From 8cc23bc4a522276afc6de2a20b22ece7404347a6 Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Wed, 2 Jul 2025 19:43:44 +0530 Subject: [PATCH 016/130] refactor: Admin App with better layouts and Meta Information (#7200) * fix: layout structure in admin * fix: layout structure in admin * fix: delete layout files * chore: updated form related info * fix: admin import statements * fix: general page unauthorized flickering issue * chore: logs related * chore: lock file updates * fix: build errors * fix: coderabbit suggestions --- admin/app/{ => (all)/(dashboard)}/ai/form.tsx | 2 +- .../app/{ => (all)/(dashboard)}/ai/layout.tsx | 5 +- admin/app/{ => (all)/(dashboard)}/ai/page.tsx | 0 .../authentication/github/form.tsx | 12 +- .../authentication/github/layout.tsx | 10 + .../authentication/github/page.tsx | 13 +- .../authentication/gitlab/form.tsx | 12 +- .../authentication/gitlab/layout.tsx | 10 + .../authentication/gitlab/page.tsx | 4 +- .../authentication/google/form.tsx | 12 +- .../authentication/google/layout.tsx | 10 + .../authentication/google/page.tsx | 4 +- .../(dashboard)}/authentication/layout.tsx | 3 +- .../(dashboard)}/authentication/page.tsx | 0 .../(dashboard)}/email/email-config-form.tsx | 2 +- .../{ => (all)/(dashboard)}/email/layout.tsx | 5 +- .../{ => (all)/(dashboard)}/email/page.tsx | 0 .../(dashboard)}/email/test-email-modal.tsx | 0 .../{ => (all)/(dashboard)}/general/form.tsx | 2 +- .../(dashboard)}/general/intercom.tsx | 0 .../(dashboard)}/general/layout.tsx | 5 +- .../{ => (all)/(dashboard)}/general/page.tsx | 0 .../(all)/(dashboard)/header.tsx} | 25 ++- .../{ => (all)/(dashboard)}/image/form.tsx | 2 +- .../{ => (all)/(dashboard)}/image/layout.tsx | 5 +- .../{ => (all)/(dashboard)}/image/page.tsx | 0 .../(all)/(dashboard)/layout.tsx} | 38 ++-- .../(all)/(dashboard)}/sidebar-dropdown.tsx | 2 +- .../(dashboard)/sidebar-help-section.tsx} | 2 +- .../(all)/(dashboard)}/sidebar-menu.tsx | 2 +- .../(all)/(dashboard)/sidebar.tsx} | 14 +- .../(dashboard)}/workspace/create/form.tsx | 0 .../(dashboard)}/workspace/create/page.tsx | 0 .../(dashboard)}/workspace/layout.tsx | 6 +- .../(dashboard)}/workspace/page.tsx | 2 +- .../(all)/(home)}/auth-banner.tsx | 0 .../lib => app/(all)/(home)}/auth-helpers.tsx | 12 +- .../(all)/(home)/layout.tsx} | 24 +-- admin/app/(all)/(home)/page.tsx | 62 ++++++ admin/app/(all)/(home)/sign-in-form.tsx | 178 ++++++++++++++++ admin/app/(all)/instance.provider.tsx | 23 +++ admin/app/(all)/layout.tsx | 33 +++ .../(all)/store.provider.tsx} | 0 admin/app/(all)/toast.tsx | 10 + .../(all)/user.provider.tsx} | 1 + admin/app/layout.tsx | 44 ++-- admin/app/page.tsx | 30 --- .../authentication/authentication-modes.tsx | 61 +++++- admin/core/components/admin-sidebar/index.ts | 5 - .../sidebar-menu-hamburger-toogle.tsx | 20 -- admin/core/components/authentication/index.ts | 7 - admin/core/components/common/index.ts | 10 - ...{instance-failure-view.tsx => failure.tsx} | 0 admin/core/components/instance/index.ts | 3 - admin/core/components/instance/loading.tsx | 21 ++ admin/core/components/instance/setup-form.tsx | 3 +- admin/core/components/login/index.ts | 1 - admin/core/components/login/sign-in-form.tsx | 194 ------------------ admin/core/components/workspace/index.ts | 1 - admin/core/hooks/store/use-instance.tsx | 2 +- admin/core/hooks/store/use-theme.tsx | 2 +- admin/core/hooks/store/use-user.tsx | 2 +- admin/core/hooks/store/use-workspace.tsx | 2 +- admin/core/lib/instance-provider.tsx | 55 ----- admin/core/store/instance.store.ts | 2 +- admin/tsconfig.json | 1 + apps/space/next-env.d.ts | 5 + packages/eslint-config/next.js | 7 +- packages/services/src/api.service.ts | 34 --- packages/services/src/user/user.service.ts | 8 +- 70 files changed, 554 insertions(+), 518 deletions(-) rename admin/app/{ => (all)/(dashboard)}/ai/form.tsx (99%) rename admin/app/{ => (all)/(dashboard)}/ai/layout.tsx (53%) rename admin/app/{ => (all)/(dashboard)}/ai/page.tsx (100%) rename admin/app/{ => (all)/(dashboard)}/authentication/github/form.tsx (95%) create mode 100644 admin/app/(all)/(dashboard)/authentication/github/layout.tsx rename admin/app/{ => (all)/(dashboard)}/authentication/github/page.tsx (90%) rename admin/app/{ => (all)/(dashboard)}/authentication/gitlab/form.tsx (95%) create mode 100644 admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx rename admin/app/{ => (all)/(dashboard)}/authentication/gitlab/page.tsx (96%) rename admin/app/{ => (all)/(dashboard)}/authentication/google/form.tsx (95%) create mode 100644 admin/app/(all)/(dashboard)/authentication/google/layout.tsx rename admin/app/{ => (all)/(dashboard)}/authentication/google/page.tsx (96%) rename admin/app/{ => (all)/(dashboard)}/authentication/layout.tsx (70%) rename admin/app/{ => (all)/(dashboard)}/authentication/page.tsx (100%) rename admin/app/{ => (all)/(dashboard)}/email/email-config-form.tsx (99%) rename admin/app/{ => (all)/(dashboard)}/email/layout.tsx (62%) rename admin/app/{ => (all)/(dashboard)}/email/page.tsx (100%) rename admin/app/{ => (all)/(dashboard)}/email/test-email-modal.tsx (100%) rename admin/app/{ => (all)/(dashboard)}/general/form.tsx (98%) rename admin/app/{ => (all)/(dashboard)}/general/intercom.tsx (100%) rename admin/app/{ => (all)/(dashboard)}/general/layout.tsx (57%) rename admin/app/{ => (all)/(dashboard)}/general/page.tsx (100%) rename admin/{core/components/auth-header.tsx => app/(all)/(dashboard)/header.tsx} (77%) rename admin/app/{ => (all)/(dashboard)}/image/form.tsx (97%) rename admin/app/{ => (all)/(dashboard)}/image/layout.tsx (62%) rename admin/app/{ => (all)/(dashboard)}/image/page.tsx (100%) rename admin/{core/layouts/admin-layout.tsx => app/(all)/(dashboard)/layout.tsx} (52%) rename admin/{core/components/admin-sidebar => app/(all)/(dashboard)}/sidebar-dropdown.tsx (99%) rename admin/{core/components/admin-sidebar/help-section.tsx => app/(all)/(dashboard)/sidebar-help-section.tsx} (98%) rename admin/{core/components/admin-sidebar => app/(all)/(dashboard)}/sidebar-menu.tsx (98%) rename admin/{core/components/admin-sidebar/root.tsx => app/(all)/(dashboard)/sidebar.tsx} (81%) rename admin/app/{ => (all)/(dashboard)}/workspace/create/form.tsx (100%) rename admin/app/{ => (all)/(dashboard)}/workspace/create/page.tsx (100%) rename admin/app/{ => (all)/(dashboard)}/workspace/layout.tsx (56%) rename admin/app/{ => (all)/(dashboard)}/workspace/page.tsx (98%) rename admin/{core/components/authentication => app/(all)/(home)}/auth-banner.tsx (100%) rename admin/{core/lib => app/(all)/(home)}/auth-helpers.tsx (93%) rename admin/{core/layouts/default-layout.tsx => app/(all)/(home)/layout.tsx} (65%) create mode 100644 admin/app/(all)/(home)/page.tsx create mode 100644 admin/app/(all)/(home)/sign-in-form.tsx create mode 100644 admin/app/(all)/instance.provider.tsx create mode 100644 admin/app/(all)/layout.tsx rename admin/{core/lib/store-provider.tsx => app/(all)/store.provider.tsx} (100%) create mode 100644 admin/app/(all)/toast.tsx rename admin/{core/lib/user-provider.tsx => app/(all)/user.provider.tsx} (99%) delete mode 100644 admin/app/page.tsx delete mode 100644 admin/core/components/admin-sidebar/index.ts delete mode 100644 admin/core/components/admin-sidebar/sidebar-menu-hamburger-toogle.tsx delete mode 100644 admin/core/components/authentication/index.ts delete mode 100644 admin/core/components/common/index.ts rename admin/core/components/instance/{instance-failure-view.tsx => failure.tsx} (100%) delete mode 100644 admin/core/components/instance/index.ts create mode 100644 admin/core/components/instance/loading.tsx delete mode 100644 admin/core/components/login/index.ts delete mode 100644 admin/core/components/login/sign-in-form.tsx delete mode 100644 admin/core/components/workspace/index.ts delete mode 100644 admin/core/lib/instance-provider.tsx create mode 100644 apps/space/next-env.d.ts diff --git a/admin/app/ai/form.tsx b/admin/app/(all)/(dashboard)/ai/form.tsx similarity index 99% rename from admin/app/ai/form.tsx rename to admin/app/(all)/(dashboard)/ai/form.tsx index 47ab9480eaf..8b7d036ad2f 100644 --- a/admin/app/ai/form.tsx +++ b/admin/app/(all)/(dashboard)/ai/form.tsx @@ -5,7 +5,7 @@ import { Lightbulb } from "lucide-react"; import { IFormattedInstanceConfiguration, TInstanceAIConfigurationKeys } from "@plane/types"; import { Button, TOAST_TYPE, setToast } from "@plane/ui"; // components -import { ControllerInput, TControllerInputFormField } from "@/components/common"; +import { ControllerInput, TControllerInputFormField } from "@/components/common/controller-input"; // hooks import { useInstance } from "@/hooks/store"; diff --git a/admin/app/ai/layout.tsx b/admin/app/(all)/(dashboard)/ai/layout.tsx similarity index 53% rename from admin/app/ai/layout.tsx rename to admin/app/(all)/(dashboard)/ai/layout.tsx index d461a626aa2..42f3796496f 100644 --- a/admin/app/ai/layout.tsx +++ b/admin/app/(all)/(dashboard)/ai/layout.tsx @@ -1,11 +1,10 @@ import { ReactNode } from "react"; import { Metadata } from "next"; -import { AdminLayout } from "@/layouts/admin-layout"; export const metadata: Metadata = { - title: "Artificial Intelligence Settings - Plane Web", + title: "Artificial Intelligence Settings - God Mode", }; export default function AILayout({ children }: { children: ReactNode }) { - return {children}; + return <>{children}; } diff --git a/admin/app/ai/page.tsx b/admin/app/(all)/(dashboard)/ai/page.tsx similarity index 100% rename from admin/app/ai/page.tsx rename to admin/app/(all)/(dashboard)/ai/page.tsx diff --git a/admin/app/authentication/github/form.tsx b/admin/app/(all)/(dashboard)/authentication/github/form.tsx similarity index 95% rename from admin/app/authentication/github/form.tsx rename to admin/app/(all)/(dashboard)/authentication/github/form.tsx index 0c6d81ae6af..6e5f2a90387 100644 --- a/admin/app/authentication/github/form.tsx +++ b/admin/app/(all)/(dashboard)/authentication/github/form.tsx @@ -10,14 +10,10 @@ import { IFormattedInstanceConfiguration, TInstanceGithubAuthenticationConfigura import { Button, TOAST_TYPE, getButtonStyling, setToast } from "@plane/ui"; import { cn } from "@plane/utils"; // components -import { - CodeBlock, - ConfirmDiscardModal, - ControllerInput, - CopyField, - TControllerInputFormField, - TCopyField, -} from "@/components/common"; +import { CodeBlock } from "@/components/common/code-block"; +import { ConfirmDiscardModal } from "@/components/common/confirm-discard-modal"; +import { ControllerInput, TControllerInputFormField } from "@/components/common/controller-input"; +import { CopyField, TCopyField } from "@/components/common/copy-field"; // hooks import { useInstance } from "@/hooks/store"; diff --git a/admin/app/(all)/(dashboard)/authentication/github/layout.tsx b/admin/app/(all)/(dashboard)/authentication/github/layout.tsx new file mode 100644 index 00000000000..373f9340aff --- /dev/null +++ b/admin/app/(all)/(dashboard)/authentication/github/layout.tsx @@ -0,0 +1,10 @@ +import { ReactNode } from "react"; +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "GitHub Authentication - God Mode", +}; + +export default function GitHubAuthenticationLayout({ children }: { children: ReactNode }) { + return <>{children}; +} diff --git a/admin/app/authentication/github/page.tsx b/admin/app/(all)/(dashboard)/authentication/github/page.tsx similarity index 90% rename from admin/app/authentication/github/page.tsx rename to admin/app/(all)/(dashboard)/authentication/github/page.tsx index 986a5ebd24e..75cb84e4afd 100644 --- a/admin/app/authentication/github/page.tsx +++ b/admin/app/(all)/(dashboard)/authentication/github/page.tsx @@ -9,8 +9,7 @@ import useSWR from "swr"; import { Loader, ToggleSwitch, setPromiseToast } from "@plane/ui"; import { resolveGeneralTheme } from "@plane/utils"; // components -import { AuthenticationMethodCard } from "@/components/authentication"; -import { PageHeader } from "@/components/common"; +import { AuthenticationMethodCard } from "@/components/authentication/authentication-method-card"; // hooks import { useInstance } from "@/hooks/store"; // icons @@ -61,9 +60,11 @@ const InstanceGithubAuthenticationPage = observer(() => { setIsSubmitting(false); }); }; + + const isGithubEnabled = enableGithubConfig === "1"; + return ( <> -
    { } config={ { - Boolean(parseInt(enableGithubConfig)) === true - ? updateConfig("IS_GITHUB_ENABLED", "0") - : updateConfig("IS_GITHUB_ENABLED", "1"); + updateConfig("IS_GITHUB_ENABLED", isGithubEnabled ? "0" : "1"); }} size="sm" disabled={isSubmitting || !formattedConfig} diff --git a/admin/app/authentication/gitlab/form.tsx b/admin/app/(all)/(dashboard)/authentication/gitlab/form.tsx similarity index 95% rename from admin/app/authentication/gitlab/form.tsx rename to admin/app/(all)/(dashboard)/authentication/gitlab/form.tsx index f64158744a4..888b2533c2c 100644 --- a/admin/app/authentication/gitlab/form.tsx +++ b/admin/app/(all)/(dashboard)/authentication/gitlab/form.tsx @@ -8,14 +8,10 @@ import { IFormattedInstanceConfiguration, TInstanceGitlabAuthenticationConfigura import { Button, TOAST_TYPE, getButtonStyling, setToast } from "@plane/ui"; import { cn } from "@plane/utils"; // components -import { - CodeBlock, - ConfirmDiscardModal, - ControllerInput, - CopyField, - TControllerInputFormField, - TCopyField, -} from "@/components/common"; +import { CodeBlock } from "@/components/common/code-block"; +import { ConfirmDiscardModal } from "@/components/common/confirm-discard-modal"; +import { ControllerInput, TControllerInputFormField } from "@/components/common/controller-input"; +import { CopyField, TCopyField } from "@/components/common/copy-field"; // hooks import { useInstance } from "@/hooks/store"; diff --git a/admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx b/admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx new file mode 100644 index 00000000000..fc89e9752fb --- /dev/null +++ b/admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx @@ -0,0 +1,10 @@ +import { ReactNode } from "react"; +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "GitLab Authentication - God Mode", +}; + +export default function GitlabAuthenticationLayout({ children }: { children: ReactNode }) { + return <>{children}; +} diff --git a/admin/app/authentication/gitlab/page.tsx b/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx similarity index 96% rename from admin/app/authentication/gitlab/page.tsx rename to admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx index 7a4d8248ef2..cdcfcd61bbc 100644 --- a/admin/app/authentication/gitlab/page.tsx +++ b/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx @@ -6,8 +6,7 @@ import Image from "next/image"; import useSWR from "swr"; import { Loader, ToggleSwitch, setPromiseToast } from "@plane/ui"; // components -import { AuthenticationMethodCard } from "@/components/authentication"; -import { PageHeader } from "@/components/common"; +import { AuthenticationMethodCard } from "@/components/authentication/authentication-method-card"; // hooks import { useInstance } from "@/hooks/store"; // icons @@ -57,7 +56,6 @@ const InstanceGitlabAuthenticationPage = observer(() => { }; return ( <> -
    {children}; +} diff --git a/admin/app/authentication/google/page.tsx b/admin/app/(all)/(dashboard)/authentication/google/page.tsx similarity index 96% rename from admin/app/authentication/google/page.tsx rename to admin/app/(all)/(dashboard)/authentication/google/page.tsx index 992c7a8a7a1..6ac4ea09b9b 100644 --- a/admin/app/authentication/google/page.tsx +++ b/admin/app/(all)/(dashboard)/authentication/google/page.tsx @@ -6,8 +6,7 @@ import Image from "next/image"; import useSWR from "swr"; import { Loader, ToggleSwitch, setPromiseToast } from "@plane/ui"; // components -import { AuthenticationMethodCard } from "@/components/authentication"; -import { PageHeader } from "@/components/common"; +import { AuthenticationMethodCard } from "@/components/authentication/authentication-method-card"; // hooks import { useInstance } from "@/hooks/store"; // icons @@ -57,7 +56,6 @@ const InstanceGoogleAuthenticationPage = observer(() => { }; return ( <> -
    {children}; + return <>{children}; } diff --git a/admin/app/authentication/page.tsx b/admin/app/(all)/(dashboard)/authentication/page.tsx similarity index 100% rename from admin/app/authentication/page.tsx rename to admin/app/(all)/(dashboard)/authentication/page.tsx diff --git a/admin/app/email/email-config-form.tsx b/admin/app/(all)/(dashboard)/email/email-config-form.tsx similarity index 99% rename from admin/app/email/email-config-form.tsx rename to admin/app/(all)/(dashboard)/email/email-config-form.tsx index 73a1af17442..de7f33f5d82 100644 --- a/admin/app/email/email-config-form.tsx +++ b/admin/app/(all)/(dashboard)/email/email-config-form.tsx @@ -7,7 +7,7 @@ import { IFormattedInstanceConfiguration, TInstanceEmailConfigurationKeys } from // ui import { Button, CustomSelect, TOAST_TYPE, setToast } from "@plane/ui"; // components -import { ControllerInput, TControllerInputFormField } from "@/components/common"; +import { ControllerInput, TControllerInputFormField } from "@/components/common/controller-input"; // hooks import { useInstance } from "@/hooks/store"; // local components diff --git a/admin/app/email/layout.tsx b/admin/app/(all)/(dashboard)/email/layout.tsx similarity index 62% rename from admin/app/email/layout.tsx rename to admin/app/(all)/(dashboard)/email/layout.tsx index 2084af1ea41..cb321295107 100644 --- a/admin/app/email/layout.tsx +++ b/admin/app/(all)/(dashboard)/email/layout.tsx @@ -1,15 +1,14 @@ import { ReactNode } from "react"; import { Metadata } from "next"; -import { AdminLayout } from "@/layouts/admin-layout"; interface EmailLayoutProps { children: ReactNode; } export const metadata: Metadata = { - title: "Email Settings - Plane Web", + title: "Email Settings - God Mode", }; export default function EmailLayout({ children }: EmailLayoutProps) { - return {children}; + return <>{children}; } diff --git a/admin/app/email/page.tsx b/admin/app/(all)/(dashboard)/email/page.tsx similarity index 100% rename from admin/app/email/page.tsx rename to admin/app/(all)/(dashboard)/email/page.tsx diff --git a/admin/app/email/test-email-modal.tsx b/admin/app/(all)/(dashboard)/email/test-email-modal.tsx similarity index 100% rename from admin/app/email/test-email-modal.tsx rename to admin/app/(all)/(dashboard)/email/test-email-modal.tsx diff --git a/admin/app/general/form.tsx b/admin/app/(all)/(dashboard)/general/form.tsx similarity index 98% rename from admin/app/general/form.tsx rename to admin/app/(all)/(dashboard)/general/form.tsx index 4fbd7053561..0700c4d0d5f 100644 --- a/admin/app/general/form.tsx +++ b/admin/app/(all)/(dashboard)/general/form.tsx @@ -8,7 +8,7 @@ import { IInstance, IInstanceAdmin } from "@plane/types"; // ui import { Button, Input, TOAST_TYPE, ToggleSwitch, setToast } from "@plane/ui"; // components -import { ControllerInput } from "@/components/common"; +import { ControllerInput } from "@/components/common/controller-input"; import { useInstance } from "@/hooks/store"; import { IntercomConfig } from "./intercom"; // hooks diff --git a/admin/app/general/intercom.tsx b/admin/app/(all)/(dashboard)/general/intercom.tsx similarity index 100% rename from admin/app/general/intercom.tsx rename to admin/app/(all)/(dashboard)/general/intercom.tsx diff --git a/admin/app/general/layout.tsx b/admin/app/(all)/(dashboard)/general/layout.tsx similarity index 57% rename from admin/app/general/layout.tsx rename to admin/app/(all)/(dashboard)/general/layout.tsx index 374257daade..af300051052 100644 --- a/admin/app/general/layout.tsx +++ b/admin/app/(all)/(dashboard)/general/layout.tsx @@ -1,11 +1,10 @@ import { ReactNode } from "react"; import { Metadata } from "next"; -import { AdminLayout } from "@/layouts/admin-layout"; export const metadata: Metadata = { - title: "General Settings - Plane Web", + title: "General Settings - God Mode", }; export default function GeneralLayout({ children }: { children: ReactNode }) { - return {children}; + return <>{children}; } diff --git a/admin/app/general/page.tsx b/admin/app/(all)/(dashboard)/general/page.tsx similarity index 100% rename from admin/app/general/page.tsx rename to admin/app/(all)/(dashboard)/general/page.tsx diff --git a/admin/core/components/auth-header.tsx b/admin/app/(all)/(dashboard)/header.tsx similarity index 77% rename from admin/core/components/auth-header.tsx rename to admin/app/(all)/(dashboard)/header.tsx index b97dd7c9eae..92bf1021034 100644 --- a/admin/core/components/auth-header.tsx +++ b/admin/app/(all)/(dashboard)/header.tsx @@ -3,16 +3,27 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { usePathname } from "next/navigation"; -// mobx -// ui -import { Settings } from "lucide-react"; +import { Menu, Settings } from "lucide-react"; // icons import { Breadcrumbs } from "@plane/ui"; // components -import { SidebarHamburgerToggle } from "@/components/admin-sidebar"; -import { BreadcrumbLink } from "@/components/common"; +import { BreadcrumbLink } from "@/components/common/breadcrumb-link"; +// hooks +import { useTheme } from "@/hooks/store"; -export const InstanceHeader: FC = observer(() => { +export const HamburgerToggle: FC = observer(() => { + const { isSidebarCollapsed, toggleSidebar } = useTheme(); + return ( +
    toggleSidebar(!isSidebarCollapsed)} + > + +
    + ); +}); + +export const AdminHeader: FC = observer(() => { const pathName = usePathname(); const getHeaderTitle = (pathName: string) => { @@ -63,7 +74,7 @@ export const InstanceHeader: FC = observer(() => { return (
    - + {breadcrumbItems.length >= 0 && (
    diff --git a/admin/app/image/form.tsx b/admin/app/(all)/(dashboard)/image/form.tsx similarity index 97% rename from admin/app/image/form.tsx rename to admin/app/(all)/(dashboard)/image/form.tsx index 61d2875edaa..be77983ec91 100644 --- a/admin/app/image/form.tsx +++ b/admin/app/(all)/(dashboard)/image/form.tsx @@ -4,7 +4,7 @@ import { useForm } from "react-hook-form"; import { IFormattedInstanceConfiguration, TInstanceImageConfigurationKeys } from "@plane/types"; import { Button, TOAST_TYPE, setToast } from "@plane/ui"; // components -import { ControllerInput } from "@/components/common"; +import { ControllerInput } from "@/components/common/controller-input"; // hooks import { useInstance } from "@/hooks/store"; diff --git a/admin/app/image/layout.tsx b/admin/app/(all)/(dashboard)/image/layout.tsx similarity index 62% rename from admin/app/image/layout.tsx rename to admin/app/(all)/(dashboard)/image/layout.tsx index 32233e07837..7ec0ff54b7c 100644 --- a/admin/app/image/layout.tsx +++ b/admin/app/(all)/(dashboard)/image/layout.tsx @@ -1,15 +1,14 @@ import { ReactNode } from "react"; import { Metadata } from "next"; -import { AdminLayout } from "@/layouts/admin-layout"; interface ImageLayoutProps { children: ReactNode; } export const metadata: Metadata = { - title: "Images Settings - Plane Web", + title: "Images Settings - God Mode", }; export default function ImageLayout({ children }: ImageLayoutProps) { - return {children}; + return <>{children}; } diff --git a/admin/app/image/page.tsx b/admin/app/(all)/(dashboard)/image/page.tsx similarity index 100% rename from admin/app/image/page.tsx rename to admin/app/(all)/(dashboard)/image/page.tsx diff --git a/admin/core/layouts/admin-layout.tsx b/admin/app/(all)/(dashboard)/layout.tsx similarity index 52% rename from admin/core/layouts/admin-layout.tsx rename to admin/app/(all)/(dashboard)/layout.tsx index 88f71aa3c4a..17962378375 100644 --- a/admin/core/layouts/admin-layout.tsx +++ b/admin/app/(all)/(dashboard)/layout.tsx @@ -1,20 +1,22 @@ "use client"; + import { FC, ReactNode, useEffect } from "react"; import { observer } from "mobx-react"; import { useRouter } from "next/navigation"; // components -import { InstanceSidebar } from "@/components/admin-sidebar"; -import { InstanceHeader } from "@/components/auth-header"; -import { LogoSpinner } from "@/components/common"; +import { LogoSpinner } from "@/components/common/logo-spinner"; import { NewUserPopup } from "@/components/new-user-popup"; // hooks import { useUser } from "@/hooks/store"; +// local components +import { AdminHeader } from "./header"; +import { AdminSidebar } from "./sidebar"; type TAdminLayout = { children: ReactNode; }; -export const AdminLayout: FC = observer((props) => { +const AdminLayout: FC = (props) => { const { children } = props; // router const router = useRouter(); @@ -35,14 +37,20 @@ export const AdminLayout: FC = observer((props) => { ); } - return ( -
    - -
    - -
    {children}
    -
    - -
    - ); -}); + if (isUserLoggedIn) { + return ( +
    + +
    + +
    {children}
    +
    + +
    + ); + } + + return <>; +}; + +export default observer(AdminLayout); diff --git a/admin/core/components/admin-sidebar/sidebar-dropdown.tsx b/admin/app/(all)/(dashboard)/sidebar-dropdown.tsx similarity index 99% rename from admin/core/components/admin-sidebar/sidebar-dropdown.tsx rename to admin/app/(all)/(dashboard)/sidebar-dropdown.tsx index 0cde7f5519d..cdce94f0117 100644 --- a/admin/core/components/admin-sidebar/sidebar-dropdown.tsx +++ b/admin/app/(all)/(dashboard)/sidebar-dropdown.tsx @@ -16,7 +16,7 @@ import { useTheme, useUser } from "@/hooks/store"; // service initialization const authService = new AuthService(); -export const SidebarDropdown = observer(() => { +export const AdminSidebarDropdown = observer(() => { // store hooks const { isSidebarCollapsed } = useTheme(); const { currentUser, signOut } = useUser(); diff --git a/admin/core/components/admin-sidebar/help-section.tsx b/admin/app/(all)/(dashboard)/sidebar-help-section.tsx similarity index 98% rename from admin/core/components/admin-sidebar/help-section.tsx rename to admin/app/(all)/(dashboard)/sidebar-help-section.tsx index d776477497b..cedc735a91e 100644 --- a/admin/core/components/admin-sidebar/help-section.tsx +++ b/admin/app/(all)/(dashboard)/sidebar-help-section.tsx @@ -33,7 +33,7 @@ const helpOptions = [ }, ]; -export const HelpSection: FC = observer(() => { +export const AdminSidebarHelpSection: FC = observer(() => { // states const [isNeedHelpOpen, setIsNeedHelpOpen] = useState(false); // store diff --git a/admin/core/components/admin-sidebar/sidebar-menu.tsx b/admin/app/(all)/(dashboard)/sidebar-menu.tsx similarity index 98% rename from admin/core/components/admin-sidebar/sidebar-menu.tsx rename to admin/app/(all)/(dashboard)/sidebar-menu.tsx index 618551ae65c..e536a51454f 100644 --- a/admin/core/components/admin-sidebar/sidebar-menu.tsx +++ b/admin/app/(all)/(dashboard)/sidebar-menu.tsx @@ -49,7 +49,7 @@ const INSTANCE_ADMIN_LINKS = [ }, ]; -export const SidebarMenu = observer(() => { +export const AdminSidebarMenu = observer(() => { // store hooks const { isSidebarCollapsed, toggleSidebar } = useTheme(); // router diff --git a/admin/core/components/admin-sidebar/root.tsx b/admin/app/(all)/(dashboard)/sidebar.tsx similarity index 81% rename from admin/core/components/admin-sidebar/root.tsx rename to admin/app/(all)/(dashboard)/sidebar.tsx index 05dde0d8ab1..09dab86eef2 100644 --- a/admin/core/components/admin-sidebar/root.tsx +++ b/admin/app/(all)/(dashboard)/sidebar.tsx @@ -4,12 +4,14 @@ import { FC, useEffect, useRef } from "react"; import { observer } from "mobx-react"; // plane helpers import { useOutsideClickDetector } from "@plane/hooks"; -// components -import { HelpSection, SidebarMenu, SidebarDropdown } from "@/components/admin-sidebar"; // hooks import { useTheme } from "@/hooks/store"; +// components +import { AdminSidebarDropdown } from "./sidebar-dropdown"; +import { AdminSidebarHelpSection } from "./sidebar-help-section"; +import { AdminSidebarMenu } from "./sidebar-menu"; -export const InstanceSidebar: FC = observer(() => { +export const AdminSidebar: FC = observer(() => { // store const { isSidebarCollapsed, toggleSidebar } = useTheme(); @@ -47,9 +49,9 @@ export const InstanceSidebar: FC = observer(() => { `} >
    - - - + + +
    ); diff --git a/admin/app/workspace/create/form.tsx b/admin/app/(all)/(dashboard)/workspace/create/form.tsx similarity index 100% rename from admin/app/workspace/create/form.tsx rename to admin/app/(all)/(dashboard)/workspace/create/form.tsx diff --git a/admin/app/workspace/create/page.tsx b/admin/app/(all)/(dashboard)/workspace/create/page.tsx similarity index 100% rename from admin/app/workspace/create/page.tsx rename to admin/app/(all)/(dashboard)/workspace/create/page.tsx diff --git a/admin/app/workspace/layout.tsx b/admin/app/(all)/(dashboard)/workspace/layout.tsx similarity index 56% rename from admin/app/workspace/layout.tsx rename to admin/app/(all)/(dashboard)/workspace/layout.tsx index 9f2a63c67d5..78b0f3c4036 100644 --- a/admin/app/workspace/layout.tsx +++ b/admin/app/(all)/(dashboard)/workspace/layout.tsx @@ -1,12 +1,10 @@ import { ReactNode } from "react"; import { Metadata } from "next"; -// layouts -import { AdminLayout } from "@/layouts/admin-layout"; export const metadata: Metadata = { - title: "Workspace Management - Plane Web", + title: "Workspace Management - God Mode", }; export default function WorkspaceManagementLayout({ children }: { children: ReactNode }) { - return {children}; + return <>{children}; } diff --git a/admin/app/workspace/page.tsx b/admin/app/(all)/(dashboard)/workspace/page.tsx similarity index 98% rename from admin/app/workspace/page.tsx rename to admin/app/(all)/(dashboard)/workspace/page.tsx index 3ca34b69e39..b8f79db04a6 100644 --- a/admin/app/workspace/page.tsx +++ b/admin/app/(all)/(dashboard)/workspace/page.tsx @@ -10,7 +10,7 @@ import { TInstanceConfigurationKeys } from "@plane/types"; import { Button, getButtonStyling, Loader, setPromiseToast, ToggleSwitch } from "@plane/ui"; import { cn } from "@plane/utils"; // components -import { WorkspaceListItem } from "@/components/workspace"; +import { WorkspaceListItem } from "@/components/workspace/list-item"; // hooks import { useInstance, useWorkspace } from "@/hooks/store"; diff --git a/admin/core/components/authentication/auth-banner.tsx b/admin/app/(all)/(home)/auth-banner.tsx similarity index 100% rename from admin/core/components/authentication/auth-banner.tsx rename to admin/app/(all)/(home)/auth-banner.tsx diff --git a/admin/core/lib/auth-helpers.tsx b/admin/app/(all)/(home)/auth-helpers.tsx similarity index 93% rename from admin/core/lib/auth-helpers.tsx rename to admin/app/(all)/(home)/auth-helpers.tsx index f9882b5e512..7613548b969 100644 --- a/admin/core/lib/auth-helpers.tsx +++ b/admin/app/(all)/(home)/auth-helpers.tsx @@ -7,13 +7,11 @@ import { SUPPORT_EMAIL, EAdminAuthErrorCodes, TAdminAuthErrorInfo } from "@plane import { TGetBaseAuthenticationModeProps, TInstanceAuthenticationModes } from "@plane/types"; import { resolveGeneralTheme } from "@plane/utils"; // components -import { - EmailCodesConfiguration, - GithubConfiguration, - GitlabConfiguration, - GoogleConfiguration, - PasswordLoginConfiguration, -} from "@/components/authentication"; +import { EmailCodesConfiguration } from "@/components/authentication/email-config-switch"; +import { GithubConfiguration } from "@/components/authentication/github-config"; +import { GitlabConfiguration } from "@/components/authentication/gitlab-config"; +import { GoogleConfiguration } from "@/components/authentication/google-config"; +import { PasswordLoginConfiguration } from "@/components/authentication/password-config-switch"; // images import githubLightModeImage from "@/public/logos/github-black.png"; import githubDarkModeImage from "@/public/logos/github-white.png"; diff --git a/admin/core/layouts/default-layout.tsx b/admin/app/(all)/(home)/layout.tsx similarity index 65% rename from admin/core/layouts/default-layout.tsx rename to admin/app/(all)/(home)/layout.tsx index 1be40ea1296..19cab04cb01 100644 --- a/admin/core/layouts/default-layout.tsx +++ b/admin/app/(all)/(home)/layout.tsx @@ -1,26 +1,18 @@ "use client"; -import { FC, ReactNode } from "react"; import Image from "next/image"; import Link from "next/link"; import { useTheme } from "next-themes"; -// logo/ images +// logo assets import PlaneBackgroundPatternDark from "public/auth/background-pattern-dark.svg"; import PlaneBackgroundPattern from "public/auth/background-pattern.svg"; import BlackHorizontalLogo from "public/plane-logos/black-horizontal-with-blue-logo.png"; import WhiteHorizontalLogo from "public/plane-logos/white-horizontal-with-blue-logo.png"; -type TDefaultLayout = { - children: ReactNode; - withoutBackground?: boolean; -}; - -export const DefaultLayout: FC = (props) => { - const { children, withoutBackground = false } = props; - // hooks +export default function RootLayout({ children }: { children: React.ReactNode }) { const { resolvedTheme } = useTheme(); - const patternBackground = resolvedTheme === "dark" ? PlaneBackgroundPatternDark : PlaneBackgroundPattern; + const patternBackground = resolvedTheme === "light" ? PlaneBackgroundPattern : PlaneBackgroundPatternDark; const logo = resolvedTheme === "light" ? BlackHorizontalLogo : WhiteHorizontalLogo; return ( @@ -33,13 +25,11 @@ export const DefaultLayout: FC = (props) => {
    - {!withoutBackground && ( -
    - Plane background pattern -
    - )} +
    + Plane background pattern +
    {children}
    ); -}; +} diff --git a/admin/app/(all)/(home)/page.tsx b/admin/app/(all)/(home)/page.tsx new file mode 100644 index 00000000000..80ea40ee61e --- /dev/null +++ b/admin/app/(all)/(home)/page.tsx @@ -0,0 +1,62 @@ +"use client"; + +import { observer } from "mobx-react"; +// components +import { InstanceFailureView } from "@/components/instance/failure"; +import { InstanceLoading } from "@/components/instance/loading"; +import { InstanceSetupForm } from "@/components/instance/setup-form"; +// hooks +import { useInstance } from "@/hooks/store"; +// components +import { InstanceSignInForm } from "./sign-in-form"; + +const HomePage = () => { + // store hooks + const { instance, error } = useInstance(); + + // if instance is not fetched, show loading + if (!instance && !error) { + return ( +
    + +
    + ); + } + + // if instance fetch fails, show failure view + if (error) { + return ( +
    + +
    + ); + } + + // if instance is fetched and setup is not done, show setup form + if (instance && !instance?.is_setup_done) { + return ( +
    + +
    + ); + } + + // if instance is fetched and setup is done, show sign in form + return ( +
    +
    +
    +

    + Manage your Plane instance +

    +

    + Configure instance-wide settings to secure your instance +

    +
    + +
    +
    + ); +}; + +export default observer(HomePage); diff --git a/admin/app/(all)/(home)/sign-in-form.tsx b/admin/app/(all)/(home)/sign-in-form.tsx new file mode 100644 index 00000000000..12b250a93b9 --- /dev/null +++ b/admin/app/(all)/(home)/sign-in-form.tsx @@ -0,0 +1,178 @@ +"use client"; + +import { FC, useEffect, useMemo, useState } from "react"; +import { useSearchParams } from "next/navigation"; +import { Eye, EyeOff } from "lucide-react"; +// plane internal packages +import { API_BASE_URL, EAdminAuthErrorCodes, TAdminAuthErrorInfo } from "@plane/constants"; +import { AuthService } from "@plane/services"; +import { Button, Input, Spinner } from "@plane/ui"; +// components +import { Banner } from "@/components/common/banner"; +// local components +import { AuthBanner } from "./auth-banner"; +import { authErrorHandler } from "./auth-helpers"; + +// service initialization +const authService = new AuthService(); + +// error codes +enum EErrorCodes { + INSTANCE_NOT_CONFIGURED = "INSTANCE_NOT_CONFIGURED", + REQUIRED_EMAIL_PASSWORD = "REQUIRED_EMAIL_PASSWORD", + INVALID_EMAIL = "INVALID_EMAIL", + USER_DOES_NOT_EXIST = "USER_DOES_NOT_EXIST", + AUTHENTICATION_FAILED = "AUTHENTICATION_FAILED", +} + +type TError = { + type: EErrorCodes | undefined; + message: string | undefined; +}; + +// form data +type TFormData = { + email: string; + password: string; +}; + +const defaultFromData: TFormData = { + email: "", + password: "", +}; + +export const InstanceSignInForm: FC = () => { + // search params + const searchParams = useSearchParams(); + const emailParam = searchParams.get("email") || undefined; + const errorCode = searchParams.get("error_code") || undefined; + const errorMessage = searchParams.get("error_message") || undefined; + // state + const [showPassword, setShowPassword] = useState(false); + const [csrfToken, setCsrfToken] = useState(undefined); + const [formData, setFormData] = useState(defaultFromData); + const [isSubmitting, setIsSubmitting] = useState(false); + const [errorInfo, setErrorInfo] = useState(undefined); + + const handleFormChange = (key: keyof TFormData, value: string | boolean) => + setFormData((prev) => ({ ...prev, [key]: value })); + + useEffect(() => { + if (csrfToken === undefined) + authService.requestCSRFToken().then((data) => data?.csrf_token && setCsrfToken(data.csrf_token)); + }, [csrfToken]); + + useEffect(() => { + if (emailParam) setFormData((prev) => ({ ...prev, email: emailParam })); + }, [emailParam]); + + // derived values + const errorData: TError = useMemo(() => { + if (errorCode && errorMessage) { + switch (errorCode) { + case EErrorCodes.INSTANCE_NOT_CONFIGURED: + return { type: EErrorCodes.INSTANCE_NOT_CONFIGURED, message: errorMessage }; + case EErrorCodes.REQUIRED_EMAIL_PASSWORD: + return { type: EErrorCodes.REQUIRED_EMAIL_PASSWORD, message: errorMessage }; + case EErrorCodes.INVALID_EMAIL: + return { type: EErrorCodes.INVALID_EMAIL, message: errorMessage }; + case EErrorCodes.USER_DOES_NOT_EXIST: + return { type: EErrorCodes.USER_DOES_NOT_EXIST, message: errorMessage }; + case EErrorCodes.AUTHENTICATION_FAILED: + return { type: EErrorCodes.AUTHENTICATION_FAILED, message: errorMessage }; + default: + return { type: undefined, message: undefined }; + } + } else return { type: undefined, message: undefined }; + }, [errorCode, errorMessage]); + + const isButtonDisabled = useMemo( + () => (!isSubmitting && formData.email && formData.password ? false : true), + [formData.email, formData.password, isSubmitting] + ); + + useEffect(() => { + if (errorCode) { + const errorDetail = authErrorHandler(errorCode?.toString() as EAdminAuthErrorCodes); + if (errorDetail) { + setErrorInfo(errorDetail); + } + } + }, [errorCode]); + + return ( +
    setIsSubmitting(true)} + onError={() => setIsSubmitting(false)} + > + {errorData.type && errorData?.message ? ( + + ) : ( + <>{errorInfo && setErrorInfo(value)} />} + )} + + +
    + + handleFormChange("email", e.target.value)} + autoComplete="on" + autoFocus + /> +
    + +
    + +
    + handleFormChange("password", e.target.value)} + autoComplete="on" + /> + {showPassword ? ( + + ) : ( + + )} +
    +
    +
    + +
    + + ); +}; diff --git a/admin/app/(all)/instance.provider.tsx b/admin/app/(all)/instance.provider.tsx new file mode 100644 index 00000000000..ac8fa74e82c --- /dev/null +++ b/admin/app/(all)/instance.provider.tsx @@ -0,0 +1,23 @@ +import { FC, ReactNode } from "react"; +import { observer } from "mobx-react"; +import useSWR from "swr"; +// hooks +import { useInstance } from "@/hooks/store"; + +type InstanceProviderProps = { + children: ReactNode; +}; + +export const InstanceProvider: FC = observer((props) => { + const { children } = props; + // store hooks + const { fetchInstanceInfo } = useInstance(); + // fetching instance details + useSWR("INSTANCE_DETAILS", () => fetchInstanceInfo(), { + revalidateOnFocus: false, + revalidateIfStale: false, + errorRetryCount: 0, + }); + + return <>{children}; +}); diff --git a/admin/app/(all)/layout.tsx b/admin/app/(all)/layout.tsx new file mode 100644 index 00000000000..ddfba732a91 --- /dev/null +++ b/admin/app/(all)/layout.tsx @@ -0,0 +1,33 @@ +"use client"; + +import { ThemeProvider } from "next-themes"; +import { SWRConfig } from "swr"; +// providers +import { InstanceProvider } from "./instance.provider"; +import { StoreProvider } from "./store.provider"; +import { ToastWithTheme } from "./toast"; +import { UserProvider } from "./user.provider"; + +const DEFAULT_SWR_CONFIG = { + refreshWhenHidden: false, + revalidateIfStale: false, + revalidateOnFocus: false, + revalidateOnMount: true, + refreshInterval: 600000, + errorRetryCount: 3, +}; + +export default function InstanceLayout({ children }: { children: React.ReactNode }) { + return ( + + + + + + {children} + + + + + ); +} diff --git a/admin/core/lib/store-provider.tsx b/admin/app/(all)/store.provider.tsx similarity index 100% rename from admin/core/lib/store-provider.tsx rename to admin/app/(all)/store.provider.tsx diff --git a/admin/app/(all)/toast.tsx b/admin/app/(all)/toast.tsx new file mode 100644 index 00000000000..7d7938a9b16 --- /dev/null +++ b/admin/app/(all)/toast.tsx @@ -0,0 +1,10 @@ +"use client"; + +import { useTheme } from "next-themes"; +import { Toast } from "@plane/ui"; +import { resolveGeneralTheme } from "@plane/utils"; + +export const ToastWithTheme = () => { + const { resolvedTheme } = useTheme(); + return ; +}; diff --git a/admin/core/lib/user-provider.tsx b/admin/app/(all)/user.provider.tsx similarity index 99% rename from admin/core/lib/user-provider.tsx rename to admin/app/(all)/user.provider.tsx index 17d70262797..3a50823dcb7 100644 --- a/admin/core/lib/user-provider.tsx +++ b/admin/app/(all)/user.provider.tsx @@ -19,6 +19,7 @@ export const UserProvider: FC = observer(({ children }) => { useSWR("CURRENT_USER", () => fetchCurrentUser(), { shouldRetryOnError: false, }); + useSWR("INSTANCE_ADMINS", () => fetchInstanceAdmins()); useEffect(() => { diff --git a/admin/app/layout.tsx b/admin/app/layout.tsx index b10e9186c3c..e735723695e 100644 --- a/admin/app/layout.tsx +++ b/admin/app/layout.tsx @@ -1,22 +1,25 @@ -"use client"; - import { ReactNode } from "react"; -import { ThemeProvider, useTheme } from "next-themes"; -import { SWRConfig } from "swr"; +import { Metadata } from "next"; // plane imports -import { ADMIN_BASE_PATH, DEFAULT_SWR_CONFIG } from "@plane/constants"; -import { Toast } from "@plane/ui"; -import { resolveGeneralTheme } from "@plane/utils"; -// lib -import { InstanceProvider } from "@/lib/instance-provider"; -import { StoreProvider } from "@/lib/store-provider"; -import { UserProvider } from "@/lib/user-provider"; +import { ADMIN_BASE_PATH } from "@plane/constants"; // styles import "@/styles/globals.css"; -const ToastWithTheme = () => { - const { resolvedTheme } = useTheme(); - return ; +export const metadata: Metadata = { + title: "Plane | Simple, extensible, open-source project management tool.", + description: + "Open-source project management tool to manage work items, sprints, and product roadmaps with peace of mind.", + openGraph: { + title: "Plane | Simple, extensible, open-source project management tool.", + description: + "Open-source project management tool to manage work items, sprints, and product roadmaps with peace of mind.", + url: "https://plane.so/", + }, + keywords: + "software development, customer feedback, software, accelerate, code management, release management, project management, work items tracking, agile, scrum, kanban, collaboration", + twitter: { + site: "@planepowers", + }, }; export default function RootLayout({ children }: { children: ReactNode }) { @@ -30,18 +33,7 @@ export default function RootLayout({ children }: { children: ReactNode }) { - - - - - - - {children} - - - - - + {children} ); } diff --git a/admin/app/page.tsx b/admin/app/page.tsx deleted file mode 100644 index 1a274025a0a..00000000000 --- a/admin/app/page.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Metadata } from "next"; -// components -import { InstanceSignInForm } from "@/components/login"; -// layouts -import { DefaultLayout } from "@/layouts/default-layout"; - -export const metadata: Metadata = { - title: "Plane | Simple, extensible, open-source project management tool.", - description: - "Open-source project management tool to manage work items, sprints, and product roadmaps with peace of mind.", - openGraph: { - title: "Plane | Simple, extensible, open-source project management tool.", - description: - "Open-source project management tool to manage work items, sprints, and product roadmaps with peace of mind.", - url: "https://plane.so/", - }, - keywords: - "software development, customer feedback, software, accelerate, code management, release management, project management, work items tracking, agile, scrum, kanban, collaboration", - twitter: { - site: "@planepowers", - }, -}; - -export default async function LoginPage() { - return ( - - - - ); -} diff --git a/admin/ce/components/authentication/authentication-modes.tsx b/admin/ce/components/authentication/authentication-modes.tsx index 3c7ec111a33..c9001670292 100644 --- a/admin/ce/components/authentication/authentication-modes.tsx +++ b/admin/ce/components/authentication/authentication-modes.tsx @@ -1,19 +1,28 @@ import { observer } from "mobx-react"; import Image from "next/image"; import { useTheme } from "next-themes"; +import { KeyRound, Mails } from "lucide-react"; // types import { TGetBaseAuthenticationModeProps, TInstanceAuthenticationMethodKeys, TInstanceAuthenticationModes, } from "@plane/types"; +import { resolveGeneralTheme } from "@plane/utils"; // components -import { AuthenticationMethodCard } from "@/components/authentication"; -// helpers -import { getBaseAuthenticationModes } from "@/lib/auth-helpers"; +import { AuthenticationMethodCard } from "@/components/authentication/authentication-method-card"; +import { EmailCodesConfiguration } from "@/components/authentication/email-config-switch"; +import { GithubConfiguration } from "@/components/authentication/github-config"; +import { GitlabConfiguration } from "@/components/authentication/gitlab-config"; +import { GoogleConfiguration } from "@/components/authentication/google-config"; +import { PasswordLoginConfiguration } from "@/components/authentication/password-config-switch"; // plane admin components import { UpgradeButton } from "@/plane-admin/components/common"; -// images +// assets +import githubLightModeImage from "@/public/logos/github-black.png"; +import githubDarkModeImage from "@/public/logos/github-white.png"; +import GitlabLogo from "@/public/logos/gitlab-logo.svg"; +import GoogleLogo from "@/public/logos/google-logo.svg"; import OIDCLogo from "@/public/logos/oidc-logo.svg"; import SAMLLogo from "@/public/logos/saml-logo.svg"; @@ -28,7 +37,49 @@ export const getAuthenticationModes: (props: TGetBaseAuthenticationModeProps) => updateConfig, resolvedTheme, }) => [ - ...getBaseAuthenticationModes({ disabled, updateConfig, resolvedTheme }), + { + key: "unique-codes", + name: "Unique codes", + description: + "Log in or sign up for Plane using codes sent via email. You need to have set up SMTP to use this method.", + icon: , + config: , + }, + { + key: "passwords-login", + name: "Passwords", + description: "Allow members to create accounts with passwords and use it with their email addresses to sign in.", + icon: , + config: , + }, + { + key: "google", + name: "Google", + description: "Allow members to log in or sign up for Plane with their Google accounts.", + icon: Google Logo, + config: , + }, + { + key: "github", + name: "GitHub", + description: "Allow members to log in or sign up for Plane with their GitHub accounts.", + icon: ( + GitHub Logo + ), + config: , + }, + { + key: "gitlab", + name: "GitLab", + description: "Allow members to log in or sign up to plane with their GitLab accounts.", + icon: GitLab Logo, + config: , + }, { key: "oidc", name: "OIDC", diff --git a/admin/core/components/admin-sidebar/index.ts b/admin/core/components/admin-sidebar/index.ts deleted file mode 100644 index e800fe3c5c0..00000000000 --- a/admin/core/components/admin-sidebar/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./root"; -export * from "./help-section"; -export * from "./sidebar-menu"; -export * from "./sidebar-dropdown"; -export * from "./sidebar-menu-hamburger-toogle"; diff --git a/admin/core/components/admin-sidebar/sidebar-menu-hamburger-toogle.tsx b/admin/core/components/admin-sidebar/sidebar-menu-hamburger-toogle.tsx deleted file mode 100644 index 337d9baaf34..00000000000 --- a/admin/core/components/admin-sidebar/sidebar-menu-hamburger-toogle.tsx +++ /dev/null @@ -1,20 +0,0 @@ -"use client"; - -import { FC } from "react"; -import { observer } from "mobx-react"; -// hooks -import { Menu } from "lucide-react"; -import { useTheme } from "@/hooks/store"; -// icons - -export const SidebarHamburgerToggle: FC = observer(() => { - const { isSidebarCollapsed, toggleSidebar } = useTheme(); - return ( -
    toggleSidebar(!isSidebarCollapsed)} - > - -
    - ); -}); diff --git a/admin/core/components/authentication/index.ts b/admin/core/components/authentication/index.ts deleted file mode 100644 index d189a727ba6..00000000000 --- a/admin/core/components/authentication/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from "./auth-banner"; -export * from "./email-config-switch"; -export * from "./password-config-switch"; -export * from "./authentication-method-card"; -export * from "./gitlab-config"; -export * from "./github-config"; -export * from "./google-config"; diff --git a/admin/core/components/common/index.ts b/admin/core/components/common/index.ts deleted file mode 100644 index 4d664b0a4aa..00000000000 --- a/admin/core/components/common/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -export * from "./breadcrumb-link"; -export * from "./confirm-discard-modal"; -export * from "./controller-input"; -export * from "./copy-field"; -export * from "./password-strength-meter"; -export * from "./banner"; -export * from "./empty-state"; -export * from "./logo-spinner"; -export * from "./page-header"; -export * from "./code-block"; diff --git a/admin/core/components/instance/instance-failure-view.tsx b/admin/core/components/instance/failure.tsx similarity index 100% rename from admin/core/components/instance/instance-failure-view.tsx rename to admin/core/components/instance/failure.tsx diff --git a/admin/core/components/instance/index.ts b/admin/core/components/instance/index.ts deleted file mode 100644 index 56d1933f419..00000000000 --- a/admin/core/components/instance/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./instance-not-ready"; -export * from "./instance-failure-view"; -export * from "./setup-form"; diff --git a/admin/core/components/instance/loading.tsx b/admin/core/components/instance/loading.tsx new file mode 100644 index 00000000000..a21319d9ee2 --- /dev/null +++ b/admin/core/components/instance/loading.tsx @@ -0,0 +1,21 @@ +import Image from "next/image"; +import { useTheme } from "next-themes"; +// assets +import LogoSpinnerDark from "@/public/images/logo-spinner-dark.gif"; +import LogoSpinnerLight from "@/public/images/logo-spinner-light.gif"; + +export const InstanceLoading = () => { + const { resolvedTheme } = useTheme(); + const logoSrc = resolvedTheme === "dark" ? LogoSpinnerDark : LogoSpinnerLight; + + return ( +
    +
    +
    + logo +

    Fetching instance details...

    +
    +
    +
    + ); +}; diff --git a/admin/core/components/instance/setup-form.tsx b/admin/core/components/instance/setup-form.tsx index fcc5c6c83df..4e771e91be8 100644 --- a/admin/core/components/instance/setup-form.tsx +++ b/admin/core/components/instance/setup-form.tsx @@ -10,7 +10,8 @@ import { AuthService } from "@plane/services"; import { Button, Checkbox, Input, Spinner } from "@plane/ui"; import { getPasswordStrength } from "@plane/utils"; // components -import { Banner, PasswordStrengthMeter } from "@/components/common"; +import { Banner } from "@/components/common/banner"; +import { PasswordStrengthMeter } from "@/components/common/password-strength-meter"; // service initialization const authService = new AuthService(); diff --git a/admin/core/components/login/index.ts b/admin/core/components/login/index.ts deleted file mode 100644 index bdeb387f3fb..00000000000 --- a/admin/core/components/login/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./sign-in-form"; diff --git a/admin/core/components/login/sign-in-form.tsx b/admin/core/components/login/sign-in-form.tsx deleted file mode 100644 index 553ffe6c56f..00000000000 --- a/admin/core/components/login/sign-in-form.tsx +++ /dev/null @@ -1,194 +0,0 @@ -"use client"; - -import { FC, useEffect, useMemo, useState } from "react"; -import { useSearchParams } from "next/navigation"; -import { Eye, EyeOff } from "lucide-react"; -// plane internal packages -import { API_BASE_URL, EAdminAuthErrorCodes, TAdminAuthErrorInfo } from "@plane/constants"; -import { AuthService } from "@plane/services"; -import { Button, Input, Spinner } from "@plane/ui"; -// components -import { Banner } from "@/components/common"; -// helpers -import { authErrorHandler } from "@/lib/auth-helpers"; -// local components -import { AuthBanner } from "../authentication"; - -// service initialization -const authService = new AuthService(); - -// error codes -enum EErrorCodes { - INSTANCE_NOT_CONFIGURED = "INSTANCE_NOT_CONFIGURED", - REQUIRED_EMAIL_PASSWORD = "REQUIRED_EMAIL_PASSWORD", - INVALID_EMAIL = "INVALID_EMAIL", - USER_DOES_NOT_EXIST = "USER_DOES_NOT_EXIST", - AUTHENTICATION_FAILED = "AUTHENTICATION_FAILED", -} - -type TError = { - type: EErrorCodes | undefined; - message: string | undefined; -}; - -// form data -type TFormData = { - email: string; - password: string; -}; - -const defaultFromData: TFormData = { - email: "", - password: "", -}; - -export const InstanceSignInForm: FC = (props) => { - const {} = props; - // search params - const searchParams = useSearchParams(); - const emailParam = searchParams.get("email") || undefined; - const errorCode = searchParams.get("error_code") || undefined; - const errorMessage = searchParams.get("error_message") || undefined; - // state - const [showPassword, setShowPassword] = useState(false); - const [csrfToken, setCsrfToken] = useState(undefined); - const [formData, setFormData] = useState(defaultFromData); - const [isSubmitting, setIsSubmitting] = useState(false); - const [errorInfo, setErrorInfo] = useState(undefined); - - const handleFormChange = (key: keyof TFormData, value: string | boolean) => - setFormData((prev) => ({ ...prev, [key]: value })); - - useEffect(() => { - if (csrfToken === undefined) - authService.requestCSRFToken().then((data) => data?.csrf_token && setCsrfToken(data.csrf_token)); - }, [csrfToken]); - - useEffect(() => { - if (emailParam) setFormData((prev) => ({ ...prev, email: emailParam })); - }, [emailParam]); - - // derived values - const errorData: TError = useMemo(() => { - if (errorCode && errorMessage) { - switch (errorCode) { - case EErrorCodes.INSTANCE_NOT_CONFIGURED: - return { type: EErrorCodes.INVALID_EMAIL, message: errorMessage }; - case EErrorCodes.REQUIRED_EMAIL_PASSWORD: - return { type: EErrorCodes.REQUIRED_EMAIL_PASSWORD, message: errorMessage }; - case EErrorCodes.INVALID_EMAIL: - return { type: EErrorCodes.INVALID_EMAIL, message: errorMessage }; - case EErrorCodes.USER_DOES_NOT_EXIST: - return { type: EErrorCodes.USER_DOES_NOT_EXIST, message: errorMessage }; - case EErrorCodes.AUTHENTICATION_FAILED: - return { type: EErrorCodes.AUTHENTICATION_FAILED, message: errorMessage }; - default: - return { type: undefined, message: undefined }; - } - } else return { type: undefined, message: undefined }; - }, [errorCode, errorMessage]); - - const isButtonDisabled = useMemo( - () => (!isSubmitting && formData.email && formData.password ? false : true), - [formData.email, formData.password, isSubmitting] - ); - - useEffect(() => { - if (errorCode) { - const errorDetail = authErrorHandler(errorCode?.toString() as EAdminAuthErrorCodes); - if (errorDetail) { - setErrorInfo(errorDetail); - } - } - }, [errorCode]); - - return ( -
    -
    -
    -

    - Manage your Plane instance -

    -

    - Configure instance-wide settings to secure your instance -

    -
    - - {errorData.type && errorData?.message ? ( - - ) : ( - <>{errorInfo && setErrorInfo(value)} />} - )} - -
    setIsSubmitting(true)} - onError={() => setIsSubmitting(false)} - > - - -
    - - handleFormChange("email", e.target.value)} - autoComplete="on" - autoFocus - /> -
    - -
    - -
    - handleFormChange("password", e.target.value)} - autoComplete="on" - /> - {showPassword ? ( - - ) : ( - - )} -
    -
    -
    - -
    -
    -
    -
    - ); -}; diff --git a/admin/core/components/workspace/index.ts b/admin/core/components/workspace/index.ts deleted file mode 100644 index 24950c4f20f..00000000000 --- a/admin/core/components/workspace/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./list-item"; diff --git a/admin/core/hooks/store/use-instance.tsx b/admin/core/hooks/store/use-instance.tsx index cf2edc39fa4..67ac3bca889 100644 --- a/admin/core/hooks/store/use-instance.tsx +++ b/admin/core/hooks/store/use-instance.tsx @@ -1,6 +1,6 @@ import { useContext } from "react"; // store -import { StoreContext } from "@/lib/store-provider"; +import { StoreContext } from "@/app/(all)/store.provider"; import { IInstanceStore } from "@/store/instance.store"; export const useInstance = (): IInstanceStore => { diff --git a/admin/core/hooks/store/use-theme.tsx b/admin/core/hooks/store/use-theme.tsx index bad89cfeeb5..0f07149b1db 100644 --- a/admin/core/hooks/store/use-theme.tsx +++ b/admin/core/hooks/store/use-theme.tsx @@ -1,6 +1,6 @@ import { useContext } from "react"; // store -import { StoreContext } from "@/lib/store-provider"; +import { StoreContext } from "@/app/(all)/store.provider"; import { IThemeStore } from "@/store/theme.store"; export const useTheme = (): IThemeStore => { diff --git a/admin/core/hooks/store/use-user.tsx b/admin/core/hooks/store/use-user.tsx index 8230031447a..eaf02862e26 100644 --- a/admin/core/hooks/store/use-user.tsx +++ b/admin/core/hooks/store/use-user.tsx @@ -1,6 +1,6 @@ import { useContext } from "react"; // store -import { StoreContext } from "@/lib/store-provider"; +import { StoreContext } from "@/app/(all)/store.provider"; import { IUserStore } from "@/store/user.store"; export const useUser = (): IUserStore => { diff --git a/admin/core/hooks/store/use-workspace.tsx b/admin/core/hooks/store/use-workspace.tsx index e3bde92d530..2203ec948ca 100644 --- a/admin/core/hooks/store/use-workspace.tsx +++ b/admin/core/hooks/store/use-workspace.tsx @@ -1,6 +1,6 @@ import { useContext } from "react"; // store -import { StoreContext } from "@/lib/store-provider"; +import { StoreContext } from "@/app/(all)/store.provider"; import { IWorkspaceStore } from "@/store/workspace.store"; export const useWorkspace = (): IWorkspaceStore => { diff --git a/admin/core/lib/instance-provider.tsx b/admin/core/lib/instance-provider.tsx deleted file mode 100644 index d021e3b83a2..00000000000 --- a/admin/core/lib/instance-provider.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { FC, ReactNode } from "react"; -import { observer } from "mobx-react"; -import useSWR from "swr"; -// components -import { LogoSpinner } from "@/components/common"; -import { InstanceSetupForm, InstanceFailureView } from "@/components/instance"; -// hooks -import { useInstance } from "@/hooks/store"; -// layout -import { DefaultLayout } from "@/layouts/default-layout"; - -type InstanceProviderProps = { - children: ReactNode; -}; - -export const InstanceProvider: FC = observer((props) => { - const { children } = props; - // store hooks - const { instance, error, fetchInstanceInfo } = useInstance(); - // fetching instance details - useSWR("INSTANCE_DETAILS", () => fetchInstanceInfo(), { - revalidateOnFocus: false, - revalidateIfStale: false, - errorRetryCount: 0, - }); - - if (!instance && !error) - return ( -
    - -
    - ); - - if (error) { - return ( - -
    - -
    -
    - ); - } - - if (!instance?.is_setup_done) { - return ( - -
    - -
    -
    - ); - } - - return <>{children}; -}); diff --git a/admin/core/store/instance.store.ts b/admin/core/store/instance.store.ts index 33954fe73a9..1f690f7080b 100644 --- a/admin/core/store/instance.store.ts +++ b/admin/core/store/instance.store.ts @@ -100,7 +100,7 @@ export class InstanceStore implements IInstanceStore { if (this.instance === undefined && !instanceInfo?.instance?.workspaces_exist) this.store.theme.toggleNewUserPopup(); runInAction(() => { - console.log("instanceInfo: ", instanceInfo); + // console.log("instanceInfo: ", instanceInfo); this.isLoading = false; this.instance = instanceInfo.instance; this.config = instanceInfo.config; diff --git a/admin/tsconfig.json b/admin/tsconfig.json index df72d07b406..d85abf2cc9a 100644 --- a/admin/tsconfig.json +++ b/admin/tsconfig.json @@ -8,6 +8,7 @@ ], "baseUrl": ".", "paths": { + "@/app/*": ["app/*"], "@/*": ["core/*"], "@/public/*": ["public/*"], "@/plane-admin/*": ["ce/*"], diff --git a/apps/space/next-env.d.ts b/apps/space/next-env.d.ts new file mode 100644 index 00000000000..40c3d68096c --- /dev/null +++ b/apps/space/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/packages/eslint-config/next.js b/packages/eslint-config/next.js index 543cd131a42..a2da6601059 100644 --- a/packages/eslint-config/next.js +++ b/packages/eslint-config/next.js @@ -52,7 +52,7 @@ module.exports = { }, ], "import/order": [ - "error", + "warn", { groups: ["builtin", "external", "internal", "parent", "sibling"], pathGroups: [ @@ -80,6 +80,11 @@ module.exports = { pattern: "@/**", group: "internal", }, + { + pattern: "public/**", + group: "internal", + position: "after", + }, ], pathGroupsExcludedImportTypes: ["builtin", "internal", "react"], alphabetize: { diff --git a/packages/services/src/api.service.ts b/packages/services/src/api.service.ts index 619a0d4ec1f..e2b74993e27 100644 --- a/packages/services/src/api.service.ts +++ b/packages/services/src/api.service.ts @@ -1,6 +1,4 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ import axios, { AxiosInstance, AxiosRequestConfig } from "axios"; -import { IndexedDBService } from "./indexedDB.service"; /** * Abstract base class for making HTTP requests using axios @@ -20,38 +18,6 @@ export abstract class APIService { baseURL, withCredentials: true, }); - - this.setupInterceptors(); - } - - /** - * Sets up axios interceptors for handling responses - * Currently handles 401 unauthorized responses by redirecting to login - * @private - */ - private setupInterceptors() { - this.axiosInstance.interceptors.response.use( - (response) => response, - (error) => { - if (error.response && error.response.status === 401) { - const currentPath = window.location.pathname; - let prefix = "/"; - let updatedPath = currentPath; - - // Check for special path prefixes - if (currentPath.startsWith("/god-mode")) { - prefix = "/god-mode"; - updatedPath = currentPath.replace("/god-mode", ""); - } else if (currentPath.startsWith("/spaces")) { - prefix = "/spaces"; - updatedPath = currentPath.replace("/spaces", ""); - } - - window.location.replace(`${prefix}${updatedPath ? `?next_path=${updatedPath}` : ""}`); - } - return Promise.reject(error); - } - ); } /** diff --git a/packages/services/src/user/user.service.ts b/packages/services/src/user/user.service.ts index c302b1d4f13..33929766251 100644 --- a/packages/services/src/user/user.service.ts +++ b/packages/services/src/user/user.service.ts @@ -20,11 +20,10 @@ export class UserService extends APIService { /** * Retrieves the current user details - * @returns {Promise} Promise resolving to the current user details\ - * @remarks This method uses the validateStatus: null option to bypass interceptors for unauthorized errors. + * @returns {Promise} Promise resolving to the current user details */ async me(): Promise { - return this.get("/api/users/me/", { validateStatus: null }) + return this.get("/api/users/me/") .then((response) => response?.data) .catch((error) => { throw error?.response; @@ -76,10 +75,9 @@ export class UserService extends APIService { * Retrieves the current instance admin details * @returns {Promise} Promise resolving to the current instance admin details * @throws {Error} If the API request fails - * @remarks This method uses the validateStatus: null option to bypass interceptors for unauthorized errors. */ async adminDetails(): Promise { - return this.get("/api/instances/admins/me/", { validateStatus: null }) + return this.get("/api/instances/admins/me/") .then((response) => response?.data) .catch((error) => { throw error?.response?.data; From 600063992150edef0f2aece7ef23aa5a95cda9ff Mon Sep 17 00:00:00 2001 From: Mohamed Hayballa Date: Wed, 2 Jul 2025 21:10:42 +0200 Subject: [PATCH 017/130] feat(tests): Add comprehensive test suite for the Project API (#7252) * feat(tests): Add reusable workspace fixture Introduces a new `workspace` fixture in `conftest.py` to provide a consistent and reusable setup for tests that require a workspace. * feat(tests): Add tests for project creation (POST) This commit introduces a comprehensive test suite for the project creation API endpoint. The suite covers a wide range of scenarios, including: - Successful creation and verification of side-effects (default states, project members, user properties). - Validation for invalid or missing data (400 Bad Request). - Permission checks for different user roles (e.g., guests are forbidden). - Authentication requirements (401 Unauthorized). - Uniqueness constraints for project names and identifiers (409 Conflict). - Successful creation with all optional fields populated. It leverages the `workspace`, `session_client` and `create_user` fixtures for a consistent test setup. * refactor(tests): Centralize project URL helper into a base class To avoid code duplication in upcoming tests, this commit introduces a `TestProjectBase` class. The `get_project_url` helper method is moved into this shared base class, and the existing `TestProjectAPIPost` class is updated to inherit from it. This ensures the URL generation logic is defined in a single place and preparing the suite for the upcoming GET tests. * feat(tests): Add tests for project listing and retrieval (GET) This commit adds a suite for the GET method. It leverages the previously created `TestProjectBase` class for URL generation. The new test suite covers: - Listing projects: - Verifies that administrators see all projects. - Confirms guests only see projects they are members of. - Tests the separate detailed project list endpoint. - Retrieving a single project: - Checks for successful retrieval of a project by its ID. - Handles edge cases for non-existent and archived projects (404 Not Found). - Authentication: - Ensures authentication is required (401 Unauthorized). * feat(tests): Add tests for project update (PATCH) and deletion (DELETE) Key scenarios tested for PATCH: - Successful partial updates by project administrators. - Forbidden access for non-admin members (403). - Conflict errors for duplicate names or identifiers on update (409). - Validation errors for invalid data (400). Key scenarios tested for DELETE: - Successful deletion by both project admins and workspace admins. - Forbidden access for non-admin members (403). - Authentication checks for unauthenticated users (401). * Remove unnecessary print statement * refactor(tests): Update workspace fixture to use ORM Updates the `workspace` fixture to create the model instance directly via the ORM using the `Workspace` model instead of the API, as requested during code review. * Refactor: Remove some unused imports Removes imports that I added while working on the test suite for the Project API but were ultimately not used. Note that other unused imports still exist from the state of the codebase when this branch was created/forked. --- apiserver/plane/tests/conftest.py | 22 +- .../tests/contract/app/test_project_app.py | 618 ++++++++++++++++++ 2 files changed, 639 insertions(+), 1 deletion(-) create mode 100644 apiserver/plane/tests/contract/app/test_project_app.py diff --git a/apiserver/plane/tests/conftest.py b/apiserver/plane/tests/conftest.py index 8325588104b..a7d4394e295 100644 --- a/apiserver/plane/tests/conftest.py +++ b/apiserver/plane/tests/conftest.py @@ -4,7 +4,7 @@ from pytest_django.fixtures import django_db_setup from unittest.mock import patch, MagicMock -from plane.db.models import User +from plane.db.models import User, Workspace, WorkspaceMember from plane.db.models.api import APIToken @@ -118,3 +118,23 @@ def plane_server(live_server): Returns a live Django server for testing HTTP requests. """ return live_server + + +@pytest.fixture +def workspace(create_user): + """ + Create a new workspace and return the + corresponding Workspace model instance. + """ + # Create the workspace using the model + created_workspace = Workspace.objects.create( + name="Test Workspace", + owner=create_user, + slug="test-workspace", + ) + + WorkspaceMember.objects.create( + workspace=created_workspace, member=create_user, role=20 + ) + + return created_workspace diff --git a/apiserver/plane/tests/contract/app/test_project_app.py b/apiserver/plane/tests/contract/app/test_project_app.py new file mode 100644 index 00000000000..f7d41e2a290 --- /dev/null +++ b/apiserver/plane/tests/contract/app/test_project_app.py @@ -0,0 +1,618 @@ +import pytest +from rest_framework import status +import uuid +from django.utils import timezone + +from plane.db.models import ( + Project, + ProjectMember, + IssueUserProperty, + State, + WorkspaceMember, + User, +) + + +class TestProjectBase: + def get_project_url( + self, workspace_slug: str, pk: uuid.UUID = None, details: bool = False + ) -> str: + """ + Constructs the project endpoint URL for the given workspace as reverse() is + unreliable due to duplicate 'name' values in URL patterns ('api' and 'app'). + + Args: + workspace_slug (str): The slug of the workspace. + pk (uuid.UUID, optional): The primary key of a specific project. + details (bool, optional): If True, constructs the URL for the + project details endpoint. Defaults to False. + """ + # Establish the common base URL for all project-related endpoints. + base_url = f"/api/workspaces/{workspace_slug}/projects/" + + # Specific project instance URL. + if pk: + return f"{base_url}{pk}/" + + # Append 'details/' to the base URL. + if details: + return f"{base_url}details/" + + # Return the base project list URL. + return base_url + + +@pytest.mark.contract +class TestProjectAPIPost(TestProjectBase): + """Test project POST operations""" + + @pytest.mark.django_db + def test_create_project_empty_data(self, session_client, workspace): + """Test creating a project with empty data""" + + url = self.get_project_url(workspace.slug) + + # Test with empty data + response = session_client.post(url, {}, format="json") + assert response.status_code == status.HTTP_400_BAD_REQUEST + + @pytest.mark.django_db + def test_create_project_valid_data(self, session_client, workspace, create_user): + url = self.get_project_url(workspace.slug) + + project_data = { + "name": "New Project Test", + "identifier": "NPT", + } + + user = create_user + + # Make the request + response = session_client.post(url, project_data, format="json") + + # Check response status + assert response.status_code == status.HTTP_201_CREATED + + # Verify project was created + assert Project.objects.count() == 1 + project = Project.objects.get(name=project_data["name"]) + assert project.workspace == workspace + + # Check if the member is created with the correct role + assert ProjectMember.objects.count() == 1 + project_member = ProjectMember.objects.filter( + project=project, member=user + ).first() + assert project_member.role == 20 # Administrator + assert project_member.is_active is True + + # Verify IssueUserProperty was created + assert IssueUserProperty.objects.filter(project=project, user=user).exists() + + # Verify default states were created + states = State.objects.filter(project=project) + assert states.count() == 5 + expected_states = ["Backlog", "Todo", "In Progress", "Done", "Cancelled"] + state_names = list(states.values_list("name", flat=True)) + assert set(state_names) == set(expected_states) + + @pytest.mark.django_db + def test_create_project_with_project_lead( + self, session_client, workspace, create_user + ): + """Test creating project with a different project lead""" + # Create another user to be project lead + project_lead = User.objects.create_user( + email="lead@example.com", username="projectlead" + ) + + # Add project lead to workspace + WorkspaceMember.objects.create( + workspace=workspace, member=project_lead, role=15 + ) + + url = self.get_project_url(workspace.slug) + project_data = { + "name": "Project with Lead", + "identifier": "PWL", + "project_lead": project_lead.id, + } + + response = session_client.post(url, project_data, format="json") + + assert response.status_code == status.HTTP_201_CREATED + + # Verify both creator and project lead are administrators + project = Project.objects.get(name=project_data["name"]) + assert ProjectMember.objects.filter(project=project, role=20).count() == 2 + + # Verify both have IssueUserProperty + assert IssueUserProperty.objects.filter(project=project).count() == 2 + + @pytest.mark.django_db + def test_create_project_guest_forbidden(self, session_client, workspace): + """Test that guests cannot create projects""" + guest_user = User.objects.create_user( + email="guest@example.com", username="guest" + ) + WorkspaceMember.objects.create(workspace=workspace, member=guest_user, role=5) + + session_client.force_authenticate(user=guest_user) + + url = self.get_project_url(workspace.slug) + project_data = { + "name": "Guest Project", + "identifier": "GP", + } + + response = session_client.post(url, project_data, format="json") + + assert response.status_code == status.HTTP_403_FORBIDDEN + assert Project.objects.count() == 0 + + @pytest.mark.django_db + def test_create_project_unauthenticated(self, client, workspace): + """Test unauthenticated access""" + url = self.get_project_url(workspace.slug) + project_data = { + "name": "Unauth Project", + "identifier": "UP", + } + + response = client.post(url, project_data, format="json") + + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + @pytest.mark.django_db + def test_create_project_duplicate_name( + self, session_client, workspace, create_user + ): + """Test creating project with duplicate name""" + # Create first project + Project.objects.create( + name="Duplicate Name", identifier="DN1", workspace=workspace + ) + + url = self.get_project_url(workspace.slug) + project_data = { + "name": "Duplicate Name", + "identifier": "DN2", + } + + response = session_client.post(url, project_data, format="json") + + assert response.status_code == status.HTTP_409_CONFLICT + + @pytest.mark.django_db + def test_create_project_duplicate_identifier( + self, session_client, workspace, create_user + ): + """Test creating project with duplicate identifier""" + Project.objects.create( + name="First Project", identifier="DUP", workspace=workspace + ) + + url = self.get_project_url(workspace.slug) + project_data = { + "name": "Second Project", + "identifier": "DUP", + } + + response = session_client.post(url, project_data, format="json") + + assert response.status_code == status.HTTP_409_CONFLICT + + @pytest.mark.django_db + def test_create_project_missing_required_fields( + self, session_client, workspace, create_user + ): + """Test validation with missing required fields""" + url = self.get_project_url(workspace.slug) + + # Test missing name + response = session_client.post(url, {"identifier": "MN"}, format="json") + assert response.status_code == status.HTTP_400_BAD_REQUEST + + # Test missing identifier + response = session_client.post( + url, {"name": "Missing Identifier"}, format="json" + ) + assert response.status_code == status.HTTP_400_BAD_REQUEST + + @pytest.mark.django_db + def test_create_project_with_all_optional_fields( + self, session_client, workspace, create_user + ): + """Test creating project with all optional fields""" + url = self.get_project_url(workspace.slug) + project_data = { + "name": "Full Project", + "identifier": "FP", + "description": "A comprehensive test project", + "network": 2, + "cycle_view": True, + "issue_views_view": False, + "module_view": True, + "page_view": False, + "inbox_view": True, + "guest_view_all_features": True, + "logo_props": { + "in_use": "emoji", + "emoji": {"value": "🚀", "unicode": "1f680"}, + }, + } + + response = session_client.post(url, project_data, format="json") + + assert response.status_code == status.HTTP_201_CREATED + + response_data = response.json() + assert response_data["description"] == project_data["description"] + assert response_data["network"] == project_data["network"] + + +@pytest.mark.contract +class TestProjectAPIGet(TestProjectBase): + """Test project GET operations""" + + @pytest.mark.django_db + def test_list_projects_authenticated_admin( + self, session_client, workspace, create_user + ): + """Test listing projects as workspace admin""" + # Create a project + project = Project.objects.create( + name="Test Project", identifier="TP", workspace=workspace + ) + + # Add user as project member + ProjectMember.objects.create( + project=project, member=create_user, role=20, is_active=True + ) + + url = self.get_project_url(workspace.slug) + response = session_client.get(url) + + assert response.status_code == status.HTTP_200_OK + data = response.json() + assert len(data) == 1 + assert data[0]["name"] == "Test Project" + assert data[0]["identifier"] == "TP" + + @pytest.mark.django_db + def test_list_projects_authenticated_guest(self, session_client, workspace): + """Test listing projects as workspace guest""" + # Create a guest user + guest_user = User.objects.create_user( + email="guest@example.com", username="guest" + ) + WorkspaceMember.objects.create( + workspace=workspace, member=guest_user, role=5, is_active=True + ) + + # Create projects + project1 = Project.objects.create( + name="Project 1", identifier="P1", workspace=workspace + ) + + Project.objects.create(name="Project 2", identifier="P2", workspace=workspace) + + # Add guest to only one project + ProjectMember.objects.create( + project=project1, member=guest_user, role=10, is_active=True + ) + + session_client.force_authenticate(user=guest_user) + + url = self.get_project_url(workspace.slug) + response = session_client.get(url) + + assert response.status_code == status.HTTP_200_OK + data = response.json() + # Guest should only see projects they're members of + assert len(data) == 1 + assert data[0]["name"] == "Project 1" + + @pytest.mark.django_db + def test_list_projects_unauthenticated(self, client, workspace): + """Test listing projects without authentication""" + url = self.get_project_url(workspace.slug) + response = client.get(url) + + assert response.status_code == status.HTTP_401_UNAUTHORIZED + + @pytest.mark.django_db + def test_list_detail_projects(self, session_client, workspace, create_user): + """Test listing projects with detailed information""" + # Create a project + project = Project.objects.create( + name="Detailed Project", + identifier="DP", + workspace=workspace, + description="A detailed test project", + ) + + # Add user as project member + ProjectMember.objects.create( + project=project, member=create_user, role=20, is_active=True + ) + + url = self.get_project_url(workspace.slug, details=True) + response = session_client.get(url) + + assert response.status_code == status.HTTP_200_OK + data = response.json() + assert len(data) == 1 + assert data[0]["name"] == "Detailed Project" + assert data[0]["description"] == "A detailed test project" + + @pytest.mark.django_db + def test_retrieve_project_success(self, session_client, workspace, create_user): + """Test retrieving a specific project""" + # Create a project + project = Project.objects.create( + name="Retrieve Test Project", + identifier="RTP", + workspace=workspace, + description="Test project for retrieval", + ) + + # Add user as project member + ProjectMember.objects.create( + project=project, member=create_user, role=20, is_active=True + ) + + url = self.get_project_url(workspace.slug, pk=project.id) + response = session_client.get(url) + + assert response.status_code == status.HTTP_200_OK + data = response.json() + assert data["name"] == "Retrieve Test Project" + assert data["identifier"] == "RTP" + assert data["description"] == "Test project for retrieval" + + @pytest.mark.django_db + def test_retrieve_project_not_found(self, session_client, workspace, create_user): + """Test retrieving a non-existent project""" + fake_uuid = uuid.uuid4() + url = self.get_project_url(workspace.slug, pk=fake_uuid) + response = session_client.get(url) + + assert response.status_code == status.HTTP_404_NOT_FOUND + + @pytest.mark.django_db + def test_retrieve_archived_project(self, session_client, workspace, create_user): + """Test retrieving an archived project""" + # Create an archived project + project = Project.objects.create( + name="Archived Project", + identifier="AP", + workspace=workspace, + archived_at=timezone.now(), + ) + + # Add user as project member + ProjectMember.objects.create( + project=project, member=create_user, role=20, is_active=True + ) + + url = self.get_project_url(workspace.slug, pk=project.id) + response = session_client.get(url) + + assert response.status_code == status.HTTP_404_NOT_FOUND + + +@pytest.mark.contract +class TestProjectAPIPatchDelete(TestProjectBase): + """Test project PATCH, and DELETE operations""" + + @pytest.mark.django_db + def test_partial_update_project_success( + self, session_client, workspace, create_user + ): + """Test successful partial update of project""" + # Create a project + project = Project.objects.create( + name="Original Project", + identifier="OP", + workspace=workspace, + description="Original description", + ) + + # Add user as project administrator + ProjectMember.objects.create( + project=project, member=create_user, role=20, is_active=True + ) + + url = self.get_project_url(workspace.slug, pk=project.id) + update_data = { + "name": "Updated Project", + "description": "Updated description", + "cycle_view": True, + "module_view": False, + } + + response = session_client.patch(url, update_data, format="json") + + assert response.status_code == status.HTTP_200_OK + + # Verify project was updated + project.refresh_from_db() + assert project.name == "Updated Project" + assert project.description == "Updated description" + assert project.cycle_view is True + assert project.module_view is False + + @pytest.mark.django_db + def test_partial_update_project_forbidden_non_admin( + self, session_client, workspace + ): + """Test that non-admin project members cannot update project""" + # Create a project + project = Project.objects.create( + name="Protected Project", identifier="PP", workspace=workspace + ) + + # Create a member user (not admin) + member_user = User.objects.create_user( + email="member@example.com", username="member" + ) + WorkspaceMember.objects.create( + workspace=workspace, member=member_user, role=15, is_active=True + ) + ProjectMember.objects.create( + project=project, member=member_user, role=15, is_active=True + ) + + session_client.force_authenticate(user=member_user) + + url = self.get_project_url(workspace.slug, pk=project.id) + update_data = {"name": "Hacked Project"} + + response = session_client.patch(url, update_data, format="json") + + assert response.status_code == status.HTTP_403_FORBIDDEN + + @pytest.mark.django_db + def test_partial_update_duplicate_name_conflict( + self, session_client, workspace, create_user + ): + """Test updating project with duplicate name returns conflict""" + # Create two projects + Project.objects.create(name="Project One", identifier="P1", workspace=workspace) + project2 = Project.objects.create( + name="Project Two", identifier="P2", workspace=workspace + ) + + ProjectMember.objects.create( + project=project2, member=create_user, role=20, is_active=True + ) + + url = self.get_project_url(workspace.slug, pk=project2.id) + update_data = {"name": "Project One"} # Duplicate name + + response = session_client.patch(url, update_data, format="json") + + assert response.status_code == status.HTTP_409_CONFLICT + + @pytest.mark.django_db + def test_partial_update_duplicate_identifier_conflict( + self, session_client, workspace, create_user + ): + """Test updating project with duplicate identifier returns conflict""" + # Create two projects + Project.objects.create(name="Project One", identifier="P1", workspace=workspace) + project2 = Project.objects.create( + name="Project Two", identifier="P2", workspace=workspace + ) + + ProjectMember.objects.create( + project=project2, member=create_user, role=20, is_active=True + ) + + url = self.get_project_url(workspace.slug, pk=project2.id) + update_data = {"identifier": "P1"} # Duplicate identifier + + response = session_client.patch(url, update_data, format="json") + + assert response.status_code == status.HTTP_409_CONFLICT + + @pytest.mark.django_db + def test_partial_update_invalid_data(self, session_client, workspace, create_user): + """Test partial update with invalid data""" + project = Project.objects.create( + name="Valid Project", identifier="VP", workspace=workspace + ) + + ProjectMember.objects.create( + project=project, member=create_user, role=20, is_active=True + ) + + url = self.get_project_url(workspace.slug, pk=project.id) + update_data = {"name": ""} + + response = session_client.patch(url, update_data, format="json") + + assert response.status_code == status.HTTP_400_BAD_REQUEST + + @pytest.mark.django_db + def test_delete_project_success_project_admin( + self, session_client, workspace, create_user + ): + """Test successful project deletion by project admin""" + project = Project.objects.create( + name="Delete Me", identifier="DM", workspace=workspace + ) + + ProjectMember.objects.create( + project=project, member=create_user, role=20, is_active=True + ) + + url = self.get_project_url(workspace.slug, pk=project.id) + response = session_client.delete(url) + + assert response.status_code == status.HTTP_204_NO_CONTENT + assert not Project.objects.filter(id=project.id).exists() + + @pytest.mark.django_db + def test_delete_project_success_workspace_admin(self, session_client, workspace): + """Test successful project deletion by workspace admin""" + # Create workspace admin user + workspace_admin = User.objects.create_user( + email="admin@example.com", username="admin" + ) + WorkspaceMember.objects.create( + workspace=workspace, member=workspace_admin, role=20, is_active=True + ) + + project = Project.objects.create( + name="Delete Me", identifier="DM", workspace=workspace + ) + + session_client.force_authenticate(user=workspace_admin) + + url = self.get_project_url(workspace.slug, pk=project.id) + response = session_client.delete(url) + + assert response.status_code == status.HTTP_204_NO_CONTENT + assert not Project.objects.filter(id=project.id).exists() + + @pytest.mark.django_db + def test_delete_project_forbidden_non_admin(self, session_client, workspace): + """Test that non-admin users cannot delete projects""" + # Create a member user (not admin) + member_user = User.objects.create_user( + email="member@example.com", username="member" + ) + WorkspaceMember.objects.create( + workspace=workspace, member=member_user, role=15, is_active=True + ) + + project = Project.objects.create( + name="Protected Project", identifier="PP", workspace=workspace + ) + + ProjectMember.objects.create( + project=project, member=member_user, role=15, is_active=True + ) + + session_client.force_authenticate(user=member_user) + + url = self.get_project_url(workspace.slug, pk=project.id) + response = session_client.delete(url) + + assert response.status_code == status.HTTP_403_FORBIDDEN + assert Project.objects.filter(id=project.id).exists() + + @pytest.mark.django_db + def test_delete_project_unauthenticated(self, client, workspace): + """Test unauthenticated project deletion""" + project = Project.objects.create( + name="Protected Project", identifier="PP", workspace=workspace + ) + + url = self.get_project_url(workspace.slug, pk=project.id) + response = client.delete(url) + + assert response.status_code == status.HTTP_401_UNAUTHORIZED + assert Project.objects.filter(id=project.id).exists() From 944b873184ee389df02f9a1288d28032f8fd4d21 Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Thu, 3 Jul 2025 00:44:13 +0530 Subject: [PATCH 018/130] chore: move all services inside the apps folder (#7321) * chore: move all services inside the apps folder * chore: rename apiserver to server --- {admin => apps/admin}/.env.example | 0 {admin => apps/admin}/.eslintrc.js | 0 {admin => apps/admin}/.prettierignore | 0 {admin => apps/admin}/.prettierrc | 0 {admin => apps/admin}/Dockerfile.admin | 0 {admin => apps/admin}/Dockerfile.dev | 0 .../admin}/app/(all)/(dashboard)/ai/form.tsx | 0 .../admin}/app/(all)/(dashboard)/ai/layout.tsx | 0 .../admin}/app/(all)/(dashboard)/ai/page.tsx | 0 .../(dashboard)/authentication/github/form.tsx | 0 .../(dashboard)/authentication/github/layout.tsx | 0 .../(dashboard)/authentication/github/page.tsx | 0 .../(dashboard)/authentication/gitlab/form.tsx | 0 .../(dashboard)/authentication/gitlab/layout.tsx | 0 .../(dashboard)/authentication/gitlab/page.tsx | 0 .../(dashboard)/authentication/google/form.tsx | 0 .../(dashboard)/authentication/google/layout.tsx | 0 .../(dashboard)/authentication/google/page.tsx | 0 .../app/(all)/(dashboard)/authentication/layout.tsx | 0 .../app/(all)/(dashboard)/authentication/page.tsx | 0 .../(all)/(dashboard)/email/email-config-form.tsx | 0 .../admin}/app/(all)/(dashboard)/email/layout.tsx | 0 .../admin}/app/(all)/(dashboard)/email/page.tsx | 0 .../(all)/(dashboard)/email/test-email-modal.tsx | 0 .../admin}/app/(all)/(dashboard)/general/form.tsx | 0 .../app/(all)/(dashboard)/general/intercom.tsx | 0 .../admin}/app/(all)/(dashboard)/general/layout.tsx | 0 .../admin}/app/(all)/(dashboard)/general/page.tsx | 0 .../admin}/app/(all)/(dashboard)/header.tsx | 0 .../admin}/app/(all)/(dashboard)/image/form.tsx | 0 .../admin}/app/(all)/(dashboard)/image/layout.tsx | 0 .../admin}/app/(all)/(dashboard)/image/page.tsx | 0 .../admin}/app/(all)/(dashboard)/layout.tsx | 0 .../app/(all)/(dashboard)/sidebar-dropdown.tsx | 0 .../app/(all)/(dashboard)/sidebar-help-section.tsx | 0 .../admin}/app/(all)/(dashboard)/sidebar-menu.tsx | 0 .../admin}/app/(all)/(dashboard)/sidebar.tsx | 0 .../app/(all)/(dashboard)/workspace/create/form.tsx | 0 .../app/(all)/(dashboard)/workspace/create/page.tsx | 0 .../app/(all)/(dashboard)/workspace/layout.tsx | 0 .../admin}/app/(all)/(dashboard)/workspace/page.tsx | 0 .../admin}/app/(all)/(home)/auth-banner.tsx | 0 .../admin}/app/(all)/(home)/auth-helpers.tsx | 0 {admin => apps/admin}/app/(all)/(home)/layout.tsx | 0 {admin => apps/admin}/app/(all)/(home)/page.tsx | 0 .../admin}/app/(all)/(home)/sign-in-form.tsx | 0 .../admin}/app/(all)/instance.provider.tsx | 0 {admin => apps/admin}/app/(all)/layout.tsx | 0 {admin => apps/admin}/app/(all)/store.provider.tsx | 0 {admin => apps/admin}/app/(all)/toast.tsx | 0 {admin => apps/admin}/app/(all)/user.provider.tsx | 0 {admin => apps/admin}/app/error.tsx | 0 {admin => apps/admin}/app/layout.tsx | 0 .../authentication/authentication-modes.tsx | 0 .../admin}/ce/components/authentication/index.ts | 0 {admin => apps/admin}/ce/components/common/index.ts | 0 .../admin}/ce/components/common/upgrade-button.tsx | 0 {admin => apps/admin}/ce/store/root.store.ts | 0 .../authentication/authentication-method-card.tsx | 0 .../authentication/email-config-switch.tsx | 0 .../components/authentication/github-config.tsx | 0 .../components/authentication/gitlab-config.tsx | 0 .../components/authentication/google-config.tsx | 0 .../authentication/password-config-switch.tsx | 0 .../admin}/core/components/common/banner.tsx | 0 .../core/components/common/breadcrumb-link.tsx | 0 .../admin}/core/components/common/code-block.tsx | 0 .../components/common/confirm-discard-modal.tsx | 0 .../core/components/common/controller-input.tsx | 0 .../admin}/core/components/common/copy-field.tsx | 0 .../admin}/core/components/common/empty-state.tsx | 0 .../admin}/core/components/common/logo-spinner.tsx | 0 .../admin}/core/components/common/page-header.tsx | 0 .../components/common/password-strength-meter.tsx | 0 .../admin}/core/components/instance/failure.tsx | 0 .../core/components/instance/instance-not-ready.tsx | 0 .../admin}/core/components/instance/loading.tsx | 0 .../admin}/core/components/instance/setup-form.tsx | 0 .../admin}/core/components/new-user-popup.tsx | 0 .../admin}/core/components/workspace/list-item.tsx | 0 {admin => apps/admin}/core/hooks/store/index.ts | 0 .../admin}/core/hooks/store/use-instance.tsx | 0 .../admin}/core/hooks/store/use-theme.tsx | 0 {admin => apps/admin}/core/hooks/store/use-user.tsx | 0 .../admin}/core/hooks/store/use-workspace.tsx | 0 {admin => apps/admin}/core/store/instance.store.ts | 0 {admin => apps/admin}/core/store/root.store.ts | 0 {admin => apps/admin}/core/store/theme.store.ts | 0 {admin => apps/admin}/core/store/user.store.ts | 0 {admin => apps/admin}/core/store/workspace.store.ts | 0 .../authentication/authentication-modes.tsx | 0 .../admin}/ee/components/authentication/index.ts | 0 {admin => apps/admin}/ee/components/common/index.ts | 0 {admin => apps/admin}/ee/store/root.store.ts | 0 {admin => apps/admin}/next-env.d.ts | 0 {admin => apps/admin}/next.config.js | 0 {admin => apps/admin}/package.json | 0 {admin => apps/admin}/postcss.config.js | 0 .../admin}/public/auth/background-pattern-dark.svg | 0 .../admin}/public/auth/background-pattern.svg | 0 .../public/favicon/android-chrome-192x192.png | Bin .../public/favicon/android-chrome-512x512.png | Bin .../admin}/public/favicon/apple-touch-icon.png | Bin .../admin}/public/favicon/favicon-16x16.png | Bin .../admin}/public/favicon/favicon-32x32.png | Bin {admin => apps/admin}/public/favicon/favicon.ico | Bin .../admin}/public/favicon/site.webmanifest | 0 .../admin}/public/images/logo-spinner-dark.gif | Bin .../admin}/public/images/logo-spinner-light.gif | Bin .../admin}/public/images/plane-takeoff.png | Bin .../public/instance/instance-failure-dark.svg | 0 .../admin}/public/instance/instance-failure.svg | 0 .../admin}/public/instance/plane-takeoff.png | Bin {admin => apps/admin}/public/logos/github-black.png | Bin {admin => apps/admin}/public/logos/github-white.png | Bin {admin => apps/admin}/public/logos/gitlab-logo.svg | 0 {admin => apps/admin}/public/logos/google-logo.svg | 0 {admin => apps/admin}/public/logos/oidc-logo.svg | 0 {admin => apps/admin}/public/logos/saml-logo.svg | 0 .../admin}/public/logos/takeoff-icon-dark.svg | 0 .../admin}/public/logos/takeoff-icon-light.svg | 0 .../plane-logos/black-horizontal-with-blue-logo.png | Bin .../admin}/public/plane-logos/blue-without-text.png | Bin .../plane-logos/white-horizontal-with-blue-logo.png | Bin {admin => apps/admin}/public/site.webmanifest.json | 0 {admin => apps/admin}/styles/globals.css | 0 {admin => apps/admin}/tailwind.config.js | 0 {admin => apps/admin}/tsconfig.json | 0 {live => apps/live}/.env.example | 0 {live => apps/live}/.eslintignore | 0 {live => apps/live}/.eslintrc.json | 0 {live => apps/live}/.prettierignore | 0 {live => apps/live}/.prettierrc | 0 {live => apps/live}/Dockerfile.dev | 0 {live => apps/live}/Dockerfile.live | 0 {live => apps/live}/package.json | 0 {live => apps/live}/src/ce/lib/fetch-document.ts | 0 {live => apps/live}/src/ce/lib/update-document.ts | 0 {live => apps/live}/src/ce/types/common.d.ts | 0 {live => apps/live}/src/core/extensions/index.ts | 0 .../live}/src/core/helpers/convert-document.ts | 0 .../live}/src/core/helpers/error-handler.ts | 0 {live => apps/live}/src/core/helpers/logger.ts | 0 {live => apps/live}/src/core/helpers/page.ts | 0 {live => apps/live}/src/core/hocuspocus-server.ts | 0 {live => apps/live}/src/core/lib/authentication.ts | 0 {live => apps/live}/src/core/lib/page.ts | 0 {live => apps/live}/src/core/lib/utils/redis-url.ts | 0 .../live}/src/core/services/api.service.ts | 0 .../live}/src/core/services/page.service.ts | 0 .../live}/src/core/services/user.service.ts | 0 {live => apps/live}/src/core/types/common.d.ts | 0 {live => apps/live}/src/ee/lib/fetch-document.ts | 0 {live => apps/live}/src/ee/lib/update-document.ts | 0 {live => apps/live}/src/ee/types/common.d.ts | 0 {live => apps/live}/src/server.ts | 0 {live => apps/live}/tsconfig.json | 0 {live => apps/live}/tsup.config.ts | 0 {apiserver => apps/server}/.coveragerc | 0 {apiserver => apps/server}/.env.example | 0 {apiserver => apps/server}/Dockerfile.api | 0 {apiserver => apps/server}/Dockerfile.dev | 0 {apiserver => apps/server}/Procfile | 0 {apiserver => apps/server}/back_migration.py | 0 .../server}/bin/docker-entrypoint-api-local.sh | 0 .../server}/bin/docker-entrypoint-api.sh | 0 .../server}/bin/docker-entrypoint-beat.sh | 0 .../server}/bin/docker-entrypoint-migrator.sh | 0 .../server}/bin/docker-entrypoint-worker.sh | 0 {apiserver => apps/server}/manage.py | 0 {apiserver => apps/server}/package.json | 0 {apiserver => apps/server}/plane/__init__.py | 0 .../server}/plane/analytics/__init__.py | 0 {apiserver => apps/server}/plane/analytics/apps.py | 0 {apiserver => apps/server}/plane/api/__init__.py | 0 {apiserver => apps/server}/plane/api/apps.py | 0 .../server}/plane/api/middleware/__init__.py | 0 .../plane/api/middleware/api_authentication.py | 0 {apiserver => apps/server}/plane/api/rate_limit.py | 0 .../server}/plane/api/serializers/__init__.py | 0 .../server}/plane/api/serializers/base.py | 0 .../server}/plane/api/serializers/cycle.py | 0 .../server}/plane/api/serializers/estimate.py | 0 .../server}/plane/api/serializers/intake.py | 0 .../server}/plane/api/serializers/issue.py | 0 .../server}/plane/api/serializers/module.py | 0 .../server}/plane/api/serializers/project.py | 0 .../server}/plane/api/serializers/state.py | 0 .../server}/plane/api/serializers/user.py | 0 .../server}/plane/api/serializers/workspace.py | 0 .../server}/plane/api/urls/__init__.py | 0 {apiserver => apps/server}/plane/api/urls/cycle.py | 0 {apiserver => apps/server}/plane/api/urls/intake.py | 0 {apiserver => apps/server}/plane/api/urls/issue.py | 0 {apiserver => apps/server}/plane/api/urls/member.py | 0 {apiserver => apps/server}/plane/api/urls/module.py | 0 .../server}/plane/api/urls/project.py | 0 {apiserver => apps/server}/plane/api/urls/state.py | 0 .../server}/plane/api/views/__init__.py | 0 {apiserver => apps/server}/plane/api/views/base.py | 0 {apiserver => apps/server}/plane/api/views/cycle.py | 0 .../server}/plane/api/views/intake.py | 0 {apiserver => apps/server}/plane/api/views/issue.py | 0 .../server}/plane/api/views/member.py | 0 .../server}/plane/api/views/module.py | 0 .../server}/plane/api/views/project.py | 0 {apiserver => apps/server}/plane/api/views/state.py | 0 {apiserver => apps/server}/plane/app/__init__.py | 0 {apiserver => apps/server}/plane/app/apps.py | 0 .../server}/plane/app/middleware/__init__.py | 0 .../plane/app/middleware/api_authentication.py | 0 .../server}/plane/app/permissions/__init__.py | 0 .../server}/plane/app/permissions/base.py | 0 .../server}/plane/app/permissions/project.py | 0 .../server}/plane/app/permissions/workspace.py | 0 .../server}/plane/app/serializers/__init__.py | 0 .../server}/plane/app/serializers/analytic.py | 0 .../server}/plane/app/serializers/api.py | 0 .../server}/plane/app/serializers/asset.py | 0 .../server}/plane/app/serializers/base.py | 0 .../server}/plane/app/serializers/cycle.py | 0 .../server}/plane/app/serializers/draft.py | 0 .../server}/plane/app/serializers/estimate.py | 0 .../server}/plane/app/serializers/exporter.py | 0 .../server}/plane/app/serializers/favorite.py | 0 .../server}/plane/app/serializers/importer.py | 0 .../server}/plane/app/serializers/intake.py | 0 .../server}/plane/app/serializers/issue.py | 0 .../server}/plane/app/serializers/module.py | 0 .../server}/plane/app/serializers/notification.py | 0 .../server}/plane/app/serializers/page.py | 0 .../server}/plane/app/serializers/project.py | 0 .../server}/plane/app/serializers/state.py | 0 .../server}/plane/app/serializers/user.py | 0 .../server}/plane/app/serializers/view.py | 0 .../server}/plane/app/serializers/webhook.py | 0 .../server}/plane/app/serializers/workspace.py | 0 .../server}/plane/app/urls/__init__.py | 0 .../server}/plane/app/urls/analytic.py | 0 {apiserver => apps/server}/plane/app/urls/api.py | 0 {apiserver => apps/server}/plane/app/urls/asset.py | 0 {apiserver => apps/server}/plane/app/urls/cycle.py | 0 .../server}/plane/app/urls/estimate.py | 0 .../server}/plane/app/urls/external.py | 0 {apiserver => apps/server}/plane/app/urls/intake.py | 0 {apiserver => apps/server}/plane/app/urls/issue.py | 0 {apiserver => apps/server}/plane/app/urls/module.py | 0 .../server}/plane/app/urls/notification.py | 0 {apiserver => apps/server}/plane/app/urls/page.py | 0 .../server}/plane/app/urls/project.py | 0 {apiserver => apps/server}/plane/app/urls/search.py | 0 {apiserver => apps/server}/plane/app/urls/state.py | 0 .../server}/plane/app/urls/timezone.py | 0 {apiserver => apps/server}/plane/app/urls/user.py | 0 {apiserver => apps/server}/plane/app/urls/views.py | 0 .../server}/plane/app/urls/webhook.py | 0 .../server}/plane/app/urls/workspace.py | 0 .../server}/plane/app/views/__init__.py | 0 .../server}/plane/app/views/analytic/advance.py | 0 .../server}/plane/app/views/analytic/base.py | 0 .../plane/app/views/analytic/project_analytics.py | 0 {apiserver => apps/server}/plane/app/views/api.py | 0 .../server}/plane/app/views/asset/base.py | 0 .../server}/plane/app/views/asset/v2.py | 0 {apiserver => apps/server}/plane/app/views/base.py | 0 .../server}/plane/app/views/cycle/archive.py | 0 .../server}/plane/app/views/cycle/base.py | 0 .../server}/plane/app/views/cycle/issue.py | 0 .../server}/plane/app/views/error_404.py | 0 .../server}/plane/app/views/estimate/base.py | 0 .../server}/plane/app/views/exporter/base.py | 0 .../server}/plane/app/views/external/base.py | 0 .../server}/plane/app/views/intake/base.py | 0 .../server}/plane/app/views/issue/activity.py | 0 .../server}/plane/app/views/issue/archive.py | 0 .../server}/plane/app/views/issue/attachment.py | 0 .../server}/plane/app/views/issue/base.py | 0 .../server}/plane/app/views/issue/comment.py | 0 .../server}/plane/app/views/issue/label.py | 0 .../server}/plane/app/views/issue/link.py | 0 .../server}/plane/app/views/issue/reaction.py | 0 .../server}/plane/app/views/issue/relation.py | 0 .../server}/plane/app/views/issue/sub_issue.py | 0 .../server}/plane/app/views/issue/subscriber.py | 0 .../server}/plane/app/views/issue/version.py | 0 .../server}/plane/app/views/module/archive.py | 0 .../server}/plane/app/views/module/base.py | 0 .../server}/plane/app/views/module/issue.py | 0 .../server}/plane/app/views/notification/base.py | 0 .../server}/plane/app/views/page/base.py | 0 .../server}/plane/app/views/page/version.py | 0 .../server}/plane/app/views/project/base.py | 0 .../server}/plane/app/views/project/invite.py | 0 .../server}/plane/app/views/project/member.py | 0 .../server}/plane/app/views/search/base.py | 0 .../server}/plane/app/views/search/issue.py | 0 .../server}/plane/app/views/state/base.py | 0 .../server}/plane/app/views/timezone/base.py | 0 .../server}/plane/app/views/user/base.py | 0 .../server}/plane/app/views/view/base.py | 0 .../server}/plane/app/views/webhook/base.py | 0 .../server}/plane/app/views/workspace/base.py | 0 .../server}/plane/app/views/workspace/cycle.py | 0 .../server}/plane/app/views/workspace/draft.py | 0 .../server}/plane/app/views/workspace/estimate.py | 0 .../server}/plane/app/views/workspace/favorite.py | 0 .../server}/plane/app/views/workspace/home.py | 0 .../server}/plane/app/views/workspace/invite.py | 0 .../server}/plane/app/views/workspace/label.py | 0 .../server}/plane/app/views/workspace/member.py | 0 .../server}/plane/app/views/workspace/module.py | 0 .../server}/plane/app/views/workspace/quick_link.py | 0 .../plane/app/views/workspace/recent_visit.py | 0 .../server}/plane/app/views/workspace/state.py | 0 .../server}/plane/app/views/workspace/sticky.py | 0 .../server}/plane/app/views/workspace/user.py | 0 .../plane/app/views/workspace/user_preference.py | 0 {apiserver => apps/server}/plane/asgi.py | 0 .../server}/plane/authentication/__init__.py | 0 .../plane/authentication/adapter/__init__.py | 0 .../server}/plane/authentication/adapter/base.py | 0 .../plane/authentication/adapter/credential.py | 0 .../server}/plane/authentication/adapter/error.py | 0 .../plane/authentication/adapter/exception.py | 0 .../server}/plane/authentication/adapter/oauth.py | 0 .../server}/plane/authentication/apps.py | 0 .../plane/authentication/middleware/__init__.py | 0 .../plane/authentication/middleware/session.py | 0 .../plane/authentication/provider/__init__.py | 0 .../authentication/provider/credentials/__init__.py | 0 .../authentication/provider/credentials/email.py | 0 .../provider/credentials/magic_code.py | 0 .../plane/authentication/provider/oauth/__init__.py | 0 .../plane/authentication/provider/oauth/github.py | 0 .../plane/authentication/provider/oauth/gitlab.py | 0 .../plane/authentication/provider/oauth/google.py | 0 .../server}/plane/authentication/rate_limit.py | 0 .../server}/plane/authentication/session.py | 0 .../server}/plane/authentication/urls.py | 0 .../server}/plane/authentication/utils/host.py | 0 .../server}/plane/authentication/utils/login.py | 0 .../plane/authentication/utils/redirection_path.py | 0 .../authentication/utils/user_auth_workflow.py | 0 .../authentication/utils/workspace_project_join.py | 0 .../server}/plane/authentication/views/__init__.py | 0 .../server}/plane/authentication/views/app/check.py | 0 .../server}/plane/authentication/views/app/email.py | 0 .../plane/authentication/views/app/github.py | 0 .../plane/authentication/views/app/gitlab.py | 0 .../plane/authentication/views/app/google.py | 0 .../server}/plane/authentication/views/app/magic.py | 0 .../authentication/views/app/password_management.py | 0 .../plane/authentication/views/app/signout.py | 0 .../server}/plane/authentication/views/common.py | 0 .../plane/authentication/views/space/check.py | 0 .../plane/authentication/views/space/email.py | 0 .../plane/authentication/views/space/github.py | 0 .../plane/authentication/views/space/gitlab.py | 0 .../plane/authentication/views/space/google.py | 0 .../plane/authentication/views/space/magic.py | 0 .../views/space/password_management.py | 0 .../plane/authentication/views/space/signout.py | 0 .../server}/plane/bgtasks/__init__.py | 0 .../server}/plane/bgtasks/analytic_plot_export.py | 0 .../server}/plane/bgtasks/api_logs_task.py | 0 {apiserver => apps/server}/plane/bgtasks/apps.py | 0 .../server}/plane/bgtasks/copy_s3_object.py | 0 .../server}/plane/bgtasks/deletion_task.py | 0 .../server}/plane/bgtasks/dummy_data_task.py | 0 .../plane/bgtasks/email_notification_task.py | 0 .../server}/plane/bgtasks/event_tracking_task.py | 0 .../server}/plane/bgtasks/export_task.py | 0 .../server}/plane/bgtasks/exporter_expired_task.py | 0 .../server}/plane/bgtasks/file_asset_task.py | 0 .../server}/plane/bgtasks/forgot_password_task.py | 0 .../server}/plane/bgtasks/issue_activities_task.py | 0 .../server}/plane/bgtasks/issue_automation_task.py | 0 .../plane/bgtasks/issue_description_version_sync.py | 0 .../plane/bgtasks/issue_description_version_task.py | 0 .../server}/plane/bgtasks/issue_version_sync.py | 0 .../server}/plane/bgtasks/magic_link_code_task.py | 0 .../server}/plane/bgtasks/notification_task.py | 0 .../server}/plane/bgtasks/page_transaction_task.py | 0 .../server}/plane/bgtasks/page_version_task.py | 0 .../plane/bgtasks/project_add_user_email_task.py | 0 .../plane/bgtasks/project_invitation_task.py | 0 .../server}/plane/bgtasks/recent_visited_task.py | 0 .../server}/plane/bgtasks/storage_metadata_task.py | 0 .../plane/bgtasks/user_activation_email_task.py | 0 .../plane/bgtasks/user_deactivation_email_task.py | 0 .../server}/plane/bgtasks/webhook_task.py | 0 .../server}/plane/bgtasks/work_item_link_task.py | 0 .../plane/bgtasks/workspace_invitation_task.py | 0 .../server}/plane/bgtasks/workspace_seed_task.py | 0 {apiserver => apps/server}/plane/celery.py | 0 {apiserver => apps/server}/plane/db/__init__.py | 0 {apiserver => apps/server}/plane/db/apps.py | 0 .../server}/plane/db/management/__init__.py | 0 .../plane/db/management/commands/__init__.py | 0 .../plane/db/management/commands/activate_user.py | 0 .../plane/db/management/commands/clear_cache.py | 0 .../plane/db/management/commands/create_bucket.py | 0 .../db/management/commands/create_dummy_data.py | 0 .../db/management/commands/create_instance_admin.py | 0 .../db/management/commands/create_project_member.py | 0 .../management/commands/fix_duplicate_sequences.py | 0 .../plane/db/management/commands/reset_password.py | 0 .../commands/sync_issue_description_version.py | 0 .../db/management/commands/sync_issue_version.py | 0 .../plane/db/management/commands/test_email.py | 0 .../plane/db/management/commands/update_bucket.py | 0 .../commands/update_deleted_workspace_slug.py | 0 .../plane/db/management/commands/wait_for_db.py | 0 .../db/management/commands/wait_for_migrations.py | 0 .../server}/plane/db/migrations/0001_initial.py | 0 .../plane/db/migrations/0002_auto_20221104_2239.py | 0 .../plane/db/migrations/0003_auto_20221109_2320.py | 0 .../db/migrations/0004_alter_state_sequence.py | 0 .../plane/db/migrations/0005_auto_20221114_2127.py | 0 .../plane/db/migrations/0006_alter_cycle_status.py | 0 .../plane/db/migrations/0007_label_parent.py | 0 .../plane/db/migrations/0008_label_colour.py | 0 .../plane/db/migrations/0009_auto_20221208_0310.py | 0 .../plane/db/migrations/0010_auto_20221213_0037.py | 0 .../plane/db/migrations/0011_auto_20221222_2357.py | 0 .../plane/db/migrations/0012_auto_20230104_0117.py | 0 .../plane/db/migrations/0013_auto_20230107_0041.py | 0 ...4_alter_workspacememberinvite_unique_together.py | 0 .../plane/db/migrations/0015_auto_20230107_1636.py | 0 .../plane/db/migrations/0016_auto_20230107_1735.py | 0 .../0017_alter_workspace_unique_together.py | 0 .../plane/db/migrations/0018_auto_20230130_0119.py | 0 .../plane/db/migrations/0019_auto_20230131_0049.py | 0 .../plane/db/migrations/0020_auto_20230214_0118.py | 0 .../plane/db/migrations/0021_auto_20230223_0104.py | 0 .../plane/db/migrations/0022_auto_20230307_0304.py | 0 .../plane/db/migrations/0023_auto_20230316_0040.py | 0 .../plane/db/migrations/0024_auto_20230322_0138.py | 0 .../plane/db/migrations/0025_auto_20230331_0203.py | 0 .../0026_alter_projectmember_view_props.py | 0 .../plane/db/migrations/0027_auto_20230409_0312.py | 0 .../plane/db/migrations/0028_auto_20230414_1703.py | 0 .../plane/db/migrations/0029_auto_20230502_0126.py | 0 .../0030_alter_estimatepoint_unique_together.py | 0 .../plane/db/migrations/0031_analyticview.py | 0 .../plane/db/migrations/0032_auto_20230520_2015.py | 0 .../plane/db/migrations/0033_auto_20230618_2125.py | 0 .../plane/db/migrations/0034_auto_20230628_1046.py | 0 .../plane/db/migrations/0035_auto_20230704_2225.py | 0 .../0036_alter_workspace_organization_size.py | 0 ...issue_archived_at_project_archive_in_and_more.py | 0 .../plane/db/migrations/0038_auto_20230720_1505.py | 0 .../plane/db/migrations/0039_auto_20230723_2203.py | 0 ...tmember_preferences_user_cover_image_and_more.py | 0 ...cycle_sort_order_issuecomment_access_and_more.py | 0 .../0042_alter_analyticview_created_by_and_more.py | 0 .../0043_alter_analyticview_created_by_and_more.py | 0 .../plane/db/migrations/0044_auto_20230913_0709.py | 0 ...ty_epoch_workspacemember_issue_props_and_more.py | 0 ..._order_alter_analyticview_created_by_and_more.py | 0 ...oken_description_apitoken_expired_at_and_more.py | 0 .../plane/db/migrations/0048_auto_20231116_0713.py | 0 .../plane/db/migrations/0049_auto_20231116_0713.py | 0 ...er_use_case_alter_workspace_organization_size.py | 0 ...le_external_id_cycle_external_source_and_more.py | 0 .../plane/db/migrations/0052_auto_20231220_1141.py | 0 .../plane/db/migrations/0053_auto_20240102_1315.py | 0 .../0054_dashboard_widget_dashboardwidget.py | 0 .../plane/db/migrations/0055_auto_20240108_0648.py | 0 ...ernotificationpreference_emailnotificationlog.py | 0 .../plane/db/migrations/0057_auto_20240122_0901.py | 0 .../0058_alter_moduleissue_issue_and_more.py | 0 .../plane/db/migrations/0059_auto_20240208_0957.py | 0 .../db/migrations/0060_cycle_progress_snapshot.py | 0 .../plane/db/migrations/0061_project_logo_props.py | 0 ...cycle_archived_at_module_archived_at_and_more.py | 0 .../0063_state_is_triage_alter_state_group.py | 0 .../plane/db/migrations/0064_auto_20240409_1134.py | 0 .../plane/db/migrations/0065_auto_20240415_0937.py | 0 ...t_id_token_cycle_logo_props_module_logo_props.py | 0 .../plane/db/migrations/0067_issue_estimate.py | 0 ...label_project_remove_pagelog_project_and_more.py | 0 .../0069_alter_account_provider_and_more.py | 0 ...n_is_service_exporterhistory_filters_and_more.py | 0 ...name_issueproperty_issueuserproperty_and_more.py | 0 .../0072_issueattachment_external_id_and_more.py | 0 ...lter_commentreaction_unique_together_and_more.py | 0 .../0074_deploy_board_and_project_issues.py | 0 .../db/migrations/0075_alter_fileasset_asset.py | 0 .../0076_alter_projectmember_role_and_more.py | 0 ..._user_timezone_project_user_timezone_and_more.py | 0 ...easset_comment_fileasset_entity_type_and_more.py | 0 .../plane/db/migrations/0079_auto_20241009_0619.py | 0 ...asset_draft_issue_alter_fileasset_entity_type.py | 0 .../0081_remove_globalview_created_by_and_more.py | 0 ...ssue_managers_alter_cycleissue_issue_and_more.py | 0 .../0083_device_workspace_timezone_and_more.py | 0 ...ue_name_project_when_deleted_at_null_and_more.py | 0 ...keissue_remove_inboxissue_created_by_and_more.py | 0 ...rsion_alter_teampage_unique_together_and_more.py | 0 ...0087_remove_issueversion_description_and_more.py | 0 .../0088_sticky_sort_order_workspaceuserlink.py | 0 .../0089_workspacehomepreference_and_more.py | 0 ...rename_dashboard_deprecateddashboard_and_more.py | 0 .../0091_issuecomment_edited_at_and_more.py | 0 ...cateddashboardwidget_unique_together_and_more.py | 0 ..._moved_to_page_page_moved_to_project_and_more.py | 0 .../plane/db/migrations/0094_auto_20250425_0902.py | 0 .../0095_page_external_id_page_external_source.py | 0 .../0096_user_is_email_valid_user_masked_at.py | 0 ...7_project_external_id_project_external_source.py | 0 .../server}/plane/db/migrations/__init__.py | 0 {apiserver => apps/server}/plane/db/mixins.py | 0 .../server}/plane/db/models/__init__.py | 0 .../server}/plane/db/models/analytic.py | 0 {apiserver => apps/server}/plane/db/models/api.py | 0 {apiserver => apps/server}/plane/db/models/asset.py | 0 {apiserver => apps/server}/plane/db/models/base.py | 0 {apiserver => apps/server}/plane/db/models/cycle.py | 0 .../server}/plane/db/models/deploy_board.py | 0 .../server}/plane/db/models/device.py | 0 {apiserver => apps/server}/plane/db/models/draft.py | 0 .../server}/plane/db/models/estimate.py | 0 .../server}/plane/db/models/exporter.py | 0 .../server}/plane/db/models/favorite.py | 0 .../server}/plane/db/models/importer.py | 0 .../server}/plane/db/models/intake.py | 0 .../server}/plane/db/models/integration/__init__.py | 0 .../server}/plane/db/models/integration/base.py | 0 .../server}/plane/db/models/integration/github.py | 0 .../server}/plane/db/models/integration/slack.py | 0 {apiserver => apps/server}/plane/db/models/issue.py | 0 .../server}/plane/db/models/issue_type.py | 0 {apiserver => apps/server}/plane/db/models/label.py | 0 .../server}/plane/db/models/module.py | 0 .../server}/plane/db/models/notification.py | 0 {apiserver => apps/server}/plane/db/models/page.py | 0 .../server}/plane/db/models/project.py | 0 .../server}/plane/db/models/recent_visit.py | 0 .../server}/plane/db/models/session.py | 0 .../server}/plane/db/models/social_connection.py | 0 {apiserver => apps/server}/plane/db/models/state.py | 0 .../server}/plane/db/models/sticky.py | 0 {apiserver => apps/server}/plane/db/models/user.py | 0 {apiserver => apps/server}/plane/db/models/view.py | 0 .../server}/plane/db/models/webhook.py | 0 .../server}/plane/db/models/workspace.py | 0 .../server}/plane/license/__init__.py | 0 .../server}/plane/license/api/__init__.py | 0 .../plane/license/api/permissions/__init__.py | 0 .../plane/license/api/permissions/instance.py | 0 .../plane/license/api/serializers/__init__.py | 0 .../server}/plane/license/api/serializers/admin.py | 0 .../server}/plane/license/api/serializers/base.py | 0 .../plane/license/api/serializers/configuration.py | 0 .../plane/license/api/serializers/instance.py | 0 .../server}/plane/license/api/serializers/user.py | 0 .../plane/license/api/serializers/workspace.py | 0 .../server}/plane/license/api/views/__init__.py | 0 .../server}/plane/license/api/views/admin.py | 0 .../server}/plane/license/api/views/base.py | 0 .../plane/license/api/views/configuration.py | 0 .../server}/plane/license/api/views/instance.py | 0 .../server}/plane/license/api/views/workspace.py | 0 {apiserver => apps/server}/plane/license/apps.py | 0 .../server}/plane/license/bgtasks/__init__.py | 0 .../server}/plane/license/bgtasks/tracer.py | 0 .../server}/plane/license/management/__init__.py | 0 .../plane/license/management/commands/__init__.py | 0 .../management/commands/configure_instance.py | 0 .../management/commands/register_instance.py | 0 .../plane/license/migrations/0001_initial.py | 0 ...ame_version_instance_current_version_and_more.py | 0 ...ngelog_title_alter_changelog_version_and_more.py | 0 ...gelog_deleted_at_instance_deleted_at_and_more.py | 0 ...0005_rename_product_instance_edition_and_more.py | 0 .../server}/plane/license/migrations/__init__.py | 0 .../server}/plane/license/models/__init__.py | 0 .../server}/plane/license/models/instance.py | 0 {apiserver => apps/server}/plane/license/urls.py | 0 .../server}/plane/license/utils/__init__.py | 0 .../server}/plane/license/utils/encryption.py | 0 .../server}/plane/license/utils/instance_value.py | 0 .../server}/plane/middleware/__init__.py | 0 {apiserver => apps/server}/plane/middleware/apps.py | 0 .../server}/plane/middleware/logger.py | 0 .../server}/plane/seeds/data/issues.json | 0 .../server}/plane/seeds/data/labels.json | 0 .../server}/plane/seeds/data/projects.json | 0 .../server}/plane/seeds/data/states.json | 0 .../server}/plane/settings/__init__.py | 0 {apiserver => apps/server}/plane/settings/common.py | 0 {apiserver => apps/server}/plane/settings/local.py | 0 .../server}/plane/settings/production.py | 0 {apiserver => apps/server}/plane/settings/redis.py | 0 .../server}/plane/settings/storage.py | 0 {apiserver => apps/server}/plane/settings/test.py | 0 {apiserver => apps/server}/plane/space/__init__.py | 0 {apiserver => apps/server}/plane/space/apps.py | 0 .../server}/plane/space/serializer/__init__.py | 0 .../server}/plane/space/serializer/base.py | 0 .../server}/plane/space/serializer/cycle.py | 0 .../server}/plane/space/serializer/intake.py | 0 .../server}/plane/space/serializer/issue.py | 0 .../server}/plane/space/serializer/module.py | 0 .../server}/plane/space/serializer/project.py | 0 .../server}/plane/space/serializer/state.py | 0 .../server}/plane/space/serializer/user.py | 0 .../server}/plane/space/serializer/workspace.py | 0 .../server}/plane/space/urls/__init__.py | 0 .../server}/plane/space/urls/asset.py | 0 .../server}/plane/space/urls/intake.py | 0 .../server}/plane/space/urls/issue.py | 0 .../server}/plane/space/urls/project.py | 0 .../server}/plane/space/utils/grouper.py | 0 .../server}/plane/space/views/__init__.py | 0 .../server}/plane/space/views/asset.py | 0 .../server}/plane/space/views/base.py | 0 .../server}/plane/space/views/cycle.py | 0 .../server}/plane/space/views/intake.py | 0 .../server}/plane/space/views/issue.py | 0 .../server}/plane/space/views/label.py | 0 .../server}/plane/space/views/meta.py | 0 .../server}/plane/space/views/module.py | 0 .../server}/plane/space/views/project.py | 0 .../server}/plane/space/views/state.py | 0 .../server}/plane/static/css/style.css | 0 {apiserver => apps/server}/plane/static/humans.txt | 0 .../server}/plane/static/js/script.js | 0 {apiserver => apps/server}/plane/tests/README.md | 0 .../server}/plane/tests/TESTING_GUIDE.md | 0 {apiserver => apps/server}/plane/tests/__init__.py | 0 {apiserver => apps/server}/plane/tests/apps.py | 0 {apiserver => apps/server}/plane/tests/conftest.py | 0 .../server}/plane/tests/conftest_external.py | 0 .../server}/plane/tests/contract/__init__.py | 0 .../server}/plane/tests/contract/api/__init__.py | 0 .../server}/plane/tests/contract/app/__init__.py | 0 .../plane/tests/contract/app/test_api_token.py | 0 .../plane/tests/contract/app/test_authentication.py | 0 .../plane/tests/contract/app/test_project_app.py | 0 .../plane/tests/contract/app/test_workspace_app.py | 0 {apiserver => apps/server}/plane/tests/factories.py | 0 .../server}/plane/tests/smoke/__init__.py | 0 .../server}/plane/tests/smoke/test_auth_smoke.py | 0 .../server}/plane/tests/unit/__init__.py | 0 .../server}/plane/tests/unit/models/__init__.py | 0 .../plane/tests/unit/models/test_workspace_model.py | 0 .../plane/tests/unit/serializers/__init__.py | 0 .../unit/serializers/test_issue_recent_visit.py | 0 .../plane/tests/unit/serializers/test_workspace.py | 0 .../server}/plane/tests/unit/utils/__init__.py | 0 .../server}/plane/tests/unit/utils/test_uuid.py | 0 {apiserver => apps/server}/plane/urls.py | 0 {apiserver => apps/server}/plane/utils/__init__.py | 0 .../server}/plane/utils/analytics_plot.py | 0 .../server}/plane/utils/build_chart.py | 0 {apiserver => apps/server}/plane/utils/cache.py | 0 {apiserver => apps/server}/plane/utils/constants.py | 0 .../server}/plane/utils/date_utils.py | 0 .../server}/plane/utils/error_codes.py | 0 .../server}/plane/utils/exception_logger.py | 0 .../server}/plane/utils/global_paginator.py | 0 {apiserver => apps/server}/plane/utils/grouper.py | 0 {apiserver => apps/server}/plane/utils/host.py | 0 .../server}/plane/utils/html_processor.py | 0 {apiserver => apps/server}/plane/utils/imports.py | 0 .../server}/plane/utils/ip_address.py | 0 .../server}/plane/utils/issue_filters.py | 0 .../server}/plane/utils/issue_relation_mapper.py | 0 .../server}/plane/utils/issue_search.py | 0 {apiserver => apps/server}/plane/utils/logging.py | 0 {apiserver => apps/server}/plane/utils/markdown.py | 0 .../server}/plane/utils/order_queryset.py | 0 {apiserver => apps/server}/plane/utils/paginator.py | 0 .../server}/plane/utils/path_validator.py | 0 {apiserver => apps/server}/plane/utils/telemetry.py | 0 .../server}/plane/utils/timezone_converter.py | 0 {apiserver => apps/server}/plane/utils/url.py | 0 {apiserver => apps/server}/plane/utils/uuid.py | 0 {apiserver => apps/server}/plane/web/__init__.py | 0 {apiserver => apps/server}/plane/web/apps.py | 0 {apiserver => apps/server}/plane/web/urls.py | 0 {apiserver => apps/server}/plane/web/views.py | 0 {apiserver => apps/server}/plane/wsgi.py | 0 {apiserver => apps/server}/pyproject.toml | 0 {apiserver => apps/server}/pytest.ini | 0 {apiserver => apps/server}/requirements.txt | 0 {apiserver => apps/server}/requirements/base.txt | 0 {apiserver => apps/server}/requirements/local.txt | 0 .../server}/requirements/production.txt | 0 {apiserver => apps/server}/requirements/test.txt | 0 {apiserver => apps/server}/run_tests.py | 0 {apiserver => apps/server}/run_tests.sh | 0 {apiserver => apps/server}/runtime.txt | 0 .../server}/templates/admin/base_site.html | 0 {apiserver => apps/server}/templates/base.html | 0 .../server}/templates/csrf_failure.html | 0 .../templates/emails/auth/forgot_password.html | 0 .../server}/templates/emails/auth/magic_signin.html | 0 .../server}/templates/emails/exports/analytics.html | 0 .../emails/invitations/project_invitation.html | 0 .../emails/invitations/workspace_invitation.html | 0 .../emails/notifications/issue-updates.html | 0 .../emails/notifications/project_addition.html | 0 .../emails/notifications/webhook-deactivate.html | 0 .../server}/templates/emails/test_email.html | 0 .../templates/emails/user/user_activation.html | 0 .../templates/emails/user/user_deactivation.html | 0 {space => apps/space}/.env.example | 0 {space => apps/space}/.eslintrc.js | 0 {space => apps/space}/.gitignore | 0 {space => apps/space}/.prettierignore | 0 {space => apps/space}/.prettierrc.json | 0 {space => apps/space}/Dockerfile.dev | 0 {space => apps/space}/Dockerfile.space | 0 {space => apps/space}/README.md | 0 {space => apps/space}/additional.d.ts | 0 .../space}/app/[workspaceSlug]/[projectId]/page.ts | 0 {space => apps/space}/app/error.tsx | 0 .../space}/app/issues/[anchor]/client-layout.tsx | 0 .../space}/app/issues/[anchor]/layout.tsx | 0 {space => apps/space}/app/issues/[anchor]/page.tsx | 0 {space => apps/space}/app/layout.tsx | 0 {space => apps/space}/app/not-found.tsx | 0 {space => apps/space}/app/page.tsx | 0 {space => apps/space}/app/provider.tsx | 0 {space => apps/space}/app/views/[anchor]/layout.tsx | 0 {space => apps/space}/app/views/[anchor]/page.tsx | 0 .../space}/ce/components/editor/embeds/index.ts | 0 .../ce/components/editor/embeds/mentions/index.ts | 0 .../ce/components/editor/embeds/mentions/root.tsx | 0 {space => apps/space}/ce/components/editor/index.ts | 0 .../space}/ce/components/issue-layouts/root.tsx | 0 .../space}/ce/components/navbar/index.tsx | 0 {space => apps/space}/ce/hooks/store/index.ts | 0 .../space}/ce/hooks/store/use-published-view.ts | 0 {space => apps/space}/ce/store/root.store.ts | 0 .../components/account/auth-forms/auth-banner.tsx | 0 .../components/account/auth-forms/auth-header.tsx | 0 .../components/account/auth-forms/auth-root.tsx | 0 .../core/components/account/auth-forms/email.tsx | 0 .../core/components/account/auth-forms/index.ts | 0 .../core/components/account/auth-forms/password.tsx | 0 .../components/account/auth-forms/unique-code.tsx | 0 .../space}/core/components/account/helpers/index.ts | 0 .../account/helpers/password-strength-meter.tsx | 0 .../space}/core/components/account/index.ts | 0 .../core/components/account/oauth/github-button.tsx | 0 .../core/components/account/oauth/gitlab-button.tsx | 0 .../core/components/account/oauth/google-button.tsx | 0 .../space}/core/components/account/oauth/index.ts | 0 .../core/components/account/oauth/oauth-options.tsx | 0 .../components/account/terms-and-conditions.tsx | 0 .../core/components/account/user-logged-in.tsx | 0 .../space}/core/components/common/index.ts | 0 .../space}/core/components/common/logo-spinner.tsx | 0 .../space}/core/components/common/powered-by.tsx | 0 .../space}/core/components/common/project-logo.tsx | 0 .../space}/core/components/editor/embeds/index.ts | 0 .../core/components/editor/embeds/mentions/index.ts | 0 .../core/components/editor/embeds/mentions/root.tsx | 0 .../core/components/editor/embeds/mentions/user.tsx | 0 .../space}/core/components/editor/index.ts | 0 .../core/components/editor/lite-text-editor.tsx | 0 .../editor/lite-text-read-only-editor.tsx | 0 .../core/components/editor/rich-text-editor.tsx | 0 .../editor/rich-text-read-only-editor.tsx | 0 .../space}/core/components/editor/toolbar.tsx | 0 .../space}/core/components/instance/index.ts | 0 .../components/instance/instance-failure-view.tsx | 0 .../issues/filters/applied-filters/filters-list.tsx | 0 .../issues/filters/applied-filters/label.tsx | 0 .../issues/filters/applied-filters/priority.tsx | 0 .../issues/filters/applied-filters/root.tsx | 0 .../issues/filters/applied-filters/state.tsx | 0 .../components/issues/filters/helpers/dropdown.tsx | 0 .../issues/filters/helpers/filter-header.tsx | 0 .../issues/filters/helpers/filter-option.tsx | 0 .../core/components/issues/filters/helpers/index.ts | 0 .../space}/core/components/issues/filters/index.ts | 0 .../core/components/issues/filters/labels.tsx | 0 .../core/components/issues/filters/priority.tsx | 0 .../space}/core/components/issues/filters/root.tsx | 0 .../core/components/issues/filters/selection.tsx | 0 .../space}/core/components/issues/filters/state.tsx | 0 .../space}/core/components/issues/index.ts | 0 .../core/components/issues/issue-layouts/error.tsx | 0 .../core/components/issues/issue-layouts/index.ts | 0 .../issues/issue-layouts/issue-layout-HOC.tsx | 0 .../issue-layouts/kanban/base-kanban-root.tsx | 0 .../issues/issue-layouts/kanban/block-reactions.tsx | 0 .../issues/issue-layouts/kanban/block.tsx | 0 .../issues/issue-layouts/kanban/blocks-list.tsx | 0 .../issues/issue-layouts/kanban/default.tsx | 0 .../issue-layouts/kanban/headers/group-by-card.tsx | 0 .../kanban/headers/sub-group-by-card.tsx | 0 .../components/issues/issue-layouts/kanban/index.ts | 0 .../issues/issue-layouts/kanban/kanban-group.tsx | 0 .../issues/issue-layouts/kanban/swimlanes.tsx | 0 .../issues/issue-layouts/list/base-list-root.tsx | 0 .../components/issues/issue-layouts/list/block.tsx | 0 .../issues/issue-layouts/list/blocks-list.tsx | 0 .../issues/issue-layouts/list/default.tsx | 0 .../issue-layouts/list/headers/group-by-card.tsx | 0 .../components/issues/issue-layouts/list/index.ts | 0 .../issues/issue-layouts/list/list-group.tsx | 0 .../issue-layouts/properties/all-properties.tsx | 0 .../issues/issue-layouts/properties/cycle.tsx | 0 .../issues/issue-layouts/properties/due-date.tsx | 0 .../issues/issue-layouts/properties/index.ts | 0 .../issues/issue-layouts/properties/labels.tsx | 0 .../issues/issue-layouts/properties/member.tsx | 0 .../issues/issue-layouts/properties/modules.tsx | 0 .../issues/issue-layouts/properties/priority.tsx | 0 .../issues/issue-layouts/properties/state.tsx | 0 .../core/components/issues/issue-layouts/root.tsx | 0 .../core/components/issues/issue-layouts/utils.tsx | 0 .../issue-layouts/with-display-properties-HOC.tsx | 0 .../core/components/issues/navbar/controls.tsx | 0 .../space}/core/components/issues/navbar/index.ts | 0 .../core/components/issues/navbar/layout-icon.tsx | 0 .../components/issues/navbar/layout-selection.tsx | 0 .../space}/core/components/issues/navbar/root.tsx | 0 .../space}/core/components/issues/navbar/theme.tsx | 0 .../core/components/issues/navbar/user-avatar.tsx | 0 .../issues/peek-overview/comment/add-comment.tsx | 0 .../peek-overview/comment/comment-detail-card.tsx | 0 .../peek-overview/comment/comment-reactions.tsx | 0 .../issues/peek-overview/comment/index.ts | 0 .../issues/peek-overview/full-screen-peek-view.tsx | 0 .../core/components/issues/peek-overview/header.tsx | 0 .../core/components/issues/peek-overview/index.ts | 0 .../issues/peek-overview/issue-activity.tsx | 0 .../issues/peek-overview/issue-details.tsx | 0 .../issues/peek-overview/issue-properties.tsx | 0 .../issues/peek-overview/issue-reaction.tsx | 0 .../core/components/issues/peek-overview/layout.tsx | 0 .../issues/peek-overview/side-peek-view.tsx | 0 .../core/components/issues/reactions/index.ts | 0 .../issues/reactions/issue-emoji-reactions.tsx | 0 .../issues/reactions/issue-vote-reactions.tsx | 0 {space => apps/space}/core/components/ui/icon.tsx | 0 {space => apps/space}/core/components/ui/index.ts | 0 .../space}/core/components/ui/not-found.tsx | 0 .../space}/core/components/ui/reaction-selector.tsx | 0 .../space}/core/components/views/auth.tsx | 0 .../space}/core/components/views/index.ts | 0 {space => apps/space}/core/hooks/store/index.ts | 0 .../space}/core/hooks/store/publish/index.ts | 0 .../core/hooks/store/publish/use-publish-list.ts | 0 .../space}/core/hooks/store/publish/use-publish.ts | 0 {space => apps/space}/core/hooks/store/use-cycle.ts | 0 .../space}/core/hooks/store/use-instance.ts | 0 .../space}/core/hooks/store/use-issue-details.tsx | 0 .../space}/core/hooks/store/use-issue-filter.ts | 0 {space => apps/space}/core/hooks/store/use-issue.ts | 0 {space => apps/space}/core/hooks/store/use-label.ts | 0 .../space}/core/hooks/store/use-member.ts | 0 .../space}/core/hooks/store/use-module.ts | 0 {space => apps/space}/core/hooks/store/use-state.ts | 0 .../space}/core/hooks/store/use-user-profile.ts | 0 {space => apps/space}/core/hooks/store/use-user.ts | 0 .../core/hooks/use-clipboard-write-permission.tsx | 0 .../space}/core/hooks/use-intersection-observer.tsx | 0 .../space}/core/hooks/use-is-in-iframe.tsx | 0 {space => apps/space}/core/hooks/use-mention.tsx | 0 {space => apps/space}/core/hooks/use-timer.tsx | 0 .../space}/core/lib/instance-provider.tsx | 0 {space => apps/space}/core/lib/store-provider.tsx | 0 {space => apps/space}/core/lib/toast-provider.tsx | 0 {space => apps/space}/core/store/cycle.store.ts | 0 .../space}/core/store/helpers/base-issues.store.ts | 0 .../space}/core/store/helpers/filter.helpers.ts | 0 {space => apps/space}/core/store/instance.store.ts | 0 .../space}/core/store/issue-detail.store.ts | 0 .../space}/core/store/issue-filters.store.ts | 0 {space => apps/space}/core/store/issue.store.ts | 0 {space => apps/space}/core/store/label.store.ts | 0 {space => apps/space}/core/store/members.store.ts | 0 {space => apps/space}/core/store/module.store.ts | 0 {space => apps/space}/core/store/profile.store.ts | 0 .../space}/core/store/publish/publish.store.ts | 0 .../space}/core/store/publish/publish_list.store.ts | 0 {space => apps/space}/core/store/root.store.ts | 0 {space => apps/space}/core/store/state.store.ts | 0 {space => apps/space}/core/store/user.store.ts | 0 {space => apps/space}/core/types/auth.ts | 0 {space => apps/space}/core/types/cycle.d.ts | 0 {space => apps/space}/core/types/intake.d.ts | 0 {space => apps/space}/core/types/issue.d.ts | 0 {space => apps/space}/core/types/member.d.ts | 0 {space => apps/space}/core/types/modules.d.ts | 0 {space => apps/space}/ee/components/editor/index.ts | 0 .../space}/ee/components/issue-layouts/root.tsx | 0 .../space}/ee/components/navbar/index.tsx | 0 {space => apps/space}/ee/hooks/store/index.ts | 0 {space => apps/space}/ee/store/root.store.ts | 0 .../space}/helpers/authentication.helper.tsx | 0 {space => apps/space}/helpers/common.helper.ts | 0 {space => apps/space}/helpers/date-time.helper.ts | 0 {space => apps/space}/helpers/editor.helper.ts | 0 {space => apps/space}/helpers/emoji.helper.tsx | 0 {space => apps/space}/helpers/file.helper.ts | 0 {space => apps/space}/helpers/issue.helper.ts | 0 {space => apps/space}/helpers/password.helper.ts | 0 .../space}/helpers/query-param-generator.ts | 0 {space => apps/space}/helpers/state.helper.ts | 0 {space => apps/space}/helpers/string.helper.ts | 0 {space => apps/space}/next.config.js | 0 {space => apps/space}/package.json | 0 {space => apps/space}/postcss.config.js | 0 {space => apps/space}/public/404.svg | 0 .../space}/public/auth/background-pattern-dark.svg | 0 .../space}/public/auth/background-pattern.svg | 0 .../public/favicon/android-chrome-192x192.png | Bin .../public/favicon/android-chrome-512x512.png | Bin .../space}/public/favicon/apple-touch-icon.png | Bin .../space}/public/favicon/favicon-16x16.png | Bin .../space}/public/favicon/favicon-32x32.png | Bin {space => apps/space}/public/favicon/favicon.ico | Bin .../space}/public/favicon/site.webmanifest | 0 .../space}/public/images/logo-spinner-dark.gif | Bin .../space}/public/images/logo-spinner-light.gif | Bin .../public/instance/instance-failure-dark.svg | 0 .../space}/public/instance/instance-failure.svg | 0 .../space}/public/instance/intake-sent-dark.png | Bin .../space}/public/instance/intake-sent-light.png | Bin .../public/instance/plane-instance-not-ready.webp | Bin .../space}/public/instance/plane-takeoff.png | Bin {space => apps/space}/public/logos/github-black.png | Bin {space => apps/space}/public/logos/github-dark.svg | 0 .../space}/public/logos/github-square.svg | 0 {space => apps/space}/public/logos/github-white.svg | 0 {space => apps/space}/public/logos/gitlab-logo.svg | 0 {space => apps/space}/public/logos/google-logo.svg | 0 {space => apps/space}/public/plane-logo.svg | 0 .../plane-logos/black-horizontal-with-blue-logo.png | Bin .../public/plane-logos/blue-without-text-new.png | Bin .../space}/public/plane-logos/blue-without-text.png | Bin .../plane-logos/white-horizontal-with-blue-logo.png | Bin .../space}/public/plane-logos/white-horizontal.svg | 0 .../space}/public/project-not-published.svg | 0 {space => apps/space}/public/robots.txt | 0 {space => apps/space}/public/site.webmanifest.json | 0 .../space}/public/something-went-wrong.svg | 0 {space => apps/space}/public/user-logged-in.svg | 0 {space => apps/space}/styles/globals.css | 0 {space => apps/space}/tailwind.config.js | 0 {space => apps/space}/tsconfig.json | 0 {web => apps/web}/.env.example | 0 {web => apps/web}/.eslintignore | 0 {web => apps/web}/.eslintrc.js | 0 {web => apps/web}/.gitignore | 0 {web => apps/web}/.prettierignore | 0 {web => apps/web}/.prettierrc | 0 {web => apps/web}/Dockerfile.dev | 0 {web => apps/web}/Dockerfile.web | 0 .../(projects)/active-cycles/header.tsx | 0 .../(projects)/active-cycles/layout.tsx | 0 .../(projects)/active-cycles/page.tsx | 0 .../(projects)/analytics/[tabId]/header.tsx | 0 .../(projects)/analytics/[tabId]/layout.tsx | 0 .../(projects)/analytics/[tabId]/page.tsx | 0 .../(projects)/browse/[workItem]/header.tsx | 0 .../(projects)/browse/[workItem]/layout.tsx | 0 .../(projects)/browse/[workItem]/page.tsx | 0 .../[workspaceSlug]/(projects)/drafts/header.tsx | 0 .../[workspaceSlug]/(projects)/drafts/layout.tsx | 0 .../[workspaceSlug]/(projects)/drafts/page.tsx | 0 .../(projects)/extended-project-sidebar.tsx | 0 .../[workspaceSlug]/(projects)/extended-sidebar.tsx | 0 .../app/(all)/[workspaceSlug]/(projects)/header.tsx | 0 .../app/(all)/[workspaceSlug]/(projects)/layout.tsx | 0 .../(projects)/notifications/layout.tsx | 0 .../(projects)/notifications/page.tsx | 0 .../app/(all)/[workspaceSlug]/(projects)/page.tsx | 0 .../profile/[userId]/[profileViewId]/page.tsx | 0 .../(projects)/profile/[userId]/activity/page.tsx | 0 .../(projects)/profile/[userId]/header.tsx | 0 .../(projects)/profile/[userId]/layout.tsx | 0 .../(projects)/profile/[userId]/mobile-header.tsx | 0 .../(projects)/profile/[userId]/navbar.tsx | 0 .../(projects)/profile/[userId]/page.tsx | 0 .../(detail)/[projectId]/archives/cycles/layout.tsx | 0 .../(detail)/[projectId]/archives/cycles/page.tsx | 0 .../(detail)/[projectId]/archives/header.tsx | 0 .../issues/(detail)/[archivedIssueId]/page.tsx | 0 .../[projectId]/archives/issues/(detail)/header.tsx | 0 .../[projectId]/archives/issues/(detail)/layout.tsx | 0 .../[projectId]/archives/issues/(list)/layout.tsx | 0 .../[projectId]/archives/issues/(list)/page.tsx | 0 .../[projectId]/archives/modules/layout.tsx | 0 .../(detail)/[projectId]/archives/modules/page.tsx | 0 .../[projectId]/cycles/(detail)/[cycleId]/page.tsx | 0 .../(detail)/[projectId]/cycles/(detail)/header.tsx | 0 .../(detail)/[projectId]/cycles/(detail)/layout.tsx | 0 .../[projectId]/cycles/(detail)/mobile-header.tsx | 0 .../(detail)/[projectId]/cycles/(list)/header.tsx | 0 .../(detail)/[projectId]/cycles/(list)/layout.tsx | 0 .../[projectId]/cycles/(list)/mobile-header.tsx | 0 .../(detail)/[projectId]/cycles/(list)/page.tsx | 0 .../(detail)/[projectId]/draft-issues/header.tsx | 0 .../(detail)/[projectId]/draft-issues/layout.tsx | 0 .../(detail)/[projectId]/draft-issues/page.tsx | 0 .../projects/(detail)/[projectId]/intake/layout.tsx | 0 .../projects/(detail)/[projectId]/intake/page.tsx | 0 .../[projectId]/issues/(detail)/[issueId]/page.tsx | 0 .../(detail)/[projectId]/issues/(list)/header.tsx | 0 .../(detail)/[projectId]/issues/(list)/layout.tsx | 0 .../[projectId]/issues/(list)/mobile-header.tsx | 0 .../(detail)/[projectId]/issues/(list)/page.tsx | 0 .../modules/(detail)/[moduleId]/page.tsx | 0 .../[projectId]/modules/(detail)/header.tsx | 0 .../[projectId]/modules/(detail)/layout.tsx | 0 .../[projectId]/modules/(detail)/mobile-header.tsx | 0 .../(detail)/[projectId]/modules/(list)/header.tsx | 0 .../(detail)/[projectId]/modules/(list)/layout.tsx | 0 .../[projectId]/modules/(list)/mobile-header.tsx | 0 .../(detail)/[projectId]/modules/(list)/page.tsx | 0 .../[projectId]/pages/(detail)/[pageId]/page.tsx | 0 .../(detail)/[projectId]/pages/(detail)/header.tsx | 0 .../(detail)/[projectId]/pages/(detail)/layout.tsx | 0 .../(detail)/[projectId]/pages/(list)/header.tsx | 0 .../(detail)/[projectId]/pages/(list)/layout.tsx | 0 .../(detail)/[projectId]/pages/(list)/page.tsx | 0 .../[projectId]/views/(detail)/[viewId]/header.tsx | 0 .../[projectId]/views/(detail)/[viewId]/page.tsx | 0 .../(detail)/[projectId]/views/(detail)/layout.tsx | 0 .../(detail)/[projectId]/views/(list)/header.tsx | 0 .../(detail)/[projectId]/views/(list)/layout.tsx | 0 .../[projectId]/views/(list)/mobile-header.tsx | 0 .../(detail)/[projectId]/views/(list)/page.tsx | 0 .../projects/(detail)/archives/layout.tsx | 0 .../(projects)/projects/(detail)/archives/page.tsx | 0 .../(projects)/projects/(detail)/layout.tsx | 0 .../(projects)/projects/(list)/layout.tsx | 0 .../(projects)/projects/(list)/page.tsx | 0 .../(all)/[workspaceSlug]/(projects)/sidebar.tsx | 0 .../[workspaceSlug]/(projects)/stickies/header.tsx | 0 .../[workspaceSlug]/(projects)/stickies/layout.tsx | 0 .../[workspaceSlug]/(projects)/stickies/page.tsx | 0 .../workspace-views/[globalViewId]/page.tsx | 0 .../(projects)/workspace-views/header.tsx | 0 .../(projects)/workspace-views/layout.tsx | 0 .../(projects)/workspace-views/page.tsx | 0 .../app/(all)/[workspaceSlug]/(settings)/layout.tsx | 0 .../settings/(workspace)/billing/page.tsx | 0 .../settings/(workspace)/exports/page.tsx | 0 .../settings/(workspace)/imports/page.tsx | 0 .../settings/(workspace)/integrations/page.tsx | 0 .../(settings)/settings/(workspace)/layout.tsx | 0 .../settings/(workspace)/members/page.tsx | 0 .../settings/(workspace)/mobile-header-tabs.tsx | 0 .../(settings)/settings/(workspace)/page.tsx | 0 .../(settings)/settings/(workspace)/sidebar.tsx | 0 .../(workspace)/webhooks/[webhookId]/page.tsx | 0 .../settings/(workspace)/webhooks/page.tsx | 0 .../(settings)/settings/account/activity/page.tsx | 0 .../(settings)/settings/account/api-tokens/page.tsx | 0 .../(settings)/settings/account/layout.tsx | 0 .../settings/account/notifications/page.tsx | 0 .../(settings)/settings/account/page.tsx | 0 .../settings/account/preferences/page.tsx | 0 .../(settings)/settings/account/security/page.tsx | 0 .../(settings)/settings/account/sidebar.tsx | 0 .../projects/[projectId]/automations/page.tsx | 0 .../projects/[projectId]/estimates/page.tsx | 0 .../settings/projects/[projectId]/features/page.tsx | 0 .../settings/projects/[projectId]/labels/page.tsx | 0 .../settings/projects/[projectId]/members/page.tsx | 0 .../settings/projects/[projectId]/page.tsx | 0 .../settings/projects/[projectId]/states/page.tsx | 0 .../(settings)/settings/projects/layout.tsx | 0 .../(settings)/settings/projects/page.tsx | 0 .../app/(all)/accounts/forgot-password/layout.tsx | 0 .../app/(all)/accounts/forgot-password/page.tsx | 0 .../app/(all)/accounts/reset-password/layout.tsx | 0 .../web}/app/(all)/accounts/reset-password/page.tsx | 0 .../web}/app/(all)/accounts/set-password/layout.tsx | 0 .../web}/app/(all)/accounts/set-password/page.tsx | 0 .../web}/app/(all)/create-workspace/layout.tsx | 0 .../web}/app/(all)/create-workspace/page.tsx | 0 .../app/(all)/installations/[provider]/layout.tsx | 0 .../app/(all)/installations/[provider]/page.tsx | 0 {web => apps/web}/app/(all)/invitations/layout.tsx | 0 {web => apps/web}/app/(all)/invitations/page.tsx | 0 {web => apps/web}/app/(all)/layout.preload.tsx | 0 {web => apps/web}/app/(all)/layout.tsx | 0 {web => apps/web}/app/(all)/onboarding/layout.tsx | 0 {web => apps/web}/app/(all)/onboarding/page.tsx | 0 .../web}/app/(all)/profile/activity/page.tsx | 0 .../web}/app/(all)/profile/appearance/page.tsx | 0 {web => apps/web}/app/(all)/profile/layout.tsx | 0 .../web}/app/(all)/profile/notifications/page.tsx | 0 {web => apps/web}/app/(all)/profile/page.tsx | 0 .../web}/app/(all)/profile/security/page.tsx | 0 {web => apps/web}/app/(all)/profile/sidebar.tsx | 0 {web => apps/web}/app/(all)/sign-up/layout.tsx | 0 {web => apps/web}/app/(all)/sign-up/page.tsx | 0 .../web}/app/(all)/workspace-invitations/layout.tsx | 0 .../web}/app/(all)/workspace-invitations/page.tsx | 0 {web => apps/web}/app/(home)/layout.tsx | 0 {web => apps/web}/app/(home)/page.tsx | 0 {web => apps/web}/app/error.tsx | 0 {web => apps/web}/app/global-error.tsx | 0 {web => apps/web}/app/layout.tsx | 0 {web => apps/web}/app/not-found.tsx | 0 {web => apps/web}/app/provider.tsx | 0 .../web}/ce/components/active-cycles/index.ts | 0 .../web}/ce/components/active-cycles/root.tsx | 0 .../workspace-active-cycles-upgrade.tsx | 0 {web => apps/web}/ce/components/analytics/tabs.tsx | 0 .../web}/ce/components/breadcrumbs/common.tsx | 0 .../web}/ce/components/breadcrumbs/index.ts | 0 .../ce/components/breadcrumbs/project-feature.tsx | 0 .../web}/ce/components/breadcrumbs/project.tsx | 0 .../ce/components/command-palette/actions/index.ts | 0 .../actions/work-item-actions/change-state-list.tsx | 0 .../actions/work-item-actions/index.ts | 0 .../web}/ce/components/command-palette/helpers.tsx | 0 .../web}/ce/components/command-palette/index.ts | 0 .../ce/components/command-palette/modals/index.ts | 0 .../command-palette/modals/issue-level.tsx | 0 .../command-palette/modals/project-level.tsx | 0 .../command-palette/modals/workspace-level.tsx | 0 .../web}/ce/components/comments/comment-block.tsx | 0 {web => apps/web}/ce/components/comments/index.ts | 0 {web => apps/web}/ce/components/common/index.ts | 0 .../web}/ce/components/common/subscription/index.ts | 0 .../common/subscription/subscription-pill.tsx | 0 .../web}/ce/components/cycles/active-cycle/index.ts | 0 .../web}/ce/components/cycles/active-cycle/root.tsx | 0 .../ce/components/cycles/additional-actions.tsx | 0 .../ce/components/cycles/analytics-sidebar/base.tsx | 0 .../ce/components/cycles/analytics-sidebar/index.ts | 0 .../ce/components/cycles/analytics-sidebar/root.tsx | 0 .../web}/ce/components/cycles/end-cycle/index.ts | 0 .../web}/ce/components/cycles/end-cycle/modal.tsx | 0 .../components/cycles/end-cycle/use-end-cycle.tsx | 0 {web => apps/web}/ce/components/cycles/index.ts | 0 .../web}/ce/components/de-dupe/de-dupe-button.tsx | 0 .../ce/components/de-dupe/duplicate-modal/index.ts | 0 .../ce/components/de-dupe/duplicate-modal/root.tsx | 0 .../components/de-dupe/duplicate-popover/index.ts | 0 .../components/de-dupe/duplicate-popover/root.tsx | 0 {web => apps/web}/ce/components/de-dupe/index.ts | 0 .../components/de-dupe/issue-block/button-label.tsx | 0 .../web}/ce/components/de-dupe/issue-block/index.ts | 0 .../web}/ce/components/editor/embeds/index.ts | 0 .../ce/components/editor/embeds/mentions/index.ts | 0 .../ce/components/editor/embeds/mentions/root.tsx | 0 {web => apps/web}/ce/components/editor/index.ts | 0 .../web}/ce/components/epics/epic-modal/index.ts | 0 .../web}/ce/components/epics/epic-modal/modal.tsx | 0 {web => apps/web}/ce/components/epics/index.ts | 0 .../estimates/estimate-list-item-buttons.tsx | 0 .../web}/ce/components/estimates/helper.tsx | 0 {web => apps/web}/ce/components/estimates/index.ts | 0 .../web}/ce/components/estimates/inputs/index.ts | 0 .../ce/components/estimates/inputs/time-input.tsx | 0 .../web}/ce/components/estimates/points/delete.tsx | 0 .../web}/ce/components/estimates/points/index.ts | 0 .../web}/ce/components/estimates/update/index.ts | 0 .../web}/ce/components/estimates/update/modal.tsx | 0 .../gantt-chart/dependency/blockDraggables/index.ts | 0 .../dependency/blockDraggables/left-draggable.tsx | 0 .../dependency/blockDraggables/right-draggable.tsx | 0 .../gantt-chart/dependency/dependency-paths.tsx | 0 .../dependency/draggable-dependency-path.tsx | 0 .../ce/components/gantt-chart/dependency/index.ts | 0 .../web}/ce/components/gantt-chart/index.ts | 0 {web => apps/web}/ce/components/global/index.ts | 0 .../ce/components/global/product-updates-header.tsx | 0 .../web}/ce/components/global/version-number.tsx | 0 {web => apps/web}/ce/components/home/header.tsx | 0 {web => apps/web}/ce/components/home/index.ts | 0 .../web}/ce/components/home/peek-overviews.tsx | 0 .../web}/ce/components/inbox/source-pill.tsx | 0 {web => apps/web}/ce/components/instance/index.ts | 0 .../ce/components/instance/maintenance-message.tsx | 0 .../ce/components/issues/bulk-operations/index.ts | 0 .../ce/components/issues/bulk-operations/root.tsx | 0 .../issues/filters/applied-filters/index.ts | 0 .../issues/filters/applied-filters/issue-types.tsx | 0 .../web}/ce/components/issues/filters/index.ts | 0 .../ce/components/issues/filters/issue-types.tsx | 0 .../ce/components/issues/filters/team-project.tsx | 0 {web => apps/web}/ce/components/issues/header.tsx | 0 {web => apps/web}/ce/components/issues/index.ts | 0 .../issues/issue-detail-widgets/action-buttons.tsx | 0 .../issues/issue-detail-widgets/collapsibles.tsx | 0 .../issues/issue-detail-widgets/modals.tsx | 0 .../issue-details/additional-activity-root.tsx | 0 .../issues/issue-details/additional-properties.tsx | 0 .../ce/components/issues/issue-details/index.ts | 0 .../issues/issue-details/issue-creator.tsx | 0 .../issues/issue-details/issue-identifier.tsx | 0 .../issue-properties-activity/index.ts | 0 .../issue-properties-activity/root.tsx | 0 .../issues/issue-details/issue-type-activity.tsx | 0 .../issues/issue-details/issue-type-switcher.tsx | 0 .../issues/issue-details/parent-select-root.tsx | 0 .../issues/issue-layouts/additional-properties.tsx | 0 .../issues/issue-layouts/empty-states/index.ts | 0 .../issue-layouts/empty-states/team-issues.tsx | 0 .../issue-layouts/empty-states/team-view-issues.tsx | 0 .../components/issues/issue-layouts/issue-stats.tsx | 0 .../quick-action-dropdowns/copy-menu-helper.tsx | 0 .../quick-action-dropdowns/duplicate-modal.tsx | 0 .../issue-layouts/quick-action-dropdowns/index.ts | 0 .../ce/components/issues/issue-layouts/utils.tsx | 0 .../issues/issue-modal/additional-properties.tsx | 0 .../web}/ce/components/issues/issue-modal/index.ts | 0 .../issues/issue-modal/issue-type-select.tsx | 0 .../ce/components/issues/issue-modal/provider.tsx | 0 .../issues/issue-modal/template-select.tsx | 0 .../web}/ce/components/issues/quick-add/index.ts | 0 .../web}/ce/components/issues/quick-add/root.tsx | 0 .../issues/worklog/activity/filter-root.tsx | 0 .../ce/components/issues/worklog/activity/index.ts | 0 .../ce/components/issues/worklog/activity/root.tsx | 0 .../worklog/activity/worklog-create-button.tsx | 0 .../web}/ce/components/issues/worklog/index.ts | 0 .../ce/components/issues/worklog/property/index.ts | 0 .../ce/components/issues/worklog/property/root.tsx | 0 {web => apps/web}/ce/components/license/index.ts | 0 .../web}/ce/components/license/modal/index.ts | 0 .../ce/components/license/modal/upgrade-modal.tsx | 0 .../ce/components/pages/editor/ai/ask-pi-menu.tsx | 0 .../web}/ce/components/pages/editor/ai/index.ts | 0 .../web}/ce/components/pages/editor/ai/menu.tsx | 0 .../web}/ce/components/pages/editor/embed/index.ts | 0 .../pages/editor/embed/issue-embed-upgrade-card.tsx | 0 .../web}/ce/components/pages/editor/index.ts | 0 .../web}/ce/components/pages/extra-actions.tsx | 0 .../components/pages/header/collaborators-list.tsx | 0 .../ce/components/pages/header/lock-control.tsx | 0 .../ce/components/pages/header/move-control.tsx | 0 .../ce/components/pages/header/share-control.tsx | 0 {web => apps/web}/ce/components/pages/index.ts | 0 .../web}/ce/components/pages/modals/index.ts | 0 .../ce/components/pages/modals/move-page-modal.tsx | 0 .../ce/components/pages/navigation-pane/index.ts | 0 .../pages/navigation-pane/tab-panels/assets.tsx | 0 .../tab-panels/empty-states/assets.tsx | 0 .../tab-panels/empty-states/outline.tsx | 0 .../pages/navigation-pane/tab-panels/root.tsx | 0 .../web}/ce/components/preferences/config.ts | 0 .../ce/components/preferences/theme-switcher.tsx | 0 .../ce/components/projects/create/attributes.tsx | 0 .../web}/ce/components/projects/create/root.tsx | 0 .../components/projects/create/template-select.tsx | 0 {web => apps/web}/ce/components/projects/header.tsx | 0 .../web}/ce/components/projects/mobile-header.tsx | 0 .../ce/components/projects/navigation/helper.tsx | 0 .../web}/ce/components/projects/navigation/index.ts | 0 {web => apps/web}/ce/components/projects/page.tsx | 0 .../components/projects/settings/intake/header.tsx | 0 .../ce/components/projects/settings/intake/index.ts | 0 .../projects/settings/useProjectColumns.tsx | 0 .../web}/ce/components/projects/teamspaces/index.ts | 0 .../projects/teamspaces/teamspace-list.tsx | 0 .../web}/ce/components/relations/activity.ts | 0 {web => apps/web}/ce/components/relations/index.tsx | 0 .../web}/ce/components/sidebar/app-switcher.tsx | 0 {web => apps/web}/ce/components/sidebar/index.ts | 0 .../components/sidebar/project-navigation-root.tsx | 0 .../web}/ce/components/views/access-controller.tsx | 0 .../ce/components/views/filters/access-filter.tsx | 0 {web => apps/web}/ce/components/views/helper.tsx | 0 .../web}/ce/components/views/publish/index.ts | 0 .../web}/ce/components/views/publish/modal.tsx | 0 .../components/views/publish/use-view-publish.tsx | 0 {web => apps/web}/ce/components/workflow/index.ts | 0 .../web}/ce/components/workflow/state-option.tsx | 0 .../components/workflow/use-workflow-drag-n-drop.ts | 0 .../workflow/workflow-disabled-message.tsx | 0 .../workflow/workflow-disabled-overlay.tsx | 0 .../ce/components/workflow/workflow-group-tree.tsx | 0 .../ce/components/workspace-notifications/index.ts | 0 .../workspace-notifications/list-root.tsx | 0 .../notification-card/root.tsx | 0 .../workspace/billing/billing-actions-button.tsx | 0 .../billing/comparison/frequency-toggle.tsx | 0 .../workspace/billing/comparison/plan-detail.tsx | 0 .../workspace/billing/comparison/root.tsx | 0 .../web}/ce/components/workspace/billing/index.ts | 0 .../web}/ce/components/workspace/billing/root.tsx | 0 .../components/workspace/delete-workspace-modal.tsx | 0 .../workspace/delete-workspace-section.tsx | 0 .../web}/ce/components/workspace/edition-badge.tsx | 0 {web => apps/web}/ce/components/workspace/index.ts | 0 .../web}/ce/components/workspace/members/index.ts | 0 .../components/workspace/members/invite-modal.tsx | 0 .../workspace/settings/useMemberColumns.tsx | 0 .../ce/components/workspace/sidebar/app-search.tsx | 0 .../workspace/sidebar/extended-sidebar-item.tsx | 0 .../web}/ce/components/workspace/sidebar/helper.tsx | 0 .../web}/ce/components/workspace/sidebar/index.ts | 0 .../components/workspace/sidebar/sidebar-item.tsx | 0 .../workspace/sidebar/teams-sidebar-list.tsx | 0 .../web}/ce/components/workspace/upgrade-badge.tsx | 0 {web => apps/web}/ce/constants/ai.ts | 0 {web => apps/web}/ce/constants/editor.ts | 0 {web => apps/web}/ce/constants/gantt-chart.ts | 0 {web => apps/web}/ce/constants/index.ts | 0 {web => apps/web}/ce/constants/project/index.ts | 0 .../web}/ce/constants/project/settings/features.tsx | 0 .../web}/ce/constants/project/settings/index.ts | 0 .../web}/ce/constants/project/settings/tabs.ts | 0 {web => apps/web}/ce/constants/sidebar-favorites.ts | 0 {web => apps/web}/ce/helpers/command-palette.ts | 0 {web => apps/web}/ce/helpers/epic-analytics.ts | 0 {web => apps/web}/ce/helpers/instance.helper.ts | 0 {web => apps/web}/ce/helpers/issue-action-helper.ts | 0 {web => apps/web}/ce/helpers/issue-filter.helper.ts | 0 {web => apps/web}/ce/helpers/pi-chat.helper.ts | 0 {web => apps/web}/ce/helpers/project-settings.ts | 0 {web => apps/web}/ce/helpers/workspace.helper.ts | 0 {web => apps/web}/ce/hooks/store/index.ts | 0 {web => apps/web}/ce/hooks/store/use-page-store.ts | 0 {web => apps/web}/ce/hooks/store/use-page.ts | 0 .../web}/ce/hooks/use-additional-editor-mention.tsx | 0 .../hooks/use-additional-favorite-item-details.ts | 0 .../web}/ce/hooks/use-bulk-operation-status.ts | 0 .../ce/hooks/use-debounced-duplicate-issues.tsx | 0 {web => apps/web}/ce/hooks/use-editor-flagging.ts | 0 {web => apps/web}/ce/hooks/use-file-size.ts | 0 {web => apps/web}/ce/hooks/use-issue-embed.tsx | 0 {web => apps/web}/ce/hooks/use-issue-properties.tsx | 0 .../web}/ce/hooks/use-notification-preview.tsx | 0 {web => apps/web}/ce/hooks/use-page-flag.ts | 0 .../use-workspace-issue-properties-extended.tsx | 0 {web => apps/web}/ce/layouts/project-wrapper.tsx | 0 {web => apps/web}/ce/layouts/workspace-wrapper.tsx | 0 {web => apps/web}/ce/services/index.ts | 0 .../web}/ce/services/project/estimate.service.ts | 0 {web => apps/web}/ce/services/project/index.ts | 0 .../ce/services/project/project-state.service.ts | 0 .../web}/ce/services/project/view.service.ts | 0 {web => apps/web}/ce/services/workspace.service.ts | 0 {web => apps/web}/ce/store/analytics.store.ts | 0 {web => apps/web}/ce/store/command-palette.store.ts | 0 {web => apps/web}/ce/store/cycle/index.ts | 0 {web => apps/web}/ce/store/estimates/estimate.ts | 0 .../web}/ce/store/issue/epic/filter.store.ts | 0 {web => apps/web}/ce/store/issue/epic/index.ts | 0 .../web}/ce/store/issue/epic/issue.store.ts | 0 .../web}/ce/store/issue/helpers/base-issue-store.ts | 0 .../web}/ce/store/issue/helpers/base-issue.store.ts | 0 .../ce/store/issue/issue-details/activity.store.ts | 0 .../web}/ce/store/issue/issue-details/root.store.ts | 0 .../web}/ce/store/issue/team-views/filter.store.ts | 0 .../web}/ce/store/issue/team-views/index.ts | 0 .../web}/ce/store/issue/team-views/issue.store.ts | 0 .../web}/ce/store/issue/team/filter.store.ts | 0 {web => apps/web}/ce/store/issue/team/index.ts | 0 .../web}/ce/store/issue/team/issue.store.ts | 0 .../web}/ce/store/issue/workspace/issue.store.ts | 0 .../web}/ce/store/member/project-member.store.ts | 0 .../web}/ce/store/pages/extended-base-page.ts | 0 {web => apps/web}/ce/store/project-inbox.store.ts | 0 {web => apps/web}/ce/store/root.store.ts | 0 {web => apps/web}/ce/store/state.store.ts | 0 .../web}/ce/store/timeline/base-timeline.store.ts | 0 {web => apps/web}/ce/store/timeline/index.ts | 0 {web => apps/web}/ce/store/user/permission.store.ts | 0 {web => apps/web}/ce/types/gantt-chart.ts | 0 {web => apps/web}/ce/types/index.ts | 0 {web => apps/web}/ce/types/issue-types/index.ts | 0 .../ce/types/issue-types/issue-property-values.d.ts | 0 {web => apps/web}/ce/types/projects/index.ts | 0 .../web}/ce/types/projects/project-activity.ts | 0 {web => apps/web}/ce/types/projects/projects.ts | 0 .../components/account/auth-forms/auth-banner.tsx | 0 .../components/account/auth-forms/auth-header.tsx | 0 .../components/account/auth-forms/auth-root.tsx | 0 .../core/components/account/auth-forms/email.tsx | 0 .../account/auth-forms/forgot-password-popover.tsx | 0 .../core/components/account/auth-forms/index.ts | 0 .../core/components/account/auth-forms/password.tsx | 0 .../components/account/auth-forms/unique-code.tsx | 0 .../components/account/deactivate-account-modal.tsx | 0 {web => apps/web}/core/components/account/index.ts | 0 .../core/components/account/oauth/github-button.tsx | 0 .../core/components/account/oauth/gitlab-button.tsx | 0 .../core/components/account/oauth/google-button.tsx | 0 .../web}/core/components/account/oauth/index.ts | 0 .../core/components/account/oauth/oauth-options.tsx | 0 .../components/account/password-strength-meter.tsx | 0 .../components/account/terms-and-conditions.tsx | 0 .../analytics/analytics-filter-actions.tsx | 0 .../analytics/analytics-section-wrapper.tsx | 0 .../core/components/analytics/analytics-wrapper.tsx | 0 .../web}/core/components/analytics/empty-state.tsx | 0 .../web}/core/components/analytics/export.ts | 0 .../web}/core/components/analytics/index.ts | 0 .../web}/core/components/analytics/insight-card.tsx | 0 .../analytics/insight-table/data-table.tsx | 0 .../components/analytics/insight-table/index.ts | 0 .../components/analytics/insight-table/loader.tsx | 0 .../components/analytics/insight-table/root.tsx | 0 .../web}/core/components/analytics/loaders.tsx | 0 .../analytics/overview/active-project-item.tsx | 0 .../analytics/overview/active-projects.tsx | 0 .../core/components/analytics/overview/index.ts | 0 .../analytics/overview/project-insights.tsx | 0 .../core/components/analytics/overview/root.tsx | 0 .../analytics/select/analytics-params.tsx | 0 .../core/components/analytics/select/duration.tsx | 0 .../core/components/analytics/select/project.tsx | 0 .../components/analytics/select/select-x-axis.tsx | 0 .../components/analytics/select/select-y-axis.tsx | 0 .../core/components/analytics/total-insights.tsx | 0 .../web}/core/components/analytics/trend-piece.tsx | 0 .../analytics/work-items/created-vs-resolved.tsx | 0 .../analytics/work-items/customized-insights.tsx | 0 .../core/components/analytics/work-items/index.ts | 0 .../analytics/work-items/modal/content.tsx | 0 .../analytics/work-items/modal/header.tsx | 0 .../components/analytics/work-items/modal/index.tsx | 0 .../analytics/work-items/priority-chart.tsx | 0 .../core/components/analytics/work-items/root.tsx | 0 .../core/components/analytics/work-items/utils.ts | 0 .../work-items/workitems-insight-table.tsx | 0 .../components/api-token/delete-token-modal.tsx | 0 .../web}/core/components/api-token/empty-state.tsx | 0 .../web}/core/components/api-token/index.ts | 0 .../api-token/modal/create-token-modal.tsx | 0 .../web}/core/components/api-token/modal/form.tsx | 0 .../api-token/modal/generated-token-details.tsx | 0 .../web}/core/components/api-token/modal/index.ts | 0 .../core/components/api-token/token-list-item.tsx | 0 .../core/components/archives/archive-tabs-list.tsx | 0 {web => apps/web}/core/components/archives/index.ts | 0 .../web}/core/components/auth-screens/index.ts | 0 .../components/auth-screens/not-authorized-view.tsx | 0 .../core/components/auth-screens/project/index.ts | 0 .../auth-screens/project/join-project.tsx | 0 .../core/components/auth-screens/workspace/index.ts | 0 .../auth-screens/workspace/not-a-member.tsx | 0 .../automation/auto-archive-automation.tsx | 0 .../components/automation/auto-close-automation.tsx | 0 .../web}/core/components/automation/index.ts | 0 .../components/automation/select-month-modal.tsx | 0 {web => apps/web}/core/components/chart/utils.ts | 0 .../command-palette/actions/help-actions.tsx | 0 .../components/command-palette/actions/helper.tsx | 0 .../components/command-palette/actions/index.ts | 0 .../actions/issue-actions/actions-list.tsx | 0 .../actions/issue-actions/change-assignee.tsx | 0 .../actions/issue-actions/change-priority.tsx | 0 .../actions/issue-actions/change-state.tsx | 0 .../command-palette/actions/issue-actions/index.ts | 0 .../command-palette/actions/project-actions.tsx | 0 .../command-palette/actions/search-results.tsx | 0 .../command-palette/actions/theme-actions.tsx | 0 .../actions/workspace-settings-actions.tsx | 0 .../components/command-palette/command-modal.tsx | 0 .../components/command-palette/command-palette.tsx | 0 .../web}/core/components/command-palette/index.ts | 0 .../shortcuts-modal/commands-list.tsx | 0 .../command-palette/shortcuts-modal/index.ts | 0 .../command-palette/shortcuts-modal/modal.tsx | 0 .../web}/core/components/comments/comment-card.tsx | 0 .../core/components/comments/comment-create.tsx | 0 .../core/components/comments/comment-reaction.tsx | 0 .../web}/core/components/comments/comments.tsx | 0 {web => apps/web}/core/components/comments/index.ts | 0 .../web}/core/components/common/access-field.tsx | 0 .../components/common/activity/activity-block.tsx | 0 .../components/common/activity/activity-item.tsx | 0 .../web}/core/components/common/activity/helper.tsx | 0 .../web}/core/components/common/activity/index.ts | 0 .../web}/core/components/common/activity/user.tsx | 0 .../core/components/common/applied-filters/date.tsx | 0 .../core/components/common/applied-filters/index.ts | 0 .../components/common/applied-filters/members.tsx | 0 .../web}/core/components/common/breadcrumb-link.tsx | 0 .../web}/core/components/common/count-chip.tsx | 0 .../web}/core/components/common/empty-state.tsx | 0 .../core/components/common/filters/created-at.tsx | 0 .../core/components/common/filters/created-by.tsx | 0 .../web}/core/components/common/filters/index.ts | 0 {web => apps/web}/core/components/common/index.ts | 0 .../core/components/common/latest-feature-block.tsx | 0 .../web}/core/components/common/logo-spinner.tsx | 0 {web => apps/web}/core/components/common/logo.tsx | 0 .../web}/core/components/common/new-empty-state.tsx | 0 .../core/components/common/page-access-icon.tsx | 0 .../web}/core/components/common/pro-icon.tsx | 0 .../web}/core/components/common/switcher-label.tsx | 0 {web => apps/web}/core/components/core/activity.tsx | 0 .../web}/core/components/core/app-header.tsx | 0 .../core/components/core/content-overflow-HOC.tsx | 0 .../web}/core/components/core/content-wrapper.tsx | 0 .../core/description-versions/dropdown-item.tsx | 0 .../core/description-versions/dropdown.tsx | 0 .../components/core/description-versions/index.ts | 0 .../components/core/description-versions/modal.tsx | 0 .../components/core/description-versions/root.tsx | 0 .../components/core/filters/date-filter-modal.tsx | 0 .../components/core/filters/date-filter-select.tsx | 0 .../web}/core/components/core/filters/index.ts | 0 .../core/components/core/image-picker-popover.tsx | 0 {web => apps/web}/core/components/core/index.ts | 0 .../web}/core/components/core/list/index.ts | 0 .../web}/core/components/core/list/list-item.tsx | 0 .../web}/core/components/core/list/list-root.tsx | 0 .../core/modals/bulk-delete-issues-modal-item.tsx | 0 .../core/modals/bulk-delete-issues-modal.tsx | 0 .../core/modals/existing-issues-list-modal.tsx | 0 .../core/modals/gpt-assistant-popover.tsx | 0 .../web}/core/components/core/modals/index.ts | 0 .../core/modals/issue-search-modal-empty-state.tsx | 0 .../core/modals/user-image-upload-modal.tsx | 0 .../core/modals/workspace-image-upload-modal.tsx | 0 .../core/multiple-select/entity-select-action.tsx | 0 .../core/multiple-select/group-select-action.tsx | 0 .../core/components/core/multiple-select/index.ts | 0 .../core/multiple-select/select-group.tsx | 0 .../web}/core/components/core/page-title.tsx | 0 .../core/components/core/render-if-visible-HOC.tsx | 0 .../web}/core/components/core/sidebar/index.ts | 0 .../core/components/core/sidebar/progress-chart.tsx | 0 .../core/sidebar/sidebar-menu-hamburger-toggle.tsx | 0 .../core/sidebar/single-progress-stats.tsx | 0 .../components/core/theme/color-picker-input.tsx | 0 .../components/core/theme/custom-theme-selector.tsx | 0 .../web}/core/components/core/theme/index.ts | 0 .../core/components/core/theme/theme-switch.tsx | 0 .../components/cycles/active-cycle/cycle-stats.tsx | 0 .../core/components/cycles/active-cycle/index.ts | 0 .../components/cycles/active-cycle/productivity.tsx | 0 .../components/cycles/active-cycle/progress.tsx | 0 .../cycles/active-cycle/use-cycles-details.ts | 0 .../components/cycles/analytics-sidebar/index.ts | 0 .../cycles/analytics-sidebar/issue-progress.tsx | 0 .../cycles/analytics-sidebar/progress-stats.tsx | 0 .../components/cycles/analytics-sidebar/root.tsx | 0 .../cycles/analytics-sidebar/sidebar-details.tsx | 0 .../cycles/analytics-sidebar/sidebar-header.tsx | 0 .../core/components/cycles/applied-filters/date.tsx | 0 .../core/components/cycles/applied-filters/index.ts | 0 .../core/components/cycles/applied-filters/root.tsx | 0 .../components/cycles/applied-filters/status.tsx | 0 .../components/cycles/archived-cycles/header.tsx | 0 .../core/components/cycles/archived-cycles/index.ts | 0 .../components/cycles/archived-cycles/modal.tsx | 0 .../core/components/cycles/archived-cycles/root.tsx | 0 .../core/components/cycles/archived-cycles/view.tsx | 0 .../core/components/cycles/cycle-peek-overview.tsx | 0 .../core/components/cycles/cycles-view-header.tsx | 0 .../web}/core/components/cycles/cycles-view.tsx | 0 .../web}/core/components/cycles/delete-modal.tsx | 0 .../cycles/dropdowns/estimate-type-dropdown.tsx | 0 .../cycles/dropdowns/filters/end-date.tsx | 0 .../components/cycles/dropdowns/filters/index.ts | 0 .../components/cycles/dropdowns/filters/root.tsx | 0 .../cycles/dropdowns/filters/start-date.tsx | 0 .../components/cycles/dropdowns/filters/status.tsx | 0 .../web}/core/components/cycles/dropdowns/index.ts | 0 {web => apps/web}/core/components/cycles/form.tsx | 0 {web => apps/web}/core/components/cycles/index.ts | 0 .../cycles/list/cycle-list-group-header.tsx | 0 .../cycles/list/cycle-list-item-action.tsx | 0 .../cycles/list/cycle-list-project-group-header.tsx | 0 .../components/cycles/list/cycles-list-item.tsx | 0 .../core/components/cycles/list/cycles-list-map.tsx | 0 .../web}/core/components/cycles/list/index.ts | 0 .../web}/core/components/cycles/list/root.tsx | 0 {web => apps/web}/core/components/cycles/modal.tsx | 0 .../web}/core/components/cycles/quick-actions.tsx | 0 .../components/cycles/transfer-issues-modal.tsx | 0 .../web}/core/components/cycles/transfer-issues.tsx | 0 .../web}/core/components/dropdowns/buttons.tsx | 0 .../web}/core/components/dropdowns/constants.ts | 0 .../components/dropdowns/cycle/cycle-options.tsx | 0 .../web}/core/components/dropdowns/cycle/index.tsx | 0 .../web}/core/components/dropdowns/date-range.tsx | 0 .../web}/core/components/dropdowns/date.tsx | 0 .../web}/core/components/dropdowns/estimate.tsx | 0 .../web}/core/components/dropdowns/index.ts | 0 .../web}/core/components/dropdowns/layout.tsx | 0 .../core/components/dropdowns/member/avatar.tsx | 0 .../web}/core/components/dropdowns/member/index.tsx | 0 .../components/dropdowns/member/member-options.tsx | 0 .../core/components/dropdowns/member/types.d.ts | 0 .../web}/core/components/dropdowns/merged-date.tsx | 0 .../web}/core/components/dropdowns/module/index.tsx | 0 .../components/dropdowns/module/module-options.tsx | 0 .../web}/core/components/dropdowns/priority.tsx | 0 .../web}/core/components/dropdowns/project.tsx | 0 .../web}/core/components/dropdowns/state.tsx | 0 .../web}/core/components/dropdowns/types.d.ts | 0 .../web}/core/components/editor/embeds/index.ts | 0 .../core/components/editor/embeds/mentions/index.ts | 0 .../core/components/editor/embeds/mentions/root.tsx | 0 .../core/components/editor/embeds/mentions/user.tsx | 0 {web => apps/web}/core/components/editor/index.ts | 0 .../components/editor/lite-text-editor/index.ts | 0 .../editor/lite-text-editor/lite-text-editor.tsx | 0 .../lite-text-editor/lite-text-read-only-editor.tsx | 0 .../components/editor/lite-text-editor/toolbar.tsx | 0 .../web}/core/components/editor/pdf/document.tsx | 0 .../web}/core/components/editor/pdf/index.ts | 0 .../components/editor/rich-text-editor/index.ts | 0 .../editor/rich-text-editor/rich-text-editor.tsx | 0 .../rich-text-editor/rich-text-read-only-editor.tsx | 0 .../editor/sticky-editor/color-palette.tsx | 0 .../core/components/editor/sticky-editor/editor.tsx | 0 .../core/components/editor/sticky-editor/index.ts | 0 .../components/editor/sticky-editor/toolbar.tsx | 0 .../components/empty-state/comic-box-button.tsx | 0 .../empty-state/detailed-empty-state-root.tsx | 0 .../web}/core/components/empty-state/helper.tsx | 0 .../web}/core/components/empty-state/index.ts | 0 .../empty-state/section-empty-state-root.tsx | 0 .../empty-state/simple-empty-state-root.tsx | 0 .../web}/core/components/estimates/create/index.ts | 0 .../web}/core/components/estimates/create/modal.tsx | 0 .../core/components/estimates/create/stage-one.tsx | 0 .../web}/core/components/estimates/delete/index.ts | 0 .../web}/core/components/estimates/delete/modal.tsx | 0 .../web}/core/components/estimates/empty-screen.tsx | 0 .../estimates/estimate-disable-switch.tsx | 0 .../components/estimates/estimate-list-item.tsx | 0 .../core/components/estimates/estimate-list.tsx | 0 .../core/components/estimates/estimate-search.tsx | 0 .../web}/core/components/estimates/index.ts | 0 .../web}/core/components/estimates/inputs/index.ts | 0 .../components/estimates/inputs/number-input.tsx | 0 .../web}/core/components/estimates/inputs/root.tsx | 0 .../core/components/estimates/inputs/text-input.tsx | 0 .../core/components/estimates/loader-screen.tsx | 0 .../components/estimates/points/create-root.tsx | 0 .../core/components/estimates/points/create.tsx | 0 .../web}/core/components/estimates/points/index.ts | 0 .../core/components/estimates/points/preview.tsx | 0 .../core/components/estimates/points/update.tsx | 0 .../web}/core/components/estimates/radio-select.tsx | 0 .../web}/core/components/estimates/root.tsx | 0 .../web}/core/components/exporter/column.tsx | 0 .../web}/core/components/exporter/export-form.tsx | 0 .../web}/core/components/exporter/export-modal.tsx | 0 .../web}/core/components/exporter/guide.tsx | 0 .../web}/core/components/exporter/index.tsx | 0 .../web}/core/components/exporter/prev-exports.tsx | 0 .../web}/core/components/exporter/single-export.tsx | 0 .../gantt-chart/blocks/block-row-list.tsx | 0 .../components/gantt-chart/blocks/block-row.tsx | 0 .../core/components/gantt-chart/blocks/block.tsx | 0 .../components/gantt-chart/blocks/blocks-list.tsx | 0 .../core/components/gantt-chart/blocks/index.ts | 0 .../core/components/gantt-chart/chart/header.tsx | 0 .../web}/core/components/gantt-chart/chart/index.ts | 0 .../components/gantt-chart/chart/main-content.tsx | 0 .../web}/core/components/gantt-chart/chart/root.tsx | 0 .../gantt-chart/chart/timeline-drag-helper.tsx | 0 .../components/gantt-chart/chart/views/index.ts | 0 .../components/gantt-chart/chart/views/month.tsx | 0 .../components/gantt-chart/chart/views/quarter.tsx | 0 .../components/gantt-chart/chart/views/week.tsx | 0 .../web}/core/components/gantt-chart/constants.ts | 0 .../core/components/gantt-chart/contexts/index.tsx | 0 .../web}/core/components/gantt-chart/data/index.ts | 0 .../components/gantt-chart/helpers/add-block.tsx | 0 .../helpers/blockResizables/left-resizable.tsx | 0 .../helpers/blockResizables/right-resizable.tsx | 0 .../helpers/blockResizables/use-gantt-resizable.ts | 0 .../components/gantt-chart/helpers/draggable.tsx | 0 .../core/components/gantt-chart/helpers/index.ts | 0 .../web}/core/components/gantt-chart/index.ts | 0 .../web}/core/components/gantt-chart/root.tsx | 0 .../gantt-chart/sidebar/gantt-dnd-HOC.tsx | 0 .../core/components/gantt-chart/sidebar/index.ts | 0 .../components/gantt-chart/sidebar/issues/block.tsx | 0 .../components/gantt-chart/sidebar/issues/index.ts | 0 .../gantt-chart/sidebar/issues/sidebar.tsx | 0 .../gantt-chart/sidebar/modules/block.tsx | 0 .../components/gantt-chart/sidebar/modules/index.ts | 0 .../gantt-chart/sidebar/modules/sidebar.tsx | 0 .../core/components/gantt-chart/sidebar/root.tsx | 0 .../core/components/gantt-chart/sidebar/utils.ts | 0 .../core/components/gantt-chart/views/helpers.ts | 0 .../web}/core/components/gantt-chart/views/index.ts | 0 .../core/components/gantt-chart/views/month-view.ts | 0 .../components/gantt-chart/views/quarter-view.ts | 0 .../core/components/gantt-chart/views/week-view.ts | 0 {web => apps/web}/core/components/global/index.ts | 0 .../components/global/product-updates/footer.tsx | 0 .../core/components/global/product-updates/index.ts | 0 .../components/global/product-updates/modal.tsx | 0 .../web}/core/components/global/timezone-select.tsx | 0 .../core/components/home/home-dashboard-widgets.tsx | 0 {web => apps/web}/core/components/home/index.ts | 0 {web => apps/web}/core/components/home/root.tsx | 0 .../web}/core/components/home/user-greetings.tsx | 0 .../components/home/widgets/empty-states/index.ts | 0 .../components/home/widgets/empty-states/links.tsx | 0 .../home/widgets/empty-states/no-projects.tsx | 0 .../home/widgets/empty-states/recents.tsx | 0 .../home/widgets/empty-states/stickies.tsx | 0 .../web}/core/components/home/widgets/index.ts | 0 .../core/components/home/widgets/links/action.tsx | 0 .../home/widgets/links/create-update-link-modal.tsx | 0 .../core/components/home/widgets/links/index.ts | 0 .../components/home/widgets/links/link-detail.tsx | 0 .../core/components/home/widgets/links/links.tsx | 0 .../core/components/home/widgets/links/root.tsx | 0 .../components/home/widgets/links/use-links.tsx | 0 .../components/home/widgets/loaders/home-loader.tsx | 0 .../core/components/home/widgets/loaders/index.ts | 0 .../core/components/home/widgets/loaders/loader.tsx | 0 .../components/home/widgets/loaders/quick-links.tsx | 0 .../home/widgets/loaders/recent-activity.tsx | 0 .../core/components/home/widgets/manage/index.tsx | 0 .../home/widgets/manage/widget-item-drag-handle.tsx | 0 .../components/home/widgets/manage/widget-item.tsx | 0 .../components/home/widgets/manage/widget-list.tsx | 0 .../home/widgets/manage/widget.helpers.ts | 0 .../components/home/widgets/recents/filters.tsx | 0 .../core/components/home/widgets/recents/index.tsx | 0 .../core/components/home/widgets/recents/issue.tsx | 0 .../core/components/home/widgets/recents/page.tsx | 0 .../components/home/widgets/recents/project.tsx | 0 .../components/icons/attachment/attachment-icon.tsx | 0 .../components/icons/attachment/audio-file-icon.tsx | 0 .../components/icons/attachment/css-file-icon.tsx | 0 .../components/icons/attachment/csv-file-icon.tsx | 0 .../icons/attachment/default-file-icon.tsx | 0 .../components/icons/attachment/doc-file-icon.tsx | 0 .../components/icons/attachment/document-icon.tsx | 0 .../components/icons/attachment/figma-file-icon.tsx | 0 .../components/icons/attachment/html-file-icon.tsx | 0 .../components/icons/attachment/img-file-icon.tsx | 0 .../web}/core/components/icons/attachment/index.ts | 0 .../components/icons/attachment/jpg-file-icon.tsx | 0 .../components/icons/attachment/js-file-icon.tsx | 0 .../components/icons/attachment/pdf-file-icon.tsx | 0 .../components/icons/attachment/png-file-icon.tsx | 0 .../components/icons/attachment/rar-file-icon.tsx | 0 .../components/icons/attachment/setting-icon.tsx | 0 .../components/icons/attachment/sheet-file-icon.tsx | 0 .../components/icons/attachment/svg-file-icon.tsx | 0 .../core/components/icons/attachment/tune-icon.tsx | 0 .../components/icons/attachment/txt-file-icon.tsx | 0 .../components/icons/attachment/video-file-icon.tsx | 0 .../components/icons/attachment/zip-file-icon.tsx | 0 {web => apps/web}/core/components/icons/index.ts | 0 .../web}/core/components/icons/locked-component.tsx | 0 {web => apps/web}/core/components/icons/types.d.ts | 0 .../components/inbox/content/inbox-issue-header.tsx | 0 .../inbox/content/inbox-issue-mobile-header.tsx | 0 .../web}/core/components/inbox/content/index.ts | 0 .../components/inbox/content/issue-properties.tsx | 0 .../core/components/inbox/content/issue-root.tsx | 0 .../web}/core/components/inbox/content/root.tsx | 0 .../inbox/inbox-filter/applied-filters/date.tsx | 0 .../inbox/inbox-filter/applied-filters/index.ts | 0 .../inbox/inbox-filter/applied-filters/label.tsx | 0 .../inbox/inbox-filter/applied-filters/member.tsx | 0 .../inbox/inbox-filter/applied-filters/priority.tsx | 0 .../inbox/inbox-filter/applied-filters/root.tsx | 0 .../inbox/inbox-filter/applied-filters/state.tsx | 0 .../inbox/inbox-filter/applied-filters/status.tsx | 0 .../components/inbox/inbox-filter/filters/date.tsx | 0 .../inbox/inbox-filter/filters/filter-selection.tsx | 0 .../components/inbox/inbox-filter/filters/index.ts | 0 .../inbox/inbox-filter/filters/labels.tsx | 0 .../inbox/inbox-filter/filters/members.tsx | 0 .../inbox/inbox-filter/filters/priority.tsx | 0 .../components/inbox/inbox-filter/filters/state.tsx | 0 .../inbox/inbox-filter/filters/status.tsx | 0 .../core/components/inbox/inbox-filter/index.ts | 0 .../core/components/inbox/inbox-filter/root.tsx | 0 .../components/inbox/inbox-filter/sorting/index.ts | 0 .../inbox/inbox-filter/sorting/order-by.tsx | 0 .../core/components/inbox/inbox-issue-status.tsx | 0 .../core/components/inbox/inbox-status-icon.tsx | 0 {web => apps/web}/core/components/inbox/index.ts | 0 .../inbox/modals/create-modal/create-root.tsx | 0 .../components/inbox/modals/create-modal/index.ts | 0 .../inbox/modals/create-modal/issue-description.tsx | 0 .../inbox/modals/create-modal/issue-properties.tsx | 0 .../inbox/modals/create-modal/issue-title.tsx | 0 .../components/inbox/modals/create-modal/modal.tsx | 0 .../components/inbox/modals/decline-issue-modal.tsx | 0 .../components/inbox/modals/delete-issue-modal.tsx | 0 .../web}/core/components/inbox/modals/index.ts | 0 .../components/inbox/modals/select-duplicate.tsx | 0 .../components/inbox/modals/snooze-issue-modal.tsx | 0 {web => apps/web}/core/components/inbox/root.tsx | 0 .../components/inbox/sidebar/inbox-list-item.tsx | 0 .../core/components/inbox/sidebar/inbox-list.tsx | 0 .../web}/core/components/inbox/sidebar/index.ts | 0 .../web}/core/components/inbox/sidebar/root.tsx | 0 {web => apps/web}/core/components/instance/index.ts | 0 .../core/components/instance/maintenance-view.tsx | 0 .../core/components/instance/not-ready-view.tsx | 0 .../components/integration/delete-import-modal.tsx | 0 .../core/components/integration/github/auth.tsx | 0 .../integration/github/import-configure.tsx | 0 .../integration/github/import-confirm.tsx | 0 .../components/integration/github/import-data.tsx | 0 .../components/integration/github/import-users.tsx | 0 .../core/components/integration/github/index.ts | 0 .../components/integration/github/repo-details.tsx | 0 .../core/components/integration/github/root.tsx | 0 .../integration/github/select-repository.tsx | 0 .../integration/github/single-user-select.tsx | 0 .../web}/core/components/integration/guide.tsx | 0 .../web}/core/components/integration/index.ts | 0 .../components/integration/jira/confirm-import.tsx | 0 .../components/integration/jira/give-details.tsx | 0 .../components/integration/jira/import-users.tsx | 0 .../web}/core/components/integration/jira/index.ts | 0 .../integration/jira/jira-project-detail.tsx | 0 .../web}/core/components/integration/jira/root.tsx | 0 .../core/components/integration/single-import.tsx | 0 .../integration/single-integration-card.tsx | 0 .../web}/core/components/integration/slack/index.ts | 0 .../components/integration/slack/select-channel.tsx | 0 .../core/components/issues/archive-issue-modal.tsx | 0 .../components/issues/archived-issues-header.tsx | 0 .../issues/attachment/attachment-detail.tsx | 0 .../issues/attachment/attachment-item-list.tsx | 0 .../issues/attachment/attachment-list-item.tsx | 0 .../attachment/attachment-list-upload-item.tsx | 0 .../issues/attachment/attachment-upload-details.tsx | 0 .../issues/attachment/attachment-upload.tsx | 0 .../issues/attachment/attachments-list.tsx | 0 .../issues/attachment/delete-attachment-modal.tsx | 0 .../web}/core/components/issues/attachment/index.ts | 0 .../web}/core/components/issues/attachment/root.tsx | 0 .../core/components/issues/bulk-operations/index.ts | 0 .../issues/bulk-operations/upgrade-banner.tsx | 0 .../components/issues/confirm-issue-discard.tsx | 0 .../issues/create-issue-toast-action-items.tsx | 0 .../core/components/issues/delete-issue-modal.tsx | 0 .../core/components/issues/description-input.tsx | 0 .../web}/core/components/issues/filters.tsx | 0 {web => apps/web}/core/components/issues/index.ts | 0 .../issues/issue-detail-widgets/action-buttons.tsx | 0 .../issue-detail-widgets/attachments/content.tsx | 0 .../issue-detail-widgets/attachments/helper.tsx | 0 .../issue-detail-widgets/attachments/index.ts | 0 .../attachments/quick-action-button.tsx | 0 .../issue-detail-widgets/attachments/root.tsx | 0 .../issue-detail-widgets/attachments/title.tsx | 0 .../components/issues/issue-detail-widgets/index.ts | 0 .../issue-detail-widget-collapsibles.tsx | 0 .../issue-detail-widget-modals.tsx | 0 .../issues/issue-detail-widgets/links/content.tsx | 0 .../issues/issue-detail-widgets/links/helper.tsx | 0 .../issues/issue-detail-widgets/links/index.ts | 0 .../links/quick-action-button.tsx | 0 .../issues/issue-detail-widgets/links/root.tsx | 0 .../issues/issue-detail-widgets/links/title.tsx | 0 .../issue-detail-widgets/relations/content.tsx | 0 .../issue-detail-widgets/relations/helper.tsx | 0 .../issues/issue-detail-widgets/relations/index.ts | 0 .../relations/quick-action-button.tsx | 0 .../issues/issue-detail-widgets/relations/root.tsx | 0 .../issues/issue-detail-widgets/relations/title.tsx | 0 .../components/issues/issue-detail-widgets/root.tsx | 0 .../issue-detail-widgets/sub-issues/content.tsx | 0 .../sub-issues/display-filters.tsx | 0 .../issue-detail-widgets/sub-issues/filters.tsx | 0 .../issue-detail-widgets/sub-issues/helper.ts | 0 .../issues/issue-detail-widgets/sub-issues/index.ts | 0 .../sub-issues/issues-list/list-group.tsx | 0 .../sub-issues/issues-list/list-item.tsx | 0 .../sub-issues/issues-list/properties.tsx | 0 .../sub-issues/issues-list/root.tsx | 0 .../sub-issues/quick-action-button.tsx | 0 .../issues/issue-detail-widgets/sub-issues/root.tsx | 0 .../sub-issues/title-actions.tsx | 0 .../issue-detail-widgets/sub-issues/title.tsx | 0 .../issues/issue-detail-widgets/widget-button.tsx | 0 .../components/issues/issue-detail/cycle-select.tsx | 0 .../core/components/issues/issue-detail/index.ts | 0 .../issue-activity/activity-comment-root.tsx | 0 .../issue-detail/issue-activity/activity-filter.tsx | 0 .../issue-activity/activity/actions/archived-at.tsx | 0 .../issue-activity/activity/actions/assignee.tsx | 0 .../issue-activity/activity/actions/attachment.tsx | 0 .../issue-activity/activity/actions/cycle.tsx | 0 .../issue-activity/activity/actions/default.tsx | 0 .../issue-activity/activity/actions/description.tsx | 0 .../issue-activity/activity/actions/estimate.tsx | 0 .../activity/actions/helpers/activity-block.tsx | 0 .../activity/actions/helpers/issue-link.tsx | 0 .../activity/actions/helpers/issue-user.tsx | 0 .../issue-activity/activity/actions/inbox.tsx | 0 .../issue-activity/activity/actions/index.ts | 0 .../activity/actions/label-activity-chip.tsx | 0 .../issue-activity/activity/actions/label.tsx | 0 .../issue-activity/activity/actions/link.tsx | 0 .../issue-activity/activity/actions/module.tsx | 0 .../issue-activity/activity/actions/name.tsx | 0 .../issue-activity/activity/actions/parent.tsx | 0 .../issue-activity/activity/actions/priority.tsx | 0 .../issue-activity/activity/actions/relation.tsx | 0 .../issue-activity/activity/actions/start_date.tsx | 0 .../issue-activity/activity/actions/state.tsx | 0 .../issue-activity/activity/actions/target_date.tsx | 0 .../issue-activity/activity/activity-list.tsx | 0 .../issues/issue-detail/issue-activity/helper.tsx | 0 .../issues/issue-detail/issue-activity/index.ts | 0 .../issues/issue-detail/issue-activity/root.tsx | 0 .../issue-detail/issue-activity/sort-root.tsx | 0 .../issue-detail/issue-detail-quick-actions.tsx | 0 .../issues/issue-detail/label/create-label.tsx | 0 .../components/issues/issue-detail/label/index.ts | 0 .../issues/issue-detail/label/label-list-item.tsx | 0 .../issues/issue-detail/label/label-list.tsx | 0 .../components/issues/issue-detail/label/root.tsx | 0 .../issue-detail/label/select/label-select.tsx | 0 .../issues/issue-detail/label/select/root.tsx | 0 .../issue-detail/links/create-update-link-modal.tsx | 0 .../components/issues/issue-detail/links/index.ts | 0 .../issues/issue-detail/links/link-detail.tsx | 0 .../issues/issue-detail/links/link-item.tsx | 0 .../issues/issue-detail/links/link-list.tsx | 0 .../components/issues/issue-detail/links/links.tsx | 0 .../components/issues/issue-detail/links/root.tsx | 0 .../components/issues/issue-detail/main-content.tsx | 0 .../issues/issue-detail/module-select.tsx | 0 .../issues/issue-detail/parent-select.tsx | 0 .../components/issues/issue-detail/parent/index.ts | 0 .../components/issues/issue-detail/parent/root.tsx | 0 .../issues/issue-detail/parent/sibling-item.tsx | 0 .../issues/issue-detail/parent/siblings.tsx | 0 .../issues/issue-detail/reactions/index.ts | 0 .../issues/issue-detail/reactions/issue-comment.tsx | 0 .../issues/issue-detail/reactions/issue.tsx | 0 .../issue-detail/reactions/reaction-selector.tsx | 0 .../issues/issue-detail/relation-select.tsx | 0 .../core/components/issues/issue-detail/root.tsx | 0 .../core/components/issues/issue-detail/sidebar.tsx | 0 .../components/issues/issue-detail/subscription.tsx | 0 .../issue-layouts/calendar/base-calendar-root.tsx | 0 .../issues/issue-layouts/calendar/calendar.tsx | 0 .../issues/issue-layouts/calendar/day-tile.tsx | 0 .../issue-layouts/calendar/dropdowns/index.ts | 0 .../calendar/dropdowns/months-dropdown.tsx | 0 .../calendar/dropdowns/options-dropdown.tsx | 0 .../issues/issue-layouts/calendar/header.tsx | 0 .../issues/issue-layouts/calendar/index.ts | 0 .../issue-layouts/calendar/issue-block-root.tsx | 0 .../issues/issue-layouts/calendar/issue-block.tsx | 0 .../issues/issue-layouts/calendar/issue-blocks.tsx | 0 .../calendar/quick-add-issue-actions.tsx | 0 .../issue-layouts/calendar/roots/cycle-root.tsx | 0 .../issues/issue-layouts/calendar/roots/index.ts | 0 .../issue-layouts/calendar/roots/module-root.tsx | 0 .../issue-layouts/calendar/roots/project-root.tsx | 0 .../calendar/roots/project-view-root.tsx | 0 .../issues/issue-layouts/calendar/utils.ts | 0 .../issues/issue-layouts/calendar/week-days.tsx | 0 .../issues/issue-layouts/calendar/week-header.tsx | 0 .../issue-layouts/empty-states/archived-issues.tsx | 0 .../issues/issue-layouts/empty-states/cycle.tsx | 0 .../issue-layouts/empty-states/draft-issues.tsx | 0 .../issue-layouts/empty-states/global-view.tsx | 0 .../issues/issue-layouts/empty-states/index.tsx | 0 .../issues/issue-layouts/empty-states/module.tsx | 0 .../issue-layouts/empty-states/profile-view.tsx | 0 .../issue-layouts/empty-states/project-epic.tsx | 0 .../issue-layouts/empty-states/project-issues.tsx | 0 .../issue-layouts/empty-states/project-view.tsx | 0 .../issue-layouts/filters/applied-filters/cycle.tsx | 0 .../issue-layouts/filters/applied-filters/date.tsx | 0 .../filters/applied-filters/filters-list.tsx | 0 .../issue-layouts/filters/applied-filters/index.ts | 0 .../issue-layouts/filters/applied-filters/label.tsx | 0 .../filters/applied-filters/members.tsx | 0 .../filters/applied-filters/module.tsx | 0 .../filters/applied-filters/priority.tsx | 0 .../filters/applied-filters/project.tsx | 0 .../applied-filters/roots/archived-issue.tsx | 0 .../filters/applied-filters/roots/cycle-root.tsx | 0 .../filters/applied-filters/roots/draft-issue.tsx | 0 .../applied-filters/roots/global-view-root.tsx | 0 .../filters/applied-filters/roots/index.ts | 0 .../filters/applied-filters/roots/module-root.tsx | 0 .../applied-filters/roots/profile-issues-root.tsx | 0 .../filters/applied-filters/roots/project-root.tsx | 0 .../applied-filters/roots/project-view-root.tsx | 0 .../filters/applied-filters/state-group.tsx | 0 .../issue-layouts/filters/applied-filters/state.tsx | 0 .../display-filters/display-filters-selection.tsx | 0 .../header/display-filters/display-properties.tsx | 0 .../header/display-filters/extra-options.tsx | 0 .../filters/header/display-filters/group-by.tsx | 0 .../filters/header/display-filters/index.ts | 0 .../header/display-filters/issue-grouping.tsx | 0 .../filters/header/display-filters/order-by.tsx | 0 .../filters/header/display-filters/sub-group-by.tsx | 0 .../filters/header/filters/assignee.tsx | 0 .../filters/header/filters/created-by.tsx | 0 .../issue-layouts/filters/header/filters/cycle.tsx | 0 .../filters/header/filters/due-date.tsx | 0 .../filters/header/filters/filters-selection.tsx | 0 .../issue-layouts/filters/header/filters/index.ts | 0 .../issue-layouts/filters/header/filters/labels.tsx | 0 .../filters/header/filters/mentions.tsx | 0 .../issue-layouts/filters/header/filters/module.tsx | 0 .../filters/header/filters/priority.tsx | 0 .../filters/header/filters/project.tsx | 0 .../filters/header/filters/start-date.tsx | 0 .../filters/header/filters/state-group.tsx | 0 .../issue-layouts/filters/header/filters/state.tsx | 0 .../filters/header/helpers/dropdown.tsx | 0 .../filters/header/helpers/filter-header.tsx | 0 .../filters/header/helpers/filter-option.tsx | 0 .../issue-layouts/filters/header/helpers/index.ts | 0 .../issues/issue-layouts/filters/header/index.ts | 0 .../filters/header/layout-selection.tsx | 0 .../issues/issue-layouts/filters/index.ts | 0 .../issues/issue-layouts/gantt/base-gantt-root.tsx | 0 .../issues/issue-layouts/gantt/blocks.tsx | 0 .../components/issues/issue-layouts/gantt/index.ts | 0 .../issues/issue-layouts/group-drag-overlay.tsx | 0 .../core/components/issues/issue-layouts/index.ts | 0 .../issues/issue-layouts/issue-layout-HOC.tsx | 0 .../issue-layouts/kanban/base-kanban-root.tsx | 0 .../issues/issue-layouts/kanban/block.tsx | 0 .../issues/issue-layouts/kanban/blocks-list.tsx | 0 .../issues/issue-layouts/kanban/default.tsx | 0 .../issue-layouts/kanban/headers/group-by-card.tsx | 0 .../kanban/headers/sub-group-by-card.tsx | 0 .../components/issues/issue-layouts/kanban/index.ts | 0 .../issues/issue-layouts/kanban/kanban-group.tsx | 0 .../issue-layouts/kanban/roots/cycle-root.tsx | 0 .../issue-layouts/kanban/roots/draft-issue-root.tsx | 0 .../issues/issue-layouts/kanban/roots/index.ts | 0 .../issue-layouts/kanban/roots/module-root.tsx | 0 .../kanban/roots/profile-issues-root.tsx | 0 .../issue-layouts/kanban/roots/project-root.tsx | 0 .../kanban/roots/project-view-root.tsx | 0 .../issues/issue-layouts/kanban/swimlanes.tsx | 0 .../components/issues/issue-layouts/layout-icon.tsx | 0 .../issues/issue-layouts/list/base-list-root.tsx | 0 .../issues/issue-layouts/list/block-root.tsx | 0 .../components/issues/issue-layouts/list/block.tsx | 0 .../issues/issue-layouts/list/blocks-list.tsx | 0 .../issues/issue-layouts/list/default.tsx | 0 .../issue-layouts/list/headers/group-by-card.tsx | 0 .../components/issues/issue-layouts/list/index.ts | 0 .../issues/issue-layouts/list/list-group.tsx | 0 .../issues/issue-layouts/list/list-view-types.d.ts | 0 .../list/roots/archived-issue-root.tsx | 0 .../issues/issue-layouts/list/roots/cycle-root.tsx | 0 .../issue-layouts/list/roots/draft-issue-root.tsx | 0 .../issues/issue-layouts/list/roots/index.ts | 0 .../issues/issue-layouts/list/roots/module-root.tsx | 0 .../list/roots/profile-issues-root.tsx | 0 .../issue-layouts/list/roots/project-root.tsx | 0 .../issue-layouts/list/roots/project-view-root.tsx | 0 .../issue-layouts/properties/all-properties.tsx | 0 .../issues/issue-layouts/properties/index.ts | 0 .../issue-layouts/properties/label-dropdown.tsx | 0 .../issues/issue-layouts/properties/labels.tsx | 0 .../properties/with-display-properties-HOC.tsx | 0 .../quick-action-dropdowns/all-issue.tsx | 0 .../quick-action-dropdowns/archived-issue.tsx | 0 .../quick-action-dropdowns/cycle-issue.tsx | 0 .../quick-action-dropdowns/draft-issue.tsx | 0 .../issue-layouts/quick-action-dropdowns/helper.tsx | 0 .../issue-layouts/quick-action-dropdowns/index.ts | 0 .../quick-action-dropdowns/module-issue.tsx | 0 .../quick-action-dropdowns/project-issue.tsx | 0 .../issues/issue-layouts/quick-add/button/gantt.tsx | 0 .../issues/issue-layouts/quick-add/button/index.ts | 0 .../issue-layouts/quick-add/button/kanban.tsx | 0 .../issues/issue-layouts/quick-add/button/list.tsx | 0 .../issue-layouts/quick-add/button/spreadsheet.tsx | 0 .../issue-layouts/quick-add/form/calendar.tsx | 0 .../issues/issue-layouts/quick-add/form/gantt.tsx | 0 .../issues/issue-layouts/quick-add/form/index.ts | 0 .../issues/issue-layouts/quick-add/form/kanban.tsx | 0 .../issues/issue-layouts/quick-add/form/list.tsx | 0 .../issue-layouts/quick-add/form/spreadsheet.tsx | 0 .../issues/issue-layouts/quick-add/index.ts | 0 .../issues/issue-layouts/quick-add/root.tsx | 0 .../issue-layouts/roots/all-issue-layout-root.tsx | 0 .../roots/archived-issue-layout-root.tsx | 0 .../issue-layouts/roots/cycle-layout-root.tsx | 0 .../issue-layouts/roots/draft-issue-layout-root.tsx | 0 .../components/issues/issue-layouts/roots/index.ts | 0 .../issue-layouts/roots/module-layout-root.tsx | 0 .../issue-layouts/roots/project-layout-root.tsx | 0 .../roots/project-view-layout-root.tsx | 0 .../issues/issue-layouts/save-filter-view.tsx | 0 .../spreadsheet/base-spreadsheet-root.tsx | 0 .../spreadsheet/columns/assignee-column.tsx | 0 .../spreadsheet/columns/attachment-column.tsx | 0 .../spreadsheet/columns/created-on-column.tsx | 0 .../spreadsheet/columns/cycle-column.tsx | 0 .../spreadsheet/columns/due-date-column.tsx | 0 .../spreadsheet/columns/estimate-column.tsx | 0 .../spreadsheet/columns/header-column.tsx | 0 .../issue-layouts/spreadsheet/columns/index.ts | 0 .../spreadsheet/columns/label-column.tsx | 0 .../spreadsheet/columns/link-column.tsx | 0 .../spreadsheet/columns/module-column.tsx | 0 .../spreadsheet/columns/priority-column.tsx | 0 .../spreadsheet/columns/start-date-column.tsx | 0 .../spreadsheet/columns/state-column.tsx | 0 .../spreadsheet/columns/sub-issue-column.tsx | 0 .../spreadsheet/columns/updated-on-column.tsx | 0 .../issues/issue-layouts/spreadsheet/index.ts | 0 .../issue-layouts/spreadsheet/issue-column.tsx | 0 .../issues/issue-layouts/spreadsheet/issue-row.tsx | 0 .../issue-layouts/spreadsheet/roots/cycle-root.tsx | 0 .../issues/issue-layouts/spreadsheet/roots/index.ts | 0 .../issue-layouts/spreadsheet/roots/module-root.tsx | 0 .../spreadsheet/roots/project-root.tsx | 0 .../spreadsheet/roots/project-view-root.tsx | 0 .../spreadsheet/roots/workspace-root.tsx | 0 .../spreadsheet/spreadsheet-header-column.tsx | 0 .../spreadsheet/spreadsheet-header.tsx | 0 .../issue-layouts/spreadsheet/spreadsheet-table.tsx | 0 .../issue-layouts/spreadsheet/spreadsheet-view.tsx | 0 .../core/components/issues/issue-layouts/utils.tsx | 0 .../core/components/issues/issue-modal/base.tsx | 0 .../issue-modal/components/default-properties.tsx | 0 .../issue-modal/components/description-editor.tsx | 0 .../issues/issue-modal/components/index.ts | 0 .../issues/issue-modal/components/parent-tag.tsx | 0 .../issue-modal/components/project-select.tsx | 0 .../issues/issue-modal/components/title-input.tsx | 0 .../components/issues/issue-modal/context/index.ts | 0 .../issue-modal/context/issue-modal-context.tsx | 0 .../issues/issue-modal/draft-issue-layout.tsx | 0 .../core/components/issues/issue-modal/form.tsx | 0 .../core/components/issues/issue-modal/index.ts | 0 .../core/components/issues/issue-modal/modal.tsx | 0 .../core/components/issues/issue-update-status.tsx | 0 {web => apps/web}/core/components/issues/label.tsx | 0 .../components/issues/parent-issues-list-modal.tsx | 0 .../core/components/issues/peek-overview/error.tsx | 0 .../core/components/issues/peek-overview/header.tsx | 0 .../core/components/issues/peek-overview/index.ts | 0 .../issues/peek-overview/issue-detail.tsx | 0 .../core/components/issues/peek-overview/loader.tsx | 0 .../components/issues/peek-overview/properties.tsx | 0 .../core/components/issues/peek-overview/root.tsx | 0 .../core/components/issues/peek-overview/view.tsx | 0 .../web}/core/components/issues/relations/index.ts | 0 .../components/issues/relations/issue-list-item.tsx | 0 .../core/components/issues/relations/issue-list.tsx | 0 .../core/components/issues/relations/properties.tsx | 0 .../web}/core/components/issues/select/index.ts | 0 .../web}/core/components/issues/select/label.tsx | 0 .../web}/core/components/issues/title-input.tsx | 0 .../issues/workspace-draft/delete-modal.tsx | 0 .../issues/workspace-draft/draft-issue-block.tsx | 0 .../workspace-draft/draft-issue-properties.tsx | 0 .../issues/workspace-draft/empty-state.tsx | 0 .../core/components/issues/workspace-draft/index.ts | 0 .../components/issues/workspace-draft/loader.tsx | 0 .../issues/workspace-draft/quick-action.tsx | 0 .../core/components/issues/workspace-draft/root.tsx | 0 .../core/components/labels/create-label-modal.tsx | 0 .../labels/create-update-label-inline.tsx | 0 .../core/components/labels/delete-label-modal.tsx | 0 {web => apps/web}/core/components/labels/index.ts | 0 .../labels/label-block/label-item-block.tsx | 0 .../components/labels/label-block/label-name.tsx | 0 .../components/labels/label-drag-n-drop-HOC.tsx | 0 .../web}/core/components/labels/label-utils.ts | 0 .../labels/project-setting-label-group.tsx | 0 .../labels/project-setting-label-item.tsx | 0 .../labels/project-setting-label-list.tsx | 0 {web => apps/web}/core/components/license/index.ts | 0 .../license/modal/card/base-paid-plan-card.tsx | 0 .../license/modal/card/checkout-button.tsx | 0 .../components/license/modal/card/discount-info.tsx | 0 .../components/license/modal/card/free-plan.tsx | 0 .../core/components/license/modal/card/index.ts | 0 .../components/license/modal/card/plan-upgrade.tsx | 0 .../components/license/modal/card/talk-to-sales.tsx | 0 .../web}/core/components/license/modal/index.ts | 0 .../components/modules/analytics-sidebar/index.ts | 0 .../modules/analytics-sidebar/issue-progress.tsx | 0 .../modules/analytics-sidebar/progress-stats.tsx | 0 .../components/modules/analytics-sidebar/root.tsx | 0 .../components/modules/applied-filters/date.tsx | 0 .../components/modules/applied-filters/index.ts | 0 .../components/modules/applied-filters/members.tsx | 0 .../components/modules/applied-filters/root.tsx | 0 .../components/modules/applied-filters/status.tsx | 0 .../components/modules/archived-modules/header.tsx | 0 .../components/modules/archived-modules/index.ts | 0 .../components/modules/archived-modules/modal.tsx | 0 .../components/modules/archived-modules/root.tsx | 0 .../components/modules/archived-modules/view.tsx | 0 .../core/components/modules/delete-module-modal.tsx | 0 .../components/modules/dropdowns/filters/index.ts | 0 .../components/modules/dropdowns/filters/lead.tsx | 0 .../modules/dropdowns/filters/members.tsx | 0 .../components/modules/dropdowns/filters/root.tsx | 0 .../modules/dropdowns/filters/start-date.tsx | 0 .../components/modules/dropdowns/filters/status.tsx | 0 .../modules/dropdowns/filters/target-date.tsx | 0 .../web}/core/components/modules/dropdowns/index.ts | 0 .../core/components/modules/dropdowns/order-by.tsx | 0 {web => apps/web}/core/components/modules/form.tsx | 0 .../core/components/modules/gantt-chart/blocks.tsx | 0 .../core/components/modules/gantt-chart/index.ts | 0 .../modules/gantt-chart/modules-list-layout.tsx | 0 {web => apps/web}/core/components/modules/index.ts | 0 .../modules/links/create-update-modal.tsx | 0 .../web}/core/components/modules/links/index.ts | 0 .../core/components/modules/links/list-item.tsx | 0 .../web}/core/components/modules/links/list.tsx | 0 {web => apps/web}/core/components/modules/modal.tsx | 0 .../core/components/modules/module-card-item.tsx | 0 .../core/components/modules/module-layout-icon.tsx | 0 .../components/modules/module-list-item-action.tsx | 0 .../core/components/modules/module-list-item.tsx | 0 .../components/modules/module-peek-overview.tsx | 0 .../components/modules/module-status-dropdown.tsx | 0 .../core/components/modules/module-view-header.tsx | 0 .../core/components/modules/modules-list-view.tsx | 0 .../web}/core/components/modules/quick-actions.tsx | 0 .../web}/core/components/modules/select/index.ts | 0 .../web}/core/components/modules/select/status.tsx | 0 .../core/components/modules/sidebar-select/index.ts | 0 .../modules/sidebar-select/select-status.tsx | 0 .../onboarding/create-or-join-workspaces.tsx | 0 .../core/components/onboarding/create-workspace.tsx | 0 .../web}/core/components/onboarding/header.tsx | 0 .../web}/core/components/onboarding/index.ts | 0 .../web}/core/components/onboarding/invitations.tsx | 0 .../core/components/onboarding/invite-members.tsx | 0 .../core/components/onboarding/profile-setup.tsx | 0 .../core/components/onboarding/step-indicator.tsx | 0 .../onboarding/switch-account-dropdown.tsx | 0 .../components/onboarding/switch-account-modal.tsx | 0 .../web}/core/components/onboarding/tour/index.ts | 0 .../web}/core/components/onboarding/tour/root.tsx | 0 .../core/components/onboarding/tour/sidebar.tsx | 0 .../core/components/pages/dropdowns/actions.tsx | 0 .../web}/core/components/pages/dropdowns/index.ts | 0 .../core/components/pages/editor/editor-body.tsx | 0 .../core/components/pages/editor/header/index.ts | 0 .../components/pages/editor/header/logo-picker.tsx | 0 .../core/components/pages/editor/header/root.tsx | 0 .../web}/core/components/pages/editor/index.ts | 0 .../web}/core/components/pages/editor/page-root.tsx | 0 .../pages/editor/summary/content-browser.tsx | 0 .../pages/editor/summary/heading-components.tsx | 0 .../core/components/pages/editor/summary/index.ts | 0 .../web}/core/components/pages/editor/title.tsx | 0 .../pages/editor/toolbar/color-dropdown.tsx | 0 .../core/components/pages/editor/toolbar/index.ts | 0 .../pages/editor/toolbar/options-dropdown.tsx | 0 .../core/components/pages/editor/toolbar/root.tsx | 0 .../components/pages/editor/toolbar/toolbar.tsx | 0 .../web}/core/components/pages/header/actions.tsx | 0 .../core/components/pages/header/archived-badge.tsx | 0 .../components/pages/header/copy-link-control.tsx | 0 .../components/pages/header/favorite-control.tsx | 0 .../web}/core/components/pages/header/index.ts | 0 .../core/components/pages/header/offline-badge.tsx | 0 .../web}/core/components/pages/header/root.tsx | 0 {web => apps/web}/core/components/pages/index.ts | 0 .../components/pages/list/applied-filters/index.ts | 0 .../components/pages/list/applied-filters/root.tsx | 0 .../components/pages/list/block-item-action.tsx | 0 .../web}/core/components/pages/list/block.tsx | 0 .../core/components/pages/list/filters/index.ts | 0 .../core/components/pages/list/filters/root.tsx | 0 .../web}/core/components/pages/list/index.ts | 0 .../web}/core/components/pages/list/order-by.tsx | 0 .../web}/core/components/pages/list/root.tsx | 0 .../core/components/pages/list/search-input.tsx | 0 .../core/components/pages/list/tab-navigation.tsx | 0 .../web}/core/components/pages/loaders/index.ts | 0 .../pages/loaders/page-content-loader.tsx | 0 .../core/components/pages/loaders/page-loader.tsx | 0 .../components/pages/modals/create-page-modal.tsx | 0 .../components/pages/modals/delete-page-modal.tsx | 0 .../components/pages/modals/export-page-modal.tsx | 0 .../web}/core/components/pages/modals/index.ts | 0 .../web}/core/components/pages/modals/page-form.tsx | 0 .../core/components/pages/navigation-pane/index.ts | 0 .../core/components/pages/navigation-pane/root.tsx | 0 .../pages/navigation-pane/tab-panels/assets.tsx | 0 .../navigation-pane/tab-panels/info/actors-info.tsx | 0 .../tab-panels/info/document-info.tsx | 0 .../pages/navigation-pane/tab-panels/info/root.tsx | 0 .../tab-panels/info/version-history.tsx | 0 .../pages/navigation-pane/tab-panels/outline.tsx | 0 .../pages/navigation-pane/tab-panels/root.tsx | 0 .../components/pages/navigation-pane/tabs-list.tsx | 0 .../components/pages/pages-list-main-content.tsx | 0 .../web}/core/components/pages/pages-list-view.tsx | 0 .../web}/core/components/pages/version/editor.tsx | 0 .../web}/core/components/pages/version/index.ts | 0 .../core/components/pages/version/main-content.tsx | 0 .../web}/core/components/pages/version/root.tsx | 0 .../web}/core/components/preferences/list.tsx | 0 .../web}/core/components/preferences/section.tsx | 0 .../components/profile/activity/activity-list.tsx | 0 .../components/profile/activity/download-button.tsx | 0 .../web}/core/components/profile/activity/index.ts | 0 .../profile/activity/profile-activity-list.tsx | 0 .../profile/activity/workspace-activity-list.tsx | 0 {web => apps/web}/core/components/profile/form.tsx | 0 {web => apps/web}/core/components/profile/index.ts | 0 .../notification/email-notification-form.tsx | 0 .../core/components/profile/notification/index.ts | 0 .../core/components/profile/overview/activity.tsx | 0 .../web}/core/components/profile/overview/index.ts | 0 .../profile/overview/priority-distribution.tsx | 0 .../profile/overview/state-distribution.tsx | 0 .../web}/core/components/profile/overview/stats.tsx | 0 .../core/components/profile/overview/workload.tsx | 0 .../profile/preferences/language-timezone.tsx | 0 .../components/profile/profile-issues-filter.tsx | 0 .../web}/core/components/profile/profile-issues.tsx | 0 .../profile/profile-setting-content-header.tsx | 0 .../profile/profile-setting-content-wrapper.tsx | 0 .../web}/core/components/profile/sidebar.tsx | 0 .../components/profile/start-of-week-preference.tsx | 0 {web => apps/web}/core/components/profile/time.tsx | 0 .../project-states/create-update/create.tsx | 0 .../project-states/create-update/form.tsx | 0 .../project-states/create-update/index.ts | 0 .../project-states/create-update/update.tsx | 0 .../core/components/project-states/group-item.tsx | 0 .../core/components/project-states/group-list.tsx | 0 .../web}/core/components/project-states/index.ts | 0 .../web}/core/components/project-states/loader.tsx | 0 .../components/project-states/options/delete.tsx | 0 .../core/components/project-states/options/index.ts | 0 .../project-states/options/mark-as-default.tsx | 0 .../web}/core/components/project-states/root.tsx | 0 .../project-states/state-delete-modal.tsx | 0 .../components/project-states/state-item-title.tsx | 0 .../core/components/project-states/state-item.tsx | 0 .../core/components/project-states/state-list.tsx | 0 .../components/project/applied-filters/access.tsx | 0 .../components/project/applied-filters/date.tsx | 0 .../components/project/applied-filters/index.ts | 0 .../components/project/applied-filters/members.tsx | 0 .../applied-filters/project-display-filters.tsx | 0 .../components/project/applied-filters/root.tsx | 0 .../web}/core/components/project/card-list.tsx | 0 {web => apps/web}/core/components/project/card.tsx | 0 .../project/confirm-project-member-remove.tsx | 0 .../components/project/create-project-modal.tsx | 0 .../components/project/create/common-attributes.tsx | 0 .../web}/core/components/project/create/header.tsx | 0 .../project/create/project-create-buttons.tsx | 0 .../components/project/delete-project-modal.tsx | 0 .../components/project/dropdowns/filters/access.tsx | 0 .../project/dropdowns/filters/created-at.tsx | 0 .../components/project/dropdowns/filters/index.ts | 0 .../components/project/dropdowns/filters/lead.tsx | 0 .../project/dropdowns/filters/members.tsx | 0 .../components/project/dropdowns/filters/root.tsx | 0 .../web}/core/components/project/dropdowns/index.ts | 0 .../core/components/project/dropdowns/order-by.tsx | 0 .../web}/core/components/project/empty-state.tsx | 0 .../web}/core/components/project/filters.tsx | 0 .../web}/core/components/project/form-loader.tsx | 0 {web => apps/web}/core/components/project/form.tsx | 0 .../web}/core/components/project/header.tsx | 0 {web => apps/web}/core/components/project/index.ts | 0 .../core/components/project/integration-card.tsx | 0 .../core/components/project/join-project-modal.tsx | 0 .../core/components/project/leave-project-modal.tsx | 0 .../core/components/project/member-list-item.tsx | 0 .../web}/core/components/project/member-list.tsx | 0 .../web}/core/components/project/member-select.tsx | 0 .../core/components/project/multi-select-modal.tsx | 0 .../components/project/project-feature-update.tsx | 0 .../components/project/project-network-icon.tsx | 0 .../project/project-settings-member-defaults.tsx | 0 .../components/project/publish-project/index.ts | 0 .../components/project/publish-project/modal.tsx | 0 {web => apps/web}/core/components/project/root.tsx | 0 .../core/components/project/search-projects.tsx | 0 .../project/send-project-invitation-modal.tsx | 0 .../archive-project/archive-restore-modal.tsx | 0 .../project/settings/archive-project/index.tsx | 0 .../project/settings/archive-project/selection.tsx | 0 .../project/settings/delete-project-section.tsx | 0 .../components/project/settings/features-list.tsx | 0 .../web}/core/components/project/settings/index.ts | 0 .../components/project/settings/member-columns.tsx | 0 .../core/components/settings/content-wrapper.tsx | 0 .../web}/core/components/settings/header.tsx | 0 .../web}/core/components/settings/heading.tsx | 0 .../web}/core/components/settings/helper.ts | 0 {web => apps/web}/core/components/settings/index.ts | 0 .../web}/core/components/settings/layout.tsx | 0 .../web}/core/components/settings/mobile/index.ts | 0 .../web}/core/components/settings/mobile/nav.tsx | 0 .../components/settings/project/sidebar/index.ts | 0 .../settings/project/sidebar/nav-item-children.tsx | 0 .../components/settings/project/sidebar/root.tsx | 0 .../core/components/settings/sidebar/header.tsx | 0 .../web}/core/components/settings/sidebar/index.ts | 0 .../core/components/settings/sidebar/nav-item.tsx | 0 .../web}/core/components/settings/sidebar/root.tsx | 0 {web => apps/web}/core/components/settings/tabs.tsx | 0 {web => apps/web}/core/components/sidebar/index.ts | 0 .../core/components/sidebar/sidebar-navigation.tsx | 0 .../web}/core/components/stickies/action-bar.tsx | 0 .../web}/core/components/stickies/delete-modal.tsx | 0 {web => apps/web}/core/components/stickies/index.ts | 0 .../web}/core/components/stickies/layout/index.ts | 0 .../stickies/layout/stickies-infinite.tsx | 0 .../components/stickies/layout/stickies-list.tsx | 0 .../components/stickies/layout/stickies-loader.tsx | 0 .../stickies/layout/stickies-truncated.tsx | 0 .../stickies/layout/sticky-dnd-wrapper.tsx | 0 .../components/stickies/layout/sticky.helpers.ts | 0 .../web}/core/components/stickies/modal/index.tsx | 0 .../web}/core/components/stickies/modal/search.tsx | 0 .../core/components/stickies/modal/stickies.tsx | 0 .../web}/core/components/stickies/sticky/index.ts | 0 .../web}/core/components/stickies/sticky/inputs.tsx | 0 .../web}/core/components/stickies/sticky/root.tsx | 0 .../stickies/sticky/sticky-item-drag-handle.tsx | 0 .../components/stickies/sticky/use-operations.tsx | 0 .../web}/core/components/stickies/widget.tsx | 0 .../web}/core/components/ui/empty-space.tsx | 0 {web => apps/web}/core/components/ui/index.ts | 0 .../ui/integration-and-import-export-banner.tsx | 0 .../web}/core/components/ui/labels-list.tsx | 0 .../ui/loader/cycle-module-board-loader.tsx | 0 .../ui/loader/cycle-module-list-loader.tsx | 0 .../web}/core/components/ui/loader/index.ts | 0 .../ui/loader/layouts/calendar-layout-loader.tsx | 0 .../ui/loader/layouts/gantt-layout-loader.tsx | 0 .../web}/core/components/ui/loader/layouts/index.ts | 0 .../ui/loader/layouts/kanban-layout-loader.tsx | 0 .../ui/loader/layouts/list-layout-loader.tsx | 0 .../ui/loader/layouts/members-layout-loader.tsx | 0 .../layouts/project-inbox/inbox-layout-loader.tsx | 0 .../layouts/project-inbox/inbox-sidebar-loader.tsx | 0 .../ui/loader/layouts/project-inbox/index.ts | 0 .../ui/loader/layouts/spreadsheet-layout-loader.tsx | 0 .../components/ui/loader/notification-loader.tsx | 0 .../web}/core/components/ui/loader/pages-loader.tsx | 0 .../core/components/ui/loader/projects-loader.tsx | 0 .../core/components/ui/loader/settings/activity.tsx | 0 .../components/ui/loader/settings/api-token.tsx | 0 .../core/components/ui/loader/settings/email.tsx | 0 .../ui/loader/settings/import-and-export.tsx | 0 .../core/components/ui/loader/settings/index.ts | 0 .../components/ui/loader/settings/integration.tsx | 0 .../core/components/ui/loader/settings/members.tsx | 0 .../core/components/ui/loader/settings/web-hook.tsx | 0 .../web}/core/components/ui/loader/utils.tsx | 0 .../core/components/ui/loader/view-list-loader.tsx | 0 .../core/components/ui/markdown-to-component.tsx | 0 .../web}/core/components/ui/profile-empty-state.tsx | 0 {web => apps/web}/core/components/user/index.ts | 0 .../web}/core/components/user/user-greetings.tsx | 0 .../components/views/applied-filters/access.tsx | 0 .../core/components/views/applied-filters/index.tsx | 0 .../core/components/views/applied-filters/root.tsx | 0 .../core/components/views/delete-view-modal.tsx | 0 .../components/views/filters/filter-selection.tsx | 0 .../web}/core/components/views/filters/order-by.tsx | 0 {web => apps/web}/core/components/views/form.tsx | 0 {web => apps/web}/core/components/views/helper.tsx | 0 {web => apps/web}/core/components/views/index.ts | 0 {web => apps/web}/core/components/views/modal.tsx | 0 .../web}/core/components/views/quick-actions.tsx | 0 .../core/components/views/update-view-component.tsx | 0 .../web}/core/components/views/view-list-header.tsx | 0 .../core/components/views/view-list-item-action.tsx | 0 .../web}/core/components/views/view-list-item.tsx | 0 .../web}/core/components/views/views-list.tsx | 0 .../components/web-hooks/create-webhook-modal.tsx | 0 .../components/web-hooks/delete-webhook-modal.tsx | 0 .../web}/core/components/web-hooks/empty-state.tsx | 0 .../components/web-hooks/form/delete-section.tsx | 0 .../core/components/web-hooks/form/event-types.tsx | 0 .../web}/core/components/web-hooks/form/form.tsx | 0 .../web}/core/components/web-hooks/form/index.ts | 0 .../web-hooks/form/individual-event-options.tsx | 0 .../web}/core/components/web-hooks/form/input.tsx | 0 .../core/components/web-hooks/form/secret-key.tsx | 0 .../web}/core/components/web-hooks/form/toggle.tsx | 0 .../components/web-hooks/generated-hook-details.tsx | 0 .../web}/core/components/web-hooks/index.ts | 0 .../web}/core/components/web-hooks/utils.ts | 0 .../components/web-hooks/webhooks-list-item.tsx | 0 .../core/components/web-hooks/webhooks-list.tsx | 0 .../components/workspace-notifications/index.ts | 0 .../notification-app-sidebar-option.tsx | 0 .../components/workspace-notifications/root.tsx | 0 .../workspace-notifications/sidebar/empty-state.tsx | 0 .../sidebar/filters/applied-filter.tsx | 0 .../sidebar/filters/index.ts | 0 .../sidebar/filters/menu/index.ts | 0 .../sidebar/filters/menu/menu-option-item.tsx | 0 .../sidebar/filters/menu/root.tsx | 0 .../workspace-notifications/sidebar/header/index.ts | 0 .../sidebar/header/options/index.ts | 0 .../sidebar/header/options/menu-option/index.ts | 0 .../header/options/menu-option/menu-item.tsx | 0 .../sidebar/header/options/menu-option/root.tsx | 0 .../sidebar/header/options/root.tsx | 0 .../workspace-notifications/sidebar/header/root.tsx | 0 .../workspace-notifications/sidebar/index.ts | 0 .../workspace-notifications/sidebar/loader.tsx | 0 .../sidebar/notification-card/content.tsx | 0 .../sidebar/notification-card/index.ts | 0 .../sidebar/notification-card/item.tsx | 0 .../sidebar/notification-card/options/archive.tsx | 0 .../sidebar/notification-card/options/button.tsx | 0 .../sidebar/notification-card/options/index.ts | 0 .../sidebar/notification-card/options/read.tsx | 0 .../sidebar/notification-card/options/root.tsx | 0 .../notification-card/options/snooze/index.ts | 0 .../notification-card/options/snooze/modal.tsx | 0 .../notification-card/options/snooze/root.tsx | 0 .../workspace-notifications/sidebar/root.tsx | 0 .../workspace/ConfirmWorkspaceMemberRemove.tsx | 0 .../workspace/billing/comparison/base.tsx | 0 .../workspace/billing/comparison/feature-detail.tsx | 0 .../workspace/billing/comparison/index.ts | 0 .../web}/core/components/workspace/billing/index.ts | 0 .../components/workspace/billing/subscription.ts | 0 .../workspace/confirm-workspace-member-remove.tsx | 0 .../components/workspace/create-workspace-form.tsx | 0 .../components/workspace/delete-workspace-form.tsx | 0 .../web}/core/components/workspace/index.ts | 0 .../components/workspace/invite-modal/actions.tsx | 0 .../components/workspace/invite-modal/fields.tsx | 0 .../core/components/workspace/invite-modal/form.tsx | 0 .../core/components/workspace/invite-modal/index.ts | 0 .../web}/core/components/workspace/logo.tsx | 0 .../core/components/workspace/settings/index.ts | 0 .../workspace/settings/invitations-list-item.tsx | 0 .../workspace/settings/member-columns.tsx | 0 .../workspace/settings/members-list-item.tsx | 0 .../components/workspace/settings/members-list.tsx | 0 .../workspace/settings/workspace-details.tsx | 0 .../components/workspace/sidebar/dropdown-item.tsx | 0 .../core/components/workspace/sidebar/dropdown.tsx | 0 .../workspace/sidebar/favorites/favorite-folder.tsx | 0 .../common/favorite-item-drag-handle.tsx | 0 .../common/favorite-item-quick-action.tsx | 0 .../favorite-items/common/favorite-item-title.tsx | 0 .../favorite-items/common/favorite-item-wrapper.tsx | 0 .../favorites/favorite-items/common/helper.tsx | 0 .../favorites/favorite-items/common/index.ts | 0 .../sidebar/favorites/favorite-items/index.ts | 0 .../sidebar/favorites/favorite-items/root.tsx | 0 .../workspace/sidebar/favorites/favorites-menu.tsx | 0 .../sidebar/favorites/favorites.helpers.ts | 0 .../components/workspace/sidebar/favorites/index.ts | 0 .../workspace/sidebar/favorites/new-fav-folder.tsx | 0 .../components/workspace/sidebar/help-section.tsx | 0 .../web}/core/components/workspace/sidebar/index.ts | 0 .../workspace/sidebar/project-navigation.tsx | 0 .../workspace/sidebar/projects-list-item.tsx | 0 .../components/workspace/sidebar/projects-list.tsx | 0 .../components/workspace/sidebar/quick-actions.tsx | 0 .../workspace/sidebar/sidebar-menu-items.tsx | 0 .../components/workspace/sidebar/user-menu-item.tsx | 0 .../core/components/workspace/sidebar/user-menu.tsx | 0 .../workspace/sidebar/workspace-menu-header.tsx | 0 .../workspace/sidebar/workspace-menu-item.tsx | 0 .../components/workspace/sidebar/workspace-menu.tsx | 0 .../workspace/views/default-view-list-item.tsx | 0 .../workspace/views/default-view-quick-action.tsx | 0 .../workspace/views/delete-view-modal.tsx | 0 .../web}/core/components/workspace/views/form.tsx | 0 .../web}/core/components/workspace/views/header.tsx | 0 .../web}/core/components/workspace/views/index.ts | 0 .../web}/core/components/workspace/views/modal.tsx | 0 .../components/workspace/views/quick-action.tsx | 0 .../components/workspace/views/view-list-item.tsx | 0 .../core/components/workspace/views/views-list.tsx | 0 {web => apps/web}/core/constants/calendar.ts | 0 {web => apps/web}/core/constants/editor.ts | 0 {web => apps/web}/core/constants/fetch-keys.ts | 0 {web => apps/web}/core/constants/plans.tsx | 0 .../web}/core/hooks/context/use-issue-modal.tsx | 0 {web => apps/web}/core/hooks/editor/index.ts | 0 .../web}/core/hooks/editor/use-editor-config.ts | 0 .../web}/core/hooks/editor/use-editor-mention.tsx | 0 .../web}/core/hooks/store/estimates/index.ts | 0 .../hooks/store/estimates/use-estimate-point.ts | 0 .../web}/core/hooks/store/estimates/use-estimate.ts | 0 .../hooks/store/estimates/use-project-estimate.ts | 0 {web => apps/web}/core/hooks/store/index.ts | 0 .../web}/core/hooks/store/notifications/index.ts | 0 .../hooks/store/notifications/use-notification.ts | 0 .../notifications/use-workspace-notifications.ts | 0 {web => apps/web}/core/hooks/store/use-analytics.ts | 0 {web => apps/web}/core/hooks/store/use-app-theme.ts | 0 .../web}/core/hooks/store/use-calendar-view.ts | 0 .../web}/core/hooks/store/use-command-palette.ts | 0 .../web}/core/hooks/store/use-cycle-filter.ts | 0 {web => apps/web}/core/hooks/store/use-cycle.ts | 0 {web => apps/web}/core/hooks/store/use-dashboard.ts | 0 .../web}/core/hooks/store/use-editor-asset.ts | 0 {web => apps/web}/core/hooks/store/use-favorite.ts | 0 .../web}/core/hooks/store/use-global-view.ts | 0 {web => apps/web}/core/hooks/store/use-home.ts | 0 .../web}/core/hooks/store/use-inbox-issues.ts | 0 {web => apps/web}/core/hooks/store/use-instance.ts | 0 .../web}/core/hooks/store/use-issue-detail.ts | 0 {web => apps/web}/core/hooks/store/use-issues.ts | 0 .../web}/core/hooks/store/use-kanban-view.ts | 0 {web => apps/web}/core/hooks/store/use-label.ts | 0 {web => apps/web}/core/hooks/store/use-member.ts | 0 .../web}/core/hooks/store/use-module-filter.ts | 0 {web => apps/web}/core/hooks/store/use-module.ts | 0 .../core/hooks/store/use-multiple-select-store.ts | 0 .../web}/core/hooks/store/use-project-filter.ts | 0 .../web}/core/hooks/store/use-project-inbox.ts | 0 .../web}/core/hooks/store/use-project-publish.ts | 0 .../web}/core/hooks/store/use-project-state.ts | 0 .../web}/core/hooks/store/use-project-view.ts | 0 {web => apps/web}/core/hooks/store/use-project.ts | 0 .../web}/core/hooks/store/use-router-params.ts | 0 {web => apps/web}/core/hooks/store/use-transient.ts | 0 {web => apps/web}/core/hooks/store/use-webhook.ts | 0 {web => apps/web}/core/hooks/store/use-workspace.ts | 0 {web => apps/web}/core/hooks/store/user/index.ts | 0 .../web}/core/hooks/store/user/user-permissions.ts | 0 .../web}/core/hooks/store/user/user-user-profile.ts | 0 .../core/hooks/store/user/user-user-settings.ts | 0 .../web}/core/hooks/store/user/user-user.ts | 0 .../web}/core/hooks/store/workspace-draft/index.ts | 0 .../use-workspace-draft-issue-filters.ts | 0 .../workspace-draft/use-workspace-draft-issue.ts | 0 {web => apps/web}/core/hooks/use-app-router.tsx | 0 {web => apps/web}/core/hooks/use-auto-save.tsx | 0 {web => apps/web}/core/hooks/use-auto-scroller.tsx | 0 .../core/hooks/use-collaborative-page-actions.tsx | 0 {web => apps/web}/core/hooks/use-current-time.tsx | 0 {web => apps/web}/core/hooks/use-debounce.tsx | 0 .../web}/core/hooks/use-dropdown-key-down.tsx | 0 {web => apps/web}/core/hooks/use-dropdown.ts | 0 .../use-extended-sidebar-overview-outside-click.tsx | 0 .../web}/core/hooks/use-favorite-item-details.tsx | 0 {web => apps/web}/core/hooks/use-group-dragndrop.ts | 0 .../web}/core/hooks/use-integration-popup.tsx | 0 .../web}/core/hooks/use-intersection-observer.ts | 0 .../web}/core/hooks/use-issue-layout-store.ts | 0 .../hooks/use-issue-peek-overview-redirection.tsx | 0 {web => apps/web}/core/hooks/use-issues-actions.tsx | 0 {web => apps/web}/core/hooks/use-keypress.tsx | 0 {web => apps/web}/core/hooks/use-local-storage.tsx | 0 {web => apps/web}/core/hooks/use-multiple-select.ts | 0 {web => apps/web}/core/hooks/use-online-status.ts | 0 {web => apps/web}/core/hooks/use-page-fallback.ts | 0 {web => apps/web}/core/hooks/use-page-filters.ts | 0 {web => apps/web}/core/hooks/use-page-operations.ts | 0 .../web}/core/hooks/use-parse-editor-content.ts | 0 .../core/hooks/use-peek-overview-outside-click.tsx | 0 {web => apps/web}/core/hooks/use-platform-os.tsx | 0 .../web}/core/hooks/use-project-issue-properties.ts | 0 {web => apps/web}/core/hooks/use-query-params.ts | 0 .../web}/core/hooks/use-reload-confirmation.tsx | 0 .../web}/core/hooks/use-resolved-asset-path.tsx | 0 {web => apps/web}/core/hooks/use-stickies.tsx | 0 .../core/hooks/use-table-keyboard-navigation.tsx | 0 {web => apps/web}/core/hooks/use-timeline-chart.ts | 0 {web => apps/web}/core/hooks/use-timer.tsx | 0 .../web}/core/hooks/use-timezone-converter.tsx | 0 {web => apps/web}/core/hooks/use-timezone.tsx | 0 {web => apps/web}/core/hooks/use-window-size.tsx | 0 .../web}/core/hooks/use-workspace-invitation.tsx | 0 .../core/hooks/use-workspace-issue-properties.ts | 0 {web => apps/web}/core/layouts/auth-layout/index.ts | 0 .../core/layouts/auth-layout/project-wrapper.tsx | 0 .../core/layouts/auth-layout/workspace-wrapper.tsx | 0 .../web}/core/layouts/default-layout/index.tsx | 0 {web => apps/web}/core/lib/intercom-provider.tsx | 0 {web => apps/web}/core/lib/local-storage.ts | 0 .../web}/core/lib/n-progress/AppProgressBar.tsx | 0 {web => apps/web}/core/lib/n-progress/index.tsx | 0 .../core/lib/n-progress/utils/getAnchorProperty.ts | 0 .../web}/core/lib/n-progress/utils/sameURL.ts | 0 .../web}/core/lib/n-progress/withSuspense.tsx | 0 {web => apps/web}/core/lib/polyfills/index.ts | 0 .../web}/core/lib/polyfills/requestIdleCallback.ts | 0 {web => apps/web}/core/lib/posthog-provider.tsx | 0 {web => apps/web}/core/lib/posthog-view.tsx | 0 {web => apps/web}/core/lib/store-context.tsx | 0 .../core/lib/wrappers/authentication-wrapper.tsx | 0 {web => apps/web}/core/lib/wrappers/index.ts | 0 .../web}/core/lib/wrappers/instance-wrapper.tsx | 0 .../web}/core/lib/wrappers/store-wrapper.tsx | 0 {web => apps/web}/core/local-db/storage.sqlite.ts | 0 {web => apps/web}/core/local-db/utils/constants.ts | 0 {web => apps/web}/core/local-db/utils/data.utils.ts | 0 {web => apps/web}/core/local-db/utils/indexes.ts | 0 .../web}/core/local-db/utils/load-issues.ts | 0 .../web}/core/local-db/utils/load-workspace.ts | 0 .../web}/core/local-db/utils/query-constructor.ts | 0 .../web}/core/local-db/utils/query-executor.ts | 0 .../web}/core/local-db/utils/query-sanitizer.ts.ts | 0 .../web}/core/local-db/utils/query.utils.ts | 0 {web => apps/web}/core/local-db/utils/schemas.ts | 0 {web => apps/web}/core/local-db/utils/tables.ts | 0 {web => apps/web}/core/local-db/utils/utils.ts | 0 {web => apps/web}/core/local-db/worker/db.ts | 0 .../core/local-db/worker/wa-sqlite/src/FacadeVFS.js | 0 .../worker/wa-sqlite/src/OPFSCoopSyncVFS.js | 0 .../web}/core/local-db/worker/wa-sqlite/src/VFS.js | 0 .../local-db/worker/wa-sqlite/src/sqlite-api.js | 0 .../worker/wa-sqlite/src/sqlite-constants.js | 0 .../worker/wa-sqlite/src/types/globals.d.ts | 0 .../local-db/worker/wa-sqlite/src/types/index.d.ts | 0 .../local-db/worker/wa-sqlite/src/wa-sqlite.mjs | 0 .../local-db/worker/wa-sqlite/src/wa-sqlite.wasm | Bin {web => apps/web}/core/services/ai.service.ts | 0 .../web}/core/services/analytics.service.ts | 0 {web => apps/web}/core/services/api.service.ts | 0 .../web}/core/services/app_config.service.ts | 0 .../web}/core/services/app_installation.service.ts | 0 {web => apps/web}/core/services/auth.service.ts | 0 {web => apps/web}/core/services/cycle.service.ts | 0 .../web}/core/services/cycle_archive.service.ts | 0 .../web}/core/services/dashboard.service.ts | 0 .../web}/core/services/favorite/favorite.service.ts | 0 {web => apps/web}/core/services/favorite/index.ts | 0 .../web}/core/services/file-upload.service.ts | 0 {web => apps/web}/core/services/file.service.ts | 0 .../web}/core/services/inbox/inbox-issue.service.ts | 0 {web => apps/web}/core/services/inbox/index.ts | 0 .../inbox/intake-work_item_version.service.ts | 0 {web => apps/web}/core/services/instance.service.ts | 0 .../core/services/integrations/github.service.ts | 0 .../web}/core/services/integrations/index.ts | 0 .../services/integrations/integration.service.ts | 0 .../web}/core/services/integrations/jira.service.ts | 0 {web => apps/web}/core/services/issue/index.ts | 0 .../web}/core/services/issue/issue.service.ts | 0 .../core/services/issue/issue_activity.service.ts | 0 .../core/services/issue/issue_archive.service.ts | 0 .../core/services/issue/issue_attachment.service.ts | 0 .../core/services/issue/issue_comment.service.ts | 0 .../web}/core/services/issue/issue_draft.service.ts | 0 .../web}/core/services/issue/issue_label.service.ts | 0 .../core/services/issue/issue_reaction.service.ts | 0 .../core/services/issue/issue_relation.service.ts | 0 .../services/issue/work_item_version.service.ts | 0 .../core/services/issue/workspace_draft.service.ts | 0 .../web}/core/services/issue_filter.service.ts | 0 {web => apps/web}/core/services/module.service.ts | 0 .../web}/core/services/module_archive.service.ts | 0 {web => apps/web}/core/services/page/index.ts | 0 .../services/page/project-page-version.service.ts | 0 .../web}/core/services/page/project-page.service.ts | 0 {web => apps/web}/core/services/project/index.ts | 0 .../services/project/project-archive.service.ts | 0 .../core/services/project/project-export.service.ts | 0 .../core/services/project/project-member.service.ts | 0 .../services/project/project-publish.service.ts | 0 .../core/services/project/project-state.service.ts | 0 .../web}/core/services/project/project.service.ts | 0 {web => apps/web}/core/services/sticky.service.ts | 0 {web => apps/web}/core/services/timezone.service.ts | 0 {web => apps/web}/core/services/user.service.ts | 0 {web => apps/web}/core/services/view.service.ts | 0 {web => apps/web}/core/services/webhook.service.ts | 0 .../core/services/workspace-notification.service.ts | 0 .../web}/core/services/workspace.service.ts | 0 {web => apps/web}/core/store/analytics.store.ts | 0 .../web}/core/store/base-command-palette.store.ts | 0 {web => apps/web}/core/store/cycle.store.ts | 0 {web => apps/web}/core/store/cycle_filter.store.ts | 0 {web => apps/web}/core/store/dashboard.store.ts | 0 {web => apps/web}/core/store/editor/asset.store.ts | 0 .../web}/core/store/estimates/estimate-point.ts | 0 .../core/store/estimates/project-estimate.store.ts | 0 {web => apps/web}/core/store/favorite.store.ts | 0 {web => apps/web}/core/store/global-view.store.ts | 0 .../web}/core/store/inbox/inbox-issue.store.ts | 0 .../web}/core/store/inbox/project-inbox.store.ts | 0 {web => apps/web}/core/store/instance.store.ts | 0 .../web}/core/store/issue/archived/filter.store.ts | 0 .../web}/core/store/issue/archived/index.ts | 0 .../web}/core/store/issue/archived/issue.store.ts | 0 .../web}/core/store/issue/cycle/filter.store.ts | 0 {web => apps/web}/core/store/issue/cycle/index.ts | 0 .../web}/core/store/issue/cycle/issue.store.ts | 0 .../web}/core/store/issue/draft/filter.store.ts | 0 {web => apps/web}/core/store/issue/draft/index.ts | 0 .../web}/core/store/issue/draft/issue.store.ts | 0 .../core/store/issue/helpers/base-issues-utils.ts | 0 .../core/store/issue/helpers/base-issues.store.ts | 0 .../issue/helpers/issue-filter-helper.store.ts | 0 .../store/issue/issue-details/attachment.store.ts | 0 .../core/store/issue/issue-details/comment.store.ts | 0 .../issue/issue-details/comment_reaction.store.ts | 0 .../core/store/issue/issue-details/issue.store.ts | 0 .../core/store/issue/issue-details/link.store.ts | 0 .../store/issue/issue-details/reaction.store.ts | 0 .../store/issue/issue-details/relation.store.ts | 0 .../core/store/issue/issue-details/root.store.ts | 0 .../store/issue/issue-details/sub_issues.store.ts | 0 .../issue/issue-details/sub_issues_filter.store.ts | 0 .../store/issue/issue-details/subscription.store.ts | 0 {web => apps/web}/core/store/issue/issue.store.ts | 0 .../core/store/issue/issue_calendar_view.store.ts | 0 .../web}/core/store/issue/issue_gantt_view.store.ts | 0 .../core/store/issue/issue_kanban_view.store.ts | 0 .../web}/core/store/issue/module/filter.store.ts | 0 {web => apps/web}/core/store/issue/module/index.ts | 0 .../web}/core/store/issue/module/issue.store.ts | 0 .../web}/core/store/issue/profile/filter.store.ts | 0 {web => apps/web}/core/store/issue/profile/index.ts | 0 .../web}/core/store/issue/profile/issue.store.ts | 0 .../core/store/issue/project-views/filter.store.ts | 0 .../web}/core/store/issue/project-views/index.ts | 0 .../core/store/issue/project-views/issue.store.ts | 0 .../web}/core/store/issue/project/filter.store.ts | 0 {web => apps/web}/core/store/issue/project/index.ts | 0 .../web}/core/store/issue/project/issue.store.ts | 0 {web => apps/web}/core/store/issue/root.store.ts | 0 .../store/issue/workspace-draft/filter.store.ts | 0 .../web}/core/store/issue/workspace-draft/index.ts | 0 .../core/store/issue/workspace-draft/issue.store.ts | 0 .../web}/core/store/issue/workspace/filter.store.ts | 0 .../web}/core/store/issue/workspace/index.ts | 0 .../web}/core/store/issue/workspace/issue.store.ts | 0 {web => apps/web}/core/store/label.store.ts | 0 .../core/store/member/base-project-member.store.ts | 0 {web => apps/web}/core/store/member/index.ts | 0 .../core/store/member/workspace-member.store.ts | 0 {web => apps/web}/core/store/module.store.ts | 0 {web => apps/web}/core/store/module_filter.store.ts | 0 .../web}/core/store/multiple_select.store.ts | 0 .../web}/core/store/notifications/notification.ts | 0 .../notifications/workspace-notifications.store.ts | 0 {web => apps/web}/core/store/pages/base-page.ts | 0 .../web}/core/store/pages/page-editor-info.ts | 0 .../web}/core/store/pages/project-page.store.ts | 0 {web => apps/web}/core/store/pages/project-page.ts | 0 {web => apps/web}/core/store/project-view.store.ts | 0 {web => apps/web}/core/store/project/index.ts | 0 .../core/store/project/project-publish.store.ts | 0 .../web}/core/store/project/project.store.ts | 0 .../web}/core/store/project/project_filter.store.ts | 0 {web => apps/web}/core/store/root.store.ts | 0 {web => apps/web}/core/store/router.store.ts | 0 {web => apps/web}/core/store/state.store.ts | 0 {web => apps/web}/core/store/sticky/sticky.store.ts | 0 {web => apps/web}/core/store/theme.store.ts | 0 .../core/store/timeline/issues-timeline.store.ts | 0 .../core/store/timeline/modules-timeline.store.ts | 0 {web => apps/web}/core/store/transient.store.ts | 0 {web => apps/web}/core/store/user/account.store.ts | 0 .../web}/core/store/user/base-permissions.store.ts | 0 {web => apps/web}/core/store/user/index.ts | 0 {web => apps/web}/core/store/user/profile.store.ts | 0 {web => apps/web}/core/store/user/settings.store.ts | 0 .../web}/core/store/workspace/api-token.store.ts | 0 {web => apps/web}/core/store/workspace/home.ts | 0 {web => apps/web}/core/store/workspace/index.ts | 0 .../web}/core/store/workspace/link.store.ts | 0 .../web}/core/store/workspace/webhook.store.ts | 0 .../web}/ee/components/active-cycles/index.ts | 0 .../web}/ee/components/active-cycles/root.tsx | 0 .../workspace-active-cycles-upgrade.tsx | 0 .../web}/ee/components/breadcrumbs/index.ts | 0 .../ee/components/command-palette/modals/index.ts | 0 {web => apps/web}/ee/components/comments/index.ts | 0 .../web}/ee/components/cycles/active-cycle/index.ts | 0 .../ee/components/cycles/analytics-sidebar/index.ts | 0 .../web}/ee/components/cycles/end-cycle/index.ts | 0 {web => apps/web}/ee/components/cycles/index.ts | 0 {web => apps/web}/ee/components/de-dupe/index.ts | 0 {web => apps/web}/ee/components/editor/index.ts | 0 {web => apps/web}/ee/components/epics/index.ts | 0 .../estimates/estimate-list-item-buttons.tsx | 0 {web => apps/web}/ee/components/estimates/index.ts | 0 .../web}/ee/components/estimates/points/delete.tsx | 0 .../web}/ee/components/estimates/points/index.ts | 0 .../web}/ee/components/estimates/update/index.ts | 0 .../web}/ee/components/estimates/update/modal.tsx | 0 .../web}/ee/components/gantt-chart/index.ts | 0 {web => apps/web}/ee/components/global/index.ts | 0 {web => apps/web}/ee/components/home/header.tsx | 0 {web => apps/web}/ee/components/home/index.ts | 0 .../web}/ee/components/inbox/source-pill.tsx | 0 {web => apps/web}/ee/components/instance/index.ts | 0 .../ee/components/instance/maintenance-message.tsx | 0 .../ee/components/issues/bulk-operations/index.ts | 0 .../issues/filters/applied-filters/index.ts | 0 .../issues/filters/applied-filters/issue-types.tsx | 0 .../web}/ee/components/issues/filters/index.ts | 0 .../ee/components/issues/filters/issue-types.tsx | 0 .../ee/components/issues/filters/team-project.tsx | 0 {web => apps/web}/ee/components/issues/header.tsx | 0 {web => apps/web}/ee/components/issues/index.ts | 0 .../issue-details/additional-activity-root.tsx | 0 .../issues/issue-details/additional-properties.tsx | 0 .../ee/components/issues/issue-details/index.ts | 0 .../issues/issue-details/issue-creator.tsx | 0 .../issues/issue-details/issue-identifier.tsx | 0 .../issue-properties-activity/index.ts | 0 .../issue-properties-activity/root.tsx | 0 .../issues/issue-details/issue-type-activity.tsx | 0 .../issues/issue-details/issue-type-switcher.tsx | 0 .../issues/issue-details/parent-select-root.tsx | 0 .../issues/issue-layouts/additional-properties.tsx | 0 .../issues/issue-layouts/empty-states/index.ts | 0 .../issue-layouts/quick-action-dropdowns/index.ts | 0 .../ee/components/issues/issue-layouts/utils.tsx | 0 .../issues/issue-modal/additional-properties.tsx | 0 .../web}/ee/components/issues/issue-modal/index.ts | 0 .../issues/issue-modal/issue-type-select.tsx | 0 .../ee/components/issues/issue-modal/provider.tsx | 0 .../web}/ee/components/issues/quick-add/index.ts | 0 .../web}/ee/components/issues/quick-add/root.tsx | 0 .../issues/worklog/activity/filter-root.tsx | 0 .../ee/components/issues/worklog/activity/index.ts | 0 .../ee/components/issues/worklog/activity/root.tsx | 0 .../worklog/activity/worklog-create-button.tsx | 0 .../web}/ee/components/issues/worklog/index.ts | 0 .../ee/components/issues/worklog/property/index.ts | 0 .../ee/components/issues/worklog/property/root.tsx | 0 {web => apps/web}/ee/components/pages/index.ts | 0 .../ee/components/projects/create/attributes.tsx | 0 .../web}/ee/components/projects/create/root.tsx | 0 {web => apps/web}/ee/components/projects/header.tsx | 0 .../web}/ee/components/projects/mobile-header.tsx | 0 {web => apps/web}/ee/components/projects/page.tsx | 0 .../ee/components/projects/settings/intake/index.ts | 0 .../projects/settings/useProjectColumns.tsx | 0 {web => apps/web}/ee/components/relations/index.tsx | 0 {web => apps/web}/ee/components/sidebar/index.ts | 0 .../web}/ee/components/views/access-controller.tsx | 0 .../ee/components/views/filters/access-filter.tsx | 0 .../web}/ee/components/views/publish/index.ts | 0 {web => apps/web}/ee/components/workflow/index.ts | 0 .../ee/components/workspace-notifications/index.ts | 0 .../web}/ee/components/workspace/billing/index.ts | 0 .../web}/ee/components/workspace/billing/root.tsx | 0 .../components/workspace/delete-workspace-modal.tsx | 0 .../workspace/delete-workspace-section.tsx | 0 .../web}/ee/components/workspace/edition-badge.tsx | 0 {web => apps/web}/ee/components/workspace/index.ts | 0 .../workspace/settings/useMemberColumns.tsx | 0 .../web}/ee/components/workspace/sidebar/index.ts | 0 .../workspace/sidebar/teams-sidebar-list.tsx | 0 .../web}/ee/components/workspace/upgrade-badge.tsx | 0 {web => apps/web}/ee/constants/editor.ts | 0 {web => apps/web}/ee/constants/index.ts | 0 {web => apps/web}/ee/constants/project/index.ts | 0 .../web}/ee/constants/project/settings/features.tsx | 0 .../web}/ee/constants/project/settings/index.ts | 0 .../web}/ee/constants/project/settings/tabs.ts | 0 {web => apps/web}/ee/constants/sidebar-favorites.ts | 0 {web => apps/web}/ee/helpers/command-palette.ts | 0 {web => apps/web}/ee/helpers/epic-analytics.ts | 0 {web => apps/web}/ee/helpers/instance.helper.ts | 0 {web => apps/web}/ee/helpers/issue-action-helper.ts | 0 {web => apps/web}/ee/helpers/issue-filter.helper.ts | 0 {web => apps/web}/ee/helpers/project-settings.ts | 0 {web => apps/web}/ee/helpers/workspace.helper.ts | 0 {web => apps/web}/ee/hooks/store/index.ts | 0 .../web}/ee/hooks/use-additional-editor-mention.tsx | 0 .../hooks/use-additional-favorite-item-details.ts | 0 {web => apps/web}/ee/hooks/use-editor-flagging.ts | 0 {web => apps/web}/ee/hooks/use-file-size.ts | 0 {web => apps/web}/ee/hooks/use-issue-embed.tsx | 0 {web => apps/web}/ee/hooks/use-issue-properties.tsx | 0 {web => apps/web}/ee/hooks/use-page-flag.ts | 0 {web => apps/web}/ee/layouts/project-wrapper.tsx | 0 {web => apps/web}/ee/layouts/workspace-wrapper.tsx | 0 {web => apps/web}/ee/services/index.ts | 0 .../web}/ee/services/project/estimate.service.ts | 0 {web => apps/web}/ee/services/project/index.ts | 0 .../ee/services/project/project-state.service.ts | 0 {web => apps/web}/ee/store/analytics.store.ts | 0 {web => apps/web}/ee/store/command-palette.store.ts | 0 {web => apps/web}/ee/store/cycle/index.ts | 0 {web => apps/web}/ee/store/estimates/estimate.ts | 0 .../web}/ee/store/issue/helpers/base-issue.store.ts | 0 .../ee/store/issue/issue-details/activity.store.ts | 0 .../web}/ee/store/issue/issue-details/root.store.ts | 0 .../web}/ee/store/issue/team-views/index.ts | 0 {web => apps/web}/ee/store/issue/team/index.ts | 0 .../web}/ee/store/member/project-member.store.ts | 0 {web => apps/web}/ee/store/project-inbox.store.ts | 0 {web => apps/web}/ee/store/root.store.ts | 0 {web => apps/web}/ee/store/state.store.ts | 0 .../web}/ee/store/timeline/base-timeline.store.ts | 0 {web => apps/web}/ee/store/user/permission.store.ts | 0 {web => apps/web}/ee/types/index.ts | 0 {web => apps/web}/ee/types/issue-types/index.ts | 0 .../ee/types/issue-types/issue-property-values.d.ts | 0 {web => apps/web}/ee/types/projects/index.ts | 0 {web => apps/web}/ee/types/projects/projects.ts | 0 {web => apps/web}/google.d.ts | 0 {web => apps/web}/helpers/authentication.helper.tsx | 0 {web => apps/web}/helpers/dashboard.helper.ts | 0 {web => apps/web}/helpers/emoji.helper.tsx | 0 {web => apps/web}/helpers/event-tracker.helper.ts | 0 {web => apps/web}/helpers/graph.helper.ts | 0 {web => apps/web}/helpers/views.helper.ts | 0 {web => apps/web}/manifest.json | 0 {web => apps/web}/next-env.d.ts | 0 {web => apps/web}/next.config.js | 0 {web => apps/web}/package.json | 0 {web => apps/web}/postcss.config.js | 0 {web => apps/web}/public/404.svg | 0 .../web}/public/animated-icons/uploading.json | 0 {web => apps/web}/public/attachment/audio-icon.png | Bin {web => apps/web}/public/attachment/css-icon.png | Bin {web => apps/web}/public/attachment/csv-icon.png | Bin .../web}/public/attachment/default-icon.png | Bin {web => apps/web}/public/attachment/doc-icon.png | Bin {web => apps/web}/public/attachment/excel-icon.png | Bin {web => apps/web}/public/attachment/figma-icon.png | Bin {web => apps/web}/public/attachment/html-icon.png | Bin {web => apps/web}/public/attachment/img-icon.png | Bin {web => apps/web}/public/attachment/jpg-icon.png | Bin {web => apps/web}/public/attachment/js-icon.png | Bin {web => apps/web}/public/attachment/pdf-icon.png | Bin {web => apps/web}/public/attachment/png-icon.png | Bin {web => apps/web}/public/attachment/rar-icon.png | Bin {web => apps/web}/public/attachment/svg-icon.png | Bin {web => apps/web}/public/attachment/txt-icon.png | Bin {web => apps/web}/public/attachment/video-icon.png | Bin {web => apps/web}/public/attachment/zip-icon.png | Bin {web => apps/web}/public/auth/access-denied.svg | 0 .../web}/public/auth/background-pattern-dark.svg | 0 .../web}/public/auth/background-pattern.svg | 0 .../web}/public/auth/project-not-authorized.svg | 0 {web => apps/web}/public/auth/unauthorized.svg | 0 .../web}/public/auth/workspace-not-authorized.svg | 0 {web => apps/web}/public/emoji/project-emoji.svg | 0 .../empty-state/active-cycle/assignee-dark.webp | Bin .../empty-state/active-cycle/assignee-light.webp | Bin .../public/empty-state/active-cycle/chart-dark.webp | Bin .../empty-state/active-cycle/chart-light.webp | Bin .../public/empty-state/active-cycle/cycle-dark.webp | Bin .../empty-state/active-cycle/cycle-light.webp | Bin .../public/empty-state/active-cycle/label-dark.webp | Bin .../empty-state/active-cycle/label-light.webp | Bin .../empty-state/active-cycle/priority-dark.webp | Bin .../empty-state/active-cycle/priority-light.webp | Bin .../empty-state/active-cycle/progress-dark.webp | Bin .../empty-state/active-cycle/progress-light.webp | Bin .../empty-state/all-issues/all-issues-dark.webp | Bin .../empty-state/all-issues/all-issues-light.webp | Bin .../empty-state/all-issues/assigned-dark.webp | Bin .../empty-state/all-issues/assigned-light.webp | Bin .../public/empty-state/all-issues/created-dark.webp | Bin .../empty-state/all-issues/created-light.webp | Bin .../empty-state/all-issues/custom-view-dark.webp | Bin .../empty-state/all-issues/custom-view-light.webp | Bin .../empty-state/all-issues/no-project-dark.webp | Bin .../empty-state/all-issues/no-project-light.webp | Bin .../empty-state/all-issues/subscribed-dark.webp | Bin .../empty-state/all-issues/subscribed-light.webp | Bin .../analytics/empty-chart-area-dark.webp | Bin .../analytics/empty-chart-area-light.webp | Bin .../empty-state/analytics/empty-chart-bar-dark.webp | Bin .../analytics/empty-chart-bar-light.webp | Bin .../analytics/empty-chart-radar-dark.webp | Bin .../analytics/empty-chart-radar-light.webp | Bin .../analytics/empty-grid-background-dark.webp | Bin .../analytics/empty-grid-background-light.webp | Bin .../empty-state/analytics/empty-table-dark.webp | Bin .../empty-state/analytics/empty-table-light.webp | Bin {web => apps/web}/public/empty-state/api-token.svg | 0 .../empty-state/archived/empty-cycles-dark.webp | Bin .../empty-state/archived/empty-cycles-light.webp | Bin .../empty-state/archived/empty-issues-dark.webp | Bin .../empty-state/archived/empty-issues-light.webp | Bin .../empty-state/archived/empty-modules-dark.webp | Bin .../empty-state/archived/empty-modules-light.webp | Bin .../cycle-issues/calendar-dark-resp.webp | Bin .../empty-state/cycle-issues/calendar-dark.webp | Bin .../cycle-issues/calendar-light-resp.webp | Bin .../empty-state/cycle-issues/calendar-light.webp | Bin .../cycle-issues/gantt_chart-dark-resp.webp | Bin .../empty-state/cycle-issues/gantt_chart-dark.webp | Bin .../cycle-issues/gantt_chart-light-resp.webp | Bin .../empty-state/cycle-issues/gantt_chart-light.webp | Bin .../empty-state/cycle-issues/kanban-dark-resp.webp | Bin .../empty-state/cycle-issues/kanban-dark.webp | Bin .../empty-state/cycle-issues/kanban-light-resp.webp | Bin .../empty-state/cycle-issues/kanban-light.webp | Bin .../empty-state/cycle-issues/list-dark-resp.webp | Bin .../public/empty-state/cycle-issues/list-dark.webp | Bin .../empty-state/cycle-issues/list-light-resp.webp | Bin .../public/empty-state/cycle-issues/list-light.webp | Bin .../cycle-issues/spreadsheet-dark-resp.webp | Bin .../empty-state/cycle-issues/spreadsheet-dark.webp | Bin .../cycle-issues/spreadsheet-light-resp.webp | Bin .../empty-state/cycle-issues/spreadsheet-light.webp | Bin {web => apps/web}/public/empty-state/cycle.svg | 0 .../web}/public/empty-state/cycle/active-dark.webp | Bin .../web}/public/empty-state/cycle/active-light.webp | Bin .../web}/public/empty-state/cycle/all-filters.svg | 0 .../public/empty-state/cycle/completed-dark.webp | Bin .../public/empty-state/cycle/completed-light.webp | Bin .../empty-state/cycle/completed-no-issues-dark.webp | Bin .../cycle/completed-no-issues-light.webp | Bin .../web}/public/empty-state/cycle/draft-dark.webp | Bin .../web}/public/empty-state/cycle/draft-light.webp | Bin .../web}/public/empty-state/cycle/name-filter.svg | 0 .../public/empty-state/cycle/upcoming-dark.webp | Bin .../public/empty-state/cycle/upcoming-light.webp | Bin .../empty-state/dashboard/dark/completed-issues.svg | 0 .../dashboard/dark/issues-by-priority.svg | 0 .../dashboard/dark/issues-by-state-group.svg | 0 .../empty-state/dashboard/dark/overdue-issues.svg | 0 .../empty-state/dashboard/dark/recent-activity.svg | 0 .../dashboard/dark/recent-collaborators-1.svg | 0 .../dashboard/dark/recent-collaborators-2.svg | 0 .../dashboard/dark/recent-collaborators-3.svg | 0 .../empty-state/dashboard/dark/upcoming-issues.svg | 0 .../dashboard/light/completed-issues.svg | 0 .../dashboard/light/issues-by-priority.svg | 0 .../dashboard/light/issues-by-state-group.svg | 0 .../empty-state/dashboard/light/overdue-issues.svg | 0 .../empty-state/dashboard/light/recent-activity.svg | 0 .../dashboard/light/recent-collaborators-1.svg | 0 .../dashboard/light/recent-collaborators-2.svg | 0 .../dashboard/light/recent-collaborators-3.svg | 0 .../empty-state/dashboard/light/upcoming-issues.svg | 0 .../public/empty-state/dashboard/widgets-dark.webp | Bin .../public/empty-state/dashboard/widgets-light.webp | Bin .../public/empty-state/dashboard_empty_project.webp | Bin .../empty-state/disabled-feature/cycles-dark.webp | Bin .../empty-state/disabled-feature/cycles-light.webp | Bin .../empty-state/disabled-feature/intake-dark.webp | Bin .../empty-state/disabled-feature/intake-light.webp | Bin .../empty-state/disabled-feature/modules-dark.webp | Bin .../empty-state/disabled-feature/modules-light.webp | Bin .../empty-state/disabled-feature/pages-dark.webp | Bin .../empty-state/disabled-feature/pages-light.webp | Bin .../empty-state/disabled-feature/views-dark.webp | Bin .../empty-state/disabled-feature/views-light.webp | Bin .../empty-state/draft/draft-issues-empty-dark.webp | Bin .../empty-state/draft/draft-issues-empty-light.webp | Bin .../empty-state/empty-filters/calendar-dark.webp | Bin .../empty-state/empty-filters/calendar-light.webp | Bin .../empty-state/empty-filters/gantt_chart-dark.webp | Bin .../empty-filters/gantt_chart-light.webp | Bin .../empty-state/empty-filters/kanban-dark.webp | Bin .../empty-state/empty-filters/kanban-light.webp | Bin .../public/empty-state/empty-filters/list-dark.webp | Bin .../empty-state/empty-filters/list-light.webp | Bin .../empty-state/empty-filters/spreadsheet-dark.webp | Bin .../empty-filters/spreadsheet-light.webp | Bin .../web}/public/empty-state/empty_analytics.webp | Bin .../web}/public/empty-state/empty_bar_graph.svg | 0 .../web}/public/empty-state/empty_cycles.webp | Bin .../web}/public/empty-state/empty_graph.svg | 0 .../web}/public/empty-state/empty_issues.webp | Bin .../web}/public/empty-state/empty_label.svg | 0 .../web}/public/empty-state/empty_members.svg | 0 .../web}/public/empty-state/empty_modules.webp | Bin {web => apps/web}/public/empty-state/empty_page.png | Bin .../web}/public/empty-state/empty_project.webp | Bin .../web}/public/empty-state/empty_users.svg | 0 .../web}/public/empty-state/empty_view.webp | Bin .../web}/public/empty-state/epics/epics-dark.webp | Bin .../web}/public/empty-state/epics/epics-light.webp | Bin .../web}/public/empty-state/estimates/dark.svg | 0 .../web}/public/empty-state/estimates/light.svg | 0 .../empty-state/intake/filter-issue-dark.webp | Bin .../empty-state/intake/filter-issue-light.webp | Bin .../public/empty-state/intake/intake-dark-resp.webp | Bin .../web}/public/empty-state/intake/intake-dark.webp | Bin .../empty-state/intake/intake-issue-dark.webp | Bin .../empty-state/intake/intake-issue-light.webp | Bin .../empty-state/intake/intake-light-resp.webp | Bin .../public/empty-state/intake/intake-light.webp | Bin .../empty-state/intake/issue-detail-dark.webp | Bin .../empty-state/intake/issue-detail-light.webp | Bin {web => apps/web}/public/empty-state/invitation.svg | 0 {web => apps/web}/public/empty-state/issue.svg | 0 {web => apps/web}/public/empty-state/label.svg | 0 .../module-issues/calendar-dark-resp.webp | Bin .../empty-state/module-issues/calendar-dark.webp | Bin .../module-issues/calendar-light-resp.webp | Bin .../empty-state/module-issues/calendar-light.webp | Bin .../module-issues/gantt_chart-dark-resp.webp | Bin .../empty-state/module-issues/gantt_chart-dark.webp | Bin .../module-issues/gantt_chart-light-resp.webp | Bin .../module-issues/gantt_chart-light.webp | Bin .../empty-state/module-issues/kanban-dark-resp.webp | Bin .../empty-state/module-issues/kanban-dark.webp | Bin .../module-issues/kanban-light-resp.webp | Bin .../empty-state/module-issues/kanban-light.webp | Bin .../empty-state/module-issues/list-dark-resp.webp | Bin .../public/empty-state/module-issues/list-dark.webp | Bin .../empty-state/module-issues/list-light-resp.webp | Bin .../empty-state/module-issues/list-light.webp | Bin .../module-issues/spreadsheet-dark-resp.webp | Bin .../empty-state/module-issues/spreadsheet-dark.webp | Bin .../module-issues/spreadsheet-light-resp.webp | Bin .../module-issues/spreadsheet-light.webp | Bin {web => apps/web}/public/empty-state/module.svg | 0 .../web}/public/empty-state/module/all-filters.svg | 0 .../web}/public/empty-state/module/name-filter.svg | 0 .../web}/public/empty-state/notification.svg | 0 .../empty-state/onboarding/analytics-dark.webp | Bin .../empty-state/onboarding/analytics-light.webp | Bin .../public/empty-state/onboarding/archive-dark.png | Bin .../public/empty-state/onboarding/archive-light.png | Bin .../public/empty-state/onboarding/cycles-dark.webp | Bin .../public/empty-state/onboarding/cycles-light.webp | Bin .../empty-state/onboarding/dashboard-dark.webp | Bin .../empty-state/onboarding/dashboard-light.webp | Bin .../public/empty-state/onboarding/graph-dark.png | Bin .../public/empty-state/onboarding/graph-light.png | Bin .../empty-state/onboarding/issues-closed-dark.png | Bin .../empty-state/onboarding/issues-closed-light.png | Bin .../public/empty-state/onboarding/issues-dark.webp | Bin .../public/empty-state/onboarding/issues-light.webp | Bin .../public/empty-state/onboarding/members-dark.png | Bin .../public/empty-state/onboarding/members-light.png | Bin .../public/empty-state/onboarding/modules-dark.webp | Bin .../empty-state/onboarding/modules-light.webp | Bin .../empty-state/onboarding/notification-dark.png | Bin .../empty-state/onboarding/notification-light.png | Bin .../public/empty-state/onboarding/pages-dark.webp | Bin .../public/empty-state/onboarding/pages-light.webp | Bin .../empty-state/onboarding/projects-dark.webp | Bin .../empty-state/onboarding/projects-light.webp | Bin .../public/empty-state/onboarding/search-dark.png | Bin .../public/empty-state/onboarding/search-light.png | Bin .../public/empty-state/onboarding/snooze-light.png | Bin .../public/empty-state/onboarding/snoozed-dark.png | Bin .../public/empty-state/onboarding/views-dark.webp | Bin .../public/empty-state/onboarding/views-light.webp | Bin .../onboarding/workspace-invites-dark.webp | Bin .../onboarding/workspace-invites-light.webp | Bin .../web}/public/empty-state/pages/all-dark.webp | Bin .../web}/public/empty-state/pages/all-filters.svg | 0 .../web}/public/empty-state/pages/all-light.webp | Bin .../public/empty-state/pages/archived-dark.webp | Bin .../public/empty-state/pages/archived-light.webp | Bin .../web}/public/empty-state/pages/name-filter.svg | 0 .../pages/navigation-pane/assets-dark.webp | Bin .../pages/navigation-pane/assets-light.webp | Bin .../pages/navigation-pane/outline-dark.webp | Bin .../pages/navigation-pane/outline-light.webp | Bin .../web}/public/empty-state/pages/private-dark.webp | Bin .../public/empty-state/pages/private-light.webp | Bin .../web}/public/empty-state/pages/public-dark.webp | Bin .../web}/public/empty-state/pages/public-light.webp | Bin .../public/empty-state/profile/activities-dark.webp | Bin .../empty-state/profile/activities-light.webp | Bin .../public/empty-state/profile/activity-dark.webp | Bin .../public/empty-state/profile/activity-light.webp | Bin .../public/empty-state/profile/assigned-dark.webp | Bin .../public/empty-state/profile/assigned-light.webp | Bin .../public/empty-state/profile/created-dark.webp | Bin .../public/empty-state/profile/created-light.webp | Bin .../profile/issues-by-priority-dark.webp | Bin .../profile/issues-by-priority-light.webp | Bin .../empty-state/profile/issues-by-state-dark.webp | Bin .../empty-state/profile/issues-by-state-light.webp | Bin .../public/empty-state/profile/subscribed-dark.webp | Bin .../empty-state/profile/subscribed-light.webp | Bin .../project-settings/estimates-dark-resp.webp | Bin .../empty-state/project-settings/estimates-dark.png | Bin .../project-settings/estimates-dark.webp | Bin .../project-settings/estimates-light-resp.webp | Bin .../project-settings/estimates-light.png | Bin .../project-settings/estimates-light.webp | Bin .../project-settings/integrations-dark-resp.webp | Bin .../project-settings/integrations-dark.webp | Bin .../project-settings/integrations-light-resp.webp | Bin .../project-settings/integrations-light.webp | Bin .../project-settings/labels-dark-resp.webp | Bin .../empty-state/project-settings/labels-dark.webp | Bin .../project-settings/labels-light-resp.webp | Bin .../empty-state/project-settings/labels-light.webp | Bin .../project-settings/no-projects-dark.png | Bin .../project-settings/no-projects-light.png | Bin {web => apps/web}/public/empty-state/project.svg | 0 .../web}/public/empty-state/project/all-filters.svg | 0 .../web}/public/empty-state/project/name-filter.svg | 0 .../web}/public/empty-state/recent_activity.svg | 0 .../empty-state/search/all-issue-view-dark.webp | Bin .../empty-state/search/all-issues-view-light.webp | Bin .../public/empty-state/search/archive-dark.webp | Bin .../public/empty-state/search/archive-light.webp | Bin .../public/empty-state/search/comments-dark.webp | Bin .../public/empty-state/search/comments-light.webp | Bin .../web}/public/empty-state/search/issues-dark.webp | Bin .../public/empty-state/search/issues-light.webp | Bin .../web}/public/empty-state/search/member-dark.webp | Bin .../public/empty-state/search/member-light.webp | Bin .../empty-state/search/notification-dark.webp | Bin .../empty-state/search/notification-light.webp | Bin .../public/empty-state/search/project-dark.webp | Bin .../public/empty-state/search/project-light.webp | Bin .../web}/public/empty-state/search/search-dark.webp | Bin .../public/empty-state/search/search-light.webp | Bin .../web}/public/empty-state/search/snooze-dark.webp | Bin .../public/empty-state/search/snooze-light.webp | Bin .../web}/public/empty-state/search/views-dark.webp | Bin .../web}/public/empty-state/search/views-light.webp | Bin .../web}/public/empty-state/state_graph.svg | 0 .../public/empty-state/stickies/stickies-dark.webp | Bin .../public/empty-state/stickies/stickies-light.webp | Bin .../empty-state/stickies/stickies-search-dark.webp | Bin .../empty-state/stickies/stickies-search-light.webp | Bin {web => apps/web}/public/empty-state/view.svg | 0 {web => apps/web}/public/empty-state/web-hook.svg | 0 .../empty-state/workspace-draft/issue-dark.webp | Bin .../empty-state/workspace-draft/issue-light.webp | Bin .../workspace-settings/api-tokens-dark-resp.webp | Bin .../workspace-settings/api-tokens-dark.webp | Bin .../workspace-settings/api-tokens-light-resp.webp | Bin .../workspace-settings/api-tokens-light.webp | Bin .../workspace-settings/exports-dark-resp.webp | Bin .../workspace-settings/exports-dark.webp | Bin .../workspace-settings/exports-light-resp.webp | Bin .../workspace-settings/exports-light.webp | Bin .../workspace-settings/imports-dark-resp.webp | Bin .../workspace-settings/imports-dark.webp | Bin .../workspace-settings/imports-light-resp.webp | Bin .../workspace-settings/imports-light.webp | Bin .../workspace-settings/integrations-dark-resp.webp | Bin .../workspace-settings/integrations-dark.webp | Bin .../workspace-settings/integrations-light-resp.webp | Bin .../workspace-settings/integrations-light.webp | Bin .../workspace-settings/webhooks-dark-resp.webp | Bin .../workspace-settings/webhooks-dark.webp | Bin .../workspace-settings/webhooks-light-resp.webp | Bin .../workspace-settings/webhooks-light.webp | Bin .../web}/public/favicon/android-chrome-192x192.png | Bin .../web}/public/favicon/android-chrome-512x512.png | Bin .../web}/public/favicon/apple-touch-icon.png | Bin {web => apps/web}/public/favicon/favicon-16x16.png | Bin {web => apps/web}/public/favicon/favicon-32x32.png | Bin {web => apps/web}/public/favicon/favicon.ico | Bin {web => apps/web}/public/favicon/site.webmanifest | 0 .../web}/public/fonts/inter/bold-italic.ttf | Bin {web => apps/web}/public/fonts/inter/bold.ttf | Bin .../web}/public/fonts/inter/heavy-italic.ttf | Bin {web => apps/web}/public/fonts/inter/heavy.ttf | Bin .../web}/public/fonts/inter/light-italic.ttf | Bin {web => apps/web}/public/fonts/inter/light.ttf | Bin .../web}/public/fonts/inter/medium-italic.ttf | Bin {web => apps/web}/public/fonts/inter/medium.ttf | Bin .../web}/public/fonts/inter/regular-italic.ttf | Bin {web => apps/web}/public/fonts/inter/regular.ttf | Bin .../web}/public/fonts/inter/semibold-italic.ttf | Bin {web => apps/web}/public/fonts/inter/semibold.ttf | Bin .../web}/public/fonts/inter/thin-italic.ttf | Bin {web => apps/web}/public/fonts/inter/thin.ttf | Bin .../web}/public/fonts/inter/ultrabold-italic.ttf | Bin {web => apps/web}/public/fonts/inter/ultrabold.ttf | Bin .../web}/public/fonts/inter/ultralight-italic.ttf | Bin {web => apps/web}/public/fonts/inter/ultralight.ttf | Bin {web => apps/web}/public/icons/icon-128x128.png | Bin {web => apps/web}/public/icons/icon-180x180.png | Bin {web => apps/web}/public/icons/icon-192x192.png | Bin {web => apps/web}/public/icons/icon-348x348.png | Bin {web => apps/web}/public/icons/icon-512x512.png | Bin .../web}/public/images/logo-spinner-dark.gif | Bin .../web}/public/images/logo-spinner-light.gif | Bin {web => apps/web}/public/instance-not-ready.webp | Bin {web => apps/web}/public/instance-setup-done.webp | Bin {web => apps/web}/public/logos/github-black.png | Bin {web => apps/web}/public/logos/github-dark.svg | 0 {web => apps/web}/public/logos/github-square.png | Bin {web => apps/web}/public/logos/github-white.png | Bin {web => apps/web}/public/logos/gitlab-logo.svg | 0 {web => apps/web}/public/logos/google-logo.svg | 0 {web => apps/web}/public/mac-command.svg | 0 {web => apps/web}/public/maintenance-mode.webp | Bin {web => apps/web}/public/manifest.json | 0 {web => apps/web}/public/og-image.png | Bin .../onboarding/create-join-workspace-dark.webp | Bin .../onboarding/create-join-workspace-light.webp | Bin {web => apps/web}/public/onboarding/cycles.webp | Bin .../web}/public/onboarding/invite-members-dark.webp | Bin .../public/onboarding/invite-members-light.webp | Bin {web => apps/web}/public/onboarding/issues.webp | Bin {web => apps/web}/public/onboarding/modules.webp | Bin .../web}/public/onboarding/onboarding-pages.webp | Bin {web => apps/web}/public/onboarding/pages.webp | Bin .../web}/public/onboarding/profile-setup-dark.webp | Bin .../web}/public/onboarding/profile-setup-light.webp | Bin .../onboarding/user-personalization-dark.webp | Bin .../onboarding/user-personalization-light.webp | Bin {web => apps/web}/public/onboarding/views.webp | Bin .../plane-logos/black-horizontal-with-blue-logo.png | Bin .../web}/public/plane-logos/blue-without-text.png | Bin .../web}/public/plane-logos/plane-mobile-pwa.png | Bin .../plane-logos/white-horizontal-with-blue-logo.png | Bin .../web}/public/plane-logos/white-horizontal.svg | 0 {web => apps/web}/public/plane-takeoff.png | Bin {web => apps/web}/public/services/csv.svg | 0 {web => apps/web}/public/services/excel.svg | 0 {web => apps/web}/public/services/github.png | Bin {web => apps/web}/public/services/jira.svg | 0 {web => apps/web}/public/services/json.svg | 0 {web => apps/web}/public/services/slack.png | Bin {web => apps/web}/public/site.webmanifest.json | 0 {web => apps/web}/public/sw.js | 0 {web => apps/web}/public/sw.js.map | 0 {web => apps/web}/public/user.png | Bin {web => apps/web}/public/users/user-1.png | Bin {web => apps/web}/public/users/user-2.png | Bin .../public/users/user-profile-cover-default-img.png | Bin {web => apps/web}/public/workbox-9f2f79cf.js | 0 {web => apps/web}/public/workbox-9f2f79cf.js.map | 0 .../workspace-active-cycles/cta-l-1-dark.webp | Bin .../workspace-active-cycles/cta-l-1-light.webp | Bin .../workspace-active-cycles/cta-r-1-dark.webp | Bin .../workspace-active-cycles/cta-r-1-light.webp | Bin .../workspace-active-cycles/cta-r-2-dark.webp | Bin .../workspace-active-cycles/cta-r-2-light.webp | Bin .../workspace/workspace-creation-disabled.png | Bin .../public/workspace/workspace-not-available.png | Bin {web => apps/web}/styles/command-pallette.css | 0 {web => apps/web}/styles/emoji.css | 0 {web => apps/web}/styles/globals.css | 0 {web => apps/web}/styles/nprogress.css | 0 {web => apps/web}/styles/react-day-picker.css | 0 {web => apps/web}/tailwind.config.js | 0 {web => apps/web}/tsconfig.json | 0 {web => apps/web}/use-font-face-observer.d.ts | 0 package.json | 5 +---- 3442 files changed, 1 insertion(+), 4 deletions(-) rename {admin => apps/admin}/.env.example (100%) rename {admin => apps/admin}/.eslintrc.js (100%) rename {admin => apps/admin}/.prettierignore (100%) rename {admin => apps/admin}/.prettierrc (100%) rename {admin => apps/admin}/Dockerfile.admin (100%) rename {admin => apps/admin}/Dockerfile.dev (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/ai/form.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/ai/layout.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/ai/page.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/authentication/github/form.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/authentication/github/layout.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/authentication/github/page.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/authentication/gitlab/form.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/authentication/gitlab/layout.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/authentication/gitlab/page.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/authentication/google/form.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/authentication/google/layout.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/authentication/google/page.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/authentication/layout.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/authentication/page.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/email/email-config-form.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/email/layout.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/email/page.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/email/test-email-modal.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/general/form.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/general/intercom.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/general/layout.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/general/page.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/header.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/image/form.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/image/layout.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/image/page.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/layout.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/sidebar-dropdown.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/sidebar-help-section.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/sidebar-menu.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/sidebar.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/workspace/create/form.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/workspace/create/page.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/workspace/layout.tsx (100%) rename {admin => apps/admin}/app/(all)/(dashboard)/workspace/page.tsx (100%) rename {admin => apps/admin}/app/(all)/(home)/auth-banner.tsx (100%) rename {admin => apps/admin}/app/(all)/(home)/auth-helpers.tsx (100%) rename {admin => apps/admin}/app/(all)/(home)/layout.tsx (100%) rename {admin => apps/admin}/app/(all)/(home)/page.tsx (100%) rename {admin => apps/admin}/app/(all)/(home)/sign-in-form.tsx (100%) rename {admin => apps/admin}/app/(all)/instance.provider.tsx (100%) rename {admin => apps/admin}/app/(all)/layout.tsx (100%) rename {admin => apps/admin}/app/(all)/store.provider.tsx (100%) rename {admin => apps/admin}/app/(all)/toast.tsx (100%) rename {admin => apps/admin}/app/(all)/user.provider.tsx (100%) rename {admin => apps/admin}/app/error.tsx (100%) rename {admin => apps/admin}/app/layout.tsx (100%) rename {admin => apps/admin}/ce/components/authentication/authentication-modes.tsx (100%) rename {admin => apps/admin}/ce/components/authentication/index.ts (100%) rename {admin => apps/admin}/ce/components/common/index.ts (100%) rename {admin => apps/admin}/ce/components/common/upgrade-button.tsx (100%) rename {admin => apps/admin}/ce/store/root.store.ts (100%) rename {admin => apps/admin}/core/components/authentication/authentication-method-card.tsx (100%) rename {admin => apps/admin}/core/components/authentication/email-config-switch.tsx (100%) rename {admin => apps/admin}/core/components/authentication/github-config.tsx (100%) rename {admin => apps/admin}/core/components/authentication/gitlab-config.tsx (100%) rename {admin => apps/admin}/core/components/authentication/google-config.tsx (100%) rename {admin => apps/admin}/core/components/authentication/password-config-switch.tsx (100%) rename {admin => apps/admin}/core/components/common/banner.tsx (100%) rename {admin => apps/admin}/core/components/common/breadcrumb-link.tsx (100%) rename {admin => apps/admin}/core/components/common/code-block.tsx (100%) rename {admin => apps/admin}/core/components/common/confirm-discard-modal.tsx (100%) rename {admin => apps/admin}/core/components/common/controller-input.tsx (100%) rename {admin => apps/admin}/core/components/common/copy-field.tsx (100%) rename {admin => apps/admin}/core/components/common/empty-state.tsx (100%) rename {admin => apps/admin}/core/components/common/logo-spinner.tsx (100%) rename {admin => apps/admin}/core/components/common/page-header.tsx (100%) rename {admin => apps/admin}/core/components/common/password-strength-meter.tsx (100%) rename {admin => apps/admin}/core/components/instance/failure.tsx (100%) rename {admin => apps/admin}/core/components/instance/instance-not-ready.tsx (100%) rename {admin => apps/admin}/core/components/instance/loading.tsx (100%) rename {admin => apps/admin}/core/components/instance/setup-form.tsx (100%) rename {admin => apps/admin}/core/components/new-user-popup.tsx (100%) rename {admin => apps/admin}/core/components/workspace/list-item.tsx (100%) rename {admin => apps/admin}/core/hooks/store/index.ts (100%) rename {admin => apps/admin}/core/hooks/store/use-instance.tsx (100%) rename {admin => apps/admin}/core/hooks/store/use-theme.tsx (100%) rename {admin => apps/admin}/core/hooks/store/use-user.tsx (100%) rename {admin => apps/admin}/core/hooks/store/use-workspace.tsx (100%) rename {admin => apps/admin}/core/store/instance.store.ts (100%) rename {admin => apps/admin}/core/store/root.store.ts (100%) rename {admin => apps/admin}/core/store/theme.store.ts (100%) rename {admin => apps/admin}/core/store/user.store.ts (100%) rename {admin => apps/admin}/core/store/workspace.store.ts (100%) rename {admin => apps/admin}/ee/components/authentication/authentication-modes.tsx (100%) rename {admin => apps/admin}/ee/components/authentication/index.ts (100%) rename {admin => apps/admin}/ee/components/common/index.ts (100%) rename {admin => apps/admin}/ee/store/root.store.ts (100%) rename {admin => apps/admin}/next-env.d.ts (100%) rename {admin => apps/admin}/next.config.js (100%) rename {admin => apps/admin}/package.json (100%) rename {admin => apps/admin}/postcss.config.js (100%) rename {admin => apps/admin}/public/auth/background-pattern-dark.svg (100%) rename {admin => apps/admin}/public/auth/background-pattern.svg (100%) rename {admin => apps/admin}/public/favicon/android-chrome-192x192.png (100%) rename {admin => apps/admin}/public/favicon/android-chrome-512x512.png (100%) rename {admin => apps/admin}/public/favicon/apple-touch-icon.png (100%) rename {admin => apps/admin}/public/favicon/favicon-16x16.png (100%) rename {admin => apps/admin}/public/favicon/favicon-32x32.png (100%) rename {admin => apps/admin}/public/favicon/favicon.ico (100%) rename {admin => apps/admin}/public/favicon/site.webmanifest (100%) rename {admin => apps/admin}/public/images/logo-spinner-dark.gif (100%) rename {admin => apps/admin}/public/images/logo-spinner-light.gif (100%) rename {admin => apps/admin}/public/images/plane-takeoff.png (100%) rename {admin => apps/admin}/public/instance/instance-failure-dark.svg (100%) rename {admin => apps/admin}/public/instance/instance-failure.svg (100%) rename {admin => apps/admin}/public/instance/plane-takeoff.png (100%) rename {admin => apps/admin}/public/logos/github-black.png (100%) rename {admin => apps/admin}/public/logos/github-white.png (100%) rename {admin => apps/admin}/public/logos/gitlab-logo.svg (100%) rename {admin => apps/admin}/public/logos/google-logo.svg (100%) rename {admin => apps/admin}/public/logos/oidc-logo.svg (100%) rename {admin => apps/admin}/public/logos/saml-logo.svg (100%) rename {admin => apps/admin}/public/logos/takeoff-icon-dark.svg (100%) rename {admin => apps/admin}/public/logos/takeoff-icon-light.svg (100%) rename {admin => apps/admin}/public/plane-logos/black-horizontal-with-blue-logo.png (100%) rename {admin => apps/admin}/public/plane-logos/blue-without-text.png (100%) rename {admin => apps/admin}/public/plane-logos/white-horizontal-with-blue-logo.png (100%) rename {admin => apps/admin}/public/site.webmanifest.json (100%) rename {admin => apps/admin}/styles/globals.css (100%) rename {admin => apps/admin}/tailwind.config.js (100%) rename {admin => apps/admin}/tsconfig.json (100%) rename {live => apps/live}/.env.example (100%) rename {live => apps/live}/.eslintignore (100%) rename {live => apps/live}/.eslintrc.json (100%) rename {live => apps/live}/.prettierignore (100%) rename {live => apps/live}/.prettierrc (100%) rename {live => apps/live}/Dockerfile.dev (100%) rename {live => apps/live}/Dockerfile.live (100%) rename {live => apps/live}/package.json (100%) rename {live => apps/live}/src/ce/lib/fetch-document.ts (100%) rename {live => apps/live}/src/ce/lib/update-document.ts (100%) rename {live => apps/live}/src/ce/types/common.d.ts (100%) rename {live => apps/live}/src/core/extensions/index.ts (100%) rename {live => apps/live}/src/core/helpers/convert-document.ts (100%) rename {live => apps/live}/src/core/helpers/error-handler.ts (100%) rename {live => apps/live}/src/core/helpers/logger.ts (100%) rename {live => apps/live}/src/core/helpers/page.ts (100%) rename {live => apps/live}/src/core/hocuspocus-server.ts (100%) rename {live => apps/live}/src/core/lib/authentication.ts (100%) rename {live => apps/live}/src/core/lib/page.ts (100%) rename {live => apps/live}/src/core/lib/utils/redis-url.ts (100%) rename {live => apps/live}/src/core/services/api.service.ts (100%) rename {live => apps/live}/src/core/services/page.service.ts (100%) rename {live => apps/live}/src/core/services/user.service.ts (100%) rename {live => apps/live}/src/core/types/common.d.ts (100%) rename {live => apps/live}/src/ee/lib/fetch-document.ts (100%) rename {live => apps/live}/src/ee/lib/update-document.ts (100%) rename {live => apps/live}/src/ee/types/common.d.ts (100%) rename {live => apps/live}/src/server.ts (100%) rename {live => apps/live}/tsconfig.json (100%) rename {live => apps/live}/tsup.config.ts (100%) rename {apiserver => apps/server}/.coveragerc (100%) rename {apiserver => apps/server}/.env.example (100%) rename {apiserver => apps/server}/Dockerfile.api (100%) rename {apiserver => apps/server}/Dockerfile.dev (100%) rename {apiserver => apps/server}/Procfile (100%) rename {apiserver => apps/server}/back_migration.py (100%) rename {apiserver => apps/server}/bin/docker-entrypoint-api-local.sh (100%) rename {apiserver => apps/server}/bin/docker-entrypoint-api.sh (100%) rename {apiserver => apps/server}/bin/docker-entrypoint-beat.sh (100%) rename {apiserver => apps/server}/bin/docker-entrypoint-migrator.sh (100%) rename {apiserver => apps/server}/bin/docker-entrypoint-worker.sh (100%) rename {apiserver => apps/server}/manage.py (100%) rename {apiserver => apps/server}/package.json (100%) rename {apiserver => apps/server}/plane/__init__.py (100%) rename {apiserver => apps/server}/plane/analytics/__init__.py (100%) rename {apiserver => apps/server}/plane/analytics/apps.py (100%) rename {apiserver => apps/server}/plane/api/__init__.py (100%) rename {apiserver => apps/server}/plane/api/apps.py (100%) rename {apiserver => apps/server}/plane/api/middleware/__init__.py (100%) rename {apiserver => apps/server}/plane/api/middleware/api_authentication.py (100%) rename {apiserver => apps/server}/plane/api/rate_limit.py (100%) rename {apiserver => apps/server}/plane/api/serializers/__init__.py (100%) rename {apiserver => apps/server}/plane/api/serializers/base.py (100%) rename {apiserver => apps/server}/plane/api/serializers/cycle.py (100%) rename {apiserver => apps/server}/plane/api/serializers/estimate.py (100%) rename {apiserver => apps/server}/plane/api/serializers/intake.py (100%) rename {apiserver => apps/server}/plane/api/serializers/issue.py (100%) rename {apiserver => apps/server}/plane/api/serializers/module.py (100%) rename {apiserver => apps/server}/plane/api/serializers/project.py (100%) rename {apiserver => apps/server}/plane/api/serializers/state.py (100%) rename {apiserver => apps/server}/plane/api/serializers/user.py (100%) rename {apiserver => apps/server}/plane/api/serializers/workspace.py (100%) rename {apiserver => apps/server}/plane/api/urls/__init__.py (100%) rename {apiserver => apps/server}/plane/api/urls/cycle.py (100%) rename {apiserver => apps/server}/plane/api/urls/intake.py (100%) rename {apiserver => apps/server}/plane/api/urls/issue.py (100%) rename {apiserver => apps/server}/plane/api/urls/member.py (100%) rename {apiserver => apps/server}/plane/api/urls/module.py (100%) rename {apiserver => apps/server}/plane/api/urls/project.py (100%) rename {apiserver => apps/server}/plane/api/urls/state.py (100%) rename {apiserver => apps/server}/plane/api/views/__init__.py (100%) rename {apiserver => apps/server}/plane/api/views/base.py (100%) rename {apiserver => apps/server}/plane/api/views/cycle.py (100%) rename {apiserver => apps/server}/plane/api/views/intake.py (100%) rename {apiserver => apps/server}/plane/api/views/issue.py (100%) rename {apiserver => apps/server}/plane/api/views/member.py (100%) rename {apiserver => apps/server}/plane/api/views/module.py (100%) rename {apiserver => apps/server}/plane/api/views/project.py (100%) rename {apiserver => apps/server}/plane/api/views/state.py (100%) rename {apiserver => apps/server}/plane/app/__init__.py (100%) rename {apiserver => apps/server}/plane/app/apps.py (100%) rename {apiserver => apps/server}/plane/app/middleware/__init__.py (100%) rename {apiserver => apps/server}/plane/app/middleware/api_authentication.py (100%) rename {apiserver => apps/server}/plane/app/permissions/__init__.py (100%) rename {apiserver => apps/server}/plane/app/permissions/base.py (100%) rename {apiserver => apps/server}/plane/app/permissions/project.py (100%) rename {apiserver => apps/server}/plane/app/permissions/workspace.py (100%) rename {apiserver => apps/server}/plane/app/serializers/__init__.py (100%) rename {apiserver => apps/server}/plane/app/serializers/analytic.py (100%) rename {apiserver => apps/server}/plane/app/serializers/api.py (100%) rename {apiserver => apps/server}/plane/app/serializers/asset.py (100%) rename {apiserver => apps/server}/plane/app/serializers/base.py (100%) rename {apiserver => apps/server}/plane/app/serializers/cycle.py (100%) rename {apiserver => apps/server}/plane/app/serializers/draft.py (100%) rename {apiserver => apps/server}/plane/app/serializers/estimate.py (100%) rename {apiserver => apps/server}/plane/app/serializers/exporter.py (100%) rename {apiserver => apps/server}/plane/app/serializers/favorite.py (100%) rename {apiserver => apps/server}/plane/app/serializers/importer.py (100%) rename {apiserver => apps/server}/plane/app/serializers/intake.py (100%) rename {apiserver => apps/server}/plane/app/serializers/issue.py (100%) rename {apiserver => apps/server}/plane/app/serializers/module.py (100%) rename {apiserver => apps/server}/plane/app/serializers/notification.py (100%) rename {apiserver => apps/server}/plane/app/serializers/page.py (100%) rename {apiserver => apps/server}/plane/app/serializers/project.py (100%) rename {apiserver => apps/server}/plane/app/serializers/state.py (100%) rename {apiserver => apps/server}/plane/app/serializers/user.py (100%) rename {apiserver => apps/server}/plane/app/serializers/view.py (100%) rename {apiserver => apps/server}/plane/app/serializers/webhook.py (100%) rename {apiserver => apps/server}/plane/app/serializers/workspace.py (100%) rename {apiserver => apps/server}/plane/app/urls/__init__.py (100%) rename {apiserver => apps/server}/plane/app/urls/analytic.py (100%) rename {apiserver => apps/server}/plane/app/urls/api.py (100%) rename {apiserver => apps/server}/plane/app/urls/asset.py (100%) rename {apiserver => apps/server}/plane/app/urls/cycle.py (100%) rename {apiserver => apps/server}/plane/app/urls/estimate.py (100%) rename {apiserver => apps/server}/plane/app/urls/external.py (100%) rename {apiserver => apps/server}/plane/app/urls/intake.py (100%) rename {apiserver => apps/server}/plane/app/urls/issue.py (100%) rename {apiserver => apps/server}/plane/app/urls/module.py (100%) rename {apiserver => apps/server}/plane/app/urls/notification.py (100%) rename {apiserver => apps/server}/plane/app/urls/page.py (100%) rename {apiserver => apps/server}/plane/app/urls/project.py (100%) rename {apiserver => apps/server}/plane/app/urls/search.py (100%) rename {apiserver => apps/server}/plane/app/urls/state.py (100%) rename {apiserver => apps/server}/plane/app/urls/timezone.py (100%) rename {apiserver => apps/server}/plane/app/urls/user.py (100%) rename {apiserver => apps/server}/plane/app/urls/views.py (100%) rename {apiserver => apps/server}/plane/app/urls/webhook.py (100%) rename {apiserver => apps/server}/plane/app/urls/workspace.py (100%) rename {apiserver => apps/server}/plane/app/views/__init__.py (100%) rename {apiserver => apps/server}/plane/app/views/analytic/advance.py (100%) rename {apiserver => apps/server}/plane/app/views/analytic/base.py (100%) rename {apiserver => apps/server}/plane/app/views/analytic/project_analytics.py (100%) rename {apiserver => apps/server}/plane/app/views/api.py (100%) rename {apiserver => apps/server}/plane/app/views/asset/base.py (100%) rename {apiserver => apps/server}/plane/app/views/asset/v2.py (100%) rename {apiserver => apps/server}/plane/app/views/base.py (100%) rename {apiserver => apps/server}/plane/app/views/cycle/archive.py (100%) rename {apiserver => apps/server}/plane/app/views/cycle/base.py (100%) rename {apiserver => apps/server}/plane/app/views/cycle/issue.py (100%) rename {apiserver => apps/server}/plane/app/views/error_404.py (100%) rename {apiserver => apps/server}/plane/app/views/estimate/base.py (100%) rename {apiserver => apps/server}/plane/app/views/exporter/base.py (100%) rename {apiserver => apps/server}/plane/app/views/external/base.py (100%) rename {apiserver => apps/server}/plane/app/views/intake/base.py (100%) rename {apiserver => apps/server}/plane/app/views/issue/activity.py (100%) rename {apiserver => apps/server}/plane/app/views/issue/archive.py (100%) rename {apiserver => apps/server}/plane/app/views/issue/attachment.py (100%) rename {apiserver => apps/server}/plane/app/views/issue/base.py (100%) rename {apiserver => apps/server}/plane/app/views/issue/comment.py (100%) rename {apiserver => apps/server}/plane/app/views/issue/label.py (100%) rename {apiserver => apps/server}/plane/app/views/issue/link.py (100%) rename {apiserver => apps/server}/plane/app/views/issue/reaction.py (100%) rename {apiserver => apps/server}/plane/app/views/issue/relation.py (100%) rename {apiserver => apps/server}/plane/app/views/issue/sub_issue.py (100%) rename {apiserver => apps/server}/plane/app/views/issue/subscriber.py (100%) rename {apiserver => apps/server}/plane/app/views/issue/version.py (100%) rename {apiserver => apps/server}/plane/app/views/module/archive.py (100%) rename {apiserver => apps/server}/plane/app/views/module/base.py (100%) rename {apiserver => apps/server}/plane/app/views/module/issue.py (100%) rename {apiserver => apps/server}/plane/app/views/notification/base.py (100%) rename {apiserver => apps/server}/plane/app/views/page/base.py (100%) rename {apiserver => apps/server}/plane/app/views/page/version.py (100%) rename {apiserver => apps/server}/plane/app/views/project/base.py (100%) rename {apiserver => apps/server}/plane/app/views/project/invite.py (100%) rename {apiserver => apps/server}/plane/app/views/project/member.py (100%) rename {apiserver => apps/server}/plane/app/views/search/base.py (100%) rename {apiserver => apps/server}/plane/app/views/search/issue.py (100%) rename {apiserver => apps/server}/plane/app/views/state/base.py (100%) rename {apiserver => apps/server}/plane/app/views/timezone/base.py (100%) rename {apiserver => apps/server}/plane/app/views/user/base.py (100%) rename {apiserver => apps/server}/plane/app/views/view/base.py (100%) rename {apiserver => apps/server}/plane/app/views/webhook/base.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/base.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/cycle.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/draft.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/estimate.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/favorite.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/home.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/invite.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/label.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/member.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/module.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/quick_link.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/recent_visit.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/state.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/sticky.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/user.py (100%) rename {apiserver => apps/server}/plane/app/views/workspace/user_preference.py (100%) rename {apiserver => apps/server}/plane/asgi.py (100%) rename {apiserver => apps/server}/plane/authentication/__init__.py (100%) rename {apiserver => apps/server}/plane/authentication/adapter/__init__.py (100%) rename {apiserver => apps/server}/plane/authentication/adapter/base.py (100%) rename {apiserver => apps/server}/plane/authentication/adapter/credential.py (100%) rename {apiserver => apps/server}/plane/authentication/adapter/error.py (100%) rename {apiserver => apps/server}/plane/authentication/adapter/exception.py (100%) rename {apiserver => apps/server}/plane/authentication/adapter/oauth.py (100%) rename {apiserver => apps/server}/plane/authentication/apps.py (100%) rename {apiserver => apps/server}/plane/authentication/middleware/__init__.py (100%) rename {apiserver => apps/server}/plane/authentication/middleware/session.py (100%) rename {apiserver => apps/server}/plane/authentication/provider/__init__.py (100%) rename {apiserver => apps/server}/plane/authentication/provider/credentials/__init__.py (100%) rename {apiserver => apps/server}/plane/authentication/provider/credentials/email.py (100%) rename {apiserver => apps/server}/plane/authentication/provider/credentials/magic_code.py (100%) rename {apiserver => apps/server}/plane/authentication/provider/oauth/__init__.py (100%) rename {apiserver => apps/server}/plane/authentication/provider/oauth/github.py (100%) rename {apiserver => apps/server}/plane/authentication/provider/oauth/gitlab.py (100%) rename {apiserver => apps/server}/plane/authentication/provider/oauth/google.py (100%) rename {apiserver => apps/server}/plane/authentication/rate_limit.py (100%) rename {apiserver => apps/server}/plane/authentication/session.py (100%) rename {apiserver => apps/server}/plane/authentication/urls.py (100%) rename {apiserver => apps/server}/plane/authentication/utils/host.py (100%) rename {apiserver => apps/server}/plane/authentication/utils/login.py (100%) rename {apiserver => apps/server}/plane/authentication/utils/redirection_path.py (100%) rename {apiserver => apps/server}/plane/authentication/utils/user_auth_workflow.py (100%) rename {apiserver => apps/server}/plane/authentication/utils/workspace_project_join.py (100%) rename {apiserver => apps/server}/plane/authentication/views/__init__.py (100%) rename {apiserver => apps/server}/plane/authentication/views/app/check.py (100%) rename {apiserver => apps/server}/plane/authentication/views/app/email.py (100%) rename {apiserver => apps/server}/plane/authentication/views/app/github.py (100%) rename {apiserver => apps/server}/plane/authentication/views/app/gitlab.py (100%) rename {apiserver => apps/server}/plane/authentication/views/app/google.py (100%) rename {apiserver => apps/server}/plane/authentication/views/app/magic.py (100%) rename {apiserver => apps/server}/plane/authentication/views/app/password_management.py (100%) rename {apiserver => apps/server}/plane/authentication/views/app/signout.py (100%) rename {apiserver => apps/server}/plane/authentication/views/common.py (100%) rename {apiserver => apps/server}/plane/authentication/views/space/check.py (100%) rename {apiserver => apps/server}/plane/authentication/views/space/email.py (100%) rename {apiserver => apps/server}/plane/authentication/views/space/github.py (100%) rename {apiserver => apps/server}/plane/authentication/views/space/gitlab.py (100%) rename {apiserver => apps/server}/plane/authentication/views/space/google.py (100%) rename {apiserver => apps/server}/plane/authentication/views/space/magic.py (100%) rename {apiserver => apps/server}/plane/authentication/views/space/password_management.py (100%) rename {apiserver => apps/server}/plane/authentication/views/space/signout.py (100%) rename {apiserver => apps/server}/plane/bgtasks/__init__.py (100%) rename {apiserver => apps/server}/plane/bgtasks/analytic_plot_export.py (100%) rename {apiserver => apps/server}/plane/bgtasks/api_logs_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/apps.py (100%) rename {apiserver => apps/server}/plane/bgtasks/copy_s3_object.py (100%) rename {apiserver => apps/server}/plane/bgtasks/deletion_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/dummy_data_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/email_notification_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/event_tracking_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/export_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/exporter_expired_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/file_asset_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/forgot_password_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/issue_activities_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/issue_automation_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/issue_description_version_sync.py (100%) rename {apiserver => apps/server}/plane/bgtasks/issue_description_version_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/issue_version_sync.py (100%) rename {apiserver => apps/server}/plane/bgtasks/magic_link_code_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/notification_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/page_transaction_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/page_version_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/project_add_user_email_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/project_invitation_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/recent_visited_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/storage_metadata_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/user_activation_email_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/user_deactivation_email_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/webhook_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/work_item_link_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/workspace_invitation_task.py (100%) rename {apiserver => apps/server}/plane/bgtasks/workspace_seed_task.py (100%) rename {apiserver => apps/server}/plane/celery.py (100%) rename {apiserver => apps/server}/plane/db/__init__.py (100%) rename {apiserver => apps/server}/plane/db/apps.py (100%) rename {apiserver => apps/server}/plane/db/management/__init__.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/__init__.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/activate_user.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/clear_cache.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/create_bucket.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/create_dummy_data.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/create_instance_admin.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/create_project_member.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/fix_duplicate_sequences.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/reset_password.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/sync_issue_description_version.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/sync_issue_version.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/test_email.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/update_bucket.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/update_deleted_workspace_slug.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/wait_for_db.py (100%) rename {apiserver => apps/server}/plane/db/management/commands/wait_for_migrations.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0001_initial.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0002_auto_20221104_2239.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0003_auto_20221109_2320.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0004_alter_state_sequence.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0005_auto_20221114_2127.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0006_alter_cycle_status.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0007_label_parent.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0008_label_colour.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0009_auto_20221208_0310.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0010_auto_20221213_0037.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0011_auto_20221222_2357.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0012_auto_20230104_0117.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0013_auto_20230107_0041.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0014_alter_workspacememberinvite_unique_together.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0015_auto_20230107_1636.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0016_auto_20230107_1735.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0017_alter_workspace_unique_together.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0018_auto_20230130_0119.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0019_auto_20230131_0049.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0020_auto_20230214_0118.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0021_auto_20230223_0104.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0022_auto_20230307_0304.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0023_auto_20230316_0040.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0024_auto_20230322_0138.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0025_auto_20230331_0203.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0026_alter_projectmember_view_props.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0027_auto_20230409_0312.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0028_auto_20230414_1703.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0029_auto_20230502_0126.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0030_alter_estimatepoint_unique_together.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0031_analyticview.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0032_auto_20230520_2015.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0033_auto_20230618_2125.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0034_auto_20230628_1046.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0035_auto_20230704_2225.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0036_alter_workspace_organization_size.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0037_issue_archived_at_project_archive_in_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0038_auto_20230720_1505.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0039_auto_20230723_2203.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0040_projectmember_preferences_user_cover_image_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0041_cycle_sort_order_issuecomment_access_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0042_alter_analyticview_created_by_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0043_alter_analyticview_created_by_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0044_auto_20230913_0709.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0045_issueactivity_epoch_workspacemember_issue_props_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0046_label_sort_order_alter_analyticview_created_by_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0047_webhook_apitoken_description_apitoken_expired_at_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0048_auto_20231116_0713.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0049_auto_20231116_0713.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0050_user_use_case_alter_workspace_organization_size.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0051_cycle_external_id_cycle_external_source_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0052_auto_20231220_1141.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0053_auto_20240102_1315.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0054_dashboard_widget_dashboardwidget.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0055_auto_20240108_0648.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0056_usernotificationpreference_emailnotificationlog.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0057_auto_20240122_0901.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0058_alter_moduleissue_issue_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0059_auto_20240208_0957.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0060_cycle_progress_snapshot.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0061_project_logo_props.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0062_cycle_archived_at_module_archived_at_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0063_state_is_triage_alter_state_group.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0064_auto_20240409_1134.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0065_auto_20240415_0937.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0066_account_id_token_cycle_logo_props_module_logo_props.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0067_issue_estimate.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0068_remove_pagelabel_project_remove_pagelog_project_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0069_alter_account_provider_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0070_apitoken_is_service_exporterhistory_filters_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0071_rename_issueproperty_issueuserproperty_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0072_issueattachment_external_id_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0073_alter_commentreaction_unique_together_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0074_deploy_board_and_project_issues.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0075_alter_fileasset_asset.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0076_alter_projectmember_role_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0077_draftissue_cycle_user_timezone_project_user_timezone_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0078_fileasset_comment_fileasset_entity_type_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0079_auto_20241009_0619.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0080_fileasset_draft_issue_alter_fileasset_entity_type.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0081_remove_globalview_created_by_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0082_alter_issue_managers_alter_cycleissue_issue_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0083_device_workspace_timezone_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0084_remove_label_label_unique_name_project_when_deleted_at_null_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0085_intake_intakeissue_remove_inboxissue_created_by_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0086_issueversion_alter_teampage_unique_together_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0087_remove_issueversion_description_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0089_workspacehomepreference_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0090_rename_dashboard_deprecateddashboard_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0091_issuecomment_edited_at_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0092_alter_deprecateddashboardwidget_unique_together_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0093_page_moved_to_page_page_moved_to_project_and_more.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0094_auto_20250425_0902.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0095_page_external_id_page_external_source.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0096_user_is_email_valid_user_masked_at.py (100%) rename {apiserver => apps/server}/plane/db/migrations/0097_project_external_id_project_external_source.py (100%) rename {apiserver => apps/server}/plane/db/migrations/__init__.py (100%) rename {apiserver => apps/server}/plane/db/mixins.py (100%) rename {apiserver => apps/server}/plane/db/models/__init__.py (100%) rename {apiserver => apps/server}/plane/db/models/analytic.py (100%) rename {apiserver => apps/server}/plane/db/models/api.py (100%) rename {apiserver => apps/server}/plane/db/models/asset.py (100%) rename {apiserver => apps/server}/plane/db/models/base.py (100%) rename {apiserver => apps/server}/plane/db/models/cycle.py (100%) rename {apiserver => apps/server}/plane/db/models/deploy_board.py (100%) rename {apiserver => apps/server}/plane/db/models/device.py (100%) rename {apiserver => apps/server}/plane/db/models/draft.py (100%) rename {apiserver => apps/server}/plane/db/models/estimate.py (100%) rename {apiserver => apps/server}/plane/db/models/exporter.py (100%) rename {apiserver => apps/server}/plane/db/models/favorite.py (100%) rename {apiserver => apps/server}/plane/db/models/importer.py (100%) rename {apiserver => apps/server}/plane/db/models/intake.py (100%) rename {apiserver => apps/server}/plane/db/models/integration/__init__.py (100%) rename {apiserver => apps/server}/plane/db/models/integration/base.py (100%) rename {apiserver => apps/server}/plane/db/models/integration/github.py (100%) rename {apiserver => apps/server}/plane/db/models/integration/slack.py (100%) rename {apiserver => apps/server}/plane/db/models/issue.py (100%) rename {apiserver => apps/server}/plane/db/models/issue_type.py (100%) rename {apiserver => apps/server}/plane/db/models/label.py (100%) rename {apiserver => apps/server}/plane/db/models/module.py (100%) rename {apiserver => apps/server}/plane/db/models/notification.py (100%) rename {apiserver => apps/server}/plane/db/models/page.py (100%) rename {apiserver => apps/server}/plane/db/models/project.py (100%) rename {apiserver => apps/server}/plane/db/models/recent_visit.py (100%) rename {apiserver => apps/server}/plane/db/models/session.py (100%) rename {apiserver => apps/server}/plane/db/models/social_connection.py (100%) rename {apiserver => apps/server}/plane/db/models/state.py (100%) rename {apiserver => apps/server}/plane/db/models/sticky.py (100%) rename {apiserver => apps/server}/plane/db/models/user.py (100%) rename {apiserver => apps/server}/plane/db/models/view.py (100%) rename {apiserver => apps/server}/plane/db/models/webhook.py (100%) rename {apiserver => apps/server}/plane/db/models/workspace.py (100%) rename {apiserver => apps/server}/plane/license/__init__.py (100%) rename {apiserver => apps/server}/plane/license/api/__init__.py (100%) rename {apiserver => apps/server}/plane/license/api/permissions/__init__.py (100%) rename {apiserver => apps/server}/plane/license/api/permissions/instance.py (100%) rename {apiserver => apps/server}/plane/license/api/serializers/__init__.py (100%) rename {apiserver => apps/server}/plane/license/api/serializers/admin.py (100%) rename {apiserver => apps/server}/plane/license/api/serializers/base.py (100%) rename {apiserver => apps/server}/plane/license/api/serializers/configuration.py (100%) rename {apiserver => apps/server}/plane/license/api/serializers/instance.py (100%) rename {apiserver => apps/server}/plane/license/api/serializers/user.py (100%) rename {apiserver => apps/server}/plane/license/api/serializers/workspace.py (100%) rename {apiserver => apps/server}/plane/license/api/views/__init__.py (100%) rename {apiserver => apps/server}/plane/license/api/views/admin.py (100%) rename {apiserver => apps/server}/plane/license/api/views/base.py (100%) rename {apiserver => apps/server}/plane/license/api/views/configuration.py (100%) rename {apiserver => apps/server}/plane/license/api/views/instance.py (100%) rename {apiserver => apps/server}/plane/license/api/views/workspace.py (100%) rename {apiserver => apps/server}/plane/license/apps.py (100%) rename {apiserver => apps/server}/plane/license/bgtasks/__init__.py (100%) rename {apiserver => apps/server}/plane/license/bgtasks/tracer.py (100%) rename {apiserver => apps/server}/plane/license/management/__init__.py (100%) rename {apiserver => apps/server}/plane/license/management/commands/__init__.py (100%) rename {apiserver => apps/server}/plane/license/management/commands/configure_instance.py (100%) rename {apiserver => apps/server}/plane/license/management/commands/register_instance.py (100%) rename {apiserver => apps/server}/plane/license/migrations/0001_initial.py (100%) rename {apiserver => apps/server}/plane/license/migrations/0002_rename_version_instance_current_version_and_more.py (100%) rename {apiserver => apps/server}/plane/license/migrations/0003_alter_changelog_title_alter_changelog_version_and_more.py (100%) rename {apiserver => apps/server}/plane/license/migrations/0004_changelog_deleted_at_instance_deleted_at_and_more.py (100%) rename {apiserver => apps/server}/plane/license/migrations/0005_rename_product_instance_edition_and_more.py (100%) rename {apiserver => apps/server}/plane/license/migrations/__init__.py (100%) rename {apiserver => apps/server}/plane/license/models/__init__.py (100%) rename {apiserver => apps/server}/plane/license/models/instance.py (100%) rename {apiserver => apps/server}/plane/license/urls.py (100%) rename {apiserver => apps/server}/plane/license/utils/__init__.py (100%) rename {apiserver => apps/server}/plane/license/utils/encryption.py (100%) rename {apiserver => apps/server}/plane/license/utils/instance_value.py (100%) rename {apiserver => apps/server}/plane/middleware/__init__.py (100%) rename {apiserver => apps/server}/plane/middleware/apps.py (100%) rename {apiserver => apps/server}/plane/middleware/logger.py (100%) rename {apiserver => apps/server}/plane/seeds/data/issues.json (100%) rename {apiserver => apps/server}/plane/seeds/data/labels.json (100%) rename {apiserver => apps/server}/plane/seeds/data/projects.json (100%) rename {apiserver => apps/server}/plane/seeds/data/states.json (100%) rename {apiserver => apps/server}/plane/settings/__init__.py (100%) rename {apiserver => apps/server}/plane/settings/common.py (100%) rename {apiserver => apps/server}/plane/settings/local.py (100%) rename {apiserver => apps/server}/plane/settings/production.py (100%) rename {apiserver => apps/server}/plane/settings/redis.py (100%) rename {apiserver => apps/server}/plane/settings/storage.py (100%) rename {apiserver => apps/server}/plane/settings/test.py (100%) rename {apiserver => apps/server}/plane/space/__init__.py (100%) rename {apiserver => apps/server}/plane/space/apps.py (100%) rename {apiserver => apps/server}/plane/space/serializer/__init__.py (100%) rename {apiserver => apps/server}/plane/space/serializer/base.py (100%) rename {apiserver => apps/server}/plane/space/serializer/cycle.py (100%) rename {apiserver => apps/server}/plane/space/serializer/intake.py (100%) rename {apiserver => apps/server}/plane/space/serializer/issue.py (100%) rename {apiserver => apps/server}/plane/space/serializer/module.py (100%) rename {apiserver => apps/server}/plane/space/serializer/project.py (100%) rename {apiserver => apps/server}/plane/space/serializer/state.py (100%) rename {apiserver => apps/server}/plane/space/serializer/user.py (100%) rename {apiserver => apps/server}/plane/space/serializer/workspace.py (100%) rename {apiserver => apps/server}/plane/space/urls/__init__.py (100%) rename {apiserver => apps/server}/plane/space/urls/asset.py (100%) rename {apiserver => apps/server}/plane/space/urls/intake.py (100%) rename {apiserver => apps/server}/plane/space/urls/issue.py (100%) rename {apiserver => apps/server}/plane/space/urls/project.py (100%) rename {apiserver => apps/server}/plane/space/utils/grouper.py (100%) rename {apiserver => apps/server}/plane/space/views/__init__.py (100%) rename {apiserver => apps/server}/plane/space/views/asset.py (100%) rename {apiserver => apps/server}/plane/space/views/base.py (100%) rename {apiserver => apps/server}/plane/space/views/cycle.py (100%) rename {apiserver => apps/server}/plane/space/views/intake.py (100%) rename {apiserver => apps/server}/plane/space/views/issue.py (100%) rename {apiserver => apps/server}/plane/space/views/label.py (100%) rename {apiserver => apps/server}/plane/space/views/meta.py (100%) rename {apiserver => apps/server}/plane/space/views/module.py (100%) rename {apiserver => apps/server}/plane/space/views/project.py (100%) rename {apiserver => apps/server}/plane/space/views/state.py (100%) rename {apiserver => apps/server}/plane/static/css/style.css (100%) rename {apiserver => apps/server}/plane/static/humans.txt (100%) rename {apiserver => apps/server}/plane/static/js/script.js (100%) rename {apiserver => apps/server}/plane/tests/README.md (100%) rename {apiserver => apps/server}/plane/tests/TESTING_GUIDE.md (100%) rename {apiserver => apps/server}/plane/tests/__init__.py (100%) rename {apiserver => apps/server}/plane/tests/apps.py (100%) rename {apiserver => apps/server}/plane/tests/conftest.py (100%) rename {apiserver => apps/server}/plane/tests/conftest_external.py (100%) rename {apiserver => apps/server}/plane/tests/contract/__init__.py (100%) rename {apiserver => apps/server}/plane/tests/contract/api/__init__.py (100%) rename {apiserver => apps/server}/plane/tests/contract/app/__init__.py (100%) rename {apiserver => apps/server}/plane/tests/contract/app/test_api_token.py (100%) rename {apiserver => apps/server}/plane/tests/contract/app/test_authentication.py (100%) rename {apiserver => apps/server}/plane/tests/contract/app/test_project_app.py (100%) rename {apiserver => apps/server}/plane/tests/contract/app/test_workspace_app.py (100%) rename {apiserver => apps/server}/plane/tests/factories.py (100%) rename {apiserver => apps/server}/plane/tests/smoke/__init__.py (100%) rename {apiserver => apps/server}/plane/tests/smoke/test_auth_smoke.py (100%) rename {apiserver => apps/server}/plane/tests/unit/__init__.py (100%) rename {apiserver => apps/server}/plane/tests/unit/models/__init__.py (100%) rename {apiserver => apps/server}/plane/tests/unit/models/test_workspace_model.py (100%) rename {apiserver => apps/server}/plane/tests/unit/serializers/__init__.py (100%) rename {apiserver => apps/server}/plane/tests/unit/serializers/test_issue_recent_visit.py (100%) rename {apiserver => apps/server}/plane/tests/unit/serializers/test_workspace.py (100%) rename {apiserver => apps/server}/plane/tests/unit/utils/__init__.py (100%) rename {apiserver => apps/server}/plane/tests/unit/utils/test_uuid.py (100%) rename {apiserver => apps/server}/plane/urls.py (100%) rename {apiserver => apps/server}/plane/utils/__init__.py (100%) rename {apiserver => apps/server}/plane/utils/analytics_plot.py (100%) rename {apiserver => apps/server}/plane/utils/build_chart.py (100%) rename {apiserver => apps/server}/plane/utils/cache.py (100%) rename {apiserver => apps/server}/plane/utils/constants.py (100%) rename {apiserver => apps/server}/plane/utils/date_utils.py (100%) rename {apiserver => apps/server}/plane/utils/error_codes.py (100%) rename {apiserver => apps/server}/plane/utils/exception_logger.py (100%) rename {apiserver => apps/server}/plane/utils/global_paginator.py (100%) rename {apiserver => apps/server}/plane/utils/grouper.py (100%) rename {apiserver => apps/server}/plane/utils/host.py (100%) rename {apiserver => apps/server}/plane/utils/html_processor.py (100%) rename {apiserver => apps/server}/plane/utils/imports.py (100%) rename {apiserver => apps/server}/plane/utils/ip_address.py (100%) rename {apiserver => apps/server}/plane/utils/issue_filters.py (100%) rename {apiserver => apps/server}/plane/utils/issue_relation_mapper.py (100%) rename {apiserver => apps/server}/plane/utils/issue_search.py (100%) rename {apiserver => apps/server}/plane/utils/logging.py (100%) rename {apiserver => apps/server}/plane/utils/markdown.py (100%) rename {apiserver => apps/server}/plane/utils/order_queryset.py (100%) rename {apiserver => apps/server}/plane/utils/paginator.py (100%) rename {apiserver => apps/server}/plane/utils/path_validator.py (100%) rename {apiserver => apps/server}/plane/utils/telemetry.py (100%) rename {apiserver => apps/server}/plane/utils/timezone_converter.py (100%) rename {apiserver => apps/server}/plane/utils/url.py (100%) rename {apiserver => apps/server}/plane/utils/uuid.py (100%) rename {apiserver => apps/server}/plane/web/__init__.py (100%) rename {apiserver => apps/server}/plane/web/apps.py (100%) rename {apiserver => apps/server}/plane/web/urls.py (100%) rename {apiserver => apps/server}/plane/web/views.py (100%) rename {apiserver => apps/server}/plane/wsgi.py (100%) rename {apiserver => apps/server}/pyproject.toml (100%) rename {apiserver => apps/server}/pytest.ini (100%) rename {apiserver => apps/server}/requirements.txt (100%) rename {apiserver => apps/server}/requirements/base.txt (100%) rename {apiserver => apps/server}/requirements/local.txt (100%) rename {apiserver => apps/server}/requirements/production.txt (100%) rename {apiserver => apps/server}/requirements/test.txt (100%) rename {apiserver => apps/server}/run_tests.py (100%) rename {apiserver => apps/server}/run_tests.sh (100%) rename {apiserver => apps/server}/runtime.txt (100%) rename {apiserver => apps/server}/templates/admin/base_site.html (100%) rename {apiserver => apps/server}/templates/base.html (100%) rename {apiserver => apps/server}/templates/csrf_failure.html (100%) rename {apiserver => apps/server}/templates/emails/auth/forgot_password.html (100%) rename {apiserver => apps/server}/templates/emails/auth/magic_signin.html (100%) rename {apiserver => apps/server}/templates/emails/exports/analytics.html (100%) rename {apiserver => apps/server}/templates/emails/invitations/project_invitation.html (100%) rename {apiserver => apps/server}/templates/emails/invitations/workspace_invitation.html (100%) rename {apiserver => apps/server}/templates/emails/notifications/issue-updates.html (100%) rename {apiserver => apps/server}/templates/emails/notifications/project_addition.html (100%) rename {apiserver => apps/server}/templates/emails/notifications/webhook-deactivate.html (100%) rename {apiserver => apps/server}/templates/emails/test_email.html (100%) rename {apiserver => apps/server}/templates/emails/user/user_activation.html (100%) rename {apiserver => apps/server}/templates/emails/user/user_deactivation.html (100%) rename {space => apps/space}/.env.example (100%) rename {space => apps/space}/.eslintrc.js (100%) rename {space => apps/space}/.gitignore (100%) rename {space => apps/space}/.prettierignore (100%) rename {space => apps/space}/.prettierrc.json (100%) rename {space => apps/space}/Dockerfile.dev (100%) rename {space => apps/space}/Dockerfile.space (100%) rename {space => apps/space}/README.md (100%) rename {space => apps/space}/additional.d.ts (100%) rename {space => apps/space}/app/[workspaceSlug]/[projectId]/page.ts (100%) rename {space => apps/space}/app/error.tsx (100%) rename {space => apps/space}/app/issues/[anchor]/client-layout.tsx (100%) rename {space => apps/space}/app/issues/[anchor]/layout.tsx (100%) rename {space => apps/space}/app/issues/[anchor]/page.tsx (100%) rename {space => apps/space}/app/layout.tsx (100%) rename {space => apps/space}/app/not-found.tsx (100%) rename {space => apps/space}/app/page.tsx (100%) rename {space => apps/space}/app/provider.tsx (100%) rename {space => apps/space}/app/views/[anchor]/layout.tsx (100%) rename {space => apps/space}/app/views/[anchor]/page.tsx (100%) rename {space => apps/space}/ce/components/editor/embeds/index.ts (100%) rename {space => apps/space}/ce/components/editor/embeds/mentions/index.ts (100%) rename {space => apps/space}/ce/components/editor/embeds/mentions/root.tsx (100%) rename {space => apps/space}/ce/components/editor/index.ts (100%) rename {space => apps/space}/ce/components/issue-layouts/root.tsx (100%) rename {space => apps/space}/ce/components/navbar/index.tsx (100%) rename {space => apps/space}/ce/hooks/store/index.ts (100%) rename {space => apps/space}/ce/hooks/store/use-published-view.ts (100%) rename {space => apps/space}/ce/store/root.store.ts (100%) rename {space => apps/space}/core/components/account/auth-forms/auth-banner.tsx (100%) rename {space => apps/space}/core/components/account/auth-forms/auth-header.tsx (100%) rename {space => apps/space}/core/components/account/auth-forms/auth-root.tsx (100%) rename {space => apps/space}/core/components/account/auth-forms/email.tsx (100%) rename {space => apps/space}/core/components/account/auth-forms/index.ts (100%) rename {space => apps/space}/core/components/account/auth-forms/password.tsx (100%) rename {space => apps/space}/core/components/account/auth-forms/unique-code.tsx (100%) rename {space => apps/space}/core/components/account/helpers/index.ts (100%) rename {space => apps/space}/core/components/account/helpers/password-strength-meter.tsx (100%) rename {space => apps/space}/core/components/account/index.ts (100%) rename {space => apps/space}/core/components/account/oauth/github-button.tsx (100%) rename {space => apps/space}/core/components/account/oauth/gitlab-button.tsx (100%) rename {space => apps/space}/core/components/account/oauth/google-button.tsx (100%) rename {space => apps/space}/core/components/account/oauth/index.ts (100%) rename {space => apps/space}/core/components/account/oauth/oauth-options.tsx (100%) rename {space => apps/space}/core/components/account/terms-and-conditions.tsx (100%) rename {space => apps/space}/core/components/account/user-logged-in.tsx (100%) rename {space => apps/space}/core/components/common/index.ts (100%) rename {space => apps/space}/core/components/common/logo-spinner.tsx (100%) rename {space => apps/space}/core/components/common/powered-by.tsx (100%) rename {space => apps/space}/core/components/common/project-logo.tsx (100%) rename {space => apps/space}/core/components/editor/embeds/index.ts (100%) rename {space => apps/space}/core/components/editor/embeds/mentions/index.ts (100%) rename {space => apps/space}/core/components/editor/embeds/mentions/root.tsx (100%) rename {space => apps/space}/core/components/editor/embeds/mentions/user.tsx (100%) rename {space => apps/space}/core/components/editor/index.ts (100%) rename {space => apps/space}/core/components/editor/lite-text-editor.tsx (100%) rename {space => apps/space}/core/components/editor/lite-text-read-only-editor.tsx (100%) rename {space => apps/space}/core/components/editor/rich-text-editor.tsx (100%) rename {space => apps/space}/core/components/editor/rich-text-read-only-editor.tsx (100%) rename {space => apps/space}/core/components/editor/toolbar.tsx (100%) rename {space => apps/space}/core/components/instance/index.ts (100%) rename {space => apps/space}/core/components/instance/instance-failure-view.tsx (100%) rename {space => apps/space}/core/components/issues/filters/applied-filters/filters-list.tsx (100%) rename {space => apps/space}/core/components/issues/filters/applied-filters/label.tsx (100%) rename {space => apps/space}/core/components/issues/filters/applied-filters/priority.tsx (100%) rename {space => apps/space}/core/components/issues/filters/applied-filters/root.tsx (100%) rename {space => apps/space}/core/components/issues/filters/applied-filters/state.tsx (100%) rename {space => apps/space}/core/components/issues/filters/helpers/dropdown.tsx (100%) rename {space => apps/space}/core/components/issues/filters/helpers/filter-header.tsx (100%) rename {space => apps/space}/core/components/issues/filters/helpers/filter-option.tsx (100%) rename {space => apps/space}/core/components/issues/filters/helpers/index.ts (100%) rename {space => apps/space}/core/components/issues/filters/index.ts (100%) rename {space => apps/space}/core/components/issues/filters/labels.tsx (100%) rename {space => apps/space}/core/components/issues/filters/priority.tsx (100%) rename {space => apps/space}/core/components/issues/filters/root.tsx (100%) rename {space => apps/space}/core/components/issues/filters/selection.tsx (100%) rename {space => apps/space}/core/components/issues/filters/state.tsx (100%) rename {space => apps/space}/core/components/issues/index.ts (100%) rename {space => apps/space}/core/components/issues/issue-layouts/error.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/index.ts (100%) rename {space => apps/space}/core/components/issues/issue-layouts/issue-layout-HOC.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/kanban/block-reactions.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/kanban/block.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/kanban/blocks-list.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/kanban/default.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/kanban/index.ts (100%) rename {space => apps/space}/core/components/issues/issue-layouts/kanban/kanban-group.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/kanban/swimlanes.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/list/base-list-root.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/list/block.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/list/blocks-list.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/list/default.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/list/headers/group-by-card.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/list/index.ts (100%) rename {space => apps/space}/core/components/issues/issue-layouts/list/list-group.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/properties/all-properties.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/properties/cycle.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/properties/due-date.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/properties/index.ts (100%) rename {space => apps/space}/core/components/issues/issue-layouts/properties/labels.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/properties/member.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/properties/modules.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/properties/priority.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/properties/state.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/root.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/utils.tsx (100%) rename {space => apps/space}/core/components/issues/issue-layouts/with-display-properties-HOC.tsx (100%) rename {space => apps/space}/core/components/issues/navbar/controls.tsx (100%) rename {space => apps/space}/core/components/issues/navbar/index.ts (100%) rename {space => apps/space}/core/components/issues/navbar/layout-icon.tsx (100%) rename {space => apps/space}/core/components/issues/navbar/layout-selection.tsx (100%) rename {space => apps/space}/core/components/issues/navbar/root.tsx (100%) rename {space => apps/space}/core/components/issues/navbar/theme.tsx (100%) rename {space => apps/space}/core/components/issues/navbar/user-avatar.tsx (100%) rename {space => apps/space}/core/components/issues/peek-overview/comment/add-comment.tsx (100%) rename {space => apps/space}/core/components/issues/peek-overview/comment/comment-detail-card.tsx (100%) rename {space => apps/space}/core/components/issues/peek-overview/comment/comment-reactions.tsx (100%) rename {space => apps/space}/core/components/issues/peek-overview/comment/index.ts (100%) rename {space => apps/space}/core/components/issues/peek-overview/full-screen-peek-view.tsx (100%) rename {space => apps/space}/core/components/issues/peek-overview/header.tsx (100%) rename {space => apps/space}/core/components/issues/peek-overview/index.ts (100%) rename {space => apps/space}/core/components/issues/peek-overview/issue-activity.tsx (100%) rename {space => apps/space}/core/components/issues/peek-overview/issue-details.tsx (100%) rename {space => apps/space}/core/components/issues/peek-overview/issue-properties.tsx (100%) rename {space => apps/space}/core/components/issues/peek-overview/issue-reaction.tsx (100%) rename {space => apps/space}/core/components/issues/peek-overview/layout.tsx (100%) rename {space => apps/space}/core/components/issues/peek-overview/side-peek-view.tsx (100%) rename {space => apps/space}/core/components/issues/reactions/index.ts (100%) rename {space => apps/space}/core/components/issues/reactions/issue-emoji-reactions.tsx (100%) rename {space => apps/space}/core/components/issues/reactions/issue-vote-reactions.tsx (100%) rename {space => apps/space}/core/components/ui/icon.tsx (100%) rename {space => apps/space}/core/components/ui/index.ts (100%) rename {space => apps/space}/core/components/ui/not-found.tsx (100%) rename {space => apps/space}/core/components/ui/reaction-selector.tsx (100%) rename {space => apps/space}/core/components/views/auth.tsx (100%) rename {space => apps/space}/core/components/views/index.ts (100%) rename {space => apps/space}/core/hooks/store/index.ts (100%) rename {space => apps/space}/core/hooks/store/publish/index.ts (100%) rename {space => apps/space}/core/hooks/store/publish/use-publish-list.ts (100%) rename {space => apps/space}/core/hooks/store/publish/use-publish.ts (100%) rename {space => apps/space}/core/hooks/store/use-cycle.ts (100%) rename {space => apps/space}/core/hooks/store/use-instance.ts (100%) rename {space => apps/space}/core/hooks/store/use-issue-details.tsx (100%) rename {space => apps/space}/core/hooks/store/use-issue-filter.ts (100%) rename {space => apps/space}/core/hooks/store/use-issue.ts (100%) rename {space => apps/space}/core/hooks/store/use-label.ts (100%) rename {space => apps/space}/core/hooks/store/use-member.ts (100%) rename {space => apps/space}/core/hooks/store/use-module.ts (100%) rename {space => apps/space}/core/hooks/store/use-state.ts (100%) rename {space => apps/space}/core/hooks/store/use-user-profile.ts (100%) rename {space => apps/space}/core/hooks/store/use-user.ts (100%) rename {space => apps/space}/core/hooks/use-clipboard-write-permission.tsx (100%) rename {space => apps/space}/core/hooks/use-intersection-observer.tsx (100%) rename {space => apps/space}/core/hooks/use-is-in-iframe.tsx (100%) rename {space => apps/space}/core/hooks/use-mention.tsx (100%) rename {space => apps/space}/core/hooks/use-timer.tsx (100%) rename {space => apps/space}/core/lib/instance-provider.tsx (100%) rename {space => apps/space}/core/lib/store-provider.tsx (100%) rename {space => apps/space}/core/lib/toast-provider.tsx (100%) rename {space => apps/space}/core/store/cycle.store.ts (100%) rename {space => apps/space}/core/store/helpers/base-issues.store.ts (100%) rename {space => apps/space}/core/store/helpers/filter.helpers.ts (100%) rename {space => apps/space}/core/store/instance.store.ts (100%) rename {space => apps/space}/core/store/issue-detail.store.ts (100%) rename {space => apps/space}/core/store/issue-filters.store.ts (100%) rename {space => apps/space}/core/store/issue.store.ts (100%) rename {space => apps/space}/core/store/label.store.ts (100%) rename {space => apps/space}/core/store/members.store.ts (100%) rename {space => apps/space}/core/store/module.store.ts (100%) rename {space => apps/space}/core/store/profile.store.ts (100%) rename {space => apps/space}/core/store/publish/publish.store.ts (100%) rename {space => apps/space}/core/store/publish/publish_list.store.ts (100%) rename {space => apps/space}/core/store/root.store.ts (100%) rename {space => apps/space}/core/store/state.store.ts (100%) rename {space => apps/space}/core/store/user.store.ts (100%) rename {space => apps/space}/core/types/auth.ts (100%) rename {space => apps/space}/core/types/cycle.d.ts (100%) rename {space => apps/space}/core/types/intake.d.ts (100%) rename {space => apps/space}/core/types/issue.d.ts (100%) rename {space => apps/space}/core/types/member.d.ts (100%) rename {space => apps/space}/core/types/modules.d.ts (100%) rename {space => apps/space}/ee/components/editor/index.ts (100%) rename {space => apps/space}/ee/components/issue-layouts/root.tsx (100%) rename {space => apps/space}/ee/components/navbar/index.tsx (100%) rename {space => apps/space}/ee/hooks/store/index.ts (100%) rename {space => apps/space}/ee/store/root.store.ts (100%) rename {space => apps/space}/helpers/authentication.helper.tsx (100%) rename {space => apps/space}/helpers/common.helper.ts (100%) rename {space => apps/space}/helpers/date-time.helper.ts (100%) rename {space => apps/space}/helpers/editor.helper.ts (100%) rename {space => apps/space}/helpers/emoji.helper.tsx (100%) rename {space => apps/space}/helpers/file.helper.ts (100%) rename {space => apps/space}/helpers/issue.helper.ts (100%) rename {space => apps/space}/helpers/password.helper.ts (100%) rename {space => apps/space}/helpers/query-param-generator.ts (100%) rename {space => apps/space}/helpers/state.helper.ts (100%) rename {space => apps/space}/helpers/string.helper.ts (100%) rename {space => apps/space}/next.config.js (100%) rename {space => apps/space}/package.json (100%) rename {space => apps/space}/postcss.config.js (100%) rename {space => apps/space}/public/404.svg (100%) rename {space => apps/space}/public/auth/background-pattern-dark.svg (100%) rename {space => apps/space}/public/auth/background-pattern.svg (100%) rename {space => apps/space}/public/favicon/android-chrome-192x192.png (100%) rename {space => apps/space}/public/favicon/android-chrome-512x512.png (100%) rename {space => apps/space}/public/favicon/apple-touch-icon.png (100%) rename {space => apps/space}/public/favicon/favicon-16x16.png (100%) rename {space => apps/space}/public/favicon/favicon-32x32.png (100%) rename {space => apps/space}/public/favicon/favicon.ico (100%) rename {space => apps/space}/public/favicon/site.webmanifest (100%) rename {space => apps/space}/public/images/logo-spinner-dark.gif (100%) rename {space => apps/space}/public/images/logo-spinner-light.gif (100%) rename {space => apps/space}/public/instance/instance-failure-dark.svg (100%) rename {space => apps/space}/public/instance/instance-failure.svg (100%) rename {space => apps/space}/public/instance/intake-sent-dark.png (100%) rename {space => apps/space}/public/instance/intake-sent-light.png (100%) rename {space => apps/space}/public/instance/plane-instance-not-ready.webp (100%) rename {space => apps/space}/public/instance/plane-takeoff.png (100%) rename {space => apps/space}/public/logos/github-black.png (100%) rename {space => apps/space}/public/logos/github-dark.svg (100%) rename {space => apps/space}/public/logos/github-square.svg (100%) rename {space => apps/space}/public/logos/github-white.svg (100%) rename {space => apps/space}/public/logos/gitlab-logo.svg (100%) rename {space => apps/space}/public/logos/google-logo.svg (100%) rename {space => apps/space}/public/plane-logo.svg (100%) rename {space => apps/space}/public/plane-logos/black-horizontal-with-blue-logo.png (100%) rename {space => apps/space}/public/plane-logos/blue-without-text-new.png (100%) rename {space => apps/space}/public/plane-logos/blue-without-text.png (100%) rename {space => apps/space}/public/plane-logos/white-horizontal-with-blue-logo.png (100%) rename {space => apps/space}/public/plane-logos/white-horizontal.svg (100%) rename {space => apps/space}/public/project-not-published.svg (100%) rename {space => apps/space}/public/robots.txt (100%) rename {space => apps/space}/public/site.webmanifest.json (100%) rename {space => apps/space}/public/something-went-wrong.svg (100%) rename {space => apps/space}/public/user-logged-in.svg (100%) rename {space => apps/space}/styles/globals.css (100%) rename {space => apps/space}/tailwind.config.js (100%) rename {space => apps/space}/tsconfig.json (100%) rename {web => apps/web}/.env.example (100%) rename {web => apps/web}/.eslintignore (100%) rename {web => apps/web}/.eslintrc.js (100%) rename {web => apps/web}/.gitignore (100%) rename {web => apps/web}/.prettierignore (100%) rename {web => apps/web}/.prettierrc (100%) rename {web => apps/web}/Dockerfile.dev (100%) rename {web => apps/web}/Dockerfile.web (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/active-cycles/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/active-cycles/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/active-cycles/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/drafts/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/drafts/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/extended-sidebar.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/notifications/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/notifications/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/[profileViewId]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/navbar.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/modules/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/modules/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/[cycleId]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/mobile-header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/mobile-header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(detail)/[issueId]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/[moduleId]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/mobile-header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/mobile-header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/archives/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/archives/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(list)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/projects/(list)/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/stickies/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/workspace-views/[globalViewId]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/workspace-views/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(projects)/workspace-views/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/billing/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/exports/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/imports/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/mobile-header-tabs.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/[webhookId]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/account/activity/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/account/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/account/notifications/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/account/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/account/preferences/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/account/sidebar.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/estimates/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/features/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/labels/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/members/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/states/page.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/projects/layout.tsx (100%) rename {web => apps/web}/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx (100%) rename {web => apps/web}/app/(all)/accounts/forgot-password/layout.tsx (100%) rename {web => apps/web}/app/(all)/accounts/forgot-password/page.tsx (100%) rename {web => apps/web}/app/(all)/accounts/reset-password/layout.tsx (100%) rename {web => apps/web}/app/(all)/accounts/reset-password/page.tsx (100%) rename {web => apps/web}/app/(all)/accounts/set-password/layout.tsx (100%) rename {web => apps/web}/app/(all)/accounts/set-password/page.tsx (100%) rename {web => apps/web}/app/(all)/create-workspace/layout.tsx (100%) rename {web => apps/web}/app/(all)/create-workspace/page.tsx (100%) rename {web => apps/web}/app/(all)/installations/[provider]/layout.tsx (100%) rename {web => apps/web}/app/(all)/installations/[provider]/page.tsx (100%) rename {web => apps/web}/app/(all)/invitations/layout.tsx (100%) rename {web => apps/web}/app/(all)/invitations/page.tsx (100%) rename {web => apps/web}/app/(all)/layout.preload.tsx (100%) rename {web => apps/web}/app/(all)/layout.tsx (100%) rename {web => apps/web}/app/(all)/onboarding/layout.tsx (100%) rename {web => apps/web}/app/(all)/onboarding/page.tsx (100%) rename {web => apps/web}/app/(all)/profile/activity/page.tsx (100%) rename {web => apps/web}/app/(all)/profile/appearance/page.tsx (100%) rename {web => apps/web}/app/(all)/profile/layout.tsx (100%) rename {web => apps/web}/app/(all)/profile/notifications/page.tsx (100%) rename {web => apps/web}/app/(all)/profile/page.tsx (100%) rename {web => apps/web}/app/(all)/profile/security/page.tsx (100%) rename {web => apps/web}/app/(all)/profile/sidebar.tsx (100%) rename {web => apps/web}/app/(all)/sign-up/layout.tsx (100%) rename {web => apps/web}/app/(all)/sign-up/page.tsx (100%) rename {web => apps/web}/app/(all)/workspace-invitations/layout.tsx (100%) rename {web => apps/web}/app/(all)/workspace-invitations/page.tsx (100%) rename {web => apps/web}/app/(home)/layout.tsx (100%) rename {web => apps/web}/app/(home)/page.tsx (100%) rename {web => apps/web}/app/error.tsx (100%) rename {web => apps/web}/app/global-error.tsx (100%) rename {web => apps/web}/app/layout.tsx (100%) rename {web => apps/web}/app/not-found.tsx (100%) rename {web => apps/web}/app/provider.tsx (100%) rename {web => apps/web}/ce/components/active-cycles/index.ts (100%) rename {web => apps/web}/ce/components/active-cycles/root.tsx (100%) rename {web => apps/web}/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx (100%) rename {web => apps/web}/ce/components/analytics/tabs.tsx (100%) rename {web => apps/web}/ce/components/breadcrumbs/common.tsx (100%) rename {web => apps/web}/ce/components/breadcrumbs/index.ts (100%) rename {web => apps/web}/ce/components/breadcrumbs/project-feature.tsx (100%) rename {web => apps/web}/ce/components/breadcrumbs/project.tsx (100%) rename {web => apps/web}/ce/components/command-palette/actions/index.ts (100%) rename {web => apps/web}/ce/components/command-palette/actions/work-item-actions/change-state-list.tsx (100%) rename {web => apps/web}/ce/components/command-palette/actions/work-item-actions/index.ts (100%) rename {web => apps/web}/ce/components/command-palette/helpers.tsx (100%) rename {web => apps/web}/ce/components/command-palette/index.ts (100%) rename {web => apps/web}/ce/components/command-palette/modals/index.ts (100%) rename {web => apps/web}/ce/components/command-palette/modals/issue-level.tsx (100%) rename {web => apps/web}/ce/components/command-palette/modals/project-level.tsx (100%) rename {web => apps/web}/ce/components/command-palette/modals/workspace-level.tsx (100%) rename {web => apps/web}/ce/components/comments/comment-block.tsx (100%) rename {web => apps/web}/ce/components/comments/index.ts (100%) rename {web => apps/web}/ce/components/common/index.ts (100%) rename {web => apps/web}/ce/components/common/subscription/index.ts (100%) rename {web => apps/web}/ce/components/common/subscription/subscription-pill.tsx (100%) rename {web => apps/web}/ce/components/cycles/active-cycle/index.ts (100%) rename {web => apps/web}/ce/components/cycles/active-cycle/root.tsx (100%) rename {web => apps/web}/ce/components/cycles/additional-actions.tsx (100%) rename {web => apps/web}/ce/components/cycles/analytics-sidebar/base.tsx (100%) rename {web => apps/web}/ce/components/cycles/analytics-sidebar/index.ts (100%) rename {web => apps/web}/ce/components/cycles/analytics-sidebar/root.tsx (100%) rename {web => apps/web}/ce/components/cycles/end-cycle/index.ts (100%) rename {web => apps/web}/ce/components/cycles/end-cycle/modal.tsx (100%) rename {web => apps/web}/ce/components/cycles/end-cycle/use-end-cycle.tsx (100%) rename {web => apps/web}/ce/components/cycles/index.ts (100%) rename {web => apps/web}/ce/components/de-dupe/de-dupe-button.tsx (100%) rename {web => apps/web}/ce/components/de-dupe/duplicate-modal/index.ts (100%) rename {web => apps/web}/ce/components/de-dupe/duplicate-modal/root.tsx (100%) rename {web => apps/web}/ce/components/de-dupe/duplicate-popover/index.ts (100%) rename {web => apps/web}/ce/components/de-dupe/duplicate-popover/root.tsx (100%) rename {web => apps/web}/ce/components/de-dupe/index.ts (100%) rename {web => apps/web}/ce/components/de-dupe/issue-block/button-label.tsx (100%) rename {web => apps/web}/ce/components/de-dupe/issue-block/index.ts (100%) rename {web => apps/web}/ce/components/editor/embeds/index.ts (100%) rename {web => apps/web}/ce/components/editor/embeds/mentions/index.ts (100%) rename {web => apps/web}/ce/components/editor/embeds/mentions/root.tsx (100%) rename {web => apps/web}/ce/components/editor/index.ts (100%) rename {web => apps/web}/ce/components/epics/epic-modal/index.ts (100%) rename {web => apps/web}/ce/components/epics/epic-modal/modal.tsx (100%) rename {web => apps/web}/ce/components/epics/index.ts (100%) rename {web => apps/web}/ce/components/estimates/estimate-list-item-buttons.tsx (100%) rename {web => apps/web}/ce/components/estimates/helper.tsx (100%) rename {web => apps/web}/ce/components/estimates/index.ts (100%) rename {web => apps/web}/ce/components/estimates/inputs/index.ts (100%) rename {web => apps/web}/ce/components/estimates/inputs/time-input.tsx (100%) rename {web => apps/web}/ce/components/estimates/points/delete.tsx (100%) rename {web => apps/web}/ce/components/estimates/points/index.ts (100%) rename {web => apps/web}/ce/components/estimates/update/index.ts (100%) rename {web => apps/web}/ce/components/estimates/update/modal.tsx (100%) rename {web => apps/web}/ce/components/gantt-chart/dependency/blockDraggables/index.ts (100%) rename {web => apps/web}/ce/components/gantt-chart/dependency/blockDraggables/left-draggable.tsx (100%) rename {web => apps/web}/ce/components/gantt-chart/dependency/blockDraggables/right-draggable.tsx (100%) rename {web => apps/web}/ce/components/gantt-chart/dependency/dependency-paths.tsx (100%) rename {web => apps/web}/ce/components/gantt-chart/dependency/draggable-dependency-path.tsx (100%) rename {web => apps/web}/ce/components/gantt-chart/dependency/index.ts (100%) rename {web => apps/web}/ce/components/gantt-chart/index.ts (100%) rename {web => apps/web}/ce/components/global/index.ts (100%) rename {web => apps/web}/ce/components/global/product-updates-header.tsx (100%) rename {web => apps/web}/ce/components/global/version-number.tsx (100%) rename {web => apps/web}/ce/components/home/header.tsx (100%) rename {web => apps/web}/ce/components/home/index.ts (100%) rename {web => apps/web}/ce/components/home/peek-overviews.tsx (100%) rename {web => apps/web}/ce/components/inbox/source-pill.tsx (100%) rename {web => apps/web}/ce/components/instance/index.ts (100%) rename {web => apps/web}/ce/components/instance/maintenance-message.tsx (100%) rename {web => apps/web}/ce/components/issues/bulk-operations/index.ts (100%) rename {web => apps/web}/ce/components/issues/bulk-operations/root.tsx (100%) rename {web => apps/web}/ce/components/issues/filters/applied-filters/index.ts (100%) rename {web => apps/web}/ce/components/issues/filters/applied-filters/issue-types.tsx (100%) rename {web => apps/web}/ce/components/issues/filters/index.ts (100%) rename {web => apps/web}/ce/components/issues/filters/issue-types.tsx (100%) rename {web => apps/web}/ce/components/issues/filters/team-project.tsx (100%) rename {web => apps/web}/ce/components/issues/header.tsx (100%) rename {web => apps/web}/ce/components/issues/index.ts (100%) rename {web => apps/web}/ce/components/issues/issue-detail-widgets/action-buttons.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-detail-widgets/collapsibles.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-detail-widgets/modals.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-details/additional-activity-root.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-details/additional-properties.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-details/index.ts (100%) rename {web => apps/web}/ce/components/issues/issue-details/issue-creator.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-details/issue-identifier.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-details/issue-properties-activity/index.ts (100%) rename {web => apps/web}/ce/components/issues/issue-details/issue-properties-activity/root.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-details/issue-type-activity.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-details/issue-type-switcher.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-details/parent-select-root.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-layouts/additional-properties.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-layouts/empty-states/index.ts (100%) rename {web => apps/web}/ce/components/issues/issue-layouts/empty-states/team-issues.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-layouts/empty-states/team-view-issues.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-layouts/issue-stats.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-layouts/quick-action-dropdowns/copy-menu-helper.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-layouts/quick-action-dropdowns/duplicate-modal.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-layouts/quick-action-dropdowns/index.ts (100%) rename {web => apps/web}/ce/components/issues/issue-layouts/utils.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-modal/additional-properties.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-modal/index.ts (100%) rename {web => apps/web}/ce/components/issues/issue-modal/issue-type-select.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-modal/provider.tsx (100%) rename {web => apps/web}/ce/components/issues/issue-modal/template-select.tsx (100%) rename {web => apps/web}/ce/components/issues/quick-add/index.ts (100%) rename {web => apps/web}/ce/components/issues/quick-add/root.tsx (100%) rename {web => apps/web}/ce/components/issues/worklog/activity/filter-root.tsx (100%) rename {web => apps/web}/ce/components/issues/worklog/activity/index.ts (100%) rename {web => apps/web}/ce/components/issues/worklog/activity/root.tsx (100%) rename {web => apps/web}/ce/components/issues/worklog/activity/worklog-create-button.tsx (100%) rename {web => apps/web}/ce/components/issues/worklog/index.ts (100%) rename {web => apps/web}/ce/components/issues/worklog/property/index.ts (100%) rename {web => apps/web}/ce/components/issues/worklog/property/root.tsx (100%) rename {web => apps/web}/ce/components/license/index.ts (100%) rename {web => apps/web}/ce/components/license/modal/index.ts (100%) rename {web => apps/web}/ce/components/license/modal/upgrade-modal.tsx (100%) rename {web => apps/web}/ce/components/pages/editor/ai/ask-pi-menu.tsx (100%) rename {web => apps/web}/ce/components/pages/editor/ai/index.ts (100%) rename {web => apps/web}/ce/components/pages/editor/ai/menu.tsx (100%) rename {web => apps/web}/ce/components/pages/editor/embed/index.ts (100%) rename {web => apps/web}/ce/components/pages/editor/embed/issue-embed-upgrade-card.tsx (100%) rename {web => apps/web}/ce/components/pages/editor/index.ts (100%) rename {web => apps/web}/ce/components/pages/extra-actions.tsx (100%) rename {web => apps/web}/ce/components/pages/header/collaborators-list.tsx (100%) rename {web => apps/web}/ce/components/pages/header/lock-control.tsx (100%) rename {web => apps/web}/ce/components/pages/header/move-control.tsx (100%) rename {web => apps/web}/ce/components/pages/header/share-control.tsx (100%) rename {web => apps/web}/ce/components/pages/index.ts (100%) rename {web => apps/web}/ce/components/pages/modals/index.ts (100%) rename {web => apps/web}/ce/components/pages/modals/move-page-modal.tsx (100%) rename {web => apps/web}/ce/components/pages/navigation-pane/index.ts (100%) rename {web => apps/web}/ce/components/pages/navigation-pane/tab-panels/assets.tsx (100%) rename {web => apps/web}/ce/components/pages/navigation-pane/tab-panels/empty-states/assets.tsx (100%) rename {web => apps/web}/ce/components/pages/navigation-pane/tab-panels/empty-states/outline.tsx (100%) rename {web => apps/web}/ce/components/pages/navigation-pane/tab-panels/root.tsx (100%) rename {web => apps/web}/ce/components/preferences/config.ts (100%) rename {web => apps/web}/ce/components/preferences/theme-switcher.tsx (100%) rename {web => apps/web}/ce/components/projects/create/attributes.tsx (100%) rename {web => apps/web}/ce/components/projects/create/root.tsx (100%) rename {web => apps/web}/ce/components/projects/create/template-select.tsx (100%) rename {web => apps/web}/ce/components/projects/header.tsx (100%) rename {web => apps/web}/ce/components/projects/mobile-header.tsx (100%) rename {web => apps/web}/ce/components/projects/navigation/helper.tsx (100%) rename {web => apps/web}/ce/components/projects/navigation/index.ts (100%) rename {web => apps/web}/ce/components/projects/page.tsx (100%) rename {web => apps/web}/ce/components/projects/settings/intake/header.tsx (100%) rename {web => apps/web}/ce/components/projects/settings/intake/index.ts (100%) rename {web => apps/web}/ce/components/projects/settings/useProjectColumns.tsx (100%) rename {web => apps/web}/ce/components/projects/teamspaces/index.ts (100%) rename {web => apps/web}/ce/components/projects/teamspaces/teamspace-list.tsx (100%) rename {web => apps/web}/ce/components/relations/activity.ts (100%) rename {web => apps/web}/ce/components/relations/index.tsx (100%) rename {web => apps/web}/ce/components/sidebar/app-switcher.tsx (100%) rename {web => apps/web}/ce/components/sidebar/index.ts (100%) rename {web => apps/web}/ce/components/sidebar/project-navigation-root.tsx (100%) rename {web => apps/web}/ce/components/views/access-controller.tsx (100%) rename {web => apps/web}/ce/components/views/filters/access-filter.tsx (100%) rename {web => apps/web}/ce/components/views/helper.tsx (100%) rename {web => apps/web}/ce/components/views/publish/index.ts (100%) rename {web => apps/web}/ce/components/views/publish/modal.tsx (100%) rename {web => apps/web}/ce/components/views/publish/use-view-publish.tsx (100%) rename {web => apps/web}/ce/components/workflow/index.ts (100%) rename {web => apps/web}/ce/components/workflow/state-option.tsx (100%) rename {web => apps/web}/ce/components/workflow/use-workflow-drag-n-drop.ts (100%) rename {web => apps/web}/ce/components/workflow/workflow-disabled-message.tsx (100%) rename {web => apps/web}/ce/components/workflow/workflow-disabled-overlay.tsx (100%) rename {web => apps/web}/ce/components/workflow/workflow-group-tree.tsx (100%) rename {web => apps/web}/ce/components/workspace-notifications/index.ts (100%) rename {web => apps/web}/ce/components/workspace-notifications/list-root.tsx (100%) rename {web => apps/web}/ce/components/workspace-notifications/notification-card/root.tsx (100%) rename {web => apps/web}/ce/components/workspace/billing/billing-actions-button.tsx (100%) rename {web => apps/web}/ce/components/workspace/billing/comparison/frequency-toggle.tsx (100%) rename {web => apps/web}/ce/components/workspace/billing/comparison/plan-detail.tsx (100%) rename {web => apps/web}/ce/components/workspace/billing/comparison/root.tsx (100%) rename {web => apps/web}/ce/components/workspace/billing/index.ts (100%) rename {web => apps/web}/ce/components/workspace/billing/root.tsx (100%) rename {web => apps/web}/ce/components/workspace/delete-workspace-modal.tsx (100%) rename {web => apps/web}/ce/components/workspace/delete-workspace-section.tsx (100%) rename {web => apps/web}/ce/components/workspace/edition-badge.tsx (100%) rename {web => apps/web}/ce/components/workspace/index.ts (100%) rename {web => apps/web}/ce/components/workspace/members/index.ts (100%) rename {web => apps/web}/ce/components/workspace/members/invite-modal.tsx (100%) rename {web => apps/web}/ce/components/workspace/settings/useMemberColumns.tsx (100%) rename {web => apps/web}/ce/components/workspace/sidebar/app-search.tsx (100%) rename {web => apps/web}/ce/components/workspace/sidebar/extended-sidebar-item.tsx (100%) rename {web => apps/web}/ce/components/workspace/sidebar/helper.tsx (100%) rename {web => apps/web}/ce/components/workspace/sidebar/index.ts (100%) rename {web => apps/web}/ce/components/workspace/sidebar/sidebar-item.tsx (100%) rename {web => apps/web}/ce/components/workspace/sidebar/teams-sidebar-list.tsx (100%) rename {web => apps/web}/ce/components/workspace/upgrade-badge.tsx (100%) rename {web => apps/web}/ce/constants/ai.ts (100%) rename {web => apps/web}/ce/constants/editor.ts (100%) rename {web => apps/web}/ce/constants/gantt-chart.ts (100%) rename {web => apps/web}/ce/constants/index.ts (100%) rename {web => apps/web}/ce/constants/project/index.ts (100%) rename {web => apps/web}/ce/constants/project/settings/features.tsx (100%) rename {web => apps/web}/ce/constants/project/settings/index.ts (100%) rename {web => apps/web}/ce/constants/project/settings/tabs.ts (100%) rename {web => apps/web}/ce/constants/sidebar-favorites.ts (100%) rename {web => apps/web}/ce/helpers/command-palette.ts (100%) rename {web => apps/web}/ce/helpers/epic-analytics.ts (100%) rename {web => apps/web}/ce/helpers/instance.helper.ts (100%) rename {web => apps/web}/ce/helpers/issue-action-helper.ts (100%) rename {web => apps/web}/ce/helpers/issue-filter.helper.ts (100%) rename {web => apps/web}/ce/helpers/pi-chat.helper.ts (100%) rename {web => apps/web}/ce/helpers/project-settings.ts (100%) rename {web => apps/web}/ce/helpers/workspace.helper.ts (100%) rename {web => apps/web}/ce/hooks/store/index.ts (100%) rename {web => apps/web}/ce/hooks/store/use-page-store.ts (100%) rename {web => apps/web}/ce/hooks/store/use-page.ts (100%) rename {web => apps/web}/ce/hooks/use-additional-editor-mention.tsx (100%) rename {web => apps/web}/ce/hooks/use-additional-favorite-item-details.ts (100%) rename {web => apps/web}/ce/hooks/use-bulk-operation-status.ts (100%) rename {web => apps/web}/ce/hooks/use-debounced-duplicate-issues.tsx (100%) rename {web => apps/web}/ce/hooks/use-editor-flagging.ts (100%) rename {web => apps/web}/ce/hooks/use-file-size.ts (100%) rename {web => apps/web}/ce/hooks/use-issue-embed.tsx (100%) rename {web => apps/web}/ce/hooks/use-issue-properties.tsx (100%) rename {web => apps/web}/ce/hooks/use-notification-preview.tsx (100%) rename {web => apps/web}/ce/hooks/use-page-flag.ts (100%) rename {web => apps/web}/ce/hooks/use-workspace-issue-properties-extended.tsx (100%) rename {web => apps/web}/ce/layouts/project-wrapper.tsx (100%) rename {web => apps/web}/ce/layouts/workspace-wrapper.tsx (100%) rename {web => apps/web}/ce/services/index.ts (100%) rename {web => apps/web}/ce/services/project/estimate.service.ts (100%) rename {web => apps/web}/ce/services/project/index.ts (100%) rename {web => apps/web}/ce/services/project/project-state.service.ts (100%) rename {web => apps/web}/ce/services/project/view.service.ts (100%) rename {web => apps/web}/ce/services/workspace.service.ts (100%) rename {web => apps/web}/ce/store/analytics.store.ts (100%) rename {web => apps/web}/ce/store/command-palette.store.ts (100%) rename {web => apps/web}/ce/store/cycle/index.ts (100%) rename {web => apps/web}/ce/store/estimates/estimate.ts (100%) rename {web => apps/web}/ce/store/issue/epic/filter.store.ts (100%) rename {web => apps/web}/ce/store/issue/epic/index.ts (100%) rename {web => apps/web}/ce/store/issue/epic/issue.store.ts (100%) rename {web => apps/web}/ce/store/issue/helpers/base-issue-store.ts (100%) rename {web => apps/web}/ce/store/issue/helpers/base-issue.store.ts (100%) rename {web => apps/web}/ce/store/issue/issue-details/activity.store.ts (100%) rename {web => apps/web}/ce/store/issue/issue-details/root.store.ts (100%) rename {web => apps/web}/ce/store/issue/team-views/filter.store.ts (100%) rename {web => apps/web}/ce/store/issue/team-views/index.ts (100%) rename {web => apps/web}/ce/store/issue/team-views/issue.store.ts (100%) rename {web => apps/web}/ce/store/issue/team/filter.store.ts (100%) rename {web => apps/web}/ce/store/issue/team/index.ts (100%) rename {web => apps/web}/ce/store/issue/team/issue.store.ts (100%) rename {web => apps/web}/ce/store/issue/workspace/issue.store.ts (100%) rename {web => apps/web}/ce/store/member/project-member.store.ts (100%) rename {web => apps/web}/ce/store/pages/extended-base-page.ts (100%) rename {web => apps/web}/ce/store/project-inbox.store.ts (100%) rename {web => apps/web}/ce/store/root.store.ts (100%) rename {web => apps/web}/ce/store/state.store.ts (100%) rename {web => apps/web}/ce/store/timeline/base-timeline.store.ts (100%) rename {web => apps/web}/ce/store/timeline/index.ts (100%) rename {web => apps/web}/ce/store/user/permission.store.ts (100%) rename {web => apps/web}/ce/types/gantt-chart.ts (100%) rename {web => apps/web}/ce/types/index.ts (100%) rename {web => apps/web}/ce/types/issue-types/index.ts (100%) rename {web => apps/web}/ce/types/issue-types/issue-property-values.d.ts (100%) rename {web => apps/web}/ce/types/projects/index.ts (100%) rename {web => apps/web}/ce/types/projects/project-activity.ts (100%) rename {web => apps/web}/ce/types/projects/projects.ts (100%) rename {web => apps/web}/core/components/account/auth-forms/auth-banner.tsx (100%) rename {web => apps/web}/core/components/account/auth-forms/auth-header.tsx (100%) rename {web => apps/web}/core/components/account/auth-forms/auth-root.tsx (100%) rename {web => apps/web}/core/components/account/auth-forms/email.tsx (100%) rename {web => apps/web}/core/components/account/auth-forms/forgot-password-popover.tsx (100%) rename {web => apps/web}/core/components/account/auth-forms/index.ts (100%) rename {web => apps/web}/core/components/account/auth-forms/password.tsx (100%) rename {web => apps/web}/core/components/account/auth-forms/unique-code.tsx (100%) rename {web => apps/web}/core/components/account/deactivate-account-modal.tsx (100%) rename {web => apps/web}/core/components/account/index.ts (100%) rename {web => apps/web}/core/components/account/oauth/github-button.tsx (100%) rename {web => apps/web}/core/components/account/oauth/gitlab-button.tsx (100%) rename {web => apps/web}/core/components/account/oauth/google-button.tsx (100%) rename {web => apps/web}/core/components/account/oauth/index.ts (100%) rename {web => apps/web}/core/components/account/oauth/oauth-options.tsx (100%) rename {web => apps/web}/core/components/account/password-strength-meter.tsx (100%) rename {web => apps/web}/core/components/account/terms-and-conditions.tsx (100%) rename {web => apps/web}/core/components/analytics/analytics-filter-actions.tsx (100%) rename {web => apps/web}/core/components/analytics/analytics-section-wrapper.tsx (100%) rename {web => apps/web}/core/components/analytics/analytics-wrapper.tsx (100%) rename {web => apps/web}/core/components/analytics/empty-state.tsx (100%) rename {web => apps/web}/core/components/analytics/export.ts (100%) rename {web => apps/web}/core/components/analytics/index.ts (100%) rename {web => apps/web}/core/components/analytics/insight-card.tsx (100%) rename {web => apps/web}/core/components/analytics/insight-table/data-table.tsx (100%) rename {web => apps/web}/core/components/analytics/insight-table/index.ts (100%) rename {web => apps/web}/core/components/analytics/insight-table/loader.tsx (100%) rename {web => apps/web}/core/components/analytics/insight-table/root.tsx (100%) rename {web => apps/web}/core/components/analytics/loaders.tsx (100%) rename {web => apps/web}/core/components/analytics/overview/active-project-item.tsx (100%) rename {web => apps/web}/core/components/analytics/overview/active-projects.tsx (100%) rename {web => apps/web}/core/components/analytics/overview/index.ts (100%) rename {web => apps/web}/core/components/analytics/overview/project-insights.tsx (100%) rename {web => apps/web}/core/components/analytics/overview/root.tsx (100%) rename {web => apps/web}/core/components/analytics/select/analytics-params.tsx (100%) rename {web => apps/web}/core/components/analytics/select/duration.tsx (100%) rename {web => apps/web}/core/components/analytics/select/project.tsx (100%) rename {web => apps/web}/core/components/analytics/select/select-x-axis.tsx (100%) rename {web => apps/web}/core/components/analytics/select/select-y-axis.tsx (100%) rename {web => apps/web}/core/components/analytics/total-insights.tsx (100%) rename {web => apps/web}/core/components/analytics/trend-piece.tsx (100%) rename {web => apps/web}/core/components/analytics/work-items/created-vs-resolved.tsx (100%) rename {web => apps/web}/core/components/analytics/work-items/customized-insights.tsx (100%) rename {web => apps/web}/core/components/analytics/work-items/index.ts (100%) rename {web => apps/web}/core/components/analytics/work-items/modal/content.tsx (100%) rename {web => apps/web}/core/components/analytics/work-items/modal/header.tsx (100%) rename {web => apps/web}/core/components/analytics/work-items/modal/index.tsx (100%) rename {web => apps/web}/core/components/analytics/work-items/priority-chart.tsx (100%) rename {web => apps/web}/core/components/analytics/work-items/root.tsx (100%) rename {web => apps/web}/core/components/analytics/work-items/utils.ts (100%) rename {web => apps/web}/core/components/analytics/work-items/workitems-insight-table.tsx (100%) rename {web => apps/web}/core/components/api-token/delete-token-modal.tsx (100%) rename {web => apps/web}/core/components/api-token/empty-state.tsx (100%) rename {web => apps/web}/core/components/api-token/index.ts (100%) rename {web => apps/web}/core/components/api-token/modal/create-token-modal.tsx (100%) rename {web => apps/web}/core/components/api-token/modal/form.tsx (100%) rename {web => apps/web}/core/components/api-token/modal/generated-token-details.tsx (100%) rename {web => apps/web}/core/components/api-token/modal/index.ts (100%) rename {web => apps/web}/core/components/api-token/token-list-item.tsx (100%) rename {web => apps/web}/core/components/archives/archive-tabs-list.tsx (100%) rename {web => apps/web}/core/components/archives/index.ts (100%) rename {web => apps/web}/core/components/auth-screens/index.ts (100%) rename {web => apps/web}/core/components/auth-screens/not-authorized-view.tsx (100%) rename {web => apps/web}/core/components/auth-screens/project/index.ts (100%) rename {web => apps/web}/core/components/auth-screens/project/join-project.tsx (100%) rename {web => apps/web}/core/components/auth-screens/workspace/index.ts (100%) rename {web => apps/web}/core/components/auth-screens/workspace/not-a-member.tsx (100%) rename {web => apps/web}/core/components/automation/auto-archive-automation.tsx (100%) rename {web => apps/web}/core/components/automation/auto-close-automation.tsx (100%) rename {web => apps/web}/core/components/automation/index.ts (100%) rename {web => apps/web}/core/components/automation/select-month-modal.tsx (100%) rename {web => apps/web}/core/components/chart/utils.ts (100%) rename {web => apps/web}/core/components/command-palette/actions/help-actions.tsx (100%) rename {web => apps/web}/core/components/command-palette/actions/helper.tsx (100%) rename {web => apps/web}/core/components/command-palette/actions/index.ts (100%) rename {web => apps/web}/core/components/command-palette/actions/issue-actions/actions-list.tsx (100%) rename {web => apps/web}/core/components/command-palette/actions/issue-actions/change-assignee.tsx (100%) rename {web => apps/web}/core/components/command-palette/actions/issue-actions/change-priority.tsx (100%) rename {web => apps/web}/core/components/command-palette/actions/issue-actions/change-state.tsx (100%) rename {web => apps/web}/core/components/command-palette/actions/issue-actions/index.ts (100%) rename {web => apps/web}/core/components/command-palette/actions/project-actions.tsx (100%) rename {web => apps/web}/core/components/command-palette/actions/search-results.tsx (100%) rename {web => apps/web}/core/components/command-palette/actions/theme-actions.tsx (100%) rename {web => apps/web}/core/components/command-palette/actions/workspace-settings-actions.tsx (100%) rename {web => apps/web}/core/components/command-palette/command-modal.tsx (100%) rename {web => apps/web}/core/components/command-palette/command-palette.tsx (100%) rename {web => apps/web}/core/components/command-palette/index.ts (100%) rename {web => apps/web}/core/components/command-palette/shortcuts-modal/commands-list.tsx (100%) rename {web => apps/web}/core/components/command-palette/shortcuts-modal/index.ts (100%) rename {web => apps/web}/core/components/command-palette/shortcuts-modal/modal.tsx (100%) rename {web => apps/web}/core/components/comments/comment-card.tsx (100%) rename {web => apps/web}/core/components/comments/comment-create.tsx (100%) rename {web => apps/web}/core/components/comments/comment-reaction.tsx (100%) rename {web => apps/web}/core/components/comments/comments.tsx (100%) rename {web => apps/web}/core/components/comments/index.ts (100%) rename {web => apps/web}/core/components/common/access-field.tsx (100%) rename {web => apps/web}/core/components/common/activity/activity-block.tsx (100%) rename {web => apps/web}/core/components/common/activity/activity-item.tsx (100%) rename {web => apps/web}/core/components/common/activity/helper.tsx (100%) rename {web => apps/web}/core/components/common/activity/index.ts (100%) rename {web => apps/web}/core/components/common/activity/user.tsx (100%) rename {web => apps/web}/core/components/common/applied-filters/date.tsx (100%) rename {web => apps/web}/core/components/common/applied-filters/index.ts (100%) rename {web => apps/web}/core/components/common/applied-filters/members.tsx (100%) rename {web => apps/web}/core/components/common/breadcrumb-link.tsx (100%) rename {web => apps/web}/core/components/common/count-chip.tsx (100%) rename {web => apps/web}/core/components/common/empty-state.tsx (100%) rename {web => apps/web}/core/components/common/filters/created-at.tsx (100%) rename {web => apps/web}/core/components/common/filters/created-by.tsx (100%) rename {web => apps/web}/core/components/common/filters/index.ts (100%) rename {web => apps/web}/core/components/common/index.ts (100%) rename {web => apps/web}/core/components/common/latest-feature-block.tsx (100%) rename {web => apps/web}/core/components/common/logo-spinner.tsx (100%) rename {web => apps/web}/core/components/common/logo.tsx (100%) rename {web => apps/web}/core/components/common/new-empty-state.tsx (100%) rename {web => apps/web}/core/components/common/page-access-icon.tsx (100%) rename {web => apps/web}/core/components/common/pro-icon.tsx (100%) rename {web => apps/web}/core/components/common/switcher-label.tsx (100%) rename {web => apps/web}/core/components/core/activity.tsx (100%) rename {web => apps/web}/core/components/core/app-header.tsx (100%) rename {web => apps/web}/core/components/core/content-overflow-HOC.tsx (100%) rename {web => apps/web}/core/components/core/content-wrapper.tsx (100%) rename {web => apps/web}/core/components/core/description-versions/dropdown-item.tsx (100%) rename {web => apps/web}/core/components/core/description-versions/dropdown.tsx (100%) rename {web => apps/web}/core/components/core/description-versions/index.ts (100%) rename {web => apps/web}/core/components/core/description-versions/modal.tsx (100%) rename {web => apps/web}/core/components/core/description-versions/root.tsx (100%) rename {web => apps/web}/core/components/core/filters/date-filter-modal.tsx (100%) rename {web => apps/web}/core/components/core/filters/date-filter-select.tsx (100%) rename {web => apps/web}/core/components/core/filters/index.ts (100%) rename {web => apps/web}/core/components/core/image-picker-popover.tsx (100%) rename {web => apps/web}/core/components/core/index.ts (100%) rename {web => apps/web}/core/components/core/list/index.ts (100%) rename {web => apps/web}/core/components/core/list/list-item.tsx (100%) rename {web => apps/web}/core/components/core/list/list-root.tsx (100%) rename {web => apps/web}/core/components/core/modals/bulk-delete-issues-modal-item.tsx (100%) rename {web => apps/web}/core/components/core/modals/bulk-delete-issues-modal.tsx (100%) rename {web => apps/web}/core/components/core/modals/existing-issues-list-modal.tsx (100%) rename {web => apps/web}/core/components/core/modals/gpt-assistant-popover.tsx (100%) rename {web => apps/web}/core/components/core/modals/index.ts (100%) rename {web => apps/web}/core/components/core/modals/issue-search-modal-empty-state.tsx (100%) rename {web => apps/web}/core/components/core/modals/user-image-upload-modal.tsx (100%) rename {web => apps/web}/core/components/core/modals/workspace-image-upload-modal.tsx (100%) rename {web => apps/web}/core/components/core/multiple-select/entity-select-action.tsx (100%) rename {web => apps/web}/core/components/core/multiple-select/group-select-action.tsx (100%) rename {web => apps/web}/core/components/core/multiple-select/index.ts (100%) rename {web => apps/web}/core/components/core/multiple-select/select-group.tsx (100%) rename {web => apps/web}/core/components/core/page-title.tsx (100%) rename {web => apps/web}/core/components/core/render-if-visible-HOC.tsx (100%) rename {web => apps/web}/core/components/core/sidebar/index.ts (100%) rename {web => apps/web}/core/components/core/sidebar/progress-chart.tsx (100%) rename {web => apps/web}/core/components/core/sidebar/sidebar-menu-hamburger-toggle.tsx (100%) rename {web => apps/web}/core/components/core/sidebar/single-progress-stats.tsx (100%) rename {web => apps/web}/core/components/core/theme/color-picker-input.tsx (100%) rename {web => apps/web}/core/components/core/theme/custom-theme-selector.tsx (100%) rename {web => apps/web}/core/components/core/theme/index.ts (100%) rename {web => apps/web}/core/components/core/theme/theme-switch.tsx (100%) rename {web => apps/web}/core/components/cycles/active-cycle/cycle-stats.tsx (100%) rename {web => apps/web}/core/components/cycles/active-cycle/index.ts (100%) rename {web => apps/web}/core/components/cycles/active-cycle/productivity.tsx (100%) rename {web => apps/web}/core/components/cycles/active-cycle/progress.tsx (100%) rename {web => apps/web}/core/components/cycles/active-cycle/use-cycles-details.ts (100%) rename {web => apps/web}/core/components/cycles/analytics-sidebar/index.ts (100%) rename {web => apps/web}/core/components/cycles/analytics-sidebar/issue-progress.tsx (100%) rename {web => apps/web}/core/components/cycles/analytics-sidebar/progress-stats.tsx (100%) rename {web => apps/web}/core/components/cycles/analytics-sidebar/root.tsx (100%) rename {web => apps/web}/core/components/cycles/analytics-sidebar/sidebar-details.tsx (100%) rename {web => apps/web}/core/components/cycles/analytics-sidebar/sidebar-header.tsx (100%) rename {web => apps/web}/core/components/cycles/applied-filters/date.tsx (100%) rename {web => apps/web}/core/components/cycles/applied-filters/index.ts (100%) rename {web => apps/web}/core/components/cycles/applied-filters/root.tsx (100%) rename {web => apps/web}/core/components/cycles/applied-filters/status.tsx (100%) rename {web => apps/web}/core/components/cycles/archived-cycles/header.tsx (100%) rename {web => apps/web}/core/components/cycles/archived-cycles/index.ts (100%) rename {web => apps/web}/core/components/cycles/archived-cycles/modal.tsx (100%) rename {web => apps/web}/core/components/cycles/archived-cycles/root.tsx (100%) rename {web => apps/web}/core/components/cycles/archived-cycles/view.tsx (100%) rename {web => apps/web}/core/components/cycles/cycle-peek-overview.tsx (100%) rename {web => apps/web}/core/components/cycles/cycles-view-header.tsx (100%) rename {web => apps/web}/core/components/cycles/cycles-view.tsx (100%) rename {web => apps/web}/core/components/cycles/delete-modal.tsx (100%) rename {web => apps/web}/core/components/cycles/dropdowns/estimate-type-dropdown.tsx (100%) rename {web => apps/web}/core/components/cycles/dropdowns/filters/end-date.tsx (100%) rename {web => apps/web}/core/components/cycles/dropdowns/filters/index.ts (100%) rename {web => apps/web}/core/components/cycles/dropdowns/filters/root.tsx (100%) rename {web => apps/web}/core/components/cycles/dropdowns/filters/start-date.tsx (100%) rename {web => apps/web}/core/components/cycles/dropdowns/filters/status.tsx (100%) rename {web => apps/web}/core/components/cycles/dropdowns/index.ts (100%) rename {web => apps/web}/core/components/cycles/form.tsx (100%) rename {web => apps/web}/core/components/cycles/index.ts (100%) rename {web => apps/web}/core/components/cycles/list/cycle-list-group-header.tsx (100%) rename {web => apps/web}/core/components/cycles/list/cycle-list-item-action.tsx (100%) rename {web => apps/web}/core/components/cycles/list/cycle-list-project-group-header.tsx (100%) rename {web => apps/web}/core/components/cycles/list/cycles-list-item.tsx (100%) rename {web => apps/web}/core/components/cycles/list/cycles-list-map.tsx (100%) rename {web => apps/web}/core/components/cycles/list/index.ts (100%) rename {web => apps/web}/core/components/cycles/list/root.tsx (100%) rename {web => apps/web}/core/components/cycles/modal.tsx (100%) rename {web => apps/web}/core/components/cycles/quick-actions.tsx (100%) rename {web => apps/web}/core/components/cycles/transfer-issues-modal.tsx (100%) rename {web => apps/web}/core/components/cycles/transfer-issues.tsx (100%) rename {web => apps/web}/core/components/dropdowns/buttons.tsx (100%) rename {web => apps/web}/core/components/dropdowns/constants.ts (100%) rename {web => apps/web}/core/components/dropdowns/cycle/cycle-options.tsx (100%) rename {web => apps/web}/core/components/dropdowns/cycle/index.tsx (100%) rename {web => apps/web}/core/components/dropdowns/date-range.tsx (100%) rename {web => apps/web}/core/components/dropdowns/date.tsx (100%) rename {web => apps/web}/core/components/dropdowns/estimate.tsx (100%) rename {web => apps/web}/core/components/dropdowns/index.ts (100%) rename {web => apps/web}/core/components/dropdowns/layout.tsx (100%) rename {web => apps/web}/core/components/dropdowns/member/avatar.tsx (100%) rename {web => apps/web}/core/components/dropdowns/member/index.tsx (100%) rename {web => apps/web}/core/components/dropdowns/member/member-options.tsx (100%) rename {web => apps/web}/core/components/dropdowns/member/types.d.ts (100%) rename {web => apps/web}/core/components/dropdowns/merged-date.tsx (100%) rename {web => apps/web}/core/components/dropdowns/module/index.tsx (100%) rename {web => apps/web}/core/components/dropdowns/module/module-options.tsx (100%) rename {web => apps/web}/core/components/dropdowns/priority.tsx (100%) rename {web => apps/web}/core/components/dropdowns/project.tsx (100%) rename {web => apps/web}/core/components/dropdowns/state.tsx (100%) rename {web => apps/web}/core/components/dropdowns/types.d.ts (100%) rename {web => apps/web}/core/components/editor/embeds/index.ts (100%) rename {web => apps/web}/core/components/editor/embeds/mentions/index.ts (100%) rename {web => apps/web}/core/components/editor/embeds/mentions/root.tsx (100%) rename {web => apps/web}/core/components/editor/embeds/mentions/user.tsx (100%) rename {web => apps/web}/core/components/editor/index.ts (100%) rename {web => apps/web}/core/components/editor/lite-text-editor/index.ts (100%) rename {web => apps/web}/core/components/editor/lite-text-editor/lite-text-editor.tsx (100%) rename {web => apps/web}/core/components/editor/lite-text-editor/lite-text-read-only-editor.tsx (100%) rename {web => apps/web}/core/components/editor/lite-text-editor/toolbar.tsx (100%) rename {web => apps/web}/core/components/editor/pdf/document.tsx (100%) rename {web => apps/web}/core/components/editor/pdf/index.ts (100%) rename {web => apps/web}/core/components/editor/rich-text-editor/index.ts (100%) rename {web => apps/web}/core/components/editor/rich-text-editor/rich-text-editor.tsx (100%) rename {web => apps/web}/core/components/editor/rich-text-editor/rich-text-read-only-editor.tsx (100%) rename {web => apps/web}/core/components/editor/sticky-editor/color-palette.tsx (100%) rename {web => apps/web}/core/components/editor/sticky-editor/editor.tsx (100%) rename {web => apps/web}/core/components/editor/sticky-editor/index.ts (100%) rename {web => apps/web}/core/components/editor/sticky-editor/toolbar.tsx (100%) rename {web => apps/web}/core/components/empty-state/comic-box-button.tsx (100%) rename {web => apps/web}/core/components/empty-state/detailed-empty-state-root.tsx (100%) rename {web => apps/web}/core/components/empty-state/helper.tsx (100%) rename {web => apps/web}/core/components/empty-state/index.ts (100%) rename {web => apps/web}/core/components/empty-state/section-empty-state-root.tsx (100%) rename {web => apps/web}/core/components/empty-state/simple-empty-state-root.tsx (100%) rename {web => apps/web}/core/components/estimates/create/index.ts (100%) rename {web => apps/web}/core/components/estimates/create/modal.tsx (100%) rename {web => apps/web}/core/components/estimates/create/stage-one.tsx (100%) rename {web => apps/web}/core/components/estimates/delete/index.ts (100%) rename {web => apps/web}/core/components/estimates/delete/modal.tsx (100%) rename {web => apps/web}/core/components/estimates/empty-screen.tsx (100%) rename {web => apps/web}/core/components/estimates/estimate-disable-switch.tsx (100%) rename {web => apps/web}/core/components/estimates/estimate-list-item.tsx (100%) rename {web => apps/web}/core/components/estimates/estimate-list.tsx (100%) rename {web => apps/web}/core/components/estimates/estimate-search.tsx (100%) rename {web => apps/web}/core/components/estimates/index.ts (100%) rename {web => apps/web}/core/components/estimates/inputs/index.ts (100%) rename {web => apps/web}/core/components/estimates/inputs/number-input.tsx (100%) rename {web => apps/web}/core/components/estimates/inputs/root.tsx (100%) rename {web => apps/web}/core/components/estimates/inputs/text-input.tsx (100%) rename {web => apps/web}/core/components/estimates/loader-screen.tsx (100%) rename {web => apps/web}/core/components/estimates/points/create-root.tsx (100%) rename {web => apps/web}/core/components/estimates/points/create.tsx (100%) rename {web => apps/web}/core/components/estimates/points/index.ts (100%) rename {web => apps/web}/core/components/estimates/points/preview.tsx (100%) rename {web => apps/web}/core/components/estimates/points/update.tsx (100%) rename {web => apps/web}/core/components/estimates/radio-select.tsx (100%) rename {web => apps/web}/core/components/estimates/root.tsx (100%) rename {web => apps/web}/core/components/exporter/column.tsx (100%) rename {web => apps/web}/core/components/exporter/export-form.tsx (100%) rename {web => apps/web}/core/components/exporter/export-modal.tsx (100%) rename {web => apps/web}/core/components/exporter/guide.tsx (100%) rename {web => apps/web}/core/components/exporter/index.tsx (100%) rename {web => apps/web}/core/components/exporter/prev-exports.tsx (100%) rename {web => apps/web}/core/components/exporter/single-export.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/blocks/block-row-list.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/blocks/block-row.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/blocks/block.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/blocks/blocks-list.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/blocks/index.ts (100%) rename {web => apps/web}/core/components/gantt-chart/chart/header.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/chart/index.ts (100%) rename {web => apps/web}/core/components/gantt-chart/chart/main-content.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/chart/root.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/chart/timeline-drag-helper.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/chart/views/index.ts (100%) rename {web => apps/web}/core/components/gantt-chart/chart/views/month.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/chart/views/quarter.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/chart/views/week.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/constants.ts (100%) rename {web => apps/web}/core/components/gantt-chart/contexts/index.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/data/index.ts (100%) rename {web => apps/web}/core/components/gantt-chart/helpers/add-block.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/helpers/blockResizables/left-resizable.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/helpers/blockResizables/right-resizable.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/helpers/blockResizables/use-gantt-resizable.ts (100%) rename {web => apps/web}/core/components/gantt-chart/helpers/draggable.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/helpers/index.ts (100%) rename {web => apps/web}/core/components/gantt-chart/index.ts (100%) rename {web => apps/web}/core/components/gantt-chart/root.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/sidebar/gantt-dnd-HOC.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/sidebar/index.ts (100%) rename {web => apps/web}/core/components/gantt-chart/sidebar/issues/block.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/sidebar/issues/index.ts (100%) rename {web => apps/web}/core/components/gantt-chart/sidebar/issues/sidebar.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/sidebar/modules/block.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/sidebar/modules/index.ts (100%) rename {web => apps/web}/core/components/gantt-chart/sidebar/modules/sidebar.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/sidebar/root.tsx (100%) rename {web => apps/web}/core/components/gantt-chart/sidebar/utils.ts (100%) rename {web => apps/web}/core/components/gantt-chart/views/helpers.ts (100%) rename {web => apps/web}/core/components/gantt-chart/views/index.ts (100%) rename {web => apps/web}/core/components/gantt-chart/views/month-view.ts (100%) rename {web => apps/web}/core/components/gantt-chart/views/quarter-view.ts (100%) rename {web => apps/web}/core/components/gantt-chart/views/week-view.ts (100%) rename {web => apps/web}/core/components/global/index.ts (100%) rename {web => apps/web}/core/components/global/product-updates/footer.tsx (100%) rename {web => apps/web}/core/components/global/product-updates/index.ts (100%) rename {web => apps/web}/core/components/global/product-updates/modal.tsx (100%) rename {web => apps/web}/core/components/global/timezone-select.tsx (100%) rename {web => apps/web}/core/components/home/home-dashboard-widgets.tsx (100%) rename {web => apps/web}/core/components/home/index.ts (100%) rename {web => apps/web}/core/components/home/root.tsx (100%) rename {web => apps/web}/core/components/home/user-greetings.tsx (100%) rename {web => apps/web}/core/components/home/widgets/empty-states/index.ts (100%) rename {web => apps/web}/core/components/home/widgets/empty-states/links.tsx (100%) rename {web => apps/web}/core/components/home/widgets/empty-states/no-projects.tsx (100%) rename {web => apps/web}/core/components/home/widgets/empty-states/recents.tsx (100%) rename {web => apps/web}/core/components/home/widgets/empty-states/stickies.tsx (100%) rename {web => apps/web}/core/components/home/widgets/index.ts (100%) rename {web => apps/web}/core/components/home/widgets/links/action.tsx (100%) rename {web => apps/web}/core/components/home/widgets/links/create-update-link-modal.tsx (100%) rename {web => apps/web}/core/components/home/widgets/links/index.ts (100%) rename {web => apps/web}/core/components/home/widgets/links/link-detail.tsx (100%) rename {web => apps/web}/core/components/home/widgets/links/links.tsx (100%) rename {web => apps/web}/core/components/home/widgets/links/root.tsx (100%) rename {web => apps/web}/core/components/home/widgets/links/use-links.tsx (100%) rename {web => apps/web}/core/components/home/widgets/loaders/home-loader.tsx (100%) rename {web => apps/web}/core/components/home/widgets/loaders/index.ts (100%) rename {web => apps/web}/core/components/home/widgets/loaders/loader.tsx (100%) rename {web => apps/web}/core/components/home/widgets/loaders/quick-links.tsx (100%) rename {web => apps/web}/core/components/home/widgets/loaders/recent-activity.tsx (100%) rename {web => apps/web}/core/components/home/widgets/manage/index.tsx (100%) rename {web => apps/web}/core/components/home/widgets/manage/widget-item-drag-handle.tsx (100%) rename {web => apps/web}/core/components/home/widgets/manage/widget-item.tsx (100%) rename {web => apps/web}/core/components/home/widgets/manage/widget-list.tsx (100%) rename {web => apps/web}/core/components/home/widgets/manage/widget.helpers.ts (100%) rename {web => apps/web}/core/components/home/widgets/recents/filters.tsx (100%) rename {web => apps/web}/core/components/home/widgets/recents/index.tsx (100%) rename {web => apps/web}/core/components/home/widgets/recents/issue.tsx (100%) rename {web => apps/web}/core/components/home/widgets/recents/page.tsx (100%) rename {web => apps/web}/core/components/home/widgets/recents/project.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/attachment-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/audio-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/css-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/csv-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/default-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/doc-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/document-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/figma-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/html-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/img-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/index.ts (100%) rename {web => apps/web}/core/components/icons/attachment/jpg-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/js-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/pdf-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/png-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/rar-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/setting-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/sheet-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/svg-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/tune-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/txt-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/video-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/attachment/zip-file-icon.tsx (100%) rename {web => apps/web}/core/components/icons/index.ts (100%) rename {web => apps/web}/core/components/icons/locked-component.tsx (100%) rename {web => apps/web}/core/components/icons/types.d.ts (100%) rename {web => apps/web}/core/components/inbox/content/inbox-issue-header.tsx (100%) rename {web => apps/web}/core/components/inbox/content/inbox-issue-mobile-header.tsx (100%) rename {web => apps/web}/core/components/inbox/content/index.ts (100%) rename {web => apps/web}/core/components/inbox/content/issue-properties.tsx (100%) rename {web => apps/web}/core/components/inbox/content/issue-root.tsx (100%) rename {web => apps/web}/core/components/inbox/content/root.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/applied-filters/date.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/applied-filters/index.ts (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/applied-filters/label.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/applied-filters/member.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/applied-filters/priority.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/applied-filters/root.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/applied-filters/state.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/applied-filters/status.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/filters/date.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/filters/filter-selection.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/filters/index.ts (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/filters/labels.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/filters/members.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/filters/priority.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/filters/state.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/filters/status.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/index.ts (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/root.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/sorting/index.ts (100%) rename {web => apps/web}/core/components/inbox/inbox-filter/sorting/order-by.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-issue-status.tsx (100%) rename {web => apps/web}/core/components/inbox/inbox-status-icon.tsx (100%) rename {web => apps/web}/core/components/inbox/index.ts (100%) rename {web => apps/web}/core/components/inbox/modals/create-modal/create-root.tsx (100%) rename {web => apps/web}/core/components/inbox/modals/create-modal/index.ts (100%) rename {web => apps/web}/core/components/inbox/modals/create-modal/issue-description.tsx (100%) rename {web => apps/web}/core/components/inbox/modals/create-modal/issue-properties.tsx (100%) rename {web => apps/web}/core/components/inbox/modals/create-modal/issue-title.tsx (100%) rename {web => apps/web}/core/components/inbox/modals/create-modal/modal.tsx (100%) rename {web => apps/web}/core/components/inbox/modals/decline-issue-modal.tsx (100%) rename {web => apps/web}/core/components/inbox/modals/delete-issue-modal.tsx (100%) rename {web => apps/web}/core/components/inbox/modals/index.ts (100%) rename {web => apps/web}/core/components/inbox/modals/select-duplicate.tsx (100%) rename {web => apps/web}/core/components/inbox/modals/snooze-issue-modal.tsx (100%) rename {web => apps/web}/core/components/inbox/root.tsx (100%) rename {web => apps/web}/core/components/inbox/sidebar/inbox-list-item.tsx (100%) rename {web => apps/web}/core/components/inbox/sidebar/inbox-list.tsx (100%) rename {web => apps/web}/core/components/inbox/sidebar/index.ts (100%) rename {web => apps/web}/core/components/inbox/sidebar/root.tsx (100%) rename {web => apps/web}/core/components/instance/index.ts (100%) rename {web => apps/web}/core/components/instance/maintenance-view.tsx (100%) rename {web => apps/web}/core/components/instance/not-ready-view.tsx (100%) rename {web => apps/web}/core/components/integration/delete-import-modal.tsx (100%) rename {web => apps/web}/core/components/integration/github/auth.tsx (100%) rename {web => apps/web}/core/components/integration/github/import-configure.tsx (100%) rename {web => apps/web}/core/components/integration/github/import-confirm.tsx (100%) rename {web => apps/web}/core/components/integration/github/import-data.tsx (100%) rename {web => apps/web}/core/components/integration/github/import-users.tsx (100%) rename {web => apps/web}/core/components/integration/github/index.ts (100%) rename {web => apps/web}/core/components/integration/github/repo-details.tsx (100%) rename {web => apps/web}/core/components/integration/github/root.tsx (100%) rename {web => apps/web}/core/components/integration/github/select-repository.tsx (100%) rename {web => apps/web}/core/components/integration/github/single-user-select.tsx (100%) rename {web => apps/web}/core/components/integration/guide.tsx (100%) rename {web => apps/web}/core/components/integration/index.ts (100%) rename {web => apps/web}/core/components/integration/jira/confirm-import.tsx (100%) rename {web => apps/web}/core/components/integration/jira/give-details.tsx (100%) rename {web => apps/web}/core/components/integration/jira/import-users.tsx (100%) rename {web => apps/web}/core/components/integration/jira/index.ts (100%) rename {web => apps/web}/core/components/integration/jira/jira-project-detail.tsx (100%) rename {web => apps/web}/core/components/integration/jira/root.tsx (100%) rename {web => apps/web}/core/components/integration/single-import.tsx (100%) rename {web => apps/web}/core/components/integration/single-integration-card.tsx (100%) rename {web => apps/web}/core/components/integration/slack/index.ts (100%) rename {web => apps/web}/core/components/integration/slack/select-channel.tsx (100%) rename {web => apps/web}/core/components/issues/archive-issue-modal.tsx (100%) rename {web => apps/web}/core/components/issues/archived-issues-header.tsx (100%) rename {web => apps/web}/core/components/issues/attachment/attachment-detail.tsx (100%) rename {web => apps/web}/core/components/issues/attachment/attachment-item-list.tsx (100%) rename {web => apps/web}/core/components/issues/attachment/attachment-list-item.tsx (100%) rename {web => apps/web}/core/components/issues/attachment/attachment-list-upload-item.tsx (100%) rename {web => apps/web}/core/components/issues/attachment/attachment-upload-details.tsx (100%) rename {web => apps/web}/core/components/issues/attachment/attachment-upload.tsx (100%) rename {web => apps/web}/core/components/issues/attachment/attachments-list.tsx (100%) rename {web => apps/web}/core/components/issues/attachment/delete-attachment-modal.tsx (100%) rename {web => apps/web}/core/components/issues/attachment/index.ts (100%) rename {web => apps/web}/core/components/issues/attachment/root.tsx (100%) rename {web => apps/web}/core/components/issues/bulk-operations/index.ts (100%) rename {web => apps/web}/core/components/issues/bulk-operations/upgrade-banner.tsx (100%) rename {web => apps/web}/core/components/issues/confirm-issue-discard.tsx (100%) rename {web => apps/web}/core/components/issues/create-issue-toast-action-items.tsx (100%) rename {web => apps/web}/core/components/issues/delete-issue-modal.tsx (100%) rename {web => apps/web}/core/components/issues/description-input.tsx (100%) rename {web => apps/web}/core/components/issues/filters.tsx (100%) rename {web => apps/web}/core/components/issues/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/action-buttons.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/attachments/content.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/attachments/helper.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/attachments/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/attachments/quick-action-button.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/attachments/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/attachments/title.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/links/content.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/links/helper.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/links/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/links/quick-action-button.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/links/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/links/title.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/relations/content.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/relations/helper.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/relations/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/relations/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/relations/title.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/content.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/display-filters.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/filters.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/helper.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/sub-issues/title.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail-widgets/widget-button.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/cycle-select.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity-comment-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity-filter.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/archived-at.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/assignee.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/attachment.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/cycle.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/default.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/description.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/estimate.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-link.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-user.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/inbox.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/label-activity-chip.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/label.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/link.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/module.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/name.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/parent.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/priority.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/relation.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/start_date.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/state.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/activity/activity-list.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/helper.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-activity/sort-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/issue-detail-quick-actions.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/label/create-label.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/label/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail/label/label-list-item.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/label/label-list.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/label/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/label/select/label-select.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/label/select/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/links/create-update-link-modal.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/links/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail/links/link-detail.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/links/link-item.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/links/link-list.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/links/links.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/links/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/main-content.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/module-select.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/parent-select.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/parent/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail/parent/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/parent/sibling-item.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/parent/siblings.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/reactions/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-detail/reactions/issue-comment.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/reactions/issue.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/reactions/reaction-selector.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/relation-select.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/sidebar.tsx (100%) rename {web => apps/web}/core/components/issues/issue-detail/subscription.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/base-calendar-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/calendar.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/day-tile.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/dropdowns/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/dropdowns/months-dropdown.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/header.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/issue-block-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/issue-block.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/issue-blocks.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/quick-add-issue-actions.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/roots/cycle-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/roots/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/roots/module-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/roots/project-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/roots/project-view-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/utils.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/week-days.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/calendar/week-header.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/empty-states/archived-issues.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/empty-states/cycle.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/empty-states/draft-issues.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/empty-states/global-view.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/empty-states/index.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/empty-states/module.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/empty-states/profile-view.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/empty-states/project-epic.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/empty-states/project-issues.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/empty-states/project-view.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/cycle.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/date.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/label.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/members.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/module.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/priority.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/project.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/roots/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/state-group.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/applied-filters/state.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/display-filters/extra-options.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/display-filters/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/display-filters/issue-grouping.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/display-filters/order-by.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/display-filters/sub-group-by.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/assignee.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/created-by.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/cycle.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/due-date.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/filters-selection.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/labels.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/mentions.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/module.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/priority.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/project.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/start-date.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/state-group.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/filters/state.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/helpers/filter-header.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/helpers/filter-option.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/helpers/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/header/layout-selection.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/filters/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/gantt/base-gantt-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/gantt/blocks.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/gantt/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/group-drag-overlay.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/issue-layout-HOC.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/block.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/blocks-list.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/default.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/kanban-group.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/roots/cycle-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/roots/draft-issue-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/roots/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/roots/module-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/roots/project-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/roots/project-view-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/kanban/swimlanes.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/layout-icon.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/base-list-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/block-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/block.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/blocks-list.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/default.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/headers/group-by-card.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/list-group.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/list-view-types.d.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/roots/archived-issue-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/roots/cycle-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/roots/draft-issue-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/roots/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/roots/module-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/roots/profile-issues-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/roots/project-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/list/roots/project-view-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/properties/all-properties.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/properties/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/properties/label-dropdown.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/properties/labels.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/properties/with-display-properties-HOC.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-action-dropdowns/all-issue.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-action-dropdowns/helper.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-action-dropdowns/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/button/gantt.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/button/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/button/kanban.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/button/list.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/button/spreadsheet.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/form/calendar.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/form/gantt.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/form/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/form/kanban.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/form/list.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/form/spreadsheet.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/quick-add/root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/roots/cycle-layout-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/roots/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/roots/module-layout-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/roots/project-layout-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/roots/project-view-layout-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/save-filter-view.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/assignee-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/attachment-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/created-on-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/link-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/state-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/columns/updated-on-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/roots/cycle-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/roots/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/roots/module-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/roots/project-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/roots/project-view-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/roots/workspace-root.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/spreadsheet-table.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx (100%) rename {web => apps/web}/core/components/issues/issue-layouts/utils.tsx (100%) rename {web => apps/web}/core/components/issues/issue-modal/base.tsx (100%) rename {web => apps/web}/core/components/issues/issue-modal/components/default-properties.tsx (100%) rename {web => apps/web}/core/components/issues/issue-modal/components/description-editor.tsx (100%) rename {web => apps/web}/core/components/issues/issue-modal/components/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-modal/components/parent-tag.tsx (100%) rename {web => apps/web}/core/components/issues/issue-modal/components/project-select.tsx (100%) rename {web => apps/web}/core/components/issues/issue-modal/components/title-input.tsx (100%) rename {web => apps/web}/core/components/issues/issue-modal/context/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-modal/context/issue-modal-context.tsx (100%) rename {web => apps/web}/core/components/issues/issue-modal/draft-issue-layout.tsx (100%) rename {web => apps/web}/core/components/issues/issue-modal/form.tsx (100%) rename {web => apps/web}/core/components/issues/issue-modal/index.ts (100%) rename {web => apps/web}/core/components/issues/issue-modal/modal.tsx (100%) rename {web => apps/web}/core/components/issues/issue-update-status.tsx (100%) rename {web => apps/web}/core/components/issues/label.tsx (100%) rename {web => apps/web}/core/components/issues/parent-issues-list-modal.tsx (100%) rename {web => apps/web}/core/components/issues/peek-overview/error.tsx (100%) rename {web => apps/web}/core/components/issues/peek-overview/header.tsx (100%) rename {web => apps/web}/core/components/issues/peek-overview/index.ts (100%) rename {web => apps/web}/core/components/issues/peek-overview/issue-detail.tsx (100%) rename {web => apps/web}/core/components/issues/peek-overview/loader.tsx (100%) rename {web => apps/web}/core/components/issues/peek-overview/properties.tsx (100%) rename {web => apps/web}/core/components/issues/peek-overview/root.tsx (100%) rename {web => apps/web}/core/components/issues/peek-overview/view.tsx (100%) rename {web => apps/web}/core/components/issues/relations/index.ts (100%) rename {web => apps/web}/core/components/issues/relations/issue-list-item.tsx (100%) rename {web => apps/web}/core/components/issues/relations/issue-list.tsx (100%) rename {web => apps/web}/core/components/issues/relations/properties.tsx (100%) rename {web => apps/web}/core/components/issues/select/index.ts (100%) rename {web => apps/web}/core/components/issues/select/label.tsx (100%) rename {web => apps/web}/core/components/issues/title-input.tsx (100%) rename {web => apps/web}/core/components/issues/workspace-draft/delete-modal.tsx (100%) rename {web => apps/web}/core/components/issues/workspace-draft/draft-issue-block.tsx (100%) rename {web => apps/web}/core/components/issues/workspace-draft/draft-issue-properties.tsx (100%) rename {web => apps/web}/core/components/issues/workspace-draft/empty-state.tsx (100%) rename {web => apps/web}/core/components/issues/workspace-draft/index.ts (100%) rename {web => apps/web}/core/components/issues/workspace-draft/loader.tsx (100%) rename {web => apps/web}/core/components/issues/workspace-draft/quick-action.tsx (100%) rename {web => apps/web}/core/components/issues/workspace-draft/root.tsx (100%) rename {web => apps/web}/core/components/labels/create-label-modal.tsx (100%) rename {web => apps/web}/core/components/labels/create-update-label-inline.tsx (100%) rename {web => apps/web}/core/components/labels/delete-label-modal.tsx (100%) rename {web => apps/web}/core/components/labels/index.ts (100%) rename {web => apps/web}/core/components/labels/label-block/label-item-block.tsx (100%) rename {web => apps/web}/core/components/labels/label-block/label-name.tsx (100%) rename {web => apps/web}/core/components/labels/label-drag-n-drop-HOC.tsx (100%) rename {web => apps/web}/core/components/labels/label-utils.ts (100%) rename {web => apps/web}/core/components/labels/project-setting-label-group.tsx (100%) rename {web => apps/web}/core/components/labels/project-setting-label-item.tsx (100%) rename {web => apps/web}/core/components/labels/project-setting-label-list.tsx (100%) rename {web => apps/web}/core/components/license/index.ts (100%) rename {web => apps/web}/core/components/license/modal/card/base-paid-plan-card.tsx (100%) rename {web => apps/web}/core/components/license/modal/card/checkout-button.tsx (100%) rename {web => apps/web}/core/components/license/modal/card/discount-info.tsx (100%) rename {web => apps/web}/core/components/license/modal/card/free-plan.tsx (100%) rename {web => apps/web}/core/components/license/modal/card/index.ts (100%) rename {web => apps/web}/core/components/license/modal/card/plan-upgrade.tsx (100%) rename {web => apps/web}/core/components/license/modal/card/talk-to-sales.tsx (100%) rename {web => apps/web}/core/components/license/modal/index.ts (100%) rename {web => apps/web}/core/components/modules/analytics-sidebar/index.ts (100%) rename {web => apps/web}/core/components/modules/analytics-sidebar/issue-progress.tsx (100%) rename {web => apps/web}/core/components/modules/analytics-sidebar/progress-stats.tsx (100%) rename {web => apps/web}/core/components/modules/analytics-sidebar/root.tsx (100%) rename {web => apps/web}/core/components/modules/applied-filters/date.tsx (100%) rename {web => apps/web}/core/components/modules/applied-filters/index.ts (100%) rename {web => apps/web}/core/components/modules/applied-filters/members.tsx (100%) rename {web => apps/web}/core/components/modules/applied-filters/root.tsx (100%) rename {web => apps/web}/core/components/modules/applied-filters/status.tsx (100%) rename {web => apps/web}/core/components/modules/archived-modules/header.tsx (100%) rename {web => apps/web}/core/components/modules/archived-modules/index.ts (100%) rename {web => apps/web}/core/components/modules/archived-modules/modal.tsx (100%) rename {web => apps/web}/core/components/modules/archived-modules/root.tsx (100%) rename {web => apps/web}/core/components/modules/archived-modules/view.tsx (100%) rename {web => apps/web}/core/components/modules/delete-module-modal.tsx (100%) rename {web => apps/web}/core/components/modules/dropdowns/filters/index.ts (100%) rename {web => apps/web}/core/components/modules/dropdowns/filters/lead.tsx (100%) rename {web => apps/web}/core/components/modules/dropdowns/filters/members.tsx (100%) rename {web => apps/web}/core/components/modules/dropdowns/filters/root.tsx (100%) rename {web => apps/web}/core/components/modules/dropdowns/filters/start-date.tsx (100%) rename {web => apps/web}/core/components/modules/dropdowns/filters/status.tsx (100%) rename {web => apps/web}/core/components/modules/dropdowns/filters/target-date.tsx (100%) rename {web => apps/web}/core/components/modules/dropdowns/index.ts (100%) rename {web => apps/web}/core/components/modules/dropdowns/order-by.tsx (100%) rename {web => apps/web}/core/components/modules/form.tsx (100%) rename {web => apps/web}/core/components/modules/gantt-chart/blocks.tsx (100%) rename {web => apps/web}/core/components/modules/gantt-chart/index.ts (100%) rename {web => apps/web}/core/components/modules/gantt-chart/modules-list-layout.tsx (100%) rename {web => apps/web}/core/components/modules/index.ts (100%) rename {web => apps/web}/core/components/modules/links/create-update-modal.tsx (100%) rename {web => apps/web}/core/components/modules/links/index.ts (100%) rename {web => apps/web}/core/components/modules/links/list-item.tsx (100%) rename {web => apps/web}/core/components/modules/links/list.tsx (100%) rename {web => apps/web}/core/components/modules/modal.tsx (100%) rename {web => apps/web}/core/components/modules/module-card-item.tsx (100%) rename {web => apps/web}/core/components/modules/module-layout-icon.tsx (100%) rename {web => apps/web}/core/components/modules/module-list-item-action.tsx (100%) rename {web => apps/web}/core/components/modules/module-list-item.tsx (100%) rename {web => apps/web}/core/components/modules/module-peek-overview.tsx (100%) rename {web => apps/web}/core/components/modules/module-status-dropdown.tsx (100%) rename {web => apps/web}/core/components/modules/module-view-header.tsx (100%) rename {web => apps/web}/core/components/modules/modules-list-view.tsx (100%) rename {web => apps/web}/core/components/modules/quick-actions.tsx (100%) rename {web => apps/web}/core/components/modules/select/index.ts (100%) rename {web => apps/web}/core/components/modules/select/status.tsx (100%) rename {web => apps/web}/core/components/modules/sidebar-select/index.ts (100%) rename {web => apps/web}/core/components/modules/sidebar-select/select-status.tsx (100%) rename {web => apps/web}/core/components/onboarding/create-or-join-workspaces.tsx (100%) rename {web => apps/web}/core/components/onboarding/create-workspace.tsx (100%) rename {web => apps/web}/core/components/onboarding/header.tsx (100%) rename {web => apps/web}/core/components/onboarding/index.ts (100%) rename {web => apps/web}/core/components/onboarding/invitations.tsx (100%) rename {web => apps/web}/core/components/onboarding/invite-members.tsx (100%) rename {web => apps/web}/core/components/onboarding/profile-setup.tsx (100%) rename {web => apps/web}/core/components/onboarding/step-indicator.tsx (100%) rename {web => apps/web}/core/components/onboarding/switch-account-dropdown.tsx (100%) rename {web => apps/web}/core/components/onboarding/switch-account-modal.tsx (100%) rename {web => apps/web}/core/components/onboarding/tour/index.ts (100%) rename {web => apps/web}/core/components/onboarding/tour/root.tsx (100%) rename {web => apps/web}/core/components/onboarding/tour/sidebar.tsx (100%) rename {web => apps/web}/core/components/pages/dropdowns/actions.tsx (100%) rename {web => apps/web}/core/components/pages/dropdowns/index.ts (100%) rename {web => apps/web}/core/components/pages/editor/editor-body.tsx (100%) rename {web => apps/web}/core/components/pages/editor/header/index.ts (100%) rename {web => apps/web}/core/components/pages/editor/header/logo-picker.tsx (100%) rename {web => apps/web}/core/components/pages/editor/header/root.tsx (100%) rename {web => apps/web}/core/components/pages/editor/index.ts (100%) rename {web => apps/web}/core/components/pages/editor/page-root.tsx (100%) rename {web => apps/web}/core/components/pages/editor/summary/content-browser.tsx (100%) rename {web => apps/web}/core/components/pages/editor/summary/heading-components.tsx (100%) rename {web => apps/web}/core/components/pages/editor/summary/index.ts (100%) rename {web => apps/web}/core/components/pages/editor/title.tsx (100%) rename {web => apps/web}/core/components/pages/editor/toolbar/color-dropdown.tsx (100%) rename {web => apps/web}/core/components/pages/editor/toolbar/index.ts (100%) rename {web => apps/web}/core/components/pages/editor/toolbar/options-dropdown.tsx (100%) rename {web => apps/web}/core/components/pages/editor/toolbar/root.tsx (100%) rename {web => apps/web}/core/components/pages/editor/toolbar/toolbar.tsx (100%) rename {web => apps/web}/core/components/pages/header/actions.tsx (100%) rename {web => apps/web}/core/components/pages/header/archived-badge.tsx (100%) rename {web => apps/web}/core/components/pages/header/copy-link-control.tsx (100%) rename {web => apps/web}/core/components/pages/header/favorite-control.tsx (100%) rename {web => apps/web}/core/components/pages/header/index.ts (100%) rename {web => apps/web}/core/components/pages/header/offline-badge.tsx (100%) rename {web => apps/web}/core/components/pages/header/root.tsx (100%) rename {web => apps/web}/core/components/pages/index.ts (100%) rename {web => apps/web}/core/components/pages/list/applied-filters/index.ts (100%) rename {web => apps/web}/core/components/pages/list/applied-filters/root.tsx (100%) rename {web => apps/web}/core/components/pages/list/block-item-action.tsx (100%) rename {web => apps/web}/core/components/pages/list/block.tsx (100%) rename {web => apps/web}/core/components/pages/list/filters/index.ts (100%) rename {web => apps/web}/core/components/pages/list/filters/root.tsx (100%) rename {web => apps/web}/core/components/pages/list/index.ts (100%) rename {web => apps/web}/core/components/pages/list/order-by.tsx (100%) rename {web => apps/web}/core/components/pages/list/root.tsx (100%) rename {web => apps/web}/core/components/pages/list/search-input.tsx (100%) rename {web => apps/web}/core/components/pages/list/tab-navigation.tsx (100%) rename {web => apps/web}/core/components/pages/loaders/index.ts (100%) rename {web => apps/web}/core/components/pages/loaders/page-content-loader.tsx (100%) rename {web => apps/web}/core/components/pages/loaders/page-loader.tsx (100%) rename {web => apps/web}/core/components/pages/modals/create-page-modal.tsx (100%) rename {web => apps/web}/core/components/pages/modals/delete-page-modal.tsx (100%) rename {web => apps/web}/core/components/pages/modals/export-page-modal.tsx (100%) rename {web => apps/web}/core/components/pages/modals/index.ts (100%) rename {web => apps/web}/core/components/pages/modals/page-form.tsx (100%) rename {web => apps/web}/core/components/pages/navigation-pane/index.ts (100%) rename {web => apps/web}/core/components/pages/navigation-pane/root.tsx (100%) rename {web => apps/web}/core/components/pages/navigation-pane/tab-panels/assets.tsx (100%) rename {web => apps/web}/core/components/pages/navigation-pane/tab-panels/info/actors-info.tsx (100%) rename {web => apps/web}/core/components/pages/navigation-pane/tab-panels/info/document-info.tsx (100%) rename {web => apps/web}/core/components/pages/navigation-pane/tab-panels/info/root.tsx (100%) rename {web => apps/web}/core/components/pages/navigation-pane/tab-panels/info/version-history.tsx (100%) rename {web => apps/web}/core/components/pages/navigation-pane/tab-panels/outline.tsx (100%) rename {web => apps/web}/core/components/pages/navigation-pane/tab-panels/root.tsx (100%) rename {web => apps/web}/core/components/pages/navigation-pane/tabs-list.tsx (100%) rename {web => apps/web}/core/components/pages/pages-list-main-content.tsx (100%) rename {web => apps/web}/core/components/pages/pages-list-view.tsx (100%) rename {web => apps/web}/core/components/pages/version/editor.tsx (100%) rename {web => apps/web}/core/components/pages/version/index.ts (100%) rename {web => apps/web}/core/components/pages/version/main-content.tsx (100%) rename {web => apps/web}/core/components/pages/version/root.tsx (100%) rename {web => apps/web}/core/components/preferences/list.tsx (100%) rename {web => apps/web}/core/components/preferences/section.tsx (100%) rename {web => apps/web}/core/components/profile/activity/activity-list.tsx (100%) rename {web => apps/web}/core/components/profile/activity/download-button.tsx (100%) rename {web => apps/web}/core/components/profile/activity/index.ts (100%) rename {web => apps/web}/core/components/profile/activity/profile-activity-list.tsx (100%) rename {web => apps/web}/core/components/profile/activity/workspace-activity-list.tsx (100%) rename {web => apps/web}/core/components/profile/form.tsx (100%) rename {web => apps/web}/core/components/profile/index.ts (100%) rename {web => apps/web}/core/components/profile/notification/email-notification-form.tsx (100%) rename {web => apps/web}/core/components/profile/notification/index.ts (100%) rename {web => apps/web}/core/components/profile/overview/activity.tsx (100%) rename {web => apps/web}/core/components/profile/overview/index.ts (100%) rename {web => apps/web}/core/components/profile/overview/priority-distribution.tsx (100%) rename {web => apps/web}/core/components/profile/overview/state-distribution.tsx (100%) rename {web => apps/web}/core/components/profile/overview/stats.tsx (100%) rename {web => apps/web}/core/components/profile/overview/workload.tsx (100%) rename {web => apps/web}/core/components/profile/preferences/language-timezone.tsx (100%) rename {web => apps/web}/core/components/profile/profile-issues-filter.tsx (100%) rename {web => apps/web}/core/components/profile/profile-issues.tsx (100%) rename {web => apps/web}/core/components/profile/profile-setting-content-header.tsx (100%) rename {web => apps/web}/core/components/profile/profile-setting-content-wrapper.tsx (100%) rename {web => apps/web}/core/components/profile/sidebar.tsx (100%) rename {web => apps/web}/core/components/profile/start-of-week-preference.tsx (100%) rename {web => apps/web}/core/components/profile/time.tsx (100%) rename {web => apps/web}/core/components/project-states/create-update/create.tsx (100%) rename {web => apps/web}/core/components/project-states/create-update/form.tsx (100%) rename {web => apps/web}/core/components/project-states/create-update/index.ts (100%) rename {web => apps/web}/core/components/project-states/create-update/update.tsx (100%) rename {web => apps/web}/core/components/project-states/group-item.tsx (100%) rename {web => apps/web}/core/components/project-states/group-list.tsx (100%) rename {web => apps/web}/core/components/project-states/index.ts (100%) rename {web => apps/web}/core/components/project-states/loader.tsx (100%) rename {web => apps/web}/core/components/project-states/options/delete.tsx (100%) rename {web => apps/web}/core/components/project-states/options/index.ts (100%) rename {web => apps/web}/core/components/project-states/options/mark-as-default.tsx (100%) rename {web => apps/web}/core/components/project-states/root.tsx (100%) rename {web => apps/web}/core/components/project-states/state-delete-modal.tsx (100%) rename {web => apps/web}/core/components/project-states/state-item-title.tsx (100%) rename {web => apps/web}/core/components/project-states/state-item.tsx (100%) rename {web => apps/web}/core/components/project-states/state-list.tsx (100%) rename {web => apps/web}/core/components/project/applied-filters/access.tsx (100%) rename {web => apps/web}/core/components/project/applied-filters/date.tsx (100%) rename {web => apps/web}/core/components/project/applied-filters/index.ts (100%) rename {web => apps/web}/core/components/project/applied-filters/members.tsx (100%) rename {web => apps/web}/core/components/project/applied-filters/project-display-filters.tsx (100%) rename {web => apps/web}/core/components/project/applied-filters/root.tsx (100%) rename {web => apps/web}/core/components/project/card-list.tsx (100%) rename {web => apps/web}/core/components/project/card.tsx (100%) rename {web => apps/web}/core/components/project/confirm-project-member-remove.tsx (100%) rename {web => apps/web}/core/components/project/create-project-modal.tsx (100%) rename {web => apps/web}/core/components/project/create/common-attributes.tsx (100%) rename {web => apps/web}/core/components/project/create/header.tsx (100%) rename {web => apps/web}/core/components/project/create/project-create-buttons.tsx (100%) rename {web => apps/web}/core/components/project/delete-project-modal.tsx (100%) rename {web => apps/web}/core/components/project/dropdowns/filters/access.tsx (100%) rename {web => apps/web}/core/components/project/dropdowns/filters/created-at.tsx (100%) rename {web => apps/web}/core/components/project/dropdowns/filters/index.ts (100%) rename {web => apps/web}/core/components/project/dropdowns/filters/lead.tsx (100%) rename {web => apps/web}/core/components/project/dropdowns/filters/members.tsx (100%) rename {web => apps/web}/core/components/project/dropdowns/filters/root.tsx (100%) rename {web => apps/web}/core/components/project/dropdowns/index.ts (100%) rename {web => apps/web}/core/components/project/dropdowns/order-by.tsx (100%) rename {web => apps/web}/core/components/project/empty-state.tsx (100%) rename {web => apps/web}/core/components/project/filters.tsx (100%) rename {web => apps/web}/core/components/project/form-loader.tsx (100%) rename {web => apps/web}/core/components/project/form.tsx (100%) rename {web => apps/web}/core/components/project/header.tsx (100%) rename {web => apps/web}/core/components/project/index.ts (100%) rename {web => apps/web}/core/components/project/integration-card.tsx (100%) rename {web => apps/web}/core/components/project/join-project-modal.tsx (100%) rename {web => apps/web}/core/components/project/leave-project-modal.tsx (100%) rename {web => apps/web}/core/components/project/member-list-item.tsx (100%) rename {web => apps/web}/core/components/project/member-list.tsx (100%) rename {web => apps/web}/core/components/project/member-select.tsx (100%) rename {web => apps/web}/core/components/project/multi-select-modal.tsx (100%) rename {web => apps/web}/core/components/project/project-feature-update.tsx (100%) rename {web => apps/web}/core/components/project/project-network-icon.tsx (100%) rename {web => apps/web}/core/components/project/project-settings-member-defaults.tsx (100%) rename {web => apps/web}/core/components/project/publish-project/index.ts (100%) rename {web => apps/web}/core/components/project/publish-project/modal.tsx (100%) rename {web => apps/web}/core/components/project/root.tsx (100%) rename {web => apps/web}/core/components/project/search-projects.tsx (100%) rename {web => apps/web}/core/components/project/send-project-invitation-modal.tsx (100%) rename {web => apps/web}/core/components/project/settings/archive-project/archive-restore-modal.tsx (100%) rename {web => apps/web}/core/components/project/settings/archive-project/index.tsx (100%) rename {web => apps/web}/core/components/project/settings/archive-project/selection.tsx (100%) rename {web => apps/web}/core/components/project/settings/delete-project-section.tsx (100%) rename {web => apps/web}/core/components/project/settings/features-list.tsx (100%) rename {web => apps/web}/core/components/project/settings/index.ts (100%) rename {web => apps/web}/core/components/project/settings/member-columns.tsx (100%) rename {web => apps/web}/core/components/settings/content-wrapper.tsx (100%) rename {web => apps/web}/core/components/settings/header.tsx (100%) rename {web => apps/web}/core/components/settings/heading.tsx (100%) rename {web => apps/web}/core/components/settings/helper.ts (100%) rename {web => apps/web}/core/components/settings/index.ts (100%) rename {web => apps/web}/core/components/settings/layout.tsx (100%) rename {web => apps/web}/core/components/settings/mobile/index.ts (100%) rename {web => apps/web}/core/components/settings/mobile/nav.tsx (100%) rename {web => apps/web}/core/components/settings/project/sidebar/index.ts (100%) rename {web => apps/web}/core/components/settings/project/sidebar/nav-item-children.tsx (100%) rename {web => apps/web}/core/components/settings/project/sidebar/root.tsx (100%) rename {web => apps/web}/core/components/settings/sidebar/header.tsx (100%) rename {web => apps/web}/core/components/settings/sidebar/index.ts (100%) rename {web => apps/web}/core/components/settings/sidebar/nav-item.tsx (100%) rename {web => apps/web}/core/components/settings/sidebar/root.tsx (100%) rename {web => apps/web}/core/components/settings/tabs.tsx (100%) rename {web => apps/web}/core/components/sidebar/index.ts (100%) rename {web => apps/web}/core/components/sidebar/sidebar-navigation.tsx (100%) rename {web => apps/web}/core/components/stickies/action-bar.tsx (100%) rename {web => apps/web}/core/components/stickies/delete-modal.tsx (100%) rename {web => apps/web}/core/components/stickies/index.ts (100%) rename {web => apps/web}/core/components/stickies/layout/index.ts (100%) rename {web => apps/web}/core/components/stickies/layout/stickies-infinite.tsx (100%) rename {web => apps/web}/core/components/stickies/layout/stickies-list.tsx (100%) rename {web => apps/web}/core/components/stickies/layout/stickies-loader.tsx (100%) rename {web => apps/web}/core/components/stickies/layout/stickies-truncated.tsx (100%) rename {web => apps/web}/core/components/stickies/layout/sticky-dnd-wrapper.tsx (100%) rename {web => apps/web}/core/components/stickies/layout/sticky.helpers.ts (100%) rename {web => apps/web}/core/components/stickies/modal/index.tsx (100%) rename {web => apps/web}/core/components/stickies/modal/search.tsx (100%) rename {web => apps/web}/core/components/stickies/modal/stickies.tsx (100%) rename {web => apps/web}/core/components/stickies/sticky/index.ts (100%) rename {web => apps/web}/core/components/stickies/sticky/inputs.tsx (100%) rename {web => apps/web}/core/components/stickies/sticky/root.tsx (100%) rename {web => apps/web}/core/components/stickies/sticky/sticky-item-drag-handle.tsx (100%) rename {web => apps/web}/core/components/stickies/sticky/use-operations.tsx (100%) rename {web => apps/web}/core/components/stickies/widget.tsx (100%) rename {web => apps/web}/core/components/ui/empty-space.tsx (100%) rename {web => apps/web}/core/components/ui/index.ts (100%) rename {web => apps/web}/core/components/ui/integration-and-import-export-banner.tsx (100%) rename {web => apps/web}/core/components/ui/labels-list.tsx (100%) rename {web => apps/web}/core/components/ui/loader/cycle-module-board-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/cycle-module-list-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/index.ts (100%) rename {web => apps/web}/core/components/ui/loader/layouts/calendar-layout-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/layouts/gantt-layout-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/layouts/index.ts (100%) rename {web => apps/web}/core/components/ui/loader/layouts/kanban-layout-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/layouts/list-layout-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/layouts/members-layout-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/layouts/project-inbox/inbox-sidebar-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/layouts/project-inbox/index.ts (100%) rename {web => apps/web}/core/components/ui/loader/layouts/spreadsheet-layout-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/notification-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/pages-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/projects-loader.tsx (100%) rename {web => apps/web}/core/components/ui/loader/settings/activity.tsx (100%) rename {web => apps/web}/core/components/ui/loader/settings/api-token.tsx (100%) rename {web => apps/web}/core/components/ui/loader/settings/email.tsx (100%) rename {web => apps/web}/core/components/ui/loader/settings/import-and-export.tsx (100%) rename {web => apps/web}/core/components/ui/loader/settings/index.ts (100%) rename {web => apps/web}/core/components/ui/loader/settings/integration.tsx (100%) rename {web => apps/web}/core/components/ui/loader/settings/members.tsx (100%) rename {web => apps/web}/core/components/ui/loader/settings/web-hook.tsx (100%) rename {web => apps/web}/core/components/ui/loader/utils.tsx (100%) rename {web => apps/web}/core/components/ui/loader/view-list-loader.tsx (100%) rename {web => apps/web}/core/components/ui/markdown-to-component.tsx (100%) rename {web => apps/web}/core/components/ui/profile-empty-state.tsx (100%) rename {web => apps/web}/core/components/user/index.ts (100%) rename {web => apps/web}/core/components/user/user-greetings.tsx (100%) rename {web => apps/web}/core/components/views/applied-filters/access.tsx (100%) rename {web => apps/web}/core/components/views/applied-filters/index.tsx (100%) rename {web => apps/web}/core/components/views/applied-filters/root.tsx (100%) rename {web => apps/web}/core/components/views/delete-view-modal.tsx (100%) rename {web => apps/web}/core/components/views/filters/filter-selection.tsx (100%) rename {web => apps/web}/core/components/views/filters/order-by.tsx (100%) rename {web => apps/web}/core/components/views/form.tsx (100%) rename {web => apps/web}/core/components/views/helper.tsx (100%) rename {web => apps/web}/core/components/views/index.ts (100%) rename {web => apps/web}/core/components/views/modal.tsx (100%) rename {web => apps/web}/core/components/views/quick-actions.tsx (100%) rename {web => apps/web}/core/components/views/update-view-component.tsx (100%) rename {web => apps/web}/core/components/views/view-list-header.tsx (100%) rename {web => apps/web}/core/components/views/view-list-item-action.tsx (100%) rename {web => apps/web}/core/components/views/view-list-item.tsx (100%) rename {web => apps/web}/core/components/views/views-list.tsx (100%) rename {web => apps/web}/core/components/web-hooks/create-webhook-modal.tsx (100%) rename {web => apps/web}/core/components/web-hooks/delete-webhook-modal.tsx (100%) rename {web => apps/web}/core/components/web-hooks/empty-state.tsx (100%) rename {web => apps/web}/core/components/web-hooks/form/delete-section.tsx (100%) rename {web => apps/web}/core/components/web-hooks/form/event-types.tsx (100%) rename {web => apps/web}/core/components/web-hooks/form/form.tsx (100%) rename {web => apps/web}/core/components/web-hooks/form/index.ts (100%) rename {web => apps/web}/core/components/web-hooks/form/individual-event-options.tsx (100%) rename {web => apps/web}/core/components/web-hooks/form/input.tsx (100%) rename {web => apps/web}/core/components/web-hooks/form/secret-key.tsx (100%) rename {web => apps/web}/core/components/web-hooks/form/toggle.tsx (100%) rename {web => apps/web}/core/components/web-hooks/generated-hook-details.tsx (100%) rename {web => apps/web}/core/components/web-hooks/index.ts (100%) rename {web => apps/web}/core/components/web-hooks/utils.ts (100%) rename {web => apps/web}/core/components/web-hooks/webhooks-list-item.tsx (100%) rename {web => apps/web}/core/components/web-hooks/webhooks-list.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/index.ts (100%) rename {web => apps/web}/core/components/workspace-notifications/notification-app-sidebar-option.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/root.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/empty-state.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/filters/index.ts (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/filters/menu/index.ts (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/filters/menu/menu-option-item.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/filters/menu/root.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/header/index.ts (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/header/options/index.ts (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/header/options/menu-option/index.ts (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/header/options/menu-option/menu-item.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/header/options/menu-option/root.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/header/options/root.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/header/root.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/index.ts (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/loader.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/notification-card/content.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/notification-card/index.ts (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/notification-card/item.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/notification-card/options/button.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/notification-card/options/index.ts (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/notification-card/options/read.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/notification-card/options/root.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/notification-card/options/snooze/index.ts (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/notification-card/options/snooze/modal.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/notification-card/options/snooze/root.tsx (100%) rename {web => apps/web}/core/components/workspace-notifications/sidebar/root.tsx (100%) rename {web => apps/web}/core/components/workspace/ConfirmWorkspaceMemberRemove.tsx (100%) rename {web => apps/web}/core/components/workspace/billing/comparison/base.tsx (100%) rename {web => apps/web}/core/components/workspace/billing/comparison/feature-detail.tsx (100%) rename {web => apps/web}/core/components/workspace/billing/comparison/index.ts (100%) rename {web => apps/web}/core/components/workspace/billing/index.ts (100%) rename {web => apps/web}/core/components/workspace/billing/subscription.ts (100%) rename {web => apps/web}/core/components/workspace/confirm-workspace-member-remove.tsx (100%) rename {web => apps/web}/core/components/workspace/create-workspace-form.tsx (100%) rename {web => apps/web}/core/components/workspace/delete-workspace-form.tsx (100%) rename {web => apps/web}/core/components/workspace/index.ts (100%) rename {web => apps/web}/core/components/workspace/invite-modal/actions.tsx (100%) rename {web => apps/web}/core/components/workspace/invite-modal/fields.tsx (100%) rename {web => apps/web}/core/components/workspace/invite-modal/form.tsx (100%) rename {web => apps/web}/core/components/workspace/invite-modal/index.ts (100%) rename {web => apps/web}/core/components/workspace/logo.tsx (100%) rename {web => apps/web}/core/components/workspace/settings/index.ts (100%) rename {web => apps/web}/core/components/workspace/settings/invitations-list-item.tsx (100%) rename {web => apps/web}/core/components/workspace/settings/member-columns.tsx (100%) rename {web => apps/web}/core/components/workspace/settings/members-list-item.tsx (100%) rename {web => apps/web}/core/components/workspace/settings/members-list.tsx (100%) rename {web => apps/web}/core/components/workspace/settings/workspace-details.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/dropdown-item.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/dropdown.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/favorite-folder.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-drag-handle.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-quick-action.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-title.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-wrapper.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/favorite-items/common/helper.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/favorite-items/common/index.ts (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/favorite-items/index.ts (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/favorite-items/root.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/favorites-menu.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/favorites.helpers.ts (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/index.ts (100%) rename {web => apps/web}/core/components/workspace/sidebar/favorites/new-fav-folder.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/help-section.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/index.ts (100%) rename {web => apps/web}/core/components/workspace/sidebar/project-navigation.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/projects-list-item.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/projects-list.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/quick-actions.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/sidebar-menu-items.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/user-menu-item.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/user-menu.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/workspace-menu-header.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/workspace-menu-item.tsx (100%) rename {web => apps/web}/core/components/workspace/sidebar/workspace-menu.tsx (100%) rename {web => apps/web}/core/components/workspace/views/default-view-list-item.tsx (100%) rename {web => apps/web}/core/components/workspace/views/default-view-quick-action.tsx (100%) rename {web => apps/web}/core/components/workspace/views/delete-view-modal.tsx (100%) rename {web => apps/web}/core/components/workspace/views/form.tsx (100%) rename {web => apps/web}/core/components/workspace/views/header.tsx (100%) rename {web => apps/web}/core/components/workspace/views/index.ts (100%) rename {web => apps/web}/core/components/workspace/views/modal.tsx (100%) rename {web => apps/web}/core/components/workspace/views/quick-action.tsx (100%) rename {web => apps/web}/core/components/workspace/views/view-list-item.tsx (100%) rename {web => apps/web}/core/components/workspace/views/views-list.tsx (100%) rename {web => apps/web}/core/constants/calendar.ts (100%) rename {web => apps/web}/core/constants/editor.ts (100%) rename {web => apps/web}/core/constants/fetch-keys.ts (100%) rename {web => apps/web}/core/constants/plans.tsx (100%) rename {web => apps/web}/core/hooks/context/use-issue-modal.tsx (100%) rename {web => apps/web}/core/hooks/editor/index.ts (100%) rename {web => apps/web}/core/hooks/editor/use-editor-config.ts (100%) rename {web => apps/web}/core/hooks/editor/use-editor-mention.tsx (100%) rename {web => apps/web}/core/hooks/store/estimates/index.ts (100%) rename {web => apps/web}/core/hooks/store/estimates/use-estimate-point.ts (100%) rename {web => apps/web}/core/hooks/store/estimates/use-estimate.ts (100%) rename {web => apps/web}/core/hooks/store/estimates/use-project-estimate.ts (100%) rename {web => apps/web}/core/hooks/store/index.ts (100%) rename {web => apps/web}/core/hooks/store/notifications/index.ts (100%) rename {web => apps/web}/core/hooks/store/notifications/use-notification.ts (100%) rename {web => apps/web}/core/hooks/store/notifications/use-workspace-notifications.ts (100%) rename {web => apps/web}/core/hooks/store/use-analytics.ts (100%) rename {web => apps/web}/core/hooks/store/use-app-theme.ts (100%) rename {web => apps/web}/core/hooks/store/use-calendar-view.ts (100%) rename {web => apps/web}/core/hooks/store/use-command-palette.ts (100%) rename {web => apps/web}/core/hooks/store/use-cycle-filter.ts (100%) rename {web => apps/web}/core/hooks/store/use-cycle.ts (100%) rename {web => apps/web}/core/hooks/store/use-dashboard.ts (100%) rename {web => apps/web}/core/hooks/store/use-editor-asset.ts (100%) rename {web => apps/web}/core/hooks/store/use-favorite.ts (100%) rename {web => apps/web}/core/hooks/store/use-global-view.ts (100%) rename {web => apps/web}/core/hooks/store/use-home.ts (100%) rename {web => apps/web}/core/hooks/store/use-inbox-issues.ts (100%) rename {web => apps/web}/core/hooks/store/use-instance.ts (100%) rename {web => apps/web}/core/hooks/store/use-issue-detail.ts (100%) rename {web => apps/web}/core/hooks/store/use-issues.ts (100%) rename {web => apps/web}/core/hooks/store/use-kanban-view.ts (100%) rename {web => apps/web}/core/hooks/store/use-label.ts (100%) rename {web => apps/web}/core/hooks/store/use-member.ts (100%) rename {web => apps/web}/core/hooks/store/use-module-filter.ts (100%) rename {web => apps/web}/core/hooks/store/use-module.ts (100%) rename {web => apps/web}/core/hooks/store/use-multiple-select-store.ts (100%) rename {web => apps/web}/core/hooks/store/use-project-filter.ts (100%) rename {web => apps/web}/core/hooks/store/use-project-inbox.ts (100%) rename {web => apps/web}/core/hooks/store/use-project-publish.ts (100%) rename {web => apps/web}/core/hooks/store/use-project-state.ts (100%) rename {web => apps/web}/core/hooks/store/use-project-view.ts (100%) rename {web => apps/web}/core/hooks/store/use-project.ts (100%) rename {web => apps/web}/core/hooks/store/use-router-params.ts (100%) rename {web => apps/web}/core/hooks/store/use-transient.ts (100%) rename {web => apps/web}/core/hooks/store/use-webhook.ts (100%) rename {web => apps/web}/core/hooks/store/use-workspace.ts (100%) rename {web => apps/web}/core/hooks/store/user/index.ts (100%) rename {web => apps/web}/core/hooks/store/user/user-permissions.ts (100%) rename {web => apps/web}/core/hooks/store/user/user-user-profile.ts (100%) rename {web => apps/web}/core/hooks/store/user/user-user-settings.ts (100%) rename {web => apps/web}/core/hooks/store/user/user-user.ts (100%) rename {web => apps/web}/core/hooks/store/workspace-draft/index.ts (100%) rename {web => apps/web}/core/hooks/store/workspace-draft/use-workspace-draft-issue-filters.ts (100%) rename {web => apps/web}/core/hooks/store/workspace-draft/use-workspace-draft-issue.ts (100%) rename {web => apps/web}/core/hooks/use-app-router.tsx (100%) rename {web => apps/web}/core/hooks/use-auto-save.tsx (100%) rename {web => apps/web}/core/hooks/use-auto-scroller.tsx (100%) rename {web => apps/web}/core/hooks/use-collaborative-page-actions.tsx (100%) rename {web => apps/web}/core/hooks/use-current-time.tsx (100%) rename {web => apps/web}/core/hooks/use-debounce.tsx (100%) rename {web => apps/web}/core/hooks/use-dropdown-key-down.tsx (100%) rename {web => apps/web}/core/hooks/use-dropdown.ts (100%) rename {web => apps/web}/core/hooks/use-extended-sidebar-overview-outside-click.tsx (100%) rename {web => apps/web}/core/hooks/use-favorite-item-details.tsx (100%) rename {web => apps/web}/core/hooks/use-group-dragndrop.ts (100%) rename {web => apps/web}/core/hooks/use-integration-popup.tsx (100%) rename {web => apps/web}/core/hooks/use-intersection-observer.ts (100%) rename {web => apps/web}/core/hooks/use-issue-layout-store.ts (100%) rename {web => apps/web}/core/hooks/use-issue-peek-overview-redirection.tsx (100%) rename {web => apps/web}/core/hooks/use-issues-actions.tsx (100%) rename {web => apps/web}/core/hooks/use-keypress.tsx (100%) rename {web => apps/web}/core/hooks/use-local-storage.tsx (100%) rename {web => apps/web}/core/hooks/use-multiple-select.ts (100%) rename {web => apps/web}/core/hooks/use-online-status.ts (100%) rename {web => apps/web}/core/hooks/use-page-fallback.ts (100%) rename {web => apps/web}/core/hooks/use-page-filters.ts (100%) rename {web => apps/web}/core/hooks/use-page-operations.ts (100%) rename {web => apps/web}/core/hooks/use-parse-editor-content.ts (100%) rename {web => apps/web}/core/hooks/use-peek-overview-outside-click.tsx (100%) rename {web => apps/web}/core/hooks/use-platform-os.tsx (100%) rename {web => apps/web}/core/hooks/use-project-issue-properties.ts (100%) rename {web => apps/web}/core/hooks/use-query-params.ts (100%) rename {web => apps/web}/core/hooks/use-reload-confirmation.tsx (100%) rename {web => apps/web}/core/hooks/use-resolved-asset-path.tsx (100%) rename {web => apps/web}/core/hooks/use-stickies.tsx (100%) rename {web => apps/web}/core/hooks/use-table-keyboard-navigation.tsx (100%) rename {web => apps/web}/core/hooks/use-timeline-chart.ts (100%) rename {web => apps/web}/core/hooks/use-timer.tsx (100%) rename {web => apps/web}/core/hooks/use-timezone-converter.tsx (100%) rename {web => apps/web}/core/hooks/use-timezone.tsx (100%) rename {web => apps/web}/core/hooks/use-window-size.tsx (100%) rename {web => apps/web}/core/hooks/use-workspace-invitation.tsx (100%) rename {web => apps/web}/core/hooks/use-workspace-issue-properties.ts (100%) rename {web => apps/web}/core/layouts/auth-layout/index.ts (100%) rename {web => apps/web}/core/layouts/auth-layout/project-wrapper.tsx (100%) rename {web => apps/web}/core/layouts/auth-layout/workspace-wrapper.tsx (100%) rename {web => apps/web}/core/layouts/default-layout/index.tsx (100%) rename {web => apps/web}/core/lib/intercom-provider.tsx (100%) rename {web => apps/web}/core/lib/local-storage.ts (100%) rename {web => apps/web}/core/lib/n-progress/AppProgressBar.tsx (100%) rename {web => apps/web}/core/lib/n-progress/index.tsx (100%) rename {web => apps/web}/core/lib/n-progress/utils/getAnchorProperty.ts (100%) rename {web => apps/web}/core/lib/n-progress/utils/sameURL.ts (100%) rename {web => apps/web}/core/lib/n-progress/withSuspense.tsx (100%) rename {web => apps/web}/core/lib/polyfills/index.ts (100%) rename {web => apps/web}/core/lib/polyfills/requestIdleCallback.ts (100%) rename {web => apps/web}/core/lib/posthog-provider.tsx (100%) rename {web => apps/web}/core/lib/posthog-view.tsx (100%) rename {web => apps/web}/core/lib/store-context.tsx (100%) rename {web => apps/web}/core/lib/wrappers/authentication-wrapper.tsx (100%) rename {web => apps/web}/core/lib/wrappers/index.ts (100%) rename {web => apps/web}/core/lib/wrappers/instance-wrapper.tsx (100%) rename {web => apps/web}/core/lib/wrappers/store-wrapper.tsx (100%) rename {web => apps/web}/core/local-db/storage.sqlite.ts (100%) rename {web => apps/web}/core/local-db/utils/constants.ts (100%) rename {web => apps/web}/core/local-db/utils/data.utils.ts (100%) rename {web => apps/web}/core/local-db/utils/indexes.ts (100%) rename {web => apps/web}/core/local-db/utils/load-issues.ts (100%) rename {web => apps/web}/core/local-db/utils/load-workspace.ts (100%) rename {web => apps/web}/core/local-db/utils/query-constructor.ts (100%) rename {web => apps/web}/core/local-db/utils/query-executor.ts (100%) rename {web => apps/web}/core/local-db/utils/query-sanitizer.ts.ts (100%) rename {web => apps/web}/core/local-db/utils/query.utils.ts (100%) rename {web => apps/web}/core/local-db/utils/schemas.ts (100%) rename {web => apps/web}/core/local-db/utils/tables.ts (100%) rename {web => apps/web}/core/local-db/utils/utils.ts (100%) rename {web => apps/web}/core/local-db/worker/db.ts (100%) rename {web => apps/web}/core/local-db/worker/wa-sqlite/src/FacadeVFS.js (100%) rename {web => apps/web}/core/local-db/worker/wa-sqlite/src/OPFSCoopSyncVFS.js (100%) rename {web => apps/web}/core/local-db/worker/wa-sqlite/src/VFS.js (100%) rename {web => apps/web}/core/local-db/worker/wa-sqlite/src/sqlite-api.js (100%) rename {web => apps/web}/core/local-db/worker/wa-sqlite/src/sqlite-constants.js (100%) rename {web => apps/web}/core/local-db/worker/wa-sqlite/src/types/globals.d.ts (100%) rename {web => apps/web}/core/local-db/worker/wa-sqlite/src/types/index.d.ts (100%) rename {web => apps/web}/core/local-db/worker/wa-sqlite/src/wa-sqlite.mjs (100%) rename {web => apps/web}/core/local-db/worker/wa-sqlite/src/wa-sqlite.wasm (100%) rename {web => apps/web}/core/services/ai.service.ts (100%) rename {web => apps/web}/core/services/analytics.service.ts (100%) rename {web => apps/web}/core/services/api.service.ts (100%) rename {web => apps/web}/core/services/app_config.service.ts (100%) rename {web => apps/web}/core/services/app_installation.service.ts (100%) rename {web => apps/web}/core/services/auth.service.ts (100%) rename {web => apps/web}/core/services/cycle.service.ts (100%) rename {web => apps/web}/core/services/cycle_archive.service.ts (100%) rename {web => apps/web}/core/services/dashboard.service.ts (100%) rename {web => apps/web}/core/services/favorite/favorite.service.ts (100%) rename {web => apps/web}/core/services/favorite/index.ts (100%) rename {web => apps/web}/core/services/file-upload.service.ts (100%) rename {web => apps/web}/core/services/file.service.ts (100%) rename {web => apps/web}/core/services/inbox/inbox-issue.service.ts (100%) rename {web => apps/web}/core/services/inbox/index.ts (100%) rename {web => apps/web}/core/services/inbox/intake-work_item_version.service.ts (100%) rename {web => apps/web}/core/services/instance.service.ts (100%) rename {web => apps/web}/core/services/integrations/github.service.ts (100%) rename {web => apps/web}/core/services/integrations/index.ts (100%) rename {web => apps/web}/core/services/integrations/integration.service.ts (100%) rename {web => apps/web}/core/services/integrations/jira.service.ts (100%) rename {web => apps/web}/core/services/issue/index.ts (100%) rename {web => apps/web}/core/services/issue/issue.service.ts (100%) rename {web => apps/web}/core/services/issue/issue_activity.service.ts (100%) rename {web => apps/web}/core/services/issue/issue_archive.service.ts (100%) rename {web => apps/web}/core/services/issue/issue_attachment.service.ts (100%) rename {web => apps/web}/core/services/issue/issue_comment.service.ts (100%) rename {web => apps/web}/core/services/issue/issue_draft.service.ts (100%) rename {web => apps/web}/core/services/issue/issue_label.service.ts (100%) rename {web => apps/web}/core/services/issue/issue_reaction.service.ts (100%) rename {web => apps/web}/core/services/issue/issue_relation.service.ts (100%) rename {web => apps/web}/core/services/issue/work_item_version.service.ts (100%) rename {web => apps/web}/core/services/issue/workspace_draft.service.ts (100%) rename {web => apps/web}/core/services/issue_filter.service.ts (100%) rename {web => apps/web}/core/services/module.service.ts (100%) rename {web => apps/web}/core/services/module_archive.service.ts (100%) rename {web => apps/web}/core/services/page/index.ts (100%) rename {web => apps/web}/core/services/page/project-page-version.service.ts (100%) rename {web => apps/web}/core/services/page/project-page.service.ts (100%) rename {web => apps/web}/core/services/project/index.ts (100%) rename {web => apps/web}/core/services/project/project-archive.service.ts (100%) rename {web => apps/web}/core/services/project/project-export.service.ts (100%) rename {web => apps/web}/core/services/project/project-member.service.ts (100%) rename {web => apps/web}/core/services/project/project-publish.service.ts (100%) rename {web => apps/web}/core/services/project/project-state.service.ts (100%) rename {web => apps/web}/core/services/project/project.service.ts (100%) rename {web => apps/web}/core/services/sticky.service.ts (100%) rename {web => apps/web}/core/services/timezone.service.ts (100%) rename {web => apps/web}/core/services/user.service.ts (100%) rename {web => apps/web}/core/services/view.service.ts (100%) rename {web => apps/web}/core/services/webhook.service.ts (100%) rename {web => apps/web}/core/services/workspace-notification.service.ts (100%) rename {web => apps/web}/core/services/workspace.service.ts (100%) rename {web => apps/web}/core/store/analytics.store.ts (100%) rename {web => apps/web}/core/store/base-command-palette.store.ts (100%) rename {web => apps/web}/core/store/cycle.store.ts (100%) rename {web => apps/web}/core/store/cycle_filter.store.ts (100%) rename {web => apps/web}/core/store/dashboard.store.ts (100%) rename {web => apps/web}/core/store/editor/asset.store.ts (100%) rename {web => apps/web}/core/store/estimates/estimate-point.ts (100%) rename {web => apps/web}/core/store/estimates/project-estimate.store.ts (100%) rename {web => apps/web}/core/store/favorite.store.ts (100%) rename {web => apps/web}/core/store/global-view.store.ts (100%) rename {web => apps/web}/core/store/inbox/inbox-issue.store.ts (100%) rename {web => apps/web}/core/store/inbox/project-inbox.store.ts (100%) rename {web => apps/web}/core/store/instance.store.ts (100%) rename {web => apps/web}/core/store/issue/archived/filter.store.ts (100%) rename {web => apps/web}/core/store/issue/archived/index.ts (100%) rename {web => apps/web}/core/store/issue/archived/issue.store.ts (100%) rename {web => apps/web}/core/store/issue/cycle/filter.store.ts (100%) rename {web => apps/web}/core/store/issue/cycle/index.ts (100%) rename {web => apps/web}/core/store/issue/cycle/issue.store.ts (100%) rename {web => apps/web}/core/store/issue/draft/filter.store.ts (100%) rename {web => apps/web}/core/store/issue/draft/index.ts (100%) rename {web => apps/web}/core/store/issue/draft/issue.store.ts (100%) rename {web => apps/web}/core/store/issue/helpers/base-issues-utils.ts (100%) rename {web => apps/web}/core/store/issue/helpers/base-issues.store.ts (100%) rename {web => apps/web}/core/store/issue/helpers/issue-filter-helper.store.ts (100%) rename {web => apps/web}/core/store/issue/issue-details/attachment.store.ts (100%) rename {web => apps/web}/core/store/issue/issue-details/comment.store.ts (100%) rename {web => apps/web}/core/store/issue/issue-details/comment_reaction.store.ts (100%) rename {web => apps/web}/core/store/issue/issue-details/issue.store.ts (100%) rename {web => apps/web}/core/store/issue/issue-details/link.store.ts (100%) rename {web => apps/web}/core/store/issue/issue-details/reaction.store.ts (100%) rename {web => apps/web}/core/store/issue/issue-details/relation.store.ts (100%) rename {web => apps/web}/core/store/issue/issue-details/root.store.ts (100%) rename {web => apps/web}/core/store/issue/issue-details/sub_issues.store.ts (100%) rename {web => apps/web}/core/store/issue/issue-details/sub_issues_filter.store.ts (100%) rename {web => apps/web}/core/store/issue/issue-details/subscription.store.ts (100%) rename {web => apps/web}/core/store/issue/issue.store.ts (100%) rename {web => apps/web}/core/store/issue/issue_calendar_view.store.ts (100%) rename {web => apps/web}/core/store/issue/issue_gantt_view.store.ts (100%) rename {web => apps/web}/core/store/issue/issue_kanban_view.store.ts (100%) rename {web => apps/web}/core/store/issue/module/filter.store.ts (100%) rename {web => apps/web}/core/store/issue/module/index.ts (100%) rename {web => apps/web}/core/store/issue/module/issue.store.ts (100%) rename {web => apps/web}/core/store/issue/profile/filter.store.ts (100%) rename {web => apps/web}/core/store/issue/profile/index.ts (100%) rename {web => apps/web}/core/store/issue/profile/issue.store.ts (100%) rename {web => apps/web}/core/store/issue/project-views/filter.store.ts (100%) rename {web => apps/web}/core/store/issue/project-views/index.ts (100%) rename {web => apps/web}/core/store/issue/project-views/issue.store.ts (100%) rename {web => apps/web}/core/store/issue/project/filter.store.ts (100%) rename {web => apps/web}/core/store/issue/project/index.ts (100%) rename {web => apps/web}/core/store/issue/project/issue.store.ts (100%) rename {web => apps/web}/core/store/issue/root.store.ts (100%) rename {web => apps/web}/core/store/issue/workspace-draft/filter.store.ts (100%) rename {web => apps/web}/core/store/issue/workspace-draft/index.ts (100%) rename {web => apps/web}/core/store/issue/workspace-draft/issue.store.ts (100%) rename {web => apps/web}/core/store/issue/workspace/filter.store.ts (100%) rename {web => apps/web}/core/store/issue/workspace/index.ts (100%) rename {web => apps/web}/core/store/issue/workspace/issue.store.ts (100%) rename {web => apps/web}/core/store/label.store.ts (100%) rename {web => apps/web}/core/store/member/base-project-member.store.ts (100%) rename {web => apps/web}/core/store/member/index.ts (100%) rename {web => apps/web}/core/store/member/workspace-member.store.ts (100%) rename {web => apps/web}/core/store/module.store.ts (100%) rename {web => apps/web}/core/store/module_filter.store.ts (100%) rename {web => apps/web}/core/store/multiple_select.store.ts (100%) rename {web => apps/web}/core/store/notifications/notification.ts (100%) rename {web => apps/web}/core/store/notifications/workspace-notifications.store.ts (100%) rename {web => apps/web}/core/store/pages/base-page.ts (100%) rename {web => apps/web}/core/store/pages/page-editor-info.ts (100%) rename {web => apps/web}/core/store/pages/project-page.store.ts (100%) rename {web => apps/web}/core/store/pages/project-page.ts (100%) rename {web => apps/web}/core/store/project-view.store.ts (100%) rename {web => apps/web}/core/store/project/index.ts (100%) rename {web => apps/web}/core/store/project/project-publish.store.ts (100%) rename {web => apps/web}/core/store/project/project.store.ts (100%) rename {web => apps/web}/core/store/project/project_filter.store.ts (100%) rename {web => apps/web}/core/store/root.store.ts (100%) rename {web => apps/web}/core/store/router.store.ts (100%) rename {web => apps/web}/core/store/state.store.ts (100%) rename {web => apps/web}/core/store/sticky/sticky.store.ts (100%) rename {web => apps/web}/core/store/theme.store.ts (100%) rename {web => apps/web}/core/store/timeline/issues-timeline.store.ts (100%) rename {web => apps/web}/core/store/timeline/modules-timeline.store.ts (100%) rename {web => apps/web}/core/store/transient.store.ts (100%) rename {web => apps/web}/core/store/user/account.store.ts (100%) rename {web => apps/web}/core/store/user/base-permissions.store.ts (100%) rename {web => apps/web}/core/store/user/index.ts (100%) rename {web => apps/web}/core/store/user/profile.store.ts (100%) rename {web => apps/web}/core/store/user/settings.store.ts (100%) rename {web => apps/web}/core/store/workspace/api-token.store.ts (100%) rename {web => apps/web}/core/store/workspace/home.ts (100%) rename {web => apps/web}/core/store/workspace/index.ts (100%) rename {web => apps/web}/core/store/workspace/link.store.ts (100%) rename {web => apps/web}/core/store/workspace/webhook.store.ts (100%) rename {web => apps/web}/ee/components/active-cycles/index.ts (100%) rename {web => apps/web}/ee/components/active-cycles/root.tsx (100%) rename {web => apps/web}/ee/components/active-cycles/workspace-active-cycles-upgrade.tsx (100%) rename {web => apps/web}/ee/components/breadcrumbs/index.ts (100%) rename {web => apps/web}/ee/components/command-palette/modals/index.ts (100%) rename {web => apps/web}/ee/components/comments/index.ts (100%) rename {web => apps/web}/ee/components/cycles/active-cycle/index.ts (100%) rename {web => apps/web}/ee/components/cycles/analytics-sidebar/index.ts (100%) rename {web => apps/web}/ee/components/cycles/end-cycle/index.ts (100%) rename {web => apps/web}/ee/components/cycles/index.ts (100%) rename {web => apps/web}/ee/components/de-dupe/index.ts (100%) rename {web => apps/web}/ee/components/editor/index.ts (100%) rename {web => apps/web}/ee/components/epics/index.ts (100%) rename {web => apps/web}/ee/components/estimates/estimate-list-item-buttons.tsx (100%) rename {web => apps/web}/ee/components/estimates/index.ts (100%) rename {web => apps/web}/ee/components/estimates/points/delete.tsx (100%) rename {web => apps/web}/ee/components/estimates/points/index.ts (100%) rename {web => apps/web}/ee/components/estimates/update/index.ts (100%) rename {web => apps/web}/ee/components/estimates/update/modal.tsx (100%) rename {web => apps/web}/ee/components/gantt-chart/index.ts (100%) rename {web => apps/web}/ee/components/global/index.ts (100%) rename {web => apps/web}/ee/components/home/header.tsx (100%) rename {web => apps/web}/ee/components/home/index.ts (100%) rename {web => apps/web}/ee/components/inbox/source-pill.tsx (100%) rename {web => apps/web}/ee/components/instance/index.ts (100%) rename {web => apps/web}/ee/components/instance/maintenance-message.tsx (100%) rename {web => apps/web}/ee/components/issues/bulk-operations/index.ts (100%) rename {web => apps/web}/ee/components/issues/filters/applied-filters/index.ts (100%) rename {web => apps/web}/ee/components/issues/filters/applied-filters/issue-types.tsx (100%) rename {web => apps/web}/ee/components/issues/filters/index.ts (100%) rename {web => apps/web}/ee/components/issues/filters/issue-types.tsx (100%) rename {web => apps/web}/ee/components/issues/filters/team-project.tsx (100%) rename {web => apps/web}/ee/components/issues/header.tsx (100%) rename {web => apps/web}/ee/components/issues/index.ts (100%) rename {web => apps/web}/ee/components/issues/issue-details/additional-activity-root.tsx (100%) rename {web => apps/web}/ee/components/issues/issue-details/additional-properties.tsx (100%) rename {web => apps/web}/ee/components/issues/issue-details/index.ts (100%) rename {web => apps/web}/ee/components/issues/issue-details/issue-creator.tsx (100%) rename {web => apps/web}/ee/components/issues/issue-details/issue-identifier.tsx (100%) rename {web => apps/web}/ee/components/issues/issue-details/issue-properties-activity/index.ts (100%) rename {web => apps/web}/ee/components/issues/issue-details/issue-properties-activity/root.tsx (100%) rename {web => apps/web}/ee/components/issues/issue-details/issue-type-activity.tsx (100%) rename {web => apps/web}/ee/components/issues/issue-details/issue-type-switcher.tsx (100%) rename {web => apps/web}/ee/components/issues/issue-details/parent-select-root.tsx (100%) rename {web => apps/web}/ee/components/issues/issue-layouts/additional-properties.tsx (100%) rename {web => apps/web}/ee/components/issues/issue-layouts/empty-states/index.ts (100%) rename {web => apps/web}/ee/components/issues/issue-layouts/quick-action-dropdowns/index.ts (100%) rename {web => apps/web}/ee/components/issues/issue-layouts/utils.tsx (100%) rename {web => apps/web}/ee/components/issues/issue-modal/additional-properties.tsx (100%) rename {web => apps/web}/ee/components/issues/issue-modal/index.ts (100%) rename {web => apps/web}/ee/components/issues/issue-modal/issue-type-select.tsx (100%) rename {web => apps/web}/ee/components/issues/issue-modal/provider.tsx (100%) rename {web => apps/web}/ee/components/issues/quick-add/index.ts (100%) rename {web => apps/web}/ee/components/issues/quick-add/root.tsx (100%) rename {web => apps/web}/ee/components/issues/worklog/activity/filter-root.tsx (100%) rename {web => apps/web}/ee/components/issues/worklog/activity/index.ts (100%) rename {web => apps/web}/ee/components/issues/worklog/activity/root.tsx (100%) rename {web => apps/web}/ee/components/issues/worklog/activity/worklog-create-button.tsx (100%) rename {web => apps/web}/ee/components/issues/worklog/index.ts (100%) rename {web => apps/web}/ee/components/issues/worklog/property/index.ts (100%) rename {web => apps/web}/ee/components/issues/worklog/property/root.tsx (100%) rename {web => apps/web}/ee/components/pages/index.ts (100%) rename {web => apps/web}/ee/components/projects/create/attributes.tsx (100%) rename {web => apps/web}/ee/components/projects/create/root.tsx (100%) rename {web => apps/web}/ee/components/projects/header.tsx (100%) rename {web => apps/web}/ee/components/projects/mobile-header.tsx (100%) rename {web => apps/web}/ee/components/projects/page.tsx (100%) rename {web => apps/web}/ee/components/projects/settings/intake/index.ts (100%) rename {web => apps/web}/ee/components/projects/settings/useProjectColumns.tsx (100%) rename {web => apps/web}/ee/components/relations/index.tsx (100%) rename {web => apps/web}/ee/components/sidebar/index.ts (100%) rename {web => apps/web}/ee/components/views/access-controller.tsx (100%) rename {web => apps/web}/ee/components/views/filters/access-filter.tsx (100%) rename {web => apps/web}/ee/components/views/publish/index.ts (100%) rename {web => apps/web}/ee/components/workflow/index.ts (100%) rename {web => apps/web}/ee/components/workspace-notifications/index.ts (100%) rename {web => apps/web}/ee/components/workspace/billing/index.ts (100%) rename {web => apps/web}/ee/components/workspace/billing/root.tsx (100%) rename {web => apps/web}/ee/components/workspace/delete-workspace-modal.tsx (100%) rename {web => apps/web}/ee/components/workspace/delete-workspace-section.tsx (100%) rename {web => apps/web}/ee/components/workspace/edition-badge.tsx (100%) rename {web => apps/web}/ee/components/workspace/index.ts (100%) rename {web => apps/web}/ee/components/workspace/settings/useMemberColumns.tsx (100%) rename {web => apps/web}/ee/components/workspace/sidebar/index.ts (100%) rename {web => apps/web}/ee/components/workspace/sidebar/teams-sidebar-list.tsx (100%) rename {web => apps/web}/ee/components/workspace/upgrade-badge.tsx (100%) rename {web => apps/web}/ee/constants/editor.ts (100%) rename {web => apps/web}/ee/constants/index.ts (100%) rename {web => apps/web}/ee/constants/project/index.ts (100%) rename {web => apps/web}/ee/constants/project/settings/features.tsx (100%) rename {web => apps/web}/ee/constants/project/settings/index.ts (100%) rename {web => apps/web}/ee/constants/project/settings/tabs.ts (100%) rename {web => apps/web}/ee/constants/sidebar-favorites.ts (100%) rename {web => apps/web}/ee/helpers/command-palette.ts (100%) rename {web => apps/web}/ee/helpers/epic-analytics.ts (100%) rename {web => apps/web}/ee/helpers/instance.helper.ts (100%) rename {web => apps/web}/ee/helpers/issue-action-helper.ts (100%) rename {web => apps/web}/ee/helpers/issue-filter.helper.ts (100%) rename {web => apps/web}/ee/helpers/project-settings.ts (100%) rename {web => apps/web}/ee/helpers/workspace.helper.ts (100%) rename {web => apps/web}/ee/hooks/store/index.ts (100%) rename {web => apps/web}/ee/hooks/use-additional-editor-mention.tsx (100%) rename {web => apps/web}/ee/hooks/use-additional-favorite-item-details.ts (100%) rename {web => apps/web}/ee/hooks/use-editor-flagging.ts (100%) rename {web => apps/web}/ee/hooks/use-file-size.ts (100%) rename {web => apps/web}/ee/hooks/use-issue-embed.tsx (100%) rename {web => apps/web}/ee/hooks/use-issue-properties.tsx (100%) rename {web => apps/web}/ee/hooks/use-page-flag.ts (100%) rename {web => apps/web}/ee/layouts/project-wrapper.tsx (100%) rename {web => apps/web}/ee/layouts/workspace-wrapper.tsx (100%) rename {web => apps/web}/ee/services/index.ts (100%) rename {web => apps/web}/ee/services/project/estimate.service.ts (100%) rename {web => apps/web}/ee/services/project/index.ts (100%) rename {web => apps/web}/ee/services/project/project-state.service.ts (100%) rename {web => apps/web}/ee/store/analytics.store.ts (100%) rename {web => apps/web}/ee/store/command-palette.store.ts (100%) rename {web => apps/web}/ee/store/cycle/index.ts (100%) rename {web => apps/web}/ee/store/estimates/estimate.ts (100%) rename {web => apps/web}/ee/store/issue/helpers/base-issue.store.ts (100%) rename {web => apps/web}/ee/store/issue/issue-details/activity.store.ts (100%) rename {web => apps/web}/ee/store/issue/issue-details/root.store.ts (100%) rename {web => apps/web}/ee/store/issue/team-views/index.ts (100%) rename {web => apps/web}/ee/store/issue/team/index.ts (100%) rename {web => apps/web}/ee/store/member/project-member.store.ts (100%) rename {web => apps/web}/ee/store/project-inbox.store.ts (100%) rename {web => apps/web}/ee/store/root.store.ts (100%) rename {web => apps/web}/ee/store/state.store.ts (100%) rename {web => apps/web}/ee/store/timeline/base-timeline.store.ts (100%) rename {web => apps/web}/ee/store/user/permission.store.ts (100%) rename {web => apps/web}/ee/types/index.ts (100%) rename {web => apps/web}/ee/types/issue-types/index.ts (100%) rename {web => apps/web}/ee/types/issue-types/issue-property-values.d.ts (100%) rename {web => apps/web}/ee/types/projects/index.ts (100%) rename {web => apps/web}/ee/types/projects/projects.ts (100%) rename {web => apps/web}/google.d.ts (100%) rename {web => apps/web}/helpers/authentication.helper.tsx (100%) rename {web => apps/web}/helpers/dashboard.helper.ts (100%) rename {web => apps/web}/helpers/emoji.helper.tsx (100%) rename {web => apps/web}/helpers/event-tracker.helper.ts (100%) rename {web => apps/web}/helpers/graph.helper.ts (100%) rename {web => apps/web}/helpers/views.helper.ts (100%) rename {web => apps/web}/manifest.json (100%) rename {web => apps/web}/next-env.d.ts (100%) rename {web => apps/web}/next.config.js (100%) rename {web => apps/web}/package.json (100%) rename {web => apps/web}/postcss.config.js (100%) rename {web => apps/web}/public/404.svg (100%) rename {web => apps/web}/public/animated-icons/uploading.json (100%) rename {web => apps/web}/public/attachment/audio-icon.png (100%) rename {web => apps/web}/public/attachment/css-icon.png (100%) rename {web => apps/web}/public/attachment/csv-icon.png (100%) rename {web => apps/web}/public/attachment/default-icon.png (100%) rename {web => apps/web}/public/attachment/doc-icon.png (100%) rename {web => apps/web}/public/attachment/excel-icon.png (100%) rename {web => apps/web}/public/attachment/figma-icon.png (100%) rename {web => apps/web}/public/attachment/html-icon.png (100%) rename {web => apps/web}/public/attachment/img-icon.png (100%) rename {web => apps/web}/public/attachment/jpg-icon.png (100%) rename {web => apps/web}/public/attachment/js-icon.png (100%) rename {web => apps/web}/public/attachment/pdf-icon.png (100%) rename {web => apps/web}/public/attachment/png-icon.png (100%) rename {web => apps/web}/public/attachment/rar-icon.png (100%) rename {web => apps/web}/public/attachment/svg-icon.png (100%) rename {web => apps/web}/public/attachment/txt-icon.png (100%) rename {web => apps/web}/public/attachment/video-icon.png (100%) rename {web => apps/web}/public/attachment/zip-icon.png (100%) rename {web => apps/web}/public/auth/access-denied.svg (100%) rename {web => apps/web}/public/auth/background-pattern-dark.svg (100%) rename {web => apps/web}/public/auth/background-pattern.svg (100%) rename {web => apps/web}/public/auth/project-not-authorized.svg (100%) rename {web => apps/web}/public/auth/unauthorized.svg (100%) rename {web => apps/web}/public/auth/workspace-not-authorized.svg (100%) rename {web => apps/web}/public/emoji/project-emoji.svg (100%) rename {web => apps/web}/public/empty-state/active-cycle/assignee-dark.webp (100%) rename {web => apps/web}/public/empty-state/active-cycle/assignee-light.webp (100%) rename {web => apps/web}/public/empty-state/active-cycle/chart-dark.webp (100%) rename {web => apps/web}/public/empty-state/active-cycle/chart-light.webp (100%) rename {web => apps/web}/public/empty-state/active-cycle/cycle-dark.webp (100%) rename {web => apps/web}/public/empty-state/active-cycle/cycle-light.webp (100%) rename {web => apps/web}/public/empty-state/active-cycle/label-dark.webp (100%) rename {web => apps/web}/public/empty-state/active-cycle/label-light.webp (100%) rename {web => apps/web}/public/empty-state/active-cycle/priority-dark.webp (100%) rename {web => apps/web}/public/empty-state/active-cycle/priority-light.webp (100%) rename {web => apps/web}/public/empty-state/active-cycle/progress-dark.webp (100%) rename {web => apps/web}/public/empty-state/active-cycle/progress-light.webp (100%) rename {web => apps/web}/public/empty-state/all-issues/all-issues-dark.webp (100%) rename {web => apps/web}/public/empty-state/all-issues/all-issues-light.webp (100%) rename {web => apps/web}/public/empty-state/all-issues/assigned-dark.webp (100%) rename {web => apps/web}/public/empty-state/all-issues/assigned-light.webp (100%) rename {web => apps/web}/public/empty-state/all-issues/created-dark.webp (100%) rename {web => apps/web}/public/empty-state/all-issues/created-light.webp (100%) rename {web => apps/web}/public/empty-state/all-issues/custom-view-dark.webp (100%) rename {web => apps/web}/public/empty-state/all-issues/custom-view-light.webp (100%) rename {web => apps/web}/public/empty-state/all-issues/no-project-dark.webp (100%) rename {web => apps/web}/public/empty-state/all-issues/no-project-light.webp (100%) rename {web => apps/web}/public/empty-state/all-issues/subscribed-dark.webp (100%) rename {web => apps/web}/public/empty-state/all-issues/subscribed-light.webp (100%) rename {web => apps/web}/public/empty-state/analytics/empty-chart-area-dark.webp (100%) rename {web => apps/web}/public/empty-state/analytics/empty-chart-area-light.webp (100%) rename {web => apps/web}/public/empty-state/analytics/empty-chart-bar-dark.webp (100%) rename {web => apps/web}/public/empty-state/analytics/empty-chart-bar-light.webp (100%) rename {web => apps/web}/public/empty-state/analytics/empty-chart-radar-dark.webp (100%) rename {web => apps/web}/public/empty-state/analytics/empty-chart-radar-light.webp (100%) rename {web => apps/web}/public/empty-state/analytics/empty-grid-background-dark.webp (100%) rename {web => apps/web}/public/empty-state/analytics/empty-grid-background-light.webp (100%) rename {web => apps/web}/public/empty-state/analytics/empty-table-dark.webp (100%) rename {web => apps/web}/public/empty-state/analytics/empty-table-light.webp (100%) rename {web => apps/web}/public/empty-state/api-token.svg (100%) rename {web => apps/web}/public/empty-state/archived/empty-cycles-dark.webp (100%) rename {web => apps/web}/public/empty-state/archived/empty-cycles-light.webp (100%) rename {web => apps/web}/public/empty-state/archived/empty-issues-dark.webp (100%) rename {web => apps/web}/public/empty-state/archived/empty-issues-light.webp (100%) rename {web => apps/web}/public/empty-state/archived/empty-modules-dark.webp (100%) rename {web => apps/web}/public/empty-state/archived/empty-modules-light.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/calendar-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/calendar-dark.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/calendar-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/calendar-light.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/gantt_chart-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/gantt_chart-dark.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/gantt_chart-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/gantt_chart-light.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/kanban-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/kanban-dark.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/kanban-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/kanban-light.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/list-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/list-dark.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/list-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/list-light.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/spreadsheet-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/spreadsheet-dark.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/spreadsheet-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/cycle-issues/spreadsheet-light.webp (100%) rename {web => apps/web}/public/empty-state/cycle.svg (100%) rename {web => apps/web}/public/empty-state/cycle/active-dark.webp (100%) rename {web => apps/web}/public/empty-state/cycle/active-light.webp (100%) rename {web => apps/web}/public/empty-state/cycle/all-filters.svg (100%) rename {web => apps/web}/public/empty-state/cycle/completed-dark.webp (100%) rename {web => apps/web}/public/empty-state/cycle/completed-light.webp (100%) rename {web => apps/web}/public/empty-state/cycle/completed-no-issues-dark.webp (100%) rename {web => apps/web}/public/empty-state/cycle/completed-no-issues-light.webp (100%) rename {web => apps/web}/public/empty-state/cycle/draft-dark.webp (100%) rename {web => apps/web}/public/empty-state/cycle/draft-light.webp (100%) rename {web => apps/web}/public/empty-state/cycle/name-filter.svg (100%) rename {web => apps/web}/public/empty-state/cycle/upcoming-dark.webp (100%) rename {web => apps/web}/public/empty-state/cycle/upcoming-light.webp (100%) rename {web => apps/web}/public/empty-state/dashboard/dark/completed-issues.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/dark/issues-by-priority.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/dark/issues-by-state-group.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/dark/overdue-issues.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/dark/recent-activity.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/dark/recent-collaborators-1.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/dark/recent-collaborators-2.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/dark/recent-collaborators-3.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/dark/upcoming-issues.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/light/completed-issues.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/light/issues-by-priority.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/light/issues-by-state-group.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/light/overdue-issues.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/light/recent-activity.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/light/recent-collaborators-1.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/light/recent-collaborators-2.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/light/recent-collaborators-3.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/light/upcoming-issues.svg (100%) rename {web => apps/web}/public/empty-state/dashboard/widgets-dark.webp (100%) rename {web => apps/web}/public/empty-state/dashboard/widgets-light.webp (100%) rename {web => apps/web}/public/empty-state/dashboard_empty_project.webp (100%) rename {web => apps/web}/public/empty-state/disabled-feature/cycles-dark.webp (100%) rename {web => apps/web}/public/empty-state/disabled-feature/cycles-light.webp (100%) rename {web => apps/web}/public/empty-state/disabled-feature/intake-dark.webp (100%) rename {web => apps/web}/public/empty-state/disabled-feature/intake-light.webp (100%) rename {web => apps/web}/public/empty-state/disabled-feature/modules-dark.webp (100%) rename {web => apps/web}/public/empty-state/disabled-feature/modules-light.webp (100%) rename {web => apps/web}/public/empty-state/disabled-feature/pages-dark.webp (100%) rename {web => apps/web}/public/empty-state/disabled-feature/pages-light.webp (100%) rename {web => apps/web}/public/empty-state/disabled-feature/views-dark.webp (100%) rename {web => apps/web}/public/empty-state/disabled-feature/views-light.webp (100%) rename {web => apps/web}/public/empty-state/draft/draft-issues-empty-dark.webp (100%) rename {web => apps/web}/public/empty-state/draft/draft-issues-empty-light.webp (100%) rename {web => apps/web}/public/empty-state/empty-filters/calendar-dark.webp (100%) rename {web => apps/web}/public/empty-state/empty-filters/calendar-light.webp (100%) rename {web => apps/web}/public/empty-state/empty-filters/gantt_chart-dark.webp (100%) rename {web => apps/web}/public/empty-state/empty-filters/gantt_chart-light.webp (100%) rename {web => apps/web}/public/empty-state/empty-filters/kanban-dark.webp (100%) rename {web => apps/web}/public/empty-state/empty-filters/kanban-light.webp (100%) rename {web => apps/web}/public/empty-state/empty-filters/list-dark.webp (100%) rename {web => apps/web}/public/empty-state/empty-filters/list-light.webp (100%) rename {web => apps/web}/public/empty-state/empty-filters/spreadsheet-dark.webp (100%) rename {web => apps/web}/public/empty-state/empty-filters/spreadsheet-light.webp (100%) rename {web => apps/web}/public/empty-state/empty_analytics.webp (100%) rename {web => apps/web}/public/empty-state/empty_bar_graph.svg (100%) rename {web => apps/web}/public/empty-state/empty_cycles.webp (100%) rename {web => apps/web}/public/empty-state/empty_graph.svg (100%) rename {web => apps/web}/public/empty-state/empty_issues.webp (100%) rename {web => apps/web}/public/empty-state/empty_label.svg (100%) rename {web => apps/web}/public/empty-state/empty_members.svg (100%) rename {web => apps/web}/public/empty-state/empty_modules.webp (100%) rename {web => apps/web}/public/empty-state/empty_page.png (100%) rename {web => apps/web}/public/empty-state/empty_project.webp (100%) rename {web => apps/web}/public/empty-state/empty_users.svg (100%) rename {web => apps/web}/public/empty-state/empty_view.webp (100%) rename {web => apps/web}/public/empty-state/epics/epics-dark.webp (100%) rename {web => apps/web}/public/empty-state/epics/epics-light.webp (100%) rename {web => apps/web}/public/empty-state/estimates/dark.svg (100%) rename {web => apps/web}/public/empty-state/estimates/light.svg (100%) rename {web => apps/web}/public/empty-state/intake/filter-issue-dark.webp (100%) rename {web => apps/web}/public/empty-state/intake/filter-issue-light.webp (100%) rename {web => apps/web}/public/empty-state/intake/intake-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/intake/intake-dark.webp (100%) rename {web => apps/web}/public/empty-state/intake/intake-issue-dark.webp (100%) rename {web => apps/web}/public/empty-state/intake/intake-issue-light.webp (100%) rename {web => apps/web}/public/empty-state/intake/intake-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/intake/intake-light.webp (100%) rename {web => apps/web}/public/empty-state/intake/issue-detail-dark.webp (100%) rename {web => apps/web}/public/empty-state/intake/issue-detail-light.webp (100%) rename {web => apps/web}/public/empty-state/invitation.svg (100%) rename {web => apps/web}/public/empty-state/issue.svg (100%) rename {web => apps/web}/public/empty-state/label.svg (100%) rename {web => apps/web}/public/empty-state/module-issues/calendar-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/calendar-dark.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/calendar-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/calendar-light.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/gantt_chart-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/gantt_chart-dark.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/gantt_chart-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/gantt_chart-light.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/kanban-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/kanban-dark.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/kanban-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/kanban-light.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/list-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/list-dark.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/list-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/list-light.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/spreadsheet-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/spreadsheet-dark.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/spreadsheet-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/module-issues/spreadsheet-light.webp (100%) rename {web => apps/web}/public/empty-state/module.svg (100%) rename {web => apps/web}/public/empty-state/module/all-filters.svg (100%) rename {web => apps/web}/public/empty-state/module/name-filter.svg (100%) rename {web => apps/web}/public/empty-state/notification.svg (100%) rename {web => apps/web}/public/empty-state/onboarding/analytics-dark.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/analytics-light.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/archive-dark.png (100%) rename {web => apps/web}/public/empty-state/onboarding/archive-light.png (100%) rename {web => apps/web}/public/empty-state/onboarding/cycles-dark.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/cycles-light.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/dashboard-dark.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/dashboard-light.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/graph-dark.png (100%) rename {web => apps/web}/public/empty-state/onboarding/graph-light.png (100%) rename {web => apps/web}/public/empty-state/onboarding/issues-closed-dark.png (100%) rename {web => apps/web}/public/empty-state/onboarding/issues-closed-light.png (100%) rename {web => apps/web}/public/empty-state/onboarding/issues-dark.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/issues-light.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/members-dark.png (100%) rename {web => apps/web}/public/empty-state/onboarding/members-light.png (100%) rename {web => apps/web}/public/empty-state/onboarding/modules-dark.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/modules-light.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/notification-dark.png (100%) rename {web => apps/web}/public/empty-state/onboarding/notification-light.png (100%) rename {web => apps/web}/public/empty-state/onboarding/pages-dark.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/pages-light.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/projects-dark.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/projects-light.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/search-dark.png (100%) rename {web => apps/web}/public/empty-state/onboarding/search-light.png (100%) rename {web => apps/web}/public/empty-state/onboarding/snooze-light.png (100%) rename {web => apps/web}/public/empty-state/onboarding/snoozed-dark.png (100%) rename {web => apps/web}/public/empty-state/onboarding/views-dark.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/views-light.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/workspace-invites-dark.webp (100%) rename {web => apps/web}/public/empty-state/onboarding/workspace-invites-light.webp (100%) rename {web => apps/web}/public/empty-state/pages/all-dark.webp (100%) rename {web => apps/web}/public/empty-state/pages/all-filters.svg (100%) rename {web => apps/web}/public/empty-state/pages/all-light.webp (100%) rename {web => apps/web}/public/empty-state/pages/archived-dark.webp (100%) rename {web => apps/web}/public/empty-state/pages/archived-light.webp (100%) rename {web => apps/web}/public/empty-state/pages/name-filter.svg (100%) rename {web => apps/web}/public/empty-state/pages/navigation-pane/assets-dark.webp (100%) rename {web => apps/web}/public/empty-state/pages/navigation-pane/assets-light.webp (100%) rename {web => apps/web}/public/empty-state/pages/navigation-pane/outline-dark.webp (100%) rename {web => apps/web}/public/empty-state/pages/navigation-pane/outline-light.webp (100%) rename {web => apps/web}/public/empty-state/pages/private-dark.webp (100%) rename {web => apps/web}/public/empty-state/pages/private-light.webp (100%) rename {web => apps/web}/public/empty-state/pages/public-dark.webp (100%) rename {web => apps/web}/public/empty-state/pages/public-light.webp (100%) rename {web => apps/web}/public/empty-state/profile/activities-dark.webp (100%) rename {web => apps/web}/public/empty-state/profile/activities-light.webp (100%) rename {web => apps/web}/public/empty-state/profile/activity-dark.webp (100%) rename {web => apps/web}/public/empty-state/profile/activity-light.webp (100%) rename {web => apps/web}/public/empty-state/profile/assigned-dark.webp (100%) rename {web => apps/web}/public/empty-state/profile/assigned-light.webp (100%) rename {web => apps/web}/public/empty-state/profile/created-dark.webp (100%) rename {web => apps/web}/public/empty-state/profile/created-light.webp (100%) rename {web => apps/web}/public/empty-state/profile/issues-by-priority-dark.webp (100%) rename {web => apps/web}/public/empty-state/profile/issues-by-priority-light.webp (100%) rename {web => apps/web}/public/empty-state/profile/issues-by-state-dark.webp (100%) rename {web => apps/web}/public/empty-state/profile/issues-by-state-light.webp (100%) rename {web => apps/web}/public/empty-state/profile/subscribed-dark.webp (100%) rename {web => apps/web}/public/empty-state/profile/subscribed-light.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/estimates-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/estimates-dark.png (100%) rename {web => apps/web}/public/empty-state/project-settings/estimates-dark.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/estimates-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/estimates-light.png (100%) rename {web => apps/web}/public/empty-state/project-settings/estimates-light.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/integrations-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/integrations-dark.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/integrations-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/integrations-light.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/labels-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/labels-dark.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/labels-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/labels-light.webp (100%) rename {web => apps/web}/public/empty-state/project-settings/no-projects-dark.png (100%) rename {web => apps/web}/public/empty-state/project-settings/no-projects-light.png (100%) rename {web => apps/web}/public/empty-state/project.svg (100%) rename {web => apps/web}/public/empty-state/project/all-filters.svg (100%) rename {web => apps/web}/public/empty-state/project/name-filter.svg (100%) rename {web => apps/web}/public/empty-state/recent_activity.svg (100%) rename {web => apps/web}/public/empty-state/search/all-issue-view-dark.webp (100%) rename {web => apps/web}/public/empty-state/search/all-issues-view-light.webp (100%) rename {web => apps/web}/public/empty-state/search/archive-dark.webp (100%) rename {web => apps/web}/public/empty-state/search/archive-light.webp (100%) rename {web => apps/web}/public/empty-state/search/comments-dark.webp (100%) rename {web => apps/web}/public/empty-state/search/comments-light.webp (100%) rename {web => apps/web}/public/empty-state/search/issues-dark.webp (100%) rename {web => apps/web}/public/empty-state/search/issues-light.webp (100%) rename {web => apps/web}/public/empty-state/search/member-dark.webp (100%) rename {web => apps/web}/public/empty-state/search/member-light.webp (100%) rename {web => apps/web}/public/empty-state/search/notification-dark.webp (100%) rename {web => apps/web}/public/empty-state/search/notification-light.webp (100%) rename {web => apps/web}/public/empty-state/search/project-dark.webp (100%) rename {web => apps/web}/public/empty-state/search/project-light.webp (100%) rename {web => apps/web}/public/empty-state/search/search-dark.webp (100%) rename {web => apps/web}/public/empty-state/search/search-light.webp (100%) rename {web => apps/web}/public/empty-state/search/snooze-dark.webp (100%) rename {web => apps/web}/public/empty-state/search/snooze-light.webp (100%) rename {web => apps/web}/public/empty-state/search/views-dark.webp (100%) rename {web => apps/web}/public/empty-state/search/views-light.webp (100%) rename {web => apps/web}/public/empty-state/state_graph.svg (100%) rename {web => apps/web}/public/empty-state/stickies/stickies-dark.webp (100%) rename {web => apps/web}/public/empty-state/stickies/stickies-light.webp (100%) rename {web => apps/web}/public/empty-state/stickies/stickies-search-dark.webp (100%) rename {web => apps/web}/public/empty-state/stickies/stickies-search-light.webp (100%) rename {web => apps/web}/public/empty-state/view.svg (100%) rename {web => apps/web}/public/empty-state/web-hook.svg (100%) rename {web => apps/web}/public/empty-state/workspace-draft/issue-dark.webp (100%) rename {web => apps/web}/public/empty-state/workspace-draft/issue-light.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/api-tokens-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/api-tokens-dark.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/api-tokens-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/api-tokens-light.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/exports-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/exports-dark.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/exports-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/exports-light.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/imports-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/imports-dark.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/imports-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/imports-light.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/integrations-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/integrations-dark.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/integrations-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/integrations-light.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/webhooks-dark-resp.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/webhooks-dark.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/webhooks-light-resp.webp (100%) rename {web => apps/web}/public/empty-state/workspace-settings/webhooks-light.webp (100%) rename {web => apps/web}/public/favicon/android-chrome-192x192.png (100%) rename {web => apps/web}/public/favicon/android-chrome-512x512.png (100%) rename {web => apps/web}/public/favicon/apple-touch-icon.png (100%) rename {web => apps/web}/public/favicon/favicon-16x16.png (100%) rename {web => apps/web}/public/favicon/favicon-32x32.png (100%) rename {web => apps/web}/public/favicon/favicon.ico (100%) rename {web => apps/web}/public/favicon/site.webmanifest (100%) rename {web => apps/web}/public/fonts/inter/bold-italic.ttf (100%) rename {web => apps/web}/public/fonts/inter/bold.ttf (100%) rename {web => apps/web}/public/fonts/inter/heavy-italic.ttf (100%) rename {web => apps/web}/public/fonts/inter/heavy.ttf (100%) rename {web => apps/web}/public/fonts/inter/light-italic.ttf (100%) rename {web => apps/web}/public/fonts/inter/light.ttf (100%) rename {web => apps/web}/public/fonts/inter/medium-italic.ttf (100%) rename {web => apps/web}/public/fonts/inter/medium.ttf (100%) rename {web => apps/web}/public/fonts/inter/regular-italic.ttf (100%) rename {web => apps/web}/public/fonts/inter/regular.ttf (100%) rename {web => apps/web}/public/fonts/inter/semibold-italic.ttf (100%) rename {web => apps/web}/public/fonts/inter/semibold.ttf (100%) rename {web => apps/web}/public/fonts/inter/thin-italic.ttf (100%) rename {web => apps/web}/public/fonts/inter/thin.ttf (100%) rename {web => apps/web}/public/fonts/inter/ultrabold-italic.ttf (100%) rename {web => apps/web}/public/fonts/inter/ultrabold.ttf (100%) rename {web => apps/web}/public/fonts/inter/ultralight-italic.ttf (100%) rename {web => apps/web}/public/fonts/inter/ultralight.ttf (100%) rename {web => apps/web}/public/icons/icon-128x128.png (100%) rename {web => apps/web}/public/icons/icon-180x180.png (100%) rename {web => apps/web}/public/icons/icon-192x192.png (100%) rename {web => apps/web}/public/icons/icon-348x348.png (100%) rename {web => apps/web}/public/icons/icon-512x512.png (100%) rename {web => apps/web}/public/images/logo-spinner-dark.gif (100%) rename {web => apps/web}/public/images/logo-spinner-light.gif (100%) rename {web => apps/web}/public/instance-not-ready.webp (100%) rename {web => apps/web}/public/instance-setup-done.webp (100%) rename {web => apps/web}/public/logos/github-black.png (100%) rename {web => apps/web}/public/logos/github-dark.svg (100%) rename {web => apps/web}/public/logos/github-square.png (100%) rename {web => apps/web}/public/logos/github-white.png (100%) rename {web => apps/web}/public/logos/gitlab-logo.svg (100%) rename {web => apps/web}/public/logos/google-logo.svg (100%) rename {web => apps/web}/public/mac-command.svg (100%) rename {web => apps/web}/public/maintenance-mode.webp (100%) rename {web => apps/web}/public/manifest.json (100%) rename {web => apps/web}/public/og-image.png (100%) rename {web => apps/web}/public/onboarding/create-join-workspace-dark.webp (100%) rename {web => apps/web}/public/onboarding/create-join-workspace-light.webp (100%) rename {web => apps/web}/public/onboarding/cycles.webp (100%) rename {web => apps/web}/public/onboarding/invite-members-dark.webp (100%) rename {web => apps/web}/public/onboarding/invite-members-light.webp (100%) rename {web => apps/web}/public/onboarding/issues.webp (100%) rename {web => apps/web}/public/onboarding/modules.webp (100%) rename {web => apps/web}/public/onboarding/onboarding-pages.webp (100%) rename {web => apps/web}/public/onboarding/pages.webp (100%) rename {web => apps/web}/public/onboarding/profile-setup-dark.webp (100%) rename {web => apps/web}/public/onboarding/profile-setup-light.webp (100%) rename {web => apps/web}/public/onboarding/user-personalization-dark.webp (100%) rename {web => apps/web}/public/onboarding/user-personalization-light.webp (100%) rename {web => apps/web}/public/onboarding/views.webp (100%) rename {web => apps/web}/public/plane-logos/black-horizontal-with-blue-logo.png (100%) rename {web => apps/web}/public/plane-logos/blue-without-text.png (100%) rename {web => apps/web}/public/plane-logos/plane-mobile-pwa.png (100%) rename {web => apps/web}/public/plane-logos/white-horizontal-with-blue-logo.png (100%) rename {web => apps/web}/public/plane-logos/white-horizontal.svg (100%) rename {web => apps/web}/public/plane-takeoff.png (100%) rename {web => apps/web}/public/services/csv.svg (100%) rename {web => apps/web}/public/services/excel.svg (100%) rename {web => apps/web}/public/services/github.png (100%) rename {web => apps/web}/public/services/jira.svg (100%) rename {web => apps/web}/public/services/json.svg (100%) rename {web => apps/web}/public/services/slack.png (100%) rename {web => apps/web}/public/site.webmanifest.json (100%) rename {web => apps/web}/public/sw.js (100%) rename {web => apps/web}/public/sw.js.map (100%) rename {web => apps/web}/public/user.png (100%) rename {web => apps/web}/public/users/user-1.png (100%) rename {web => apps/web}/public/users/user-2.png (100%) rename {web => apps/web}/public/users/user-profile-cover-default-img.png (100%) rename {web => apps/web}/public/workbox-9f2f79cf.js (100%) rename {web => apps/web}/public/workbox-9f2f79cf.js.map (100%) rename {web => apps/web}/public/workspace-active-cycles/cta-l-1-dark.webp (100%) rename {web => apps/web}/public/workspace-active-cycles/cta-l-1-light.webp (100%) rename {web => apps/web}/public/workspace-active-cycles/cta-r-1-dark.webp (100%) rename {web => apps/web}/public/workspace-active-cycles/cta-r-1-light.webp (100%) rename {web => apps/web}/public/workspace-active-cycles/cta-r-2-dark.webp (100%) rename {web => apps/web}/public/workspace-active-cycles/cta-r-2-light.webp (100%) rename {web => apps/web}/public/workspace/workspace-creation-disabled.png (100%) rename {web => apps/web}/public/workspace/workspace-not-available.png (100%) rename {web => apps/web}/styles/command-pallette.css (100%) rename {web => apps/web}/styles/emoji.css (100%) rename {web => apps/web}/styles/globals.css (100%) rename {web => apps/web}/styles/nprogress.css (100%) rename {web => apps/web}/styles/react-day-picker.css (100%) rename {web => apps/web}/tailwind.config.js (100%) rename {web => apps/web}/tsconfig.json (100%) rename {web => apps/web}/use-font-face-observer.d.ts (100%) diff --git a/admin/.env.example b/apps/admin/.env.example similarity index 100% rename from admin/.env.example rename to apps/admin/.env.example diff --git a/admin/.eslintrc.js b/apps/admin/.eslintrc.js similarity index 100% rename from admin/.eslintrc.js rename to apps/admin/.eslintrc.js diff --git a/admin/.prettierignore b/apps/admin/.prettierignore similarity index 100% rename from admin/.prettierignore rename to apps/admin/.prettierignore diff --git a/admin/.prettierrc b/apps/admin/.prettierrc similarity index 100% rename from admin/.prettierrc rename to apps/admin/.prettierrc diff --git a/admin/Dockerfile.admin b/apps/admin/Dockerfile.admin similarity index 100% rename from admin/Dockerfile.admin rename to apps/admin/Dockerfile.admin diff --git a/admin/Dockerfile.dev b/apps/admin/Dockerfile.dev similarity index 100% rename from admin/Dockerfile.dev rename to apps/admin/Dockerfile.dev diff --git a/admin/app/(all)/(dashboard)/ai/form.tsx b/apps/admin/app/(all)/(dashboard)/ai/form.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/ai/form.tsx rename to apps/admin/app/(all)/(dashboard)/ai/form.tsx diff --git a/admin/app/(all)/(dashboard)/ai/layout.tsx b/apps/admin/app/(all)/(dashboard)/ai/layout.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/ai/layout.tsx rename to apps/admin/app/(all)/(dashboard)/ai/layout.tsx diff --git a/admin/app/(all)/(dashboard)/ai/page.tsx b/apps/admin/app/(all)/(dashboard)/ai/page.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/ai/page.tsx rename to apps/admin/app/(all)/(dashboard)/ai/page.tsx diff --git a/admin/app/(all)/(dashboard)/authentication/github/form.tsx b/apps/admin/app/(all)/(dashboard)/authentication/github/form.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/authentication/github/form.tsx rename to apps/admin/app/(all)/(dashboard)/authentication/github/form.tsx diff --git a/admin/app/(all)/(dashboard)/authentication/github/layout.tsx b/apps/admin/app/(all)/(dashboard)/authentication/github/layout.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/authentication/github/layout.tsx rename to apps/admin/app/(all)/(dashboard)/authentication/github/layout.tsx diff --git a/admin/app/(all)/(dashboard)/authentication/github/page.tsx b/apps/admin/app/(all)/(dashboard)/authentication/github/page.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/authentication/github/page.tsx rename to apps/admin/app/(all)/(dashboard)/authentication/github/page.tsx diff --git a/admin/app/(all)/(dashboard)/authentication/gitlab/form.tsx b/apps/admin/app/(all)/(dashboard)/authentication/gitlab/form.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/authentication/gitlab/form.tsx rename to apps/admin/app/(all)/(dashboard)/authentication/gitlab/form.tsx diff --git a/admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx b/apps/admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx rename to apps/admin/app/(all)/(dashboard)/authentication/gitlab/layout.tsx diff --git a/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx b/apps/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx rename to apps/admin/app/(all)/(dashboard)/authentication/gitlab/page.tsx diff --git a/admin/app/(all)/(dashboard)/authentication/google/form.tsx b/apps/admin/app/(all)/(dashboard)/authentication/google/form.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/authentication/google/form.tsx rename to apps/admin/app/(all)/(dashboard)/authentication/google/form.tsx diff --git a/admin/app/(all)/(dashboard)/authentication/google/layout.tsx b/apps/admin/app/(all)/(dashboard)/authentication/google/layout.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/authentication/google/layout.tsx rename to apps/admin/app/(all)/(dashboard)/authentication/google/layout.tsx diff --git a/admin/app/(all)/(dashboard)/authentication/google/page.tsx b/apps/admin/app/(all)/(dashboard)/authentication/google/page.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/authentication/google/page.tsx rename to apps/admin/app/(all)/(dashboard)/authentication/google/page.tsx diff --git a/admin/app/(all)/(dashboard)/authentication/layout.tsx b/apps/admin/app/(all)/(dashboard)/authentication/layout.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/authentication/layout.tsx rename to apps/admin/app/(all)/(dashboard)/authentication/layout.tsx diff --git a/admin/app/(all)/(dashboard)/authentication/page.tsx b/apps/admin/app/(all)/(dashboard)/authentication/page.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/authentication/page.tsx rename to apps/admin/app/(all)/(dashboard)/authentication/page.tsx diff --git a/admin/app/(all)/(dashboard)/email/email-config-form.tsx b/apps/admin/app/(all)/(dashboard)/email/email-config-form.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/email/email-config-form.tsx rename to apps/admin/app/(all)/(dashboard)/email/email-config-form.tsx diff --git a/admin/app/(all)/(dashboard)/email/layout.tsx b/apps/admin/app/(all)/(dashboard)/email/layout.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/email/layout.tsx rename to apps/admin/app/(all)/(dashboard)/email/layout.tsx diff --git a/admin/app/(all)/(dashboard)/email/page.tsx b/apps/admin/app/(all)/(dashboard)/email/page.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/email/page.tsx rename to apps/admin/app/(all)/(dashboard)/email/page.tsx diff --git a/admin/app/(all)/(dashboard)/email/test-email-modal.tsx b/apps/admin/app/(all)/(dashboard)/email/test-email-modal.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/email/test-email-modal.tsx rename to apps/admin/app/(all)/(dashboard)/email/test-email-modal.tsx diff --git a/admin/app/(all)/(dashboard)/general/form.tsx b/apps/admin/app/(all)/(dashboard)/general/form.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/general/form.tsx rename to apps/admin/app/(all)/(dashboard)/general/form.tsx diff --git a/admin/app/(all)/(dashboard)/general/intercom.tsx b/apps/admin/app/(all)/(dashboard)/general/intercom.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/general/intercom.tsx rename to apps/admin/app/(all)/(dashboard)/general/intercom.tsx diff --git a/admin/app/(all)/(dashboard)/general/layout.tsx b/apps/admin/app/(all)/(dashboard)/general/layout.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/general/layout.tsx rename to apps/admin/app/(all)/(dashboard)/general/layout.tsx diff --git a/admin/app/(all)/(dashboard)/general/page.tsx b/apps/admin/app/(all)/(dashboard)/general/page.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/general/page.tsx rename to apps/admin/app/(all)/(dashboard)/general/page.tsx diff --git a/admin/app/(all)/(dashboard)/header.tsx b/apps/admin/app/(all)/(dashboard)/header.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/header.tsx rename to apps/admin/app/(all)/(dashboard)/header.tsx diff --git a/admin/app/(all)/(dashboard)/image/form.tsx b/apps/admin/app/(all)/(dashboard)/image/form.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/image/form.tsx rename to apps/admin/app/(all)/(dashboard)/image/form.tsx diff --git a/admin/app/(all)/(dashboard)/image/layout.tsx b/apps/admin/app/(all)/(dashboard)/image/layout.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/image/layout.tsx rename to apps/admin/app/(all)/(dashboard)/image/layout.tsx diff --git a/admin/app/(all)/(dashboard)/image/page.tsx b/apps/admin/app/(all)/(dashboard)/image/page.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/image/page.tsx rename to apps/admin/app/(all)/(dashboard)/image/page.tsx diff --git a/admin/app/(all)/(dashboard)/layout.tsx b/apps/admin/app/(all)/(dashboard)/layout.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/layout.tsx rename to apps/admin/app/(all)/(dashboard)/layout.tsx diff --git a/admin/app/(all)/(dashboard)/sidebar-dropdown.tsx b/apps/admin/app/(all)/(dashboard)/sidebar-dropdown.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/sidebar-dropdown.tsx rename to apps/admin/app/(all)/(dashboard)/sidebar-dropdown.tsx diff --git a/admin/app/(all)/(dashboard)/sidebar-help-section.tsx b/apps/admin/app/(all)/(dashboard)/sidebar-help-section.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/sidebar-help-section.tsx rename to apps/admin/app/(all)/(dashboard)/sidebar-help-section.tsx diff --git a/admin/app/(all)/(dashboard)/sidebar-menu.tsx b/apps/admin/app/(all)/(dashboard)/sidebar-menu.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/sidebar-menu.tsx rename to apps/admin/app/(all)/(dashboard)/sidebar-menu.tsx diff --git a/admin/app/(all)/(dashboard)/sidebar.tsx b/apps/admin/app/(all)/(dashboard)/sidebar.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/sidebar.tsx rename to apps/admin/app/(all)/(dashboard)/sidebar.tsx diff --git a/admin/app/(all)/(dashboard)/workspace/create/form.tsx b/apps/admin/app/(all)/(dashboard)/workspace/create/form.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/workspace/create/form.tsx rename to apps/admin/app/(all)/(dashboard)/workspace/create/form.tsx diff --git a/admin/app/(all)/(dashboard)/workspace/create/page.tsx b/apps/admin/app/(all)/(dashboard)/workspace/create/page.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/workspace/create/page.tsx rename to apps/admin/app/(all)/(dashboard)/workspace/create/page.tsx diff --git a/admin/app/(all)/(dashboard)/workspace/layout.tsx b/apps/admin/app/(all)/(dashboard)/workspace/layout.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/workspace/layout.tsx rename to apps/admin/app/(all)/(dashboard)/workspace/layout.tsx diff --git a/admin/app/(all)/(dashboard)/workspace/page.tsx b/apps/admin/app/(all)/(dashboard)/workspace/page.tsx similarity index 100% rename from admin/app/(all)/(dashboard)/workspace/page.tsx rename to apps/admin/app/(all)/(dashboard)/workspace/page.tsx diff --git a/admin/app/(all)/(home)/auth-banner.tsx b/apps/admin/app/(all)/(home)/auth-banner.tsx similarity index 100% rename from admin/app/(all)/(home)/auth-banner.tsx rename to apps/admin/app/(all)/(home)/auth-banner.tsx diff --git a/admin/app/(all)/(home)/auth-helpers.tsx b/apps/admin/app/(all)/(home)/auth-helpers.tsx similarity index 100% rename from admin/app/(all)/(home)/auth-helpers.tsx rename to apps/admin/app/(all)/(home)/auth-helpers.tsx diff --git a/admin/app/(all)/(home)/layout.tsx b/apps/admin/app/(all)/(home)/layout.tsx similarity index 100% rename from admin/app/(all)/(home)/layout.tsx rename to apps/admin/app/(all)/(home)/layout.tsx diff --git a/admin/app/(all)/(home)/page.tsx b/apps/admin/app/(all)/(home)/page.tsx similarity index 100% rename from admin/app/(all)/(home)/page.tsx rename to apps/admin/app/(all)/(home)/page.tsx diff --git a/admin/app/(all)/(home)/sign-in-form.tsx b/apps/admin/app/(all)/(home)/sign-in-form.tsx similarity index 100% rename from admin/app/(all)/(home)/sign-in-form.tsx rename to apps/admin/app/(all)/(home)/sign-in-form.tsx diff --git a/admin/app/(all)/instance.provider.tsx b/apps/admin/app/(all)/instance.provider.tsx similarity index 100% rename from admin/app/(all)/instance.provider.tsx rename to apps/admin/app/(all)/instance.provider.tsx diff --git a/admin/app/(all)/layout.tsx b/apps/admin/app/(all)/layout.tsx similarity index 100% rename from admin/app/(all)/layout.tsx rename to apps/admin/app/(all)/layout.tsx diff --git a/admin/app/(all)/store.provider.tsx b/apps/admin/app/(all)/store.provider.tsx similarity index 100% rename from admin/app/(all)/store.provider.tsx rename to apps/admin/app/(all)/store.provider.tsx diff --git a/admin/app/(all)/toast.tsx b/apps/admin/app/(all)/toast.tsx similarity index 100% rename from admin/app/(all)/toast.tsx rename to apps/admin/app/(all)/toast.tsx diff --git a/admin/app/(all)/user.provider.tsx b/apps/admin/app/(all)/user.provider.tsx similarity index 100% rename from admin/app/(all)/user.provider.tsx rename to apps/admin/app/(all)/user.provider.tsx diff --git a/admin/app/error.tsx b/apps/admin/app/error.tsx similarity index 100% rename from admin/app/error.tsx rename to apps/admin/app/error.tsx diff --git a/admin/app/layout.tsx b/apps/admin/app/layout.tsx similarity index 100% rename from admin/app/layout.tsx rename to apps/admin/app/layout.tsx diff --git a/admin/ce/components/authentication/authentication-modes.tsx b/apps/admin/ce/components/authentication/authentication-modes.tsx similarity index 100% rename from admin/ce/components/authentication/authentication-modes.tsx rename to apps/admin/ce/components/authentication/authentication-modes.tsx diff --git a/admin/ce/components/authentication/index.ts b/apps/admin/ce/components/authentication/index.ts similarity index 100% rename from admin/ce/components/authentication/index.ts rename to apps/admin/ce/components/authentication/index.ts diff --git a/admin/ce/components/common/index.ts b/apps/admin/ce/components/common/index.ts similarity index 100% rename from admin/ce/components/common/index.ts rename to apps/admin/ce/components/common/index.ts diff --git a/admin/ce/components/common/upgrade-button.tsx b/apps/admin/ce/components/common/upgrade-button.tsx similarity index 100% rename from admin/ce/components/common/upgrade-button.tsx rename to apps/admin/ce/components/common/upgrade-button.tsx diff --git a/admin/ce/store/root.store.ts b/apps/admin/ce/store/root.store.ts similarity index 100% rename from admin/ce/store/root.store.ts rename to apps/admin/ce/store/root.store.ts diff --git a/admin/core/components/authentication/authentication-method-card.tsx b/apps/admin/core/components/authentication/authentication-method-card.tsx similarity index 100% rename from admin/core/components/authentication/authentication-method-card.tsx rename to apps/admin/core/components/authentication/authentication-method-card.tsx diff --git a/admin/core/components/authentication/email-config-switch.tsx b/apps/admin/core/components/authentication/email-config-switch.tsx similarity index 100% rename from admin/core/components/authentication/email-config-switch.tsx rename to apps/admin/core/components/authentication/email-config-switch.tsx diff --git a/admin/core/components/authentication/github-config.tsx b/apps/admin/core/components/authentication/github-config.tsx similarity index 100% rename from admin/core/components/authentication/github-config.tsx rename to apps/admin/core/components/authentication/github-config.tsx diff --git a/admin/core/components/authentication/gitlab-config.tsx b/apps/admin/core/components/authentication/gitlab-config.tsx similarity index 100% rename from admin/core/components/authentication/gitlab-config.tsx rename to apps/admin/core/components/authentication/gitlab-config.tsx diff --git a/admin/core/components/authentication/google-config.tsx b/apps/admin/core/components/authentication/google-config.tsx similarity index 100% rename from admin/core/components/authentication/google-config.tsx rename to apps/admin/core/components/authentication/google-config.tsx diff --git a/admin/core/components/authentication/password-config-switch.tsx b/apps/admin/core/components/authentication/password-config-switch.tsx similarity index 100% rename from admin/core/components/authentication/password-config-switch.tsx rename to apps/admin/core/components/authentication/password-config-switch.tsx diff --git a/admin/core/components/common/banner.tsx b/apps/admin/core/components/common/banner.tsx similarity index 100% rename from admin/core/components/common/banner.tsx rename to apps/admin/core/components/common/banner.tsx diff --git a/admin/core/components/common/breadcrumb-link.tsx b/apps/admin/core/components/common/breadcrumb-link.tsx similarity index 100% rename from admin/core/components/common/breadcrumb-link.tsx rename to apps/admin/core/components/common/breadcrumb-link.tsx diff --git a/admin/core/components/common/code-block.tsx b/apps/admin/core/components/common/code-block.tsx similarity index 100% rename from admin/core/components/common/code-block.tsx rename to apps/admin/core/components/common/code-block.tsx diff --git a/admin/core/components/common/confirm-discard-modal.tsx b/apps/admin/core/components/common/confirm-discard-modal.tsx similarity index 100% rename from admin/core/components/common/confirm-discard-modal.tsx rename to apps/admin/core/components/common/confirm-discard-modal.tsx diff --git a/admin/core/components/common/controller-input.tsx b/apps/admin/core/components/common/controller-input.tsx similarity index 100% rename from admin/core/components/common/controller-input.tsx rename to apps/admin/core/components/common/controller-input.tsx diff --git a/admin/core/components/common/copy-field.tsx b/apps/admin/core/components/common/copy-field.tsx similarity index 100% rename from admin/core/components/common/copy-field.tsx rename to apps/admin/core/components/common/copy-field.tsx diff --git a/admin/core/components/common/empty-state.tsx b/apps/admin/core/components/common/empty-state.tsx similarity index 100% rename from admin/core/components/common/empty-state.tsx rename to apps/admin/core/components/common/empty-state.tsx diff --git a/admin/core/components/common/logo-spinner.tsx b/apps/admin/core/components/common/logo-spinner.tsx similarity index 100% rename from admin/core/components/common/logo-spinner.tsx rename to apps/admin/core/components/common/logo-spinner.tsx diff --git a/admin/core/components/common/page-header.tsx b/apps/admin/core/components/common/page-header.tsx similarity index 100% rename from admin/core/components/common/page-header.tsx rename to apps/admin/core/components/common/page-header.tsx diff --git a/admin/core/components/common/password-strength-meter.tsx b/apps/admin/core/components/common/password-strength-meter.tsx similarity index 100% rename from admin/core/components/common/password-strength-meter.tsx rename to apps/admin/core/components/common/password-strength-meter.tsx diff --git a/admin/core/components/instance/failure.tsx b/apps/admin/core/components/instance/failure.tsx similarity index 100% rename from admin/core/components/instance/failure.tsx rename to apps/admin/core/components/instance/failure.tsx diff --git a/admin/core/components/instance/instance-not-ready.tsx b/apps/admin/core/components/instance/instance-not-ready.tsx similarity index 100% rename from admin/core/components/instance/instance-not-ready.tsx rename to apps/admin/core/components/instance/instance-not-ready.tsx diff --git a/admin/core/components/instance/loading.tsx b/apps/admin/core/components/instance/loading.tsx similarity index 100% rename from admin/core/components/instance/loading.tsx rename to apps/admin/core/components/instance/loading.tsx diff --git a/admin/core/components/instance/setup-form.tsx b/apps/admin/core/components/instance/setup-form.tsx similarity index 100% rename from admin/core/components/instance/setup-form.tsx rename to apps/admin/core/components/instance/setup-form.tsx diff --git a/admin/core/components/new-user-popup.tsx b/apps/admin/core/components/new-user-popup.tsx similarity index 100% rename from admin/core/components/new-user-popup.tsx rename to apps/admin/core/components/new-user-popup.tsx diff --git a/admin/core/components/workspace/list-item.tsx b/apps/admin/core/components/workspace/list-item.tsx similarity index 100% rename from admin/core/components/workspace/list-item.tsx rename to apps/admin/core/components/workspace/list-item.tsx diff --git a/admin/core/hooks/store/index.ts b/apps/admin/core/hooks/store/index.ts similarity index 100% rename from admin/core/hooks/store/index.ts rename to apps/admin/core/hooks/store/index.ts diff --git a/admin/core/hooks/store/use-instance.tsx b/apps/admin/core/hooks/store/use-instance.tsx similarity index 100% rename from admin/core/hooks/store/use-instance.tsx rename to apps/admin/core/hooks/store/use-instance.tsx diff --git a/admin/core/hooks/store/use-theme.tsx b/apps/admin/core/hooks/store/use-theme.tsx similarity index 100% rename from admin/core/hooks/store/use-theme.tsx rename to apps/admin/core/hooks/store/use-theme.tsx diff --git a/admin/core/hooks/store/use-user.tsx b/apps/admin/core/hooks/store/use-user.tsx similarity index 100% rename from admin/core/hooks/store/use-user.tsx rename to apps/admin/core/hooks/store/use-user.tsx diff --git a/admin/core/hooks/store/use-workspace.tsx b/apps/admin/core/hooks/store/use-workspace.tsx similarity index 100% rename from admin/core/hooks/store/use-workspace.tsx rename to apps/admin/core/hooks/store/use-workspace.tsx diff --git a/admin/core/store/instance.store.ts b/apps/admin/core/store/instance.store.ts similarity index 100% rename from admin/core/store/instance.store.ts rename to apps/admin/core/store/instance.store.ts diff --git a/admin/core/store/root.store.ts b/apps/admin/core/store/root.store.ts similarity index 100% rename from admin/core/store/root.store.ts rename to apps/admin/core/store/root.store.ts diff --git a/admin/core/store/theme.store.ts b/apps/admin/core/store/theme.store.ts similarity index 100% rename from admin/core/store/theme.store.ts rename to apps/admin/core/store/theme.store.ts diff --git a/admin/core/store/user.store.ts b/apps/admin/core/store/user.store.ts similarity index 100% rename from admin/core/store/user.store.ts rename to apps/admin/core/store/user.store.ts diff --git a/admin/core/store/workspace.store.ts b/apps/admin/core/store/workspace.store.ts similarity index 100% rename from admin/core/store/workspace.store.ts rename to apps/admin/core/store/workspace.store.ts diff --git a/admin/ee/components/authentication/authentication-modes.tsx b/apps/admin/ee/components/authentication/authentication-modes.tsx similarity index 100% rename from admin/ee/components/authentication/authentication-modes.tsx rename to apps/admin/ee/components/authentication/authentication-modes.tsx diff --git a/admin/ee/components/authentication/index.ts b/apps/admin/ee/components/authentication/index.ts similarity index 100% rename from admin/ee/components/authentication/index.ts rename to apps/admin/ee/components/authentication/index.ts diff --git a/admin/ee/components/common/index.ts b/apps/admin/ee/components/common/index.ts similarity index 100% rename from admin/ee/components/common/index.ts rename to apps/admin/ee/components/common/index.ts diff --git a/admin/ee/store/root.store.ts b/apps/admin/ee/store/root.store.ts similarity index 100% rename from admin/ee/store/root.store.ts rename to apps/admin/ee/store/root.store.ts diff --git a/admin/next-env.d.ts b/apps/admin/next-env.d.ts similarity index 100% rename from admin/next-env.d.ts rename to apps/admin/next-env.d.ts diff --git a/admin/next.config.js b/apps/admin/next.config.js similarity index 100% rename from admin/next.config.js rename to apps/admin/next.config.js diff --git a/admin/package.json b/apps/admin/package.json similarity index 100% rename from admin/package.json rename to apps/admin/package.json diff --git a/admin/postcss.config.js b/apps/admin/postcss.config.js similarity index 100% rename from admin/postcss.config.js rename to apps/admin/postcss.config.js diff --git a/admin/public/auth/background-pattern-dark.svg b/apps/admin/public/auth/background-pattern-dark.svg similarity index 100% rename from admin/public/auth/background-pattern-dark.svg rename to apps/admin/public/auth/background-pattern-dark.svg diff --git a/admin/public/auth/background-pattern.svg b/apps/admin/public/auth/background-pattern.svg similarity index 100% rename from admin/public/auth/background-pattern.svg rename to apps/admin/public/auth/background-pattern.svg diff --git a/admin/public/favicon/android-chrome-192x192.png b/apps/admin/public/favicon/android-chrome-192x192.png similarity index 100% rename from admin/public/favicon/android-chrome-192x192.png rename to apps/admin/public/favicon/android-chrome-192x192.png diff --git a/admin/public/favicon/android-chrome-512x512.png b/apps/admin/public/favicon/android-chrome-512x512.png similarity index 100% rename from admin/public/favicon/android-chrome-512x512.png rename to apps/admin/public/favicon/android-chrome-512x512.png diff --git a/admin/public/favicon/apple-touch-icon.png b/apps/admin/public/favicon/apple-touch-icon.png similarity index 100% rename from admin/public/favicon/apple-touch-icon.png rename to apps/admin/public/favicon/apple-touch-icon.png diff --git a/admin/public/favicon/favicon-16x16.png b/apps/admin/public/favicon/favicon-16x16.png similarity index 100% rename from admin/public/favicon/favicon-16x16.png rename to apps/admin/public/favicon/favicon-16x16.png diff --git a/admin/public/favicon/favicon-32x32.png b/apps/admin/public/favicon/favicon-32x32.png similarity index 100% rename from admin/public/favicon/favicon-32x32.png rename to apps/admin/public/favicon/favicon-32x32.png diff --git a/admin/public/favicon/favicon.ico b/apps/admin/public/favicon/favicon.ico similarity index 100% rename from admin/public/favicon/favicon.ico rename to apps/admin/public/favicon/favicon.ico diff --git a/admin/public/favicon/site.webmanifest b/apps/admin/public/favicon/site.webmanifest similarity index 100% rename from admin/public/favicon/site.webmanifest rename to apps/admin/public/favicon/site.webmanifest diff --git a/admin/public/images/logo-spinner-dark.gif b/apps/admin/public/images/logo-spinner-dark.gif similarity index 100% rename from admin/public/images/logo-spinner-dark.gif rename to apps/admin/public/images/logo-spinner-dark.gif diff --git a/admin/public/images/logo-spinner-light.gif b/apps/admin/public/images/logo-spinner-light.gif similarity index 100% rename from admin/public/images/logo-spinner-light.gif rename to apps/admin/public/images/logo-spinner-light.gif diff --git a/admin/public/images/plane-takeoff.png b/apps/admin/public/images/plane-takeoff.png similarity index 100% rename from admin/public/images/plane-takeoff.png rename to apps/admin/public/images/plane-takeoff.png diff --git a/admin/public/instance/instance-failure-dark.svg b/apps/admin/public/instance/instance-failure-dark.svg similarity index 100% rename from admin/public/instance/instance-failure-dark.svg rename to apps/admin/public/instance/instance-failure-dark.svg diff --git a/admin/public/instance/instance-failure.svg b/apps/admin/public/instance/instance-failure.svg similarity index 100% rename from admin/public/instance/instance-failure.svg rename to apps/admin/public/instance/instance-failure.svg diff --git a/admin/public/instance/plane-takeoff.png b/apps/admin/public/instance/plane-takeoff.png similarity index 100% rename from admin/public/instance/plane-takeoff.png rename to apps/admin/public/instance/plane-takeoff.png diff --git a/admin/public/logos/github-black.png b/apps/admin/public/logos/github-black.png similarity index 100% rename from admin/public/logos/github-black.png rename to apps/admin/public/logos/github-black.png diff --git a/admin/public/logos/github-white.png b/apps/admin/public/logos/github-white.png similarity index 100% rename from admin/public/logos/github-white.png rename to apps/admin/public/logos/github-white.png diff --git a/admin/public/logos/gitlab-logo.svg b/apps/admin/public/logos/gitlab-logo.svg similarity index 100% rename from admin/public/logos/gitlab-logo.svg rename to apps/admin/public/logos/gitlab-logo.svg diff --git a/admin/public/logos/google-logo.svg b/apps/admin/public/logos/google-logo.svg similarity index 100% rename from admin/public/logos/google-logo.svg rename to apps/admin/public/logos/google-logo.svg diff --git a/admin/public/logos/oidc-logo.svg b/apps/admin/public/logos/oidc-logo.svg similarity index 100% rename from admin/public/logos/oidc-logo.svg rename to apps/admin/public/logos/oidc-logo.svg diff --git a/admin/public/logos/saml-logo.svg b/apps/admin/public/logos/saml-logo.svg similarity index 100% rename from admin/public/logos/saml-logo.svg rename to apps/admin/public/logos/saml-logo.svg diff --git a/admin/public/logos/takeoff-icon-dark.svg b/apps/admin/public/logos/takeoff-icon-dark.svg similarity index 100% rename from admin/public/logos/takeoff-icon-dark.svg rename to apps/admin/public/logos/takeoff-icon-dark.svg diff --git a/admin/public/logos/takeoff-icon-light.svg b/apps/admin/public/logos/takeoff-icon-light.svg similarity index 100% rename from admin/public/logos/takeoff-icon-light.svg rename to apps/admin/public/logos/takeoff-icon-light.svg diff --git a/admin/public/plane-logos/black-horizontal-with-blue-logo.png b/apps/admin/public/plane-logos/black-horizontal-with-blue-logo.png similarity index 100% rename from admin/public/plane-logos/black-horizontal-with-blue-logo.png rename to apps/admin/public/plane-logos/black-horizontal-with-blue-logo.png diff --git a/admin/public/plane-logos/blue-without-text.png b/apps/admin/public/plane-logos/blue-without-text.png similarity index 100% rename from admin/public/plane-logos/blue-without-text.png rename to apps/admin/public/plane-logos/blue-without-text.png diff --git a/admin/public/plane-logos/white-horizontal-with-blue-logo.png b/apps/admin/public/plane-logos/white-horizontal-with-blue-logo.png similarity index 100% rename from admin/public/plane-logos/white-horizontal-with-blue-logo.png rename to apps/admin/public/plane-logos/white-horizontal-with-blue-logo.png diff --git a/admin/public/site.webmanifest.json b/apps/admin/public/site.webmanifest.json similarity index 100% rename from admin/public/site.webmanifest.json rename to apps/admin/public/site.webmanifest.json diff --git a/admin/styles/globals.css b/apps/admin/styles/globals.css similarity index 100% rename from admin/styles/globals.css rename to apps/admin/styles/globals.css diff --git a/admin/tailwind.config.js b/apps/admin/tailwind.config.js similarity index 100% rename from admin/tailwind.config.js rename to apps/admin/tailwind.config.js diff --git a/admin/tsconfig.json b/apps/admin/tsconfig.json similarity index 100% rename from admin/tsconfig.json rename to apps/admin/tsconfig.json diff --git a/live/.env.example b/apps/live/.env.example similarity index 100% rename from live/.env.example rename to apps/live/.env.example diff --git a/live/.eslintignore b/apps/live/.eslintignore similarity index 100% rename from live/.eslintignore rename to apps/live/.eslintignore diff --git a/live/.eslintrc.json b/apps/live/.eslintrc.json similarity index 100% rename from live/.eslintrc.json rename to apps/live/.eslintrc.json diff --git a/live/.prettierignore b/apps/live/.prettierignore similarity index 100% rename from live/.prettierignore rename to apps/live/.prettierignore diff --git a/live/.prettierrc b/apps/live/.prettierrc similarity index 100% rename from live/.prettierrc rename to apps/live/.prettierrc diff --git a/live/Dockerfile.dev b/apps/live/Dockerfile.dev similarity index 100% rename from live/Dockerfile.dev rename to apps/live/Dockerfile.dev diff --git a/live/Dockerfile.live b/apps/live/Dockerfile.live similarity index 100% rename from live/Dockerfile.live rename to apps/live/Dockerfile.live diff --git a/live/package.json b/apps/live/package.json similarity index 100% rename from live/package.json rename to apps/live/package.json diff --git a/live/src/ce/lib/fetch-document.ts b/apps/live/src/ce/lib/fetch-document.ts similarity index 100% rename from live/src/ce/lib/fetch-document.ts rename to apps/live/src/ce/lib/fetch-document.ts diff --git a/live/src/ce/lib/update-document.ts b/apps/live/src/ce/lib/update-document.ts similarity index 100% rename from live/src/ce/lib/update-document.ts rename to apps/live/src/ce/lib/update-document.ts diff --git a/live/src/ce/types/common.d.ts b/apps/live/src/ce/types/common.d.ts similarity index 100% rename from live/src/ce/types/common.d.ts rename to apps/live/src/ce/types/common.d.ts diff --git a/live/src/core/extensions/index.ts b/apps/live/src/core/extensions/index.ts similarity index 100% rename from live/src/core/extensions/index.ts rename to apps/live/src/core/extensions/index.ts diff --git a/live/src/core/helpers/convert-document.ts b/apps/live/src/core/helpers/convert-document.ts similarity index 100% rename from live/src/core/helpers/convert-document.ts rename to apps/live/src/core/helpers/convert-document.ts diff --git a/live/src/core/helpers/error-handler.ts b/apps/live/src/core/helpers/error-handler.ts similarity index 100% rename from live/src/core/helpers/error-handler.ts rename to apps/live/src/core/helpers/error-handler.ts diff --git a/live/src/core/helpers/logger.ts b/apps/live/src/core/helpers/logger.ts similarity index 100% rename from live/src/core/helpers/logger.ts rename to apps/live/src/core/helpers/logger.ts diff --git a/live/src/core/helpers/page.ts b/apps/live/src/core/helpers/page.ts similarity index 100% rename from live/src/core/helpers/page.ts rename to apps/live/src/core/helpers/page.ts diff --git a/live/src/core/hocuspocus-server.ts b/apps/live/src/core/hocuspocus-server.ts similarity index 100% rename from live/src/core/hocuspocus-server.ts rename to apps/live/src/core/hocuspocus-server.ts diff --git a/live/src/core/lib/authentication.ts b/apps/live/src/core/lib/authentication.ts similarity index 100% rename from live/src/core/lib/authentication.ts rename to apps/live/src/core/lib/authentication.ts diff --git a/live/src/core/lib/page.ts b/apps/live/src/core/lib/page.ts similarity index 100% rename from live/src/core/lib/page.ts rename to apps/live/src/core/lib/page.ts diff --git a/live/src/core/lib/utils/redis-url.ts b/apps/live/src/core/lib/utils/redis-url.ts similarity index 100% rename from live/src/core/lib/utils/redis-url.ts rename to apps/live/src/core/lib/utils/redis-url.ts diff --git a/live/src/core/services/api.service.ts b/apps/live/src/core/services/api.service.ts similarity index 100% rename from live/src/core/services/api.service.ts rename to apps/live/src/core/services/api.service.ts diff --git a/live/src/core/services/page.service.ts b/apps/live/src/core/services/page.service.ts similarity index 100% rename from live/src/core/services/page.service.ts rename to apps/live/src/core/services/page.service.ts diff --git a/live/src/core/services/user.service.ts b/apps/live/src/core/services/user.service.ts similarity index 100% rename from live/src/core/services/user.service.ts rename to apps/live/src/core/services/user.service.ts diff --git a/live/src/core/types/common.d.ts b/apps/live/src/core/types/common.d.ts similarity index 100% rename from live/src/core/types/common.d.ts rename to apps/live/src/core/types/common.d.ts diff --git a/live/src/ee/lib/fetch-document.ts b/apps/live/src/ee/lib/fetch-document.ts similarity index 100% rename from live/src/ee/lib/fetch-document.ts rename to apps/live/src/ee/lib/fetch-document.ts diff --git a/live/src/ee/lib/update-document.ts b/apps/live/src/ee/lib/update-document.ts similarity index 100% rename from live/src/ee/lib/update-document.ts rename to apps/live/src/ee/lib/update-document.ts diff --git a/live/src/ee/types/common.d.ts b/apps/live/src/ee/types/common.d.ts similarity index 100% rename from live/src/ee/types/common.d.ts rename to apps/live/src/ee/types/common.d.ts diff --git a/live/src/server.ts b/apps/live/src/server.ts similarity index 100% rename from live/src/server.ts rename to apps/live/src/server.ts diff --git a/live/tsconfig.json b/apps/live/tsconfig.json similarity index 100% rename from live/tsconfig.json rename to apps/live/tsconfig.json diff --git a/live/tsup.config.ts b/apps/live/tsup.config.ts similarity index 100% rename from live/tsup.config.ts rename to apps/live/tsup.config.ts diff --git a/apiserver/.coveragerc b/apps/server/.coveragerc similarity index 100% rename from apiserver/.coveragerc rename to apps/server/.coveragerc diff --git a/apiserver/.env.example b/apps/server/.env.example similarity index 100% rename from apiserver/.env.example rename to apps/server/.env.example diff --git a/apiserver/Dockerfile.api b/apps/server/Dockerfile.api similarity index 100% rename from apiserver/Dockerfile.api rename to apps/server/Dockerfile.api diff --git a/apiserver/Dockerfile.dev b/apps/server/Dockerfile.dev similarity index 100% rename from apiserver/Dockerfile.dev rename to apps/server/Dockerfile.dev diff --git a/apiserver/Procfile b/apps/server/Procfile similarity index 100% rename from apiserver/Procfile rename to apps/server/Procfile diff --git a/apiserver/back_migration.py b/apps/server/back_migration.py similarity index 100% rename from apiserver/back_migration.py rename to apps/server/back_migration.py diff --git a/apiserver/bin/docker-entrypoint-api-local.sh b/apps/server/bin/docker-entrypoint-api-local.sh similarity index 100% rename from apiserver/bin/docker-entrypoint-api-local.sh rename to apps/server/bin/docker-entrypoint-api-local.sh diff --git a/apiserver/bin/docker-entrypoint-api.sh b/apps/server/bin/docker-entrypoint-api.sh similarity index 100% rename from apiserver/bin/docker-entrypoint-api.sh rename to apps/server/bin/docker-entrypoint-api.sh diff --git a/apiserver/bin/docker-entrypoint-beat.sh b/apps/server/bin/docker-entrypoint-beat.sh similarity index 100% rename from apiserver/bin/docker-entrypoint-beat.sh rename to apps/server/bin/docker-entrypoint-beat.sh diff --git a/apiserver/bin/docker-entrypoint-migrator.sh b/apps/server/bin/docker-entrypoint-migrator.sh similarity index 100% rename from apiserver/bin/docker-entrypoint-migrator.sh rename to apps/server/bin/docker-entrypoint-migrator.sh diff --git a/apiserver/bin/docker-entrypoint-worker.sh b/apps/server/bin/docker-entrypoint-worker.sh similarity index 100% rename from apiserver/bin/docker-entrypoint-worker.sh rename to apps/server/bin/docker-entrypoint-worker.sh diff --git a/apiserver/manage.py b/apps/server/manage.py similarity index 100% rename from apiserver/manage.py rename to apps/server/manage.py diff --git a/apiserver/package.json b/apps/server/package.json similarity index 100% rename from apiserver/package.json rename to apps/server/package.json diff --git a/apiserver/plane/__init__.py b/apps/server/plane/__init__.py similarity index 100% rename from apiserver/plane/__init__.py rename to apps/server/plane/__init__.py diff --git a/apiserver/plane/analytics/__init__.py b/apps/server/plane/analytics/__init__.py similarity index 100% rename from apiserver/plane/analytics/__init__.py rename to apps/server/plane/analytics/__init__.py diff --git a/apiserver/plane/analytics/apps.py b/apps/server/plane/analytics/apps.py similarity index 100% rename from apiserver/plane/analytics/apps.py rename to apps/server/plane/analytics/apps.py diff --git a/apiserver/plane/api/__init__.py b/apps/server/plane/api/__init__.py similarity index 100% rename from apiserver/plane/api/__init__.py rename to apps/server/plane/api/__init__.py diff --git a/apiserver/plane/api/apps.py b/apps/server/plane/api/apps.py similarity index 100% rename from apiserver/plane/api/apps.py rename to apps/server/plane/api/apps.py diff --git a/apiserver/plane/api/middleware/__init__.py b/apps/server/plane/api/middleware/__init__.py similarity index 100% rename from apiserver/plane/api/middleware/__init__.py rename to apps/server/plane/api/middleware/__init__.py diff --git a/apiserver/plane/api/middleware/api_authentication.py b/apps/server/plane/api/middleware/api_authentication.py similarity index 100% rename from apiserver/plane/api/middleware/api_authentication.py rename to apps/server/plane/api/middleware/api_authentication.py diff --git a/apiserver/plane/api/rate_limit.py b/apps/server/plane/api/rate_limit.py similarity index 100% rename from apiserver/plane/api/rate_limit.py rename to apps/server/plane/api/rate_limit.py diff --git a/apiserver/plane/api/serializers/__init__.py b/apps/server/plane/api/serializers/__init__.py similarity index 100% rename from apiserver/plane/api/serializers/__init__.py rename to apps/server/plane/api/serializers/__init__.py diff --git a/apiserver/plane/api/serializers/base.py b/apps/server/plane/api/serializers/base.py similarity index 100% rename from apiserver/plane/api/serializers/base.py rename to apps/server/plane/api/serializers/base.py diff --git a/apiserver/plane/api/serializers/cycle.py b/apps/server/plane/api/serializers/cycle.py similarity index 100% rename from apiserver/plane/api/serializers/cycle.py rename to apps/server/plane/api/serializers/cycle.py diff --git a/apiserver/plane/api/serializers/estimate.py b/apps/server/plane/api/serializers/estimate.py similarity index 100% rename from apiserver/plane/api/serializers/estimate.py rename to apps/server/plane/api/serializers/estimate.py diff --git a/apiserver/plane/api/serializers/intake.py b/apps/server/plane/api/serializers/intake.py similarity index 100% rename from apiserver/plane/api/serializers/intake.py rename to apps/server/plane/api/serializers/intake.py diff --git a/apiserver/plane/api/serializers/issue.py b/apps/server/plane/api/serializers/issue.py similarity index 100% rename from apiserver/plane/api/serializers/issue.py rename to apps/server/plane/api/serializers/issue.py diff --git a/apiserver/plane/api/serializers/module.py b/apps/server/plane/api/serializers/module.py similarity index 100% rename from apiserver/plane/api/serializers/module.py rename to apps/server/plane/api/serializers/module.py diff --git a/apiserver/plane/api/serializers/project.py b/apps/server/plane/api/serializers/project.py similarity index 100% rename from apiserver/plane/api/serializers/project.py rename to apps/server/plane/api/serializers/project.py diff --git a/apiserver/plane/api/serializers/state.py b/apps/server/plane/api/serializers/state.py similarity index 100% rename from apiserver/plane/api/serializers/state.py rename to apps/server/plane/api/serializers/state.py diff --git a/apiserver/plane/api/serializers/user.py b/apps/server/plane/api/serializers/user.py similarity index 100% rename from apiserver/plane/api/serializers/user.py rename to apps/server/plane/api/serializers/user.py diff --git a/apiserver/plane/api/serializers/workspace.py b/apps/server/plane/api/serializers/workspace.py similarity index 100% rename from apiserver/plane/api/serializers/workspace.py rename to apps/server/plane/api/serializers/workspace.py diff --git a/apiserver/plane/api/urls/__init__.py b/apps/server/plane/api/urls/__init__.py similarity index 100% rename from apiserver/plane/api/urls/__init__.py rename to apps/server/plane/api/urls/__init__.py diff --git a/apiserver/plane/api/urls/cycle.py b/apps/server/plane/api/urls/cycle.py similarity index 100% rename from apiserver/plane/api/urls/cycle.py rename to apps/server/plane/api/urls/cycle.py diff --git a/apiserver/plane/api/urls/intake.py b/apps/server/plane/api/urls/intake.py similarity index 100% rename from apiserver/plane/api/urls/intake.py rename to apps/server/plane/api/urls/intake.py diff --git a/apiserver/plane/api/urls/issue.py b/apps/server/plane/api/urls/issue.py similarity index 100% rename from apiserver/plane/api/urls/issue.py rename to apps/server/plane/api/urls/issue.py diff --git a/apiserver/plane/api/urls/member.py b/apps/server/plane/api/urls/member.py similarity index 100% rename from apiserver/plane/api/urls/member.py rename to apps/server/plane/api/urls/member.py diff --git a/apiserver/plane/api/urls/module.py b/apps/server/plane/api/urls/module.py similarity index 100% rename from apiserver/plane/api/urls/module.py rename to apps/server/plane/api/urls/module.py diff --git a/apiserver/plane/api/urls/project.py b/apps/server/plane/api/urls/project.py similarity index 100% rename from apiserver/plane/api/urls/project.py rename to apps/server/plane/api/urls/project.py diff --git a/apiserver/plane/api/urls/state.py b/apps/server/plane/api/urls/state.py similarity index 100% rename from apiserver/plane/api/urls/state.py rename to apps/server/plane/api/urls/state.py diff --git a/apiserver/plane/api/views/__init__.py b/apps/server/plane/api/views/__init__.py similarity index 100% rename from apiserver/plane/api/views/__init__.py rename to apps/server/plane/api/views/__init__.py diff --git a/apiserver/plane/api/views/base.py b/apps/server/plane/api/views/base.py similarity index 100% rename from apiserver/plane/api/views/base.py rename to apps/server/plane/api/views/base.py diff --git a/apiserver/plane/api/views/cycle.py b/apps/server/plane/api/views/cycle.py similarity index 100% rename from apiserver/plane/api/views/cycle.py rename to apps/server/plane/api/views/cycle.py diff --git a/apiserver/plane/api/views/intake.py b/apps/server/plane/api/views/intake.py similarity index 100% rename from apiserver/plane/api/views/intake.py rename to apps/server/plane/api/views/intake.py diff --git a/apiserver/plane/api/views/issue.py b/apps/server/plane/api/views/issue.py similarity index 100% rename from apiserver/plane/api/views/issue.py rename to apps/server/plane/api/views/issue.py diff --git a/apiserver/plane/api/views/member.py b/apps/server/plane/api/views/member.py similarity index 100% rename from apiserver/plane/api/views/member.py rename to apps/server/plane/api/views/member.py diff --git a/apiserver/plane/api/views/module.py b/apps/server/plane/api/views/module.py similarity index 100% rename from apiserver/plane/api/views/module.py rename to apps/server/plane/api/views/module.py diff --git a/apiserver/plane/api/views/project.py b/apps/server/plane/api/views/project.py similarity index 100% rename from apiserver/plane/api/views/project.py rename to apps/server/plane/api/views/project.py diff --git a/apiserver/plane/api/views/state.py b/apps/server/plane/api/views/state.py similarity index 100% rename from apiserver/plane/api/views/state.py rename to apps/server/plane/api/views/state.py diff --git a/apiserver/plane/app/__init__.py b/apps/server/plane/app/__init__.py similarity index 100% rename from apiserver/plane/app/__init__.py rename to apps/server/plane/app/__init__.py diff --git a/apiserver/plane/app/apps.py b/apps/server/plane/app/apps.py similarity index 100% rename from apiserver/plane/app/apps.py rename to apps/server/plane/app/apps.py diff --git a/apiserver/plane/app/middleware/__init__.py b/apps/server/plane/app/middleware/__init__.py similarity index 100% rename from apiserver/plane/app/middleware/__init__.py rename to apps/server/plane/app/middleware/__init__.py diff --git a/apiserver/plane/app/middleware/api_authentication.py b/apps/server/plane/app/middleware/api_authentication.py similarity index 100% rename from apiserver/plane/app/middleware/api_authentication.py rename to apps/server/plane/app/middleware/api_authentication.py diff --git a/apiserver/plane/app/permissions/__init__.py b/apps/server/plane/app/permissions/__init__.py similarity index 100% rename from apiserver/plane/app/permissions/__init__.py rename to apps/server/plane/app/permissions/__init__.py diff --git a/apiserver/plane/app/permissions/base.py b/apps/server/plane/app/permissions/base.py similarity index 100% rename from apiserver/plane/app/permissions/base.py rename to apps/server/plane/app/permissions/base.py diff --git a/apiserver/plane/app/permissions/project.py b/apps/server/plane/app/permissions/project.py similarity index 100% rename from apiserver/plane/app/permissions/project.py rename to apps/server/plane/app/permissions/project.py diff --git a/apiserver/plane/app/permissions/workspace.py b/apps/server/plane/app/permissions/workspace.py similarity index 100% rename from apiserver/plane/app/permissions/workspace.py rename to apps/server/plane/app/permissions/workspace.py diff --git a/apiserver/plane/app/serializers/__init__.py b/apps/server/plane/app/serializers/__init__.py similarity index 100% rename from apiserver/plane/app/serializers/__init__.py rename to apps/server/plane/app/serializers/__init__.py diff --git a/apiserver/plane/app/serializers/analytic.py b/apps/server/plane/app/serializers/analytic.py similarity index 100% rename from apiserver/plane/app/serializers/analytic.py rename to apps/server/plane/app/serializers/analytic.py diff --git a/apiserver/plane/app/serializers/api.py b/apps/server/plane/app/serializers/api.py similarity index 100% rename from apiserver/plane/app/serializers/api.py rename to apps/server/plane/app/serializers/api.py diff --git a/apiserver/plane/app/serializers/asset.py b/apps/server/plane/app/serializers/asset.py similarity index 100% rename from apiserver/plane/app/serializers/asset.py rename to apps/server/plane/app/serializers/asset.py diff --git a/apiserver/plane/app/serializers/base.py b/apps/server/plane/app/serializers/base.py similarity index 100% rename from apiserver/plane/app/serializers/base.py rename to apps/server/plane/app/serializers/base.py diff --git a/apiserver/plane/app/serializers/cycle.py b/apps/server/plane/app/serializers/cycle.py similarity index 100% rename from apiserver/plane/app/serializers/cycle.py rename to apps/server/plane/app/serializers/cycle.py diff --git a/apiserver/plane/app/serializers/draft.py b/apps/server/plane/app/serializers/draft.py similarity index 100% rename from apiserver/plane/app/serializers/draft.py rename to apps/server/plane/app/serializers/draft.py diff --git a/apiserver/plane/app/serializers/estimate.py b/apps/server/plane/app/serializers/estimate.py similarity index 100% rename from apiserver/plane/app/serializers/estimate.py rename to apps/server/plane/app/serializers/estimate.py diff --git a/apiserver/plane/app/serializers/exporter.py b/apps/server/plane/app/serializers/exporter.py similarity index 100% rename from apiserver/plane/app/serializers/exporter.py rename to apps/server/plane/app/serializers/exporter.py diff --git a/apiserver/plane/app/serializers/favorite.py b/apps/server/plane/app/serializers/favorite.py similarity index 100% rename from apiserver/plane/app/serializers/favorite.py rename to apps/server/plane/app/serializers/favorite.py diff --git a/apiserver/plane/app/serializers/importer.py b/apps/server/plane/app/serializers/importer.py similarity index 100% rename from apiserver/plane/app/serializers/importer.py rename to apps/server/plane/app/serializers/importer.py diff --git a/apiserver/plane/app/serializers/intake.py b/apps/server/plane/app/serializers/intake.py similarity index 100% rename from apiserver/plane/app/serializers/intake.py rename to apps/server/plane/app/serializers/intake.py diff --git a/apiserver/plane/app/serializers/issue.py b/apps/server/plane/app/serializers/issue.py similarity index 100% rename from apiserver/plane/app/serializers/issue.py rename to apps/server/plane/app/serializers/issue.py diff --git a/apiserver/plane/app/serializers/module.py b/apps/server/plane/app/serializers/module.py similarity index 100% rename from apiserver/plane/app/serializers/module.py rename to apps/server/plane/app/serializers/module.py diff --git a/apiserver/plane/app/serializers/notification.py b/apps/server/plane/app/serializers/notification.py similarity index 100% rename from apiserver/plane/app/serializers/notification.py rename to apps/server/plane/app/serializers/notification.py diff --git a/apiserver/plane/app/serializers/page.py b/apps/server/plane/app/serializers/page.py similarity index 100% rename from apiserver/plane/app/serializers/page.py rename to apps/server/plane/app/serializers/page.py diff --git a/apiserver/plane/app/serializers/project.py b/apps/server/plane/app/serializers/project.py similarity index 100% rename from apiserver/plane/app/serializers/project.py rename to apps/server/plane/app/serializers/project.py diff --git a/apiserver/plane/app/serializers/state.py b/apps/server/plane/app/serializers/state.py similarity index 100% rename from apiserver/plane/app/serializers/state.py rename to apps/server/plane/app/serializers/state.py diff --git a/apiserver/plane/app/serializers/user.py b/apps/server/plane/app/serializers/user.py similarity index 100% rename from apiserver/plane/app/serializers/user.py rename to apps/server/plane/app/serializers/user.py diff --git a/apiserver/plane/app/serializers/view.py b/apps/server/plane/app/serializers/view.py similarity index 100% rename from apiserver/plane/app/serializers/view.py rename to apps/server/plane/app/serializers/view.py diff --git a/apiserver/plane/app/serializers/webhook.py b/apps/server/plane/app/serializers/webhook.py similarity index 100% rename from apiserver/plane/app/serializers/webhook.py rename to apps/server/plane/app/serializers/webhook.py diff --git a/apiserver/plane/app/serializers/workspace.py b/apps/server/plane/app/serializers/workspace.py similarity index 100% rename from apiserver/plane/app/serializers/workspace.py rename to apps/server/plane/app/serializers/workspace.py diff --git a/apiserver/plane/app/urls/__init__.py b/apps/server/plane/app/urls/__init__.py similarity index 100% rename from apiserver/plane/app/urls/__init__.py rename to apps/server/plane/app/urls/__init__.py diff --git a/apiserver/plane/app/urls/analytic.py b/apps/server/plane/app/urls/analytic.py similarity index 100% rename from apiserver/plane/app/urls/analytic.py rename to apps/server/plane/app/urls/analytic.py diff --git a/apiserver/plane/app/urls/api.py b/apps/server/plane/app/urls/api.py similarity index 100% rename from apiserver/plane/app/urls/api.py rename to apps/server/plane/app/urls/api.py diff --git a/apiserver/plane/app/urls/asset.py b/apps/server/plane/app/urls/asset.py similarity index 100% rename from apiserver/plane/app/urls/asset.py rename to apps/server/plane/app/urls/asset.py diff --git a/apiserver/plane/app/urls/cycle.py b/apps/server/plane/app/urls/cycle.py similarity index 100% rename from apiserver/plane/app/urls/cycle.py rename to apps/server/plane/app/urls/cycle.py diff --git a/apiserver/plane/app/urls/estimate.py b/apps/server/plane/app/urls/estimate.py similarity index 100% rename from apiserver/plane/app/urls/estimate.py rename to apps/server/plane/app/urls/estimate.py diff --git a/apiserver/plane/app/urls/external.py b/apps/server/plane/app/urls/external.py similarity index 100% rename from apiserver/plane/app/urls/external.py rename to apps/server/plane/app/urls/external.py diff --git a/apiserver/plane/app/urls/intake.py b/apps/server/plane/app/urls/intake.py similarity index 100% rename from apiserver/plane/app/urls/intake.py rename to apps/server/plane/app/urls/intake.py diff --git a/apiserver/plane/app/urls/issue.py b/apps/server/plane/app/urls/issue.py similarity index 100% rename from apiserver/plane/app/urls/issue.py rename to apps/server/plane/app/urls/issue.py diff --git a/apiserver/plane/app/urls/module.py b/apps/server/plane/app/urls/module.py similarity index 100% rename from apiserver/plane/app/urls/module.py rename to apps/server/plane/app/urls/module.py diff --git a/apiserver/plane/app/urls/notification.py b/apps/server/plane/app/urls/notification.py similarity index 100% rename from apiserver/plane/app/urls/notification.py rename to apps/server/plane/app/urls/notification.py diff --git a/apiserver/plane/app/urls/page.py b/apps/server/plane/app/urls/page.py similarity index 100% rename from apiserver/plane/app/urls/page.py rename to apps/server/plane/app/urls/page.py diff --git a/apiserver/plane/app/urls/project.py b/apps/server/plane/app/urls/project.py similarity index 100% rename from apiserver/plane/app/urls/project.py rename to apps/server/plane/app/urls/project.py diff --git a/apiserver/plane/app/urls/search.py b/apps/server/plane/app/urls/search.py similarity index 100% rename from apiserver/plane/app/urls/search.py rename to apps/server/plane/app/urls/search.py diff --git a/apiserver/plane/app/urls/state.py b/apps/server/plane/app/urls/state.py similarity index 100% rename from apiserver/plane/app/urls/state.py rename to apps/server/plane/app/urls/state.py diff --git a/apiserver/plane/app/urls/timezone.py b/apps/server/plane/app/urls/timezone.py similarity index 100% rename from apiserver/plane/app/urls/timezone.py rename to apps/server/plane/app/urls/timezone.py diff --git a/apiserver/plane/app/urls/user.py b/apps/server/plane/app/urls/user.py similarity index 100% rename from apiserver/plane/app/urls/user.py rename to apps/server/plane/app/urls/user.py diff --git a/apiserver/plane/app/urls/views.py b/apps/server/plane/app/urls/views.py similarity index 100% rename from apiserver/plane/app/urls/views.py rename to apps/server/plane/app/urls/views.py diff --git a/apiserver/plane/app/urls/webhook.py b/apps/server/plane/app/urls/webhook.py similarity index 100% rename from apiserver/plane/app/urls/webhook.py rename to apps/server/plane/app/urls/webhook.py diff --git a/apiserver/plane/app/urls/workspace.py b/apps/server/plane/app/urls/workspace.py similarity index 100% rename from apiserver/plane/app/urls/workspace.py rename to apps/server/plane/app/urls/workspace.py diff --git a/apiserver/plane/app/views/__init__.py b/apps/server/plane/app/views/__init__.py similarity index 100% rename from apiserver/plane/app/views/__init__.py rename to apps/server/plane/app/views/__init__.py diff --git a/apiserver/plane/app/views/analytic/advance.py b/apps/server/plane/app/views/analytic/advance.py similarity index 100% rename from apiserver/plane/app/views/analytic/advance.py rename to apps/server/plane/app/views/analytic/advance.py diff --git a/apiserver/plane/app/views/analytic/base.py b/apps/server/plane/app/views/analytic/base.py similarity index 100% rename from apiserver/plane/app/views/analytic/base.py rename to apps/server/plane/app/views/analytic/base.py diff --git a/apiserver/plane/app/views/analytic/project_analytics.py b/apps/server/plane/app/views/analytic/project_analytics.py similarity index 100% rename from apiserver/plane/app/views/analytic/project_analytics.py rename to apps/server/plane/app/views/analytic/project_analytics.py diff --git a/apiserver/plane/app/views/api.py b/apps/server/plane/app/views/api.py similarity index 100% rename from apiserver/plane/app/views/api.py rename to apps/server/plane/app/views/api.py diff --git a/apiserver/plane/app/views/asset/base.py b/apps/server/plane/app/views/asset/base.py similarity index 100% rename from apiserver/plane/app/views/asset/base.py rename to apps/server/plane/app/views/asset/base.py diff --git a/apiserver/plane/app/views/asset/v2.py b/apps/server/plane/app/views/asset/v2.py similarity index 100% rename from apiserver/plane/app/views/asset/v2.py rename to apps/server/plane/app/views/asset/v2.py diff --git a/apiserver/plane/app/views/base.py b/apps/server/plane/app/views/base.py similarity index 100% rename from apiserver/plane/app/views/base.py rename to apps/server/plane/app/views/base.py diff --git a/apiserver/plane/app/views/cycle/archive.py b/apps/server/plane/app/views/cycle/archive.py similarity index 100% rename from apiserver/plane/app/views/cycle/archive.py rename to apps/server/plane/app/views/cycle/archive.py diff --git a/apiserver/plane/app/views/cycle/base.py b/apps/server/plane/app/views/cycle/base.py similarity index 100% rename from apiserver/plane/app/views/cycle/base.py rename to apps/server/plane/app/views/cycle/base.py diff --git a/apiserver/plane/app/views/cycle/issue.py b/apps/server/plane/app/views/cycle/issue.py similarity index 100% rename from apiserver/plane/app/views/cycle/issue.py rename to apps/server/plane/app/views/cycle/issue.py diff --git a/apiserver/plane/app/views/error_404.py b/apps/server/plane/app/views/error_404.py similarity index 100% rename from apiserver/plane/app/views/error_404.py rename to apps/server/plane/app/views/error_404.py diff --git a/apiserver/plane/app/views/estimate/base.py b/apps/server/plane/app/views/estimate/base.py similarity index 100% rename from apiserver/plane/app/views/estimate/base.py rename to apps/server/plane/app/views/estimate/base.py diff --git a/apiserver/plane/app/views/exporter/base.py b/apps/server/plane/app/views/exporter/base.py similarity index 100% rename from apiserver/plane/app/views/exporter/base.py rename to apps/server/plane/app/views/exporter/base.py diff --git a/apiserver/plane/app/views/external/base.py b/apps/server/plane/app/views/external/base.py similarity index 100% rename from apiserver/plane/app/views/external/base.py rename to apps/server/plane/app/views/external/base.py diff --git a/apiserver/plane/app/views/intake/base.py b/apps/server/plane/app/views/intake/base.py similarity index 100% rename from apiserver/plane/app/views/intake/base.py rename to apps/server/plane/app/views/intake/base.py diff --git a/apiserver/plane/app/views/issue/activity.py b/apps/server/plane/app/views/issue/activity.py similarity index 100% rename from apiserver/plane/app/views/issue/activity.py rename to apps/server/plane/app/views/issue/activity.py diff --git a/apiserver/plane/app/views/issue/archive.py b/apps/server/plane/app/views/issue/archive.py similarity index 100% rename from apiserver/plane/app/views/issue/archive.py rename to apps/server/plane/app/views/issue/archive.py diff --git a/apiserver/plane/app/views/issue/attachment.py b/apps/server/plane/app/views/issue/attachment.py similarity index 100% rename from apiserver/plane/app/views/issue/attachment.py rename to apps/server/plane/app/views/issue/attachment.py diff --git a/apiserver/plane/app/views/issue/base.py b/apps/server/plane/app/views/issue/base.py similarity index 100% rename from apiserver/plane/app/views/issue/base.py rename to apps/server/plane/app/views/issue/base.py diff --git a/apiserver/plane/app/views/issue/comment.py b/apps/server/plane/app/views/issue/comment.py similarity index 100% rename from apiserver/plane/app/views/issue/comment.py rename to apps/server/plane/app/views/issue/comment.py diff --git a/apiserver/plane/app/views/issue/label.py b/apps/server/plane/app/views/issue/label.py similarity index 100% rename from apiserver/plane/app/views/issue/label.py rename to apps/server/plane/app/views/issue/label.py diff --git a/apiserver/plane/app/views/issue/link.py b/apps/server/plane/app/views/issue/link.py similarity index 100% rename from apiserver/plane/app/views/issue/link.py rename to apps/server/plane/app/views/issue/link.py diff --git a/apiserver/plane/app/views/issue/reaction.py b/apps/server/plane/app/views/issue/reaction.py similarity index 100% rename from apiserver/plane/app/views/issue/reaction.py rename to apps/server/plane/app/views/issue/reaction.py diff --git a/apiserver/plane/app/views/issue/relation.py b/apps/server/plane/app/views/issue/relation.py similarity index 100% rename from apiserver/plane/app/views/issue/relation.py rename to apps/server/plane/app/views/issue/relation.py diff --git a/apiserver/plane/app/views/issue/sub_issue.py b/apps/server/plane/app/views/issue/sub_issue.py similarity index 100% rename from apiserver/plane/app/views/issue/sub_issue.py rename to apps/server/plane/app/views/issue/sub_issue.py diff --git a/apiserver/plane/app/views/issue/subscriber.py b/apps/server/plane/app/views/issue/subscriber.py similarity index 100% rename from apiserver/plane/app/views/issue/subscriber.py rename to apps/server/plane/app/views/issue/subscriber.py diff --git a/apiserver/plane/app/views/issue/version.py b/apps/server/plane/app/views/issue/version.py similarity index 100% rename from apiserver/plane/app/views/issue/version.py rename to apps/server/plane/app/views/issue/version.py diff --git a/apiserver/plane/app/views/module/archive.py b/apps/server/plane/app/views/module/archive.py similarity index 100% rename from apiserver/plane/app/views/module/archive.py rename to apps/server/plane/app/views/module/archive.py diff --git a/apiserver/plane/app/views/module/base.py b/apps/server/plane/app/views/module/base.py similarity index 100% rename from apiserver/plane/app/views/module/base.py rename to apps/server/plane/app/views/module/base.py diff --git a/apiserver/plane/app/views/module/issue.py b/apps/server/plane/app/views/module/issue.py similarity index 100% rename from apiserver/plane/app/views/module/issue.py rename to apps/server/plane/app/views/module/issue.py diff --git a/apiserver/plane/app/views/notification/base.py b/apps/server/plane/app/views/notification/base.py similarity index 100% rename from apiserver/plane/app/views/notification/base.py rename to apps/server/plane/app/views/notification/base.py diff --git a/apiserver/plane/app/views/page/base.py b/apps/server/plane/app/views/page/base.py similarity index 100% rename from apiserver/plane/app/views/page/base.py rename to apps/server/plane/app/views/page/base.py diff --git a/apiserver/plane/app/views/page/version.py b/apps/server/plane/app/views/page/version.py similarity index 100% rename from apiserver/plane/app/views/page/version.py rename to apps/server/plane/app/views/page/version.py diff --git a/apiserver/plane/app/views/project/base.py b/apps/server/plane/app/views/project/base.py similarity index 100% rename from apiserver/plane/app/views/project/base.py rename to apps/server/plane/app/views/project/base.py diff --git a/apiserver/plane/app/views/project/invite.py b/apps/server/plane/app/views/project/invite.py similarity index 100% rename from apiserver/plane/app/views/project/invite.py rename to apps/server/plane/app/views/project/invite.py diff --git a/apiserver/plane/app/views/project/member.py b/apps/server/plane/app/views/project/member.py similarity index 100% rename from apiserver/plane/app/views/project/member.py rename to apps/server/plane/app/views/project/member.py diff --git a/apiserver/plane/app/views/search/base.py b/apps/server/plane/app/views/search/base.py similarity index 100% rename from apiserver/plane/app/views/search/base.py rename to apps/server/plane/app/views/search/base.py diff --git a/apiserver/plane/app/views/search/issue.py b/apps/server/plane/app/views/search/issue.py similarity index 100% rename from apiserver/plane/app/views/search/issue.py rename to apps/server/plane/app/views/search/issue.py diff --git a/apiserver/plane/app/views/state/base.py b/apps/server/plane/app/views/state/base.py similarity index 100% rename from apiserver/plane/app/views/state/base.py rename to apps/server/plane/app/views/state/base.py diff --git a/apiserver/plane/app/views/timezone/base.py b/apps/server/plane/app/views/timezone/base.py similarity index 100% rename from apiserver/plane/app/views/timezone/base.py rename to apps/server/plane/app/views/timezone/base.py diff --git a/apiserver/plane/app/views/user/base.py b/apps/server/plane/app/views/user/base.py similarity index 100% rename from apiserver/plane/app/views/user/base.py rename to apps/server/plane/app/views/user/base.py diff --git a/apiserver/plane/app/views/view/base.py b/apps/server/plane/app/views/view/base.py similarity index 100% rename from apiserver/plane/app/views/view/base.py rename to apps/server/plane/app/views/view/base.py diff --git a/apiserver/plane/app/views/webhook/base.py b/apps/server/plane/app/views/webhook/base.py similarity index 100% rename from apiserver/plane/app/views/webhook/base.py rename to apps/server/plane/app/views/webhook/base.py diff --git a/apiserver/plane/app/views/workspace/base.py b/apps/server/plane/app/views/workspace/base.py similarity index 100% rename from apiserver/plane/app/views/workspace/base.py rename to apps/server/plane/app/views/workspace/base.py diff --git a/apiserver/plane/app/views/workspace/cycle.py b/apps/server/plane/app/views/workspace/cycle.py similarity index 100% rename from apiserver/plane/app/views/workspace/cycle.py rename to apps/server/plane/app/views/workspace/cycle.py diff --git a/apiserver/plane/app/views/workspace/draft.py b/apps/server/plane/app/views/workspace/draft.py similarity index 100% rename from apiserver/plane/app/views/workspace/draft.py rename to apps/server/plane/app/views/workspace/draft.py diff --git a/apiserver/plane/app/views/workspace/estimate.py b/apps/server/plane/app/views/workspace/estimate.py similarity index 100% rename from apiserver/plane/app/views/workspace/estimate.py rename to apps/server/plane/app/views/workspace/estimate.py diff --git a/apiserver/plane/app/views/workspace/favorite.py b/apps/server/plane/app/views/workspace/favorite.py similarity index 100% rename from apiserver/plane/app/views/workspace/favorite.py rename to apps/server/plane/app/views/workspace/favorite.py diff --git a/apiserver/plane/app/views/workspace/home.py b/apps/server/plane/app/views/workspace/home.py similarity index 100% rename from apiserver/plane/app/views/workspace/home.py rename to apps/server/plane/app/views/workspace/home.py diff --git a/apiserver/plane/app/views/workspace/invite.py b/apps/server/plane/app/views/workspace/invite.py similarity index 100% rename from apiserver/plane/app/views/workspace/invite.py rename to apps/server/plane/app/views/workspace/invite.py diff --git a/apiserver/plane/app/views/workspace/label.py b/apps/server/plane/app/views/workspace/label.py similarity index 100% rename from apiserver/plane/app/views/workspace/label.py rename to apps/server/plane/app/views/workspace/label.py diff --git a/apiserver/plane/app/views/workspace/member.py b/apps/server/plane/app/views/workspace/member.py similarity index 100% rename from apiserver/plane/app/views/workspace/member.py rename to apps/server/plane/app/views/workspace/member.py diff --git a/apiserver/plane/app/views/workspace/module.py b/apps/server/plane/app/views/workspace/module.py similarity index 100% rename from apiserver/plane/app/views/workspace/module.py rename to apps/server/plane/app/views/workspace/module.py diff --git a/apiserver/plane/app/views/workspace/quick_link.py b/apps/server/plane/app/views/workspace/quick_link.py similarity index 100% rename from apiserver/plane/app/views/workspace/quick_link.py rename to apps/server/plane/app/views/workspace/quick_link.py diff --git a/apiserver/plane/app/views/workspace/recent_visit.py b/apps/server/plane/app/views/workspace/recent_visit.py similarity index 100% rename from apiserver/plane/app/views/workspace/recent_visit.py rename to apps/server/plane/app/views/workspace/recent_visit.py diff --git a/apiserver/plane/app/views/workspace/state.py b/apps/server/plane/app/views/workspace/state.py similarity index 100% rename from apiserver/plane/app/views/workspace/state.py rename to apps/server/plane/app/views/workspace/state.py diff --git a/apiserver/plane/app/views/workspace/sticky.py b/apps/server/plane/app/views/workspace/sticky.py similarity index 100% rename from apiserver/plane/app/views/workspace/sticky.py rename to apps/server/plane/app/views/workspace/sticky.py diff --git a/apiserver/plane/app/views/workspace/user.py b/apps/server/plane/app/views/workspace/user.py similarity index 100% rename from apiserver/plane/app/views/workspace/user.py rename to apps/server/plane/app/views/workspace/user.py diff --git a/apiserver/plane/app/views/workspace/user_preference.py b/apps/server/plane/app/views/workspace/user_preference.py similarity index 100% rename from apiserver/plane/app/views/workspace/user_preference.py rename to apps/server/plane/app/views/workspace/user_preference.py diff --git a/apiserver/plane/asgi.py b/apps/server/plane/asgi.py similarity index 100% rename from apiserver/plane/asgi.py rename to apps/server/plane/asgi.py diff --git a/apiserver/plane/authentication/__init__.py b/apps/server/plane/authentication/__init__.py similarity index 100% rename from apiserver/plane/authentication/__init__.py rename to apps/server/plane/authentication/__init__.py diff --git a/apiserver/plane/authentication/adapter/__init__.py b/apps/server/plane/authentication/adapter/__init__.py similarity index 100% rename from apiserver/plane/authentication/adapter/__init__.py rename to apps/server/plane/authentication/adapter/__init__.py diff --git a/apiserver/plane/authentication/adapter/base.py b/apps/server/plane/authentication/adapter/base.py similarity index 100% rename from apiserver/plane/authentication/adapter/base.py rename to apps/server/plane/authentication/adapter/base.py diff --git a/apiserver/plane/authentication/adapter/credential.py b/apps/server/plane/authentication/adapter/credential.py similarity index 100% rename from apiserver/plane/authentication/adapter/credential.py rename to apps/server/plane/authentication/adapter/credential.py diff --git a/apiserver/plane/authentication/adapter/error.py b/apps/server/plane/authentication/adapter/error.py similarity index 100% rename from apiserver/plane/authentication/adapter/error.py rename to apps/server/plane/authentication/adapter/error.py diff --git a/apiserver/plane/authentication/adapter/exception.py b/apps/server/plane/authentication/adapter/exception.py similarity index 100% rename from apiserver/plane/authentication/adapter/exception.py rename to apps/server/plane/authentication/adapter/exception.py diff --git a/apiserver/plane/authentication/adapter/oauth.py b/apps/server/plane/authentication/adapter/oauth.py similarity index 100% rename from apiserver/plane/authentication/adapter/oauth.py rename to apps/server/plane/authentication/adapter/oauth.py diff --git a/apiserver/plane/authentication/apps.py b/apps/server/plane/authentication/apps.py similarity index 100% rename from apiserver/plane/authentication/apps.py rename to apps/server/plane/authentication/apps.py diff --git a/apiserver/plane/authentication/middleware/__init__.py b/apps/server/plane/authentication/middleware/__init__.py similarity index 100% rename from apiserver/plane/authentication/middleware/__init__.py rename to apps/server/plane/authentication/middleware/__init__.py diff --git a/apiserver/plane/authentication/middleware/session.py b/apps/server/plane/authentication/middleware/session.py similarity index 100% rename from apiserver/plane/authentication/middleware/session.py rename to apps/server/plane/authentication/middleware/session.py diff --git a/apiserver/plane/authentication/provider/__init__.py b/apps/server/plane/authentication/provider/__init__.py similarity index 100% rename from apiserver/plane/authentication/provider/__init__.py rename to apps/server/plane/authentication/provider/__init__.py diff --git a/apiserver/plane/authentication/provider/credentials/__init__.py b/apps/server/plane/authentication/provider/credentials/__init__.py similarity index 100% rename from apiserver/plane/authentication/provider/credentials/__init__.py rename to apps/server/plane/authentication/provider/credentials/__init__.py diff --git a/apiserver/plane/authentication/provider/credentials/email.py b/apps/server/plane/authentication/provider/credentials/email.py similarity index 100% rename from apiserver/plane/authentication/provider/credentials/email.py rename to apps/server/plane/authentication/provider/credentials/email.py diff --git a/apiserver/plane/authentication/provider/credentials/magic_code.py b/apps/server/plane/authentication/provider/credentials/magic_code.py similarity index 100% rename from apiserver/plane/authentication/provider/credentials/magic_code.py rename to apps/server/plane/authentication/provider/credentials/magic_code.py diff --git a/apiserver/plane/authentication/provider/oauth/__init__.py b/apps/server/plane/authentication/provider/oauth/__init__.py similarity index 100% rename from apiserver/plane/authentication/provider/oauth/__init__.py rename to apps/server/plane/authentication/provider/oauth/__init__.py diff --git a/apiserver/plane/authentication/provider/oauth/github.py b/apps/server/plane/authentication/provider/oauth/github.py similarity index 100% rename from apiserver/plane/authentication/provider/oauth/github.py rename to apps/server/plane/authentication/provider/oauth/github.py diff --git a/apiserver/plane/authentication/provider/oauth/gitlab.py b/apps/server/plane/authentication/provider/oauth/gitlab.py similarity index 100% rename from apiserver/plane/authentication/provider/oauth/gitlab.py rename to apps/server/plane/authentication/provider/oauth/gitlab.py diff --git a/apiserver/plane/authentication/provider/oauth/google.py b/apps/server/plane/authentication/provider/oauth/google.py similarity index 100% rename from apiserver/plane/authentication/provider/oauth/google.py rename to apps/server/plane/authentication/provider/oauth/google.py diff --git a/apiserver/plane/authentication/rate_limit.py b/apps/server/plane/authentication/rate_limit.py similarity index 100% rename from apiserver/plane/authentication/rate_limit.py rename to apps/server/plane/authentication/rate_limit.py diff --git a/apiserver/plane/authentication/session.py b/apps/server/plane/authentication/session.py similarity index 100% rename from apiserver/plane/authentication/session.py rename to apps/server/plane/authentication/session.py diff --git a/apiserver/plane/authentication/urls.py b/apps/server/plane/authentication/urls.py similarity index 100% rename from apiserver/plane/authentication/urls.py rename to apps/server/plane/authentication/urls.py diff --git a/apiserver/plane/authentication/utils/host.py b/apps/server/plane/authentication/utils/host.py similarity index 100% rename from apiserver/plane/authentication/utils/host.py rename to apps/server/plane/authentication/utils/host.py diff --git a/apiserver/plane/authentication/utils/login.py b/apps/server/plane/authentication/utils/login.py similarity index 100% rename from apiserver/plane/authentication/utils/login.py rename to apps/server/plane/authentication/utils/login.py diff --git a/apiserver/plane/authentication/utils/redirection_path.py b/apps/server/plane/authentication/utils/redirection_path.py similarity index 100% rename from apiserver/plane/authentication/utils/redirection_path.py rename to apps/server/plane/authentication/utils/redirection_path.py diff --git a/apiserver/plane/authentication/utils/user_auth_workflow.py b/apps/server/plane/authentication/utils/user_auth_workflow.py similarity index 100% rename from apiserver/plane/authentication/utils/user_auth_workflow.py rename to apps/server/plane/authentication/utils/user_auth_workflow.py diff --git a/apiserver/plane/authentication/utils/workspace_project_join.py b/apps/server/plane/authentication/utils/workspace_project_join.py similarity index 100% rename from apiserver/plane/authentication/utils/workspace_project_join.py rename to apps/server/plane/authentication/utils/workspace_project_join.py diff --git a/apiserver/plane/authentication/views/__init__.py b/apps/server/plane/authentication/views/__init__.py similarity index 100% rename from apiserver/plane/authentication/views/__init__.py rename to apps/server/plane/authentication/views/__init__.py diff --git a/apiserver/plane/authentication/views/app/check.py b/apps/server/plane/authentication/views/app/check.py similarity index 100% rename from apiserver/plane/authentication/views/app/check.py rename to apps/server/plane/authentication/views/app/check.py diff --git a/apiserver/plane/authentication/views/app/email.py b/apps/server/plane/authentication/views/app/email.py similarity index 100% rename from apiserver/plane/authentication/views/app/email.py rename to apps/server/plane/authentication/views/app/email.py diff --git a/apiserver/plane/authentication/views/app/github.py b/apps/server/plane/authentication/views/app/github.py similarity index 100% rename from apiserver/plane/authentication/views/app/github.py rename to apps/server/plane/authentication/views/app/github.py diff --git a/apiserver/plane/authentication/views/app/gitlab.py b/apps/server/plane/authentication/views/app/gitlab.py similarity index 100% rename from apiserver/plane/authentication/views/app/gitlab.py rename to apps/server/plane/authentication/views/app/gitlab.py diff --git a/apiserver/plane/authentication/views/app/google.py b/apps/server/plane/authentication/views/app/google.py similarity index 100% rename from apiserver/plane/authentication/views/app/google.py rename to apps/server/plane/authentication/views/app/google.py diff --git a/apiserver/plane/authentication/views/app/magic.py b/apps/server/plane/authentication/views/app/magic.py similarity index 100% rename from apiserver/plane/authentication/views/app/magic.py rename to apps/server/plane/authentication/views/app/magic.py diff --git a/apiserver/plane/authentication/views/app/password_management.py b/apps/server/plane/authentication/views/app/password_management.py similarity index 100% rename from apiserver/plane/authentication/views/app/password_management.py rename to apps/server/plane/authentication/views/app/password_management.py diff --git a/apiserver/plane/authentication/views/app/signout.py b/apps/server/plane/authentication/views/app/signout.py similarity index 100% rename from apiserver/plane/authentication/views/app/signout.py rename to apps/server/plane/authentication/views/app/signout.py diff --git a/apiserver/plane/authentication/views/common.py b/apps/server/plane/authentication/views/common.py similarity index 100% rename from apiserver/plane/authentication/views/common.py rename to apps/server/plane/authentication/views/common.py diff --git a/apiserver/plane/authentication/views/space/check.py b/apps/server/plane/authentication/views/space/check.py similarity index 100% rename from apiserver/plane/authentication/views/space/check.py rename to apps/server/plane/authentication/views/space/check.py diff --git a/apiserver/plane/authentication/views/space/email.py b/apps/server/plane/authentication/views/space/email.py similarity index 100% rename from apiserver/plane/authentication/views/space/email.py rename to apps/server/plane/authentication/views/space/email.py diff --git a/apiserver/plane/authentication/views/space/github.py b/apps/server/plane/authentication/views/space/github.py similarity index 100% rename from apiserver/plane/authentication/views/space/github.py rename to apps/server/plane/authentication/views/space/github.py diff --git a/apiserver/plane/authentication/views/space/gitlab.py b/apps/server/plane/authentication/views/space/gitlab.py similarity index 100% rename from apiserver/plane/authentication/views/space/gitlab.py rename to apps/server/plane/authentication/views/space/gitlab.py diff --git a/apiserver/plane/authentication/views/space/google.py b/apps/server/plane/authentication/views/space/google.py similarity index 100% rename from apiserver/plane/authentication/views/space/google.py rename to apps/server/plane/authentication/views/space/google.py diff --git a/apiserver/plane/authentication/views/space/magic.py b/apps/server/plane/authentication/views/space/magic.py similarity index 100% rename from apiserver/plane/authentication/views/space/magic.py rename to apps/server/plane/authentication/views/space/magic.py diff --git a/apiserver/plane/authentication/views/space/password_management.py b/apps/server/plane/authentication/views/space/password_management.py similarity index 100% rename from apiserver/plane/authentication/views/space/password_management.py rename to apps/server/plane/authentication/views/space/password_management.py diff --git a/apiserver/plane/authentication/views/space/signout.py b/apps/server/plane/authentication/views/space/signout.py similarity index 100% rename from apiserver/plane/authentication/views/space/signout.py rename to apps/server/plane/authentication/views/space/signout.py diff --git a/apiserver/plane/bgtasks/__init__.py b/apps/server/plane/bgtasks/__init__.py similarity index 100% rename from apiserver/plane/bgtasks/__init__.py rename to apps/server/plane/bgtasks/__init__.py diff --git a/apiserver/plane/bgtasks/analytic_plot_export.py b/apps/server/plane/bgtasks/analytic_plot_export.py similarity index 100% rename from apiserver/plane/bgtasks/analytic_plot_export.py rename to apps/server/plane/bgtasks/analytic_plot_export.py diff --git a/apiserver/plane/bgtasks/api_logs_task.py b/apps/server/plane/bgtasks/api_logs_task.py similarity index 100% rename from apiserver/plane/bgtasks/api_logs_task.py rename to apps/server/plane/bgtasks/api_logs_task.py diff --git a/apiserver/plane/bgtasks/apps.py b/apps/server/plane/bgtasks/apps.py similarity index 100% rename from apiserver/plane/bgtasks/apps.py rename to apps/server/plane/bgtasks/apps.py diff --git a/apiserver/plane/bgtasks/copy_s3_object.py b/apps/server/plane/bgtasks/copy_s3_object.py similarity index 100% rename from apiserver/plane/bgtasks/copy_s3_object.py rename to apps/server/plane/bgtasks/copy_s3_object.py diff --git a/apiserver/plane/bgtasks/deletion_task.py b/apps/server/plane/bgtasks/deletion_task.py similarity index 100% rename from apiserver/plane/bgtasks/deletion_task.py rename to apps/server/plane/bgtasks/deletion_task.py diff --git a/apiserver/plane/bgtasks/dummy_data_task.py b/apps/server/plane/bgtasks/dummy_data_task.py similarity index 100% rename from apiserver/plane/bgtasks/dummy_data_task.py rename to apps/server/plane/bgtasks/dummy_data_task.py diff --git a/apiserver/plane/bgtasks/email_notification_task.py b/apps/server/plane/bgtasks/email_notification_task.py similarity index 100% rename from apiserver/plane/bgtasks/email_notification_task.py rename to apps/server/plane/bgtasks/email_notification_task.py diff --git a/apiserver/plane/bgtasks/event_tracking_task.py b/apps/server/plane/bgtasks/event_tracking_task.py similarity index 100% rename from apiserver/plane/bgtasks/event_tracking_task.py rename to apps/server/plane/bgtasks/event_tracking_task.py diff --git a/apiserver/plane/bgtasks/export_task.py b/apps/server/plane/bgtasks/export_task.py similarity index 100% rename from apiserver/plane/bgtasks/export_task.py rename to apps/server/plane/bgtasks/export_task.py diff --git a/apiserver/plane/bgtasks/exporter_expired_task.py b/apps/server/plane/bgtasks/exporter_expired_task.py similarity index 100% rename from apiserver/plane/bgtasks/exporter_expired_task.py rename to apps/server/plane/bgtasks/exporter_expired_task.py diff --git a/apiserver/plane/bgtasks/file_asset_task.py b/apps/server/plane/bgtasks/file_asset_task.py similarity index 100% rename from apiserver/plane/bgtasks/file_asset_task.py rename to apps/server/plane/bgtasks/file_asset_task.py diff --git a/apiserver/plane/bgtasks/forgot_password_task.py b/apps/server/plane/bgtasks/forgot_password_task.py similarity index 100% rename from apiserver/plane/bgtasks/forgot_password_task.py rename to apps/server/plane/bgtasks/forgot_password_task.py diff --git a/apiserver/plane/bgtasks/issue_activities_task.py b/apps/server/plane/bgtasks/issue_activities_task.py similarity index 100% rename from apiserver/plane/bgtasks/issue_activities_task.py rename to apps/server/plane/bgtasks/issue_activities_task.py diff --git a/apiserver/plane/bgtasks/issue_automation_task.py b/apps/server/plane/bgtasks/issue_automation_task.py similarity index 100% rename from apiserver/plane/bgtasks/issue_automation_task.py rename to apps/server/plane/bgtasks/issue_automation_task.py diff --git a/apiserver/plane/bgtasks/issue_description_version_sync.py b/apps/server/plane/bgtasks/issue_description_version_sync.py similarity index 100% rename from apiserver/plane/bgtasks/issue_description_version_sync.py rename to apps/server/plane/bgtasks/issue_description_version_sync.py diff --git a/apiserver/plane/bgtasks/issue_description_version_task.py b/apps/server/plane/bgtasks/issue_description_version_task.py similarity index 100% rename from apiserver/plane/bgtasks/issue_description_version_task.py rename to apps/server/plane/bgtasks/issue_description_version_task.py diff --git a/apiserver/plane/bgtasks/issue_version_sync.py b/apps/server/plane/bgtasks/issue_version_sync.py similarity index 100% rename from apiserver/plane/bgtasks/issue_version_sync.py rename to apps/server/plane/bgtasks/issue_version_sync.py diff --git a/apiserver/plane/bgtasks/magic_link_code_task.py b/apps/server/plane/bgtasks/magic_link_code_task.py similarity index 100% rename from apiserver/plane/bgtasks/magic_link_code_task.py rename to apps/server/plane/bgtasks/magic_link_code_task.py diff --git a/apiserver/plane/bgtasks/notification_task.py b/apps/server/plane/bgtasks/notification_task.py similarity index 100% rename from apiserver/plane/bgtasks/notification_task.py rename to apps/server/plane/bgtasks/notification_task.py diff --git a/apiserver/plane/bgtasks/page_transaction_task.py b/apps/server/plane/bgtasks/page_transaction_task.py similarity index 100% rename from apiserver/plane/bgtasks/page_transaction_task.py rename to apps/server/plane/bgtasks/page_transaction_task.py diff --git a/apiserver/plane/bgtasks/page_version_task.py b/apps/server/plane/bgtasks/page_version_task.py similarity index 100% rename from apiserver/plane/bgtasks/page_version_task.py rename to apps/server/plane/bgtasks/page_version_task.py diff --git a/apiserver/plane/bgtasks/project_add_user_email_task.py b/apps/server/plane/bgtasks/project_add_user_email_task.py similarity index 100% rename from apiserver/plane/bgtasks/project_add_user_email_task.py rename to apps/server/plane/bgtasks/project_add_user_email_task.py diff --git a/apiserver/plane/bgtasks/project_invitation_task.py b/apps/server/plane/bgtasks/project_invitation_task.py similarity index 100% rename from apiserver/plane/bgtasks/project_invitation_task.py rename to apps/server/plane/bgtasks/project_invitation_task.py diff --git a/apiserver/plane/bgtasks/recent_visited_task.py b/apps/server/plane/bgtasks/recent_visited_task.py similarity index 100% rename from apiserver/plane/bgtasks/recent_visited_task.py rename to apps/server/plane/bgtasks/recent_visited_task.py diff --git a/apiserver/plane/bgtasks/storage_metadata_task.py b/apps/server/plane/bgtasks/storage_metadata_task.py similarity index 100% rename from apiserver/plane/bgtasks/storage_metadata_task.py rename to apps/server/plane/bgtasks/storage_metadata_task.py diff --git a/apiserver/plane/bgtasks/user_activation_email_task.py b/apps/server/plane/bgtasks/user_activation_email_task.py similarity index 100% rename from apiserver/plane/bgtasks/user_activation_email_task.py rename to apps/server/plane/bgtasks/user_activation_email_task.py diff --git a/apiserver/plane/bgtasks/user_deactivation_email_task.py b/apps/server/plane/bgtasks/user_deactivation_email_task.py similarity index 100% rename from apiserver/plane/bgtasks/user_deactivation_email_task.py rename to apps/server/plane/bgtasks/user_deactivation_email_task.py diff --git a/apiserver/plane/bgtasks/webhook_task.py b/apps/server/plane/bgtasks/webhook_task.py similarity index 100% rename from apiserver/plane/bgtasks/webhook_task.py rename to apps/server/plane/bgtasks/webhook_task.py diff --git a/apiserver/plane/bgtasks/work_item_link_task.py b/apps/server/plane/bgtasks/work_item_link_task.py similarity index 100% rename from apiserver/plane/bgtasks/work_item_link_task.py rename to apps/server/plane/bgtasks/work_item_link_task.py diff --git a/apiserver/plane/bgtasks/workspace_invitation_task.py b/apps/server/plane/bgtasks/workspace_invitation_task.py similarity index 100% rename from apiserver/plane/bgtasks/workspace_invitation_task.py rename to apps/server/plane/bgtasks/workspace_invitation_task.py diff --git a/apiserver/plane/bgtasks/workspace_seed_task.py b/apps/server/plane/bgtasks/workspace_seed_task.py similarity index 100% rename from apiserver/plane/bgtasks/workspace_seed_task.py rename to apps/server/plane/bgtasks/workspace_seed_task.py diff --git a/apiserver/plane/celery.py b/apps/server/plane/celery.py similarity index 100% rename from apiserver/plane/celery.py rename to apps/server/plane/celery.py diff --git a/apiserver/plane/db/__init__.py b/apps/server/plane/db/__init__.py similarity index 100% rename from apiserver/plane/db/__init__.py rename to apps/server/plane/db/__init__.py diff --git a/apiserver/plane/db/apps.py b/apps/server/plane/db/apps.py similarity index 100% rename from apiserver/plane/db/apps.py rename to apps/server/plane/db/apps.py diff --git a/apiserver/plane/db/management/__init__.py b/apps/server/plane/db/management/__init__.py similarity index 100% rename from apiserver/plane/db/management/__init__.py rename to apps/server/plane/db/management/__init__.py diff --git a/apiserver/plane/db/management/commands/__init__.py b/apps/server/plane/db/management/commands/__init__.py similarity index 100% rename from apiserver/plane/db/management/commands/__init__.py rename to apps/server/plane/db/management/commands/__init__.py diff --git a/apiserver/plane/db/management/commands/activate_user.py b/apps/server/plane/db/management/commands/activate_user.py similarity index 100% rename from apiserver/plane/db/management/commands/activate_user.py rename to apps/server/plane/db/management/commands/activate_user.py diff --git a/apiserver/plane/db/management/commands/clear_cache.py b/apps/server/plane/db/management/commands/clear_cache.py similarity index 100% rename from apiserver/plane/db/management/commands/clear_cache.py rename to apps/server/plane/db/management/commands/clear_cache.py diff --git a/apiserver/plane/db/management/commands/create_bucket.py b/apps/server/plane/db/management/commands/create_bucket.py similarity index 100% rename from apiserver/plane/db/management/commands/create_bucket.py rename to apps/server/plane/db/management/commands/create_bucket.py diff --git a/apiserver/plane/db/management/commands/create_dummy_data.py b/apps/server/plane/db/management/commands/create_dummy_data.py similarity index 100% rename from apiserver/plane/db/management/commands/create_dummy_data.py rename to apps/server/plane/db/management/commands/create_dummy_data.py diff --git a/apiserver/plane/db/management/commands/create_instance_admin.py b/apps/server/plane/db/management/commands/create_instance_admin.py similarity index 100% rename from apiserver/plane/db/management/commands/create_instance_admin.py rename to apps/server/plane/db/management/commands/create_instance_admin.py diff --git a/apiserver/plane/db/management/commands/create_project_member.py b/apps/server/plane/db/management/commands/create_project_member.py similarity index 100% rename from apiserver/plane/db/management/commands/create_project_member.py rename to apps/server/plane/db/management/commands/create_project_member.py diff --git a/apiserver/plane/db/management/commands/fix_duplicate_sequences.py b/apps/server/plane/db/management/commands/fix_duplicate_sequences.py similarity index 100% rename from apiserver/plane/db/management/commands/fix_duplicate_sequences.py rename to apps/server/plane/db/management/commands/fix_duplicate_sequences.py diff --git a/apiserver/plane/db/management/commands/reset_password.py b/apps/server/plane/db/management/commands/reset_password.py similarity index 100% rename from apiserver/plane/db/management/commands/reset_password.py rename to apps/server/plane/db/management/commands/reset_password.py diff --git a/apiserver/plane/db/management/commands/sync_issue_description_version.py b/apps/server/plane/db/management/commands/sync_issue_description_version.py similarity index 100% rename from apiserver/plane/db/management/commands/sync_issue_description_version.py rename to apps/server/plane/db/management/commands/sync_issue_description_version.py diff --git a/apiserver/plane/db/management/commands/sync_issue_version.py b/apps/server/plane/db/management/commands/sync_issue_version.py similarity index 100% rename from apiserver/plane/db/management/commands/sync_issue_version.py rename to apps/server/plane/db/management/commands/sync_issue_version.py diff --git a/apiserver/plane/db/management/commands/test_email.py b/apps/server/plane/db/management/commands/test_email.py similarity index 100% rename from apiserver/plane/db/management/commands/test_email.py rename to apps/server/plane/db/management/commands/test_email.py diff --git a/apiserver/plane/db/management/commands/update_bucket.py b/apps/server/plane/db/management/commands/update_bucket.py similarity index 100% rename from apiserver/plane/db/management/commands/update_bucket.py rename to apps/server/plane/db/management/commands/update_bucket.py diff --git a/apiserver/plane/db/management/commands/update_deleted_workspace_slug.py b/apps/server/plane/db/management/commands/update_deleted_workspace_slug.py similarity index 100% rename from apiserver/plane/db/management/commands/update_deleted_workspace_slug.py rename to apps/server/plane/db/management/commands/update_deleted_workspace_slug.py diff --git a/apiserver/plane/db/management/commands/wait_for_db.py b/apps/server/plane/db/management/commands/wait_for_db.py similarity index 100% rename from apiserver/plane/db/management/commands/wait_for_db.py rename to apps/server/plane/db/management/commands/wait_for_db.py diff --git a/apiserver/plane/db/management/commands/wait_for_migrations.py b/apps/server/plane/db/management/commands/wait_for_migrations.py similarity index 100% rename from apiserver/plane/db/management/commands/wait_for_migrations.py rename to apps/server/plane/db/management/commands/wait_for_migrations.py diff --git a/apiserver/plane/db/migrations/0001_initial.py b/apps/server/plane/db/migrations/0001_initial.py similarity index 100% rename from apiserver/plane/db/migrations/0001_initial.py rename to apps/server/plane/db/migrations/0001_initial.py diff --git a/apiserver/plane/db/migrations/0002_auto_20221104_2239.py b/apps/server/plane/db/migrations/0002_auto_20221104_2239.py similarity index 100% rename from apiserver/plane/db/migrations/0002_auto_20221104_2239.py rename to apps/server/plane/db/migrations/0002_auto_20221104_2239.py diff --git a/apiserver/plane/db/migrations/0003_auto_20221109_2320.py b/apps/server/plane/db/migrations/0003_auto_20221109_2320.py similarity index 100% rename from apiserver/plane/db/migrations/0003_auto_20221109_2320.py rename to apps/server/plane/db/migrations/0003_auto_20221109_2320.py diff --git a/apiserver/plane/db/migrations/0004_alter_state_sequence.py b/apps/server/plane/db/migrations/0004_alter_state_sequence.py similarity index 100% rename from apiserver/plane/db/migrations/0004_alter_state_sequence.py rename to apps/server/plane/db/migrations/0004_alter_state_sequence.py diff --git a/apiserver/plane/db/migrations/0005_auto_20221114_2127.py b/apps/server/plane/db/migrations/0005_auto_20221114_2127.py similarity index 100% rename from apiserver/plane/db/migrations/0005_auto_20221114_2127.py rename to apps/server/plane/db/migrations/0005_auto_20221114_2127.py diff --git a/apiserver/plane/db/migrations/0006_alter_cycle_status.py b/apps/server/plane/db/migrations/0006_alter_cycle_status.py similarity index 100% rename from apiserver/plane/db/migrations/0006_alter_cycle_status.py rename to apps/server/plane/db/migrations/0006_alter_cycle_status.py diff --git a/apiserver/plane/db/migrations/0007_label_parent.py b/apps/server/plane/db/migrations/0007_label_parent.py similarity index 100% rename from apiserver/plane/db/migrations/0007_label_parent.py rename to apps/server/plane/db/migrations/0007_label_parent.py diff --git a/apiserver/plane/db/migrations/0008_label_colour.py b/apps/server/plane/db/migrations/0008_label_colour.py similarity index 100% rename from apiserver/plane/db/migrations/0008_label_colour.py rename to apps/server/plane/db/migrations/0008_label_colour.py diff --git a/apiserver/plane/db/migrations/0009_auto_20221208_0310.py b/apps/server/plane/db/migrations/0009_auto_20221208_0310.py similarity index 100% rename from apiserver/plane/db/migrations/0009_auto_20221208_0310.py rename to apps/server/plane/db/migrations/0009_auto_20221208_0310.py diff --git a/apiserver/plane/db/migrations/0010_auto_20221213_0037.py b/apps/server/plane/db/migrations/0010_auto_20221213_0037.py similarity index 100% rename from apiserver/plane/db/migrations/0010_auto_20221213_0037.py rename to apps/server/plane/db/migrations/0010_auto_20221213_0037.py diff --git a/apiserver/plane/db/migrations/0011_auto_20221222_2357.py b/apps/server/plane/db/migrations/0011_auto_20221222_2357.py similarity index 100% rename from apiserver/plane/db/migrations/0011_auto_20221222_2357.py rename to apps/server/plane/db/migrations/0011_auto_20221222_2357.py diff --git a/apiserver/plane/db/migrations/0012_auto_20230104_0117.py b/apps/server/plane/db/migrations/0012_auto_20230104_0117.py similarity index 100% rename from apiserver/plane/db/migrations/0012_auto_20230104_0117.py rename to apps/server/plane/db/migrations/0012_auto_20230104_0117.py diff --git a/apiserver/plane/db/migrations/0013_auto_20230107_0041.py b/apps/server/plane/db/migrations/0013_auto_20230107_0041.py similarity index 100% rename from apiserver/plane/db/migrations/0013_auto_20230107_0041.py rename to apps/server/plane/db/migrations/0013_auto_20230107_0041.py diff --git a/apiserver/plane/db/migrations/0014_alter_workspacememberinvite_unique_together.py b/apps/server/plane/db/migrations/0014_alter_workspacememberinvite_unique_together.py similarity index 100% rename from apiserver/plane/db/migrations/0014_alter_workspacememberinvite_unique_together.py rename to apps/server/plane/db/migrations/0014_alter_workspacememberinvite_unique_together.py diff --git a/apiserver/plane/db/migrations/0015_auto_20230107_1636.py b/apps/server/plane/db/migrations/0015_auto_20230107_1636.py similarity index 100% rename from apiserver/plane/db/migrations/0015_auto_20230107_1636.py rename to apps/server/plane/db/migrations/0015_auto_20230107_1636.py diff --git a/apiserver/plane/db/migrations/0016_auto_20230107_1735.py b/apps/server/plane/db/migrations/0016_auto_20230107_1735.py similarity index 100% rename from apiserver/plane/db/migrations/0016_auto_20230107_1735.py rename to apps/server/plane/db/migrations/0016_auto_20230107_1735.py diff --git a/apiserver/plane/db/migrations/0017_alter_workspace_unique_together.py b/apps/server/plane/db/migrations/0017_alter_workspace_unique_together.py similarity index 100% rename from apiserver/plane/db/migrations/0017_alter_workspace_unique_together.py rename to apps/server/plane/db/migrations/0017_alter_workspace_unique_together.py diff --git a/apiserver/plane/db/migrations/0018_auto_20230130_0119.py b/apps/server/plane/db/migrations/0018_auto_20230130_0119.py similarity index 100% rename from apiserver/plane/db/migrations/0018_auto_20230130_0119.py rename to apps/server/plane/db/migrations/0018_auto_20230130_0119.py diff --git a/apiserver/plane/db/migrations/0019_auto_20230131_0049.py b/apps/server/plane/db/migrations/0019_auto_20230131_0049.py similarity index 100% rename from apiserver/plane/db/migrations/0019_auto_20230131_0049.py rename to apps/server/plane/db/migrations/0019_auto_20230131_0049.py diff --git a/apiserver/plane/db/migrations/0020_auto_20230214_0118.py b/apps/server/plane/db/migrations/0020_auto_20230214_0118.py similarity index 100% rename from apiserver/plane/db/migrations/0020_auto_20230214_0118.py rename to apps/server/plane/db/migrations/0020_auto_20230214_0118.py diff --git a/apiserver/plane/db/migrations/0021_auto_20230223_0104.py b/apps/server/plane/db/migrations/0021_auto_20230223_0104.py similarity index 100% rename from apiserver/plane/db/migrations/0021_auto_20230223_0104.py rename to apps/server/plane/db/migrations/0021_auto_20230223_0104.py diff --git a/apiserver/plane/db/migrations/0022_auto_20230307_0304.py b/apps/server/plane/db/migrations/0022_auto_20230307_0304.py similarity index 100% rename from apiserver/plane/db/migrations/0022_auto_20230307_0304.py rename to apps/server/plane/db/migrations/0022_auto_20230307_0304.py diff --git a/apiserver/plane/db/migrations/0023_auto_20230316_0040.py b/apps/server/plane/db/migrations/0023_auto_20230316_0040.py similarity index 100% rename from apiserver/plane/db/migrations/0023_auto_20230316_0040.py rename to apps/server/plane/db/migrations/0023_auto_20230316_0040.py diff --git a/apiserver/plane/db/migrations/0024_auto_20230322_0138.py b/apps/server/plane/db/migrations/0024_auto_20230322_0138.py similarity index 100% rename from apiserver/plane/db/migrations/0024_auto_20230322_0138.py rename to apps/server/plane/db/migrations/0024_auto_20230322_0138.py diff --git a/apiserver/plane/db/migrations/0025_auto_20230331_0203.py b/apps/server/plane/db/migrations/0025_auto_20230331_0203.py similarity index 100% rename from apiserver/plane/db/migrations/0025_auto_20230331_0203.py rename to apps/server/plane/db/migrations/0025_auto_20230331_0203.py diff --git a/apiserver/plane/db/migrations/0026_alter_projectmember_view_props.py b/apps/server/plane/db/migrations/0026_alter_projectmember_view_props.py similarity index 100% rename from apiserver/plane/db/migrations/0026_alter_projectmember_view_props.py rename to apps/server/plane/db/migrations/0026_alter_projectmember_view_props.py diff --git a/apiserver/plane/db/migrations/0027_auto_20230409_0312.py b/apps/server/plane/db/migrations/0027_auto_20230409_0312.py similarity index 100% rename from apiserver/plane/db/migrations/0027_auto_20230409_0312.py rename to apps/server/plane/db/migrations/0027_auto_20230409_0312.py diff --git a/apiserver/plane/db/migrations/0028_auto_20230414_1703.py b/apps/server/plane/db/migrations/0028_auto_20230414_1703.py similarity index 100% rename from apiserver/plane/db/migrations/0028_auto_20230414_1703.py rename to apps/server/plane/db/migrations/0028_auto_20230414_1703.py diff --git a/apiserver/plane/db/migrations/0029_auto_20230502_0126.py b/apps/server/plane/db/migrations/0029_auto_20230502_0126.py similarity index 100% rename from apiserver/plane/db/migrations/0029_auto_20230502_0126.py rename to apps/server/plane/db/migrations/0029_auto_20230502_0126.py diff --git a/apiserver/plane/db/migrations/0030_alter_estimatepoint_unique_together.py b/apps/server/plane/db/migrations/0030_alter_estimatepoint_unique_together.py similarity index 100% rename from apiserver/plane/db/migrations/0030_alter_estimatepoint_unique_together.py rename to apps/server/plane/db/migrations/0030_alter_estimatepoint_unique_together.py diff --git a/apiserver/plane/db/migrations/0031_analyticview.py b/apps/server/plane/db/migrations/0031_analyticview.py similarity index 100% rename from apiserver/plane/db/migrations/0031_analyticview.py rename to apps/server/plane/db/migrations/0031_analyticview.py diff --git a/apiserver/plane/db/migrations/0032_auto_20230520_2015.py b/apps/server/plane/db/migrations/0032_auto_20230520_2015.py similarity index 100% rename from apiserver/plane/db/migrations/0032_auto_20230520_2015.py rename to apps/server/plane/db/migrations/0032_auto_20230520_2015.py diff --git a/apiserver/plane/db/migrations/0033_auto_20230618_2125.py b/apps/server/plane/db/migrations/0033_auto_20230618_2125.py similarity index 100% rename from apiserver/plane/db/migrations/0033_auto_20230618_2125.py rename to apps/server/plane/db/migrations/0033_auto_20230618_2125.py diff --git a/apiserver/plane/db/migrations/0034_auto_20230628_1046.py b/apps/server/plane/db/migrations/0034_auto_20230628_1046.py similarity index 100% rename from apiserver/plane/db/migrations/0034_auto_20230628_1046.py rename to apps/server/plane/db/migrations/0034_auto_20230628_1046.py diff --git a/apiserver/plane/db/migrations/0035_auto_20230704_2225.py b/apps/server/plane/db/migrations/0035_auto_20230704_2225.py similarity index 100% rename from apiserver/plane/db/migrations/0035_auto_20230704_2225.py rename to apps/server/plane/db/migrations/0035_auto_20230704_2225.py diff --git a/apiserver/plane/db/migrations/0036_alter_workspace_organization_size.py b/apps/server/plane/db/migrations/0036_alter_workspace_organization_size.py similarity index 100% rename from apiserver/plane/db/migrations/0036_alter_workspace_organization_size.py rename to apps/server/plane/db/migrations/0036_alter_workspace_organization_size.py diff --git a/apiserver/plane/db/migrations/0037_issue_archived_at_project_archive_in_and_more.py b/apps/server/plane/db/migrations/0037_issue_archived_at_project_archive_in_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0037_issue_archived_at_project_archive_in_and_more.py rename to apps/server/plane/db/migrations/0037_issue_archived_at_project_archive_in_and_more.py diff --git a/apiserver/plane/db/migrations/0038_auto_20230720_1505.py b/apps/server/plane/db/migrations/0038_auto_20230720_1505.py similarity index 100% rename from apiserver/plane/db/migrations/0038_auto_20230720_1505.py rename to apps/server/plane/db/migrations/0038_auto_20230720_1505.py diff --git a/apiserver/plane/db/migrations/0039_auto_20230723_2203.py b/apps/server/plane/db/migrations/0039_auto_20230723_2203.py similarity index 100% rename from apiserver/plane/db/migrations/0039_auto_20230723_2203.py rename to apps/server/plane/db/migrations/0039_auto_20230723_2203.py diff --git a/apiserver/plane/db/migrations/0040_projectmember_preferences_user_cover_image_and_more.py b/apps/server/plane/db/migrations/0040_projectmember_preferences_user_cover_image_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0040_projectmember_preferences_user_cover_image_and_more.py rename to apps/server/plane/db/migrations/0040_projectmember_preferences_user_cover_image_and_more.py diff --git a/apiserver/plane/db/migrations/0041_cycle_sort_order_issuecomment_access_and_more.py b/apps/server/plane/db/migrations/0041_cycle_sort_order_issuecomment_access_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0041_cycle_sort_order_issuecomment_access_and_more.py rename to apps/server/plane/db/migrations/0041_cycle_sort_order_issuecomment_access_and_more.py diff --git a/apiserver/plane/db/migrations/0042_alter_analyticview_created_by_and_more.py b/apps/server/plane/db/migrations/0042_alter_analyticview_created_by_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0042_alter_analyticview_created_by_and_more.py rename to apps/server/plane/db/migrations/0042_alter_analyticview_created_by_and_more.py diff --git a/apiserver/plane/db/migrations/0043_alter_analyticview_created_by_and_more.py b/apps/server/plane/db/migrations/0043_alter_analyticview_created_by_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0043_alter_analyticview_created_by_and_more.py rename to apps/server/plane/db/migrations/0043_alter_analyticview_created_by_and_more.py diff --git a/apiserver/plane/db/migrations/0044_auto_20230913_0709.py b/apps/server/plane/db/migrations/0044_auto_20230913_0709.py similarity index 100% rename from apiserver/plane/db/migrations/0044_auto_20230913_0709.py rename to apps/server/plane/db/migrations/0044_auto_20230913_0709.py diff --git a/apiserver/plane/db/migrations/0045_issueactivity_epoch_workspacemember_issue_props_and_more.py b/apps/server/plane/db/migrations/0045_issueactivity_epoch_workspacemember_issue_props_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0045_issueactivity_epoch_workspacemember_issue_props_and_more.py rename to apps/server/plane/db/migrations/0045_issueactivity_epoch_workspacemember_issue_props_and_more.py diff --git a/apiserver/plane/db/migrations/0046_label_sort_order_alter_analyticview_created_by_and_more.py b/apps/server/plane/db/migrations/0046_label_sort_order_alter_analyticview_created_by_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0046_label_sort_order_alter_analyticview_created_by_and_more.py rename to apps/server/plane/db/migrations/0046_label_sort_order_alter_analyticview_created_by_and_more.py diff --git a/apiserver/plane/db/migrations/0047_webhook_apitoken_description_apitoken_expired_at_and_more.py b/apps/server/plane/db/migrations/0047_webhook_apitoken_description_apitoken_expired_at_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0047_webhook_apitoken_description_apitoken_expired_at_and_more.py rename to apps/server/plane/db/migrations/0047_webhook_apitoken_description_apitoken_expired_at_and_more.py diff --git a/apiserver/plane/db/migrations/0048_auto_20231116_0713.py b/apps/server/plane/db/migrations/0048_auto_20231116_0713.py similarity index 100% rename from apiserver/plane/db/migrations/0048_auto_20231116_0713.py rename to apps/server/plane/db/migrations/0048_auto_20231116_0713.py diff --git a/apiserver/plane/db/migrations/0049_auto_20231116_0713.py b/apps/server/plane/db/migrations/0049_auto_20231116_0713.py similarity index 100% rename from apiserver/plane/db/migrations/0049_auto_20231116_0713.py rename to apps/server/plane/db/migrations/0049_auto_20231116_0713.py diff --git a/apiserver/plane/db/migrations/0050_user_use_case_alter_workspace_organization_size.py b/apps/server/plane/db/migrations/0050_user_use_case_alter_workspace_organization_size.py similarity index 100% rename from apiserver/plane/db/migrations/0050_user_use_case_alter_workspace_organization_size.py rename to apps/server/plane/db/migrations/0050_user_use_case_alter_workspace_organization_size.py diff --git a/apiserver/plane/db/migrations/0051_cycle_external_id_cycle_external_source_and_more.py b/apps/server/plane/db/migrations/0051_cycle_external_id_cycle_external_source_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0051_cycle_external_id_cycle_external_source_and_more.py rename to apps/server/plane/db/migrations/0051_cycle_external_id_cycle_external_source_and_more.py diff --git a/apiserver/plane/db/migrations/0052_auto_20231220_1141.py b/apps/server/plane/db/migrations/0052_auto_20231220_1141.py similarity index 100% rename from apiserver/plane/db/migrations/0052_auto_20231220_1141.py rename to apps/server/plane/db/migrations/0052_auto_20231220_1141.py diff --git a/apiserver/plane/db/migrations/0053_auto_20240102_1315.py b/apps/server/plane/db/migrations/0053_auto_20240102_1315.py similarity index 100% rename from apiserver/plane/db/migrations/0053_auto_20240102_1315.py rename to apps/server/plane/db/migrations/0053_auto_20240102_1315.py diff --git a/apiserver/plane/db/migrations/0054_dashboard_widget_dashboardwidget.py b/apps/server/plane/db/migrations/0054_dashboard_widget_dashboardwidget.py similarity index 100% rename from apiserver/plane/db/migrations/0054_dashboard_widget_dashboardwidget.py rename to apps/server/plane/db/migrations/0054_dashboard_widget_dashboardwidget.py diff --git a/apiserver/plane/db/migrations/0055_auto_20240108_0648.py b/apps/server/plane/db/migrations/0055_auto_20240108_0648.py similarity index 100% rename from apiserver/plane/db/migrations/0055_auto_20240108_0648.py rename to apps/server/plane/db/migrations/0055_auto_20240108_0648.py diff --git a/apiserver/plane/db/migrations/0056_usernotificationpreference_emailnotificationlog.py b/apps/server/plane/db/migrations/0056_usernotificationpreference_emailnotificationlog.py similarity index 100% rename from apiserver/plane/db/migrations/0056_usernotificationpreference_emailnotificationlog.py rename to apps/server/plane/db/migrations/0056_usernotificationpreference_emailnotificationlog.py diff --git a/apiserver/plane/db/migrations/0057_auto_20240122_0901.py b/apps/server/plane/db/migrations/0057_auto_20240122_0901.py similarity index 100% rename from apiserver/plane/db/migrations/0057_auto_20240122_0901.py rename to apps/server/plane/db/migrations/0057_auto_20240122_0901.py diff --git a/apiserver/plane/db/migrations/0058_alter_moduleissue_issue_and_more.py b/apps/server/plane/db/migrations/0058_alter_moduleissue_issue_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0058_alter_moduleissue_issue_and_more.py rename to apps/server/plane/db/migrations/0058_alter_moduleissue_issue_and_more.py diff --git a/apiserver/plane/db/migrations/0059_auto_20240208_0957.py b/apps/server/plane/db/migrations/0059_auto_20240208_0957.py similarity index 100% rename from apiserver/plane/db/migrations/0059_auto_20240208_0957.py rename to apps/server/plane/db/migrations/0059_auto_20240208_0957.py diff --git a/apiserver/plane/db/migrations/0060_cycle_progress_snapshot.py b/apps/server/plane/db/migrations/0060_cycle_progress_snapshot.py similarity index 100% rename from apiserver/plane/db/migrations/0060_cycle_progress_snapshot.py rename to apps/server/plane/db/migrations/0060_cycle_progress_snapshot.py diff --git a/apiserver/plane/db/migrations/0061_project_logo_props.py b/apps/server/plane/db/migrations/0061_project_logo_props.py similarity index 100% rename from apiserver/plane/db/migrations/0061_project_logo_props.py rename to apps/server/plane/db/migrations/0061_project_logo_props.py diff --git a/apiserver/plane/db/migrations/0062_cycle_archived_at_module_archived_at_and_more.py b/apps/server/plane/db/migrations/0062_cycle_archived_at_module_archived_at_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0062_cycle_archived_at_module_archived_at_and_more.py rename to apps/server/plane/db/migrations/0062_cycle_archived_at_module_archived_at_and_more.py diff --git a/apiserver/plane/db/migrations/0063_state_is_triage_alter_state_group.py b/apps/server/plane/db/migrations/0063_state_is_triage_alter_state_group.py similarity index 100% rename from apiserver/plane/db/migrations/0063_state_is_triage_alter_state_group.py rename to apps/server/plane/db/migrations/0063_state_is_triage_alter_state_group.py diff --git a/apiserver/plane/db/migrations/0064_auto_20240409_1134.py b/apps/server/plane/db/migrations/0064_auto_20240409_1134.py similarity index 100% rename from apiserver/plane/db/migrations/0064_auto_20240409_1134.py rename to apps/server/plane/db/migrations/0064_auto_20240409_1134.py diff --git a/apiserver/plane/db/migrations/0065_auto_20240415_0937.py b/apps/server/plane/db/migrations/0065_auto_20240415_0937.py similarity index 100% rename from apiserver/plane/db/migrations/0065_auto_20240415_0937.py rename to apps/server/plane/db/migrations/0065_auto_20240415_0937.py diff --git a/apiserver/plane/db/migrations/0066_account_id_token_cycle_logo_props_module_logo_props.py b/apps/server/plane/db/migrations/0066_account_id_token_cycle_logo_props_module_logo_props.py similarity index 100% rename from apiserver/plane/db/migrations/0066_account_id_token_cycle_logo_props_module_logo_props.py rename to apps/server/plane/db/migrations/0066_account_id_token_cycle_logo_props_module_logo_props.py diff --git a/apiserver/plane/db/migrations/0067_issue_estimate.py b/apps/server/plane/db/migrations/0067_issue_estimate.py similarity index 100% rename from apiserver/plane/db/migrations/0067_issue_estimate.py rename to apps/server/plane/db/migrations/0067_issue_estimate.py diff --git a/apiserver/plane/db/migrations/0068_remove_pagelabel_project_remove_pagelog_project_and_more.py b/apps/server/plane/db/migrations/0068_remove_pagelabel_project_remove_pagelog_project_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0068_remove_pagelabel_project_remove_pagelog_project_and_more.py rename to apps/server/plane/db/migrations/0068_remove_pagelabel_project_remove_pagelog_project_and_more.py diff --git a/apiserver/plane/db/migrations/0069_alter_account_provider_and_more.py b/apps/server/plane/db/migrations/0069_alter_account_provider_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0069_alter_account_provider_and_more.py rename to apps/server/plane/db/migrations/0069_alter_account_provider_and_more.py diff --git a/apiserver/plane/db/migrations/0070_apitoken_is_service_exporterhistory_filters_and_more.py b/apps/server/plane/db/migrations/0070_apitoken_is_service_exporterhistory_filters_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0070_apitoken_is_service_exporterhistory_filters_and_more.py rename to apps/server/plane/db/migrations/0070_apitoken_is_service_exporterhistory_filters_and_more.py diff --git a/apiserver/plane/db/migrations/0071_rename_issueproperty_issueuserproperty_and_more.py b/apps/server/plane/db/migrations/0071_rename_issueproperty_issueuserproperty_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0071_rename_issueproperty_issueuserproperty_and_more.py rename to apps/server/plane/db/migrations/0071_rename_issueproperty_issueuserproperty_and_more.py diff --git a/apiserver/plane/db/migrations/0072_issueattachment_external_id_and_more.py b/apps/server/plane/db/migrations/0072_issueattachment_external_id_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0072_issueattachment_external_id_and_more.py rename to apps/server/plane/db/migrations/0072_issueattachment_external_id_and_more.py diff --git a/apiserver/plane/db/migrations/0073_alter_commentreaction_unique_together_and_more.py b/apps/server/plane/db/migrations/0073_alter_commentreaction_unique_together_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0073_alter_commentreaction_unique_together_and_more.py rename to apps/server/plane/db/migrations/0073_alter_commentreaction_unique_together_and_more.py diff --git a/apiserver/plane/db/migrations/0074_deploy_board_and_project_issues.py b/apps/server/plane/db/migrations/0074_deploy_board_and_project_issues.py similarity index 100% rename from apiserver/plane/db/migrations/0074_deploy_board_and_project_issues.py rename to apps/server/plane/db/migrations/0074_deploy_board_and_project_issues.py diff --git a/apiserver/plane/db/migrations/0075_alter_fileasset_asset.py b/apps/server/plane/db/migrations/0075_alter_fileasset_asset.py similarity index 100% rename from apiserver/plane/db/migrations/0075_alter_fileasset_asset.py rename to apps/server/plane/db/migrations/0075_alter_fileasset_asset.py diff --git a/apiserver/plane/db/migrations/0076_alter_projectmember_role_and_more.py b/apps/server/plane/db/migrations/0076_alter_projectmember_role_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0076_alter_projectmember_role_and_more.py rename to apps/server/plane/db/migrations/0076_alter_projectmember_role_and_more.py diff --git a/apiserver/plane/db/migrations/0077_draftissue_cycle_user_timezone_project_user_timezone_and_more.py b/apps/server/plane/db/migrations/0077_draftissue_cycle_user_timezone_project_user_timezone_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0077_draftissue_cycle_user_timezone_project_user_timezone_and_more.py rename to apps/server/plane/db/migrations/0077_draftissue_cycle_user_timezone_project_user_timezone_and_more.py diff --git a/apiserver/plane/db/migrations/0078_fileasset_comment_fileasset_entity_type_and_more.py b/apps/server/plane/db/migrations/0078_fileasset_comment_fileasset_entity_type_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0078_fileasset_comment_fileasset_entity_type_and_more.py rename to apps/server/plane/db/migrations/0078_fileasset_comment_fileasset_entity_type_and_more.py diff --git a/apiserver/plane/db/migrations/0079_auto_20241009_0619.py b/apps/server/plane/db/migrations/0079_auto_20241009_0619.py similarity index 100% rename from apiserver/plane/db/migrations/0079_auto_20241009_0619.py rename to apps/server/plane/db/migrations/0079_auto_20241009_0619.py diff --git a/apiserver/plane/db/migrations/0080_fileasset_draft_issue_alter_fileasset_entity_type.py b/apps/server/plane/db/migrations/0080_fileasset_draft_issue_alter_fileasset_entity_type.py similarity index 100% rename from apiserver/plane/db/migrations/0080_fileasset_draft_issue_alter_fileasset_entity_type.py rename to apps/server/plane/db/migrations/0080_fileasset_draft_issue_alter_fileasset_entity_type.py diff --git a/apiserver/plane/db/migrations/0081_remove_globalview_created_by_and_more.py b/apps/server/plane/db/migrations/0081_remove_globalview_created_by_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0081_remove_globalview_created_by_and_more.py rename to apps/server/plane/db/migrations/0081_remove_globalview_created_by_and_more.py diff --git a/apiserver/plane/db/migrations/0082_alter_issue_managers_alter_cycleissue_issue_and_more.py b/apps/server/plane/db/migrations/0082_alter_issue_managers_alter_cycleissue_issue_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0082_alter_issue_managers_alter_cycleissue_issue_and_more.py rename to apps/server/plane/db/migrations/0082_alter_issue_managers_alter_cycleissue_issue_and_more.py diff --git a/apiserver/plane/db/migrations/0083_device_workspace_timezone_and_more.py b/apps/server/plane/db/migrations/0083_device_workspace_timezone_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0083_device_workspace_timezone_and_more.py rename to apps/server/plane/db/migrations/0083_device_workspace_timezone_and_more.py diff --git a/apiserver/plane/db/migrations/0084_remove_label_label_unique_name_project_when_deleted_at_null_and_more.py b/apps/server/plane/db/migrations/0084_remove_label_label_unique_name_project_when_deleted_at_null_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0084_remove_label_label_unique_name_project_when_deleted_at_null_and_more.py rename to apps/server/plane/db/migrations/0084_remove_label_label_unique_name_project_when_deleted_at_null_and_more.py diff --git a/apiserver/plane/db/migrations/0085_intake_intakeissue_remove_inboxissue_created_by_and_more.py b/apps/server/plane/db/migrations/0085_intake_intakeissue_remove_inboxissue_created_by_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0085_intake_intakeissue_remove_inboxissue_created_by_and_more.py rename to apps/server/plane/db/migrations/0085_intake_intakeissue_remove_inboxissue_created_by_and_more.py diff --git a/apiserver/plane/db/migrations/0086_issueversion_alter_teampage_unique_together_and_more.py b/apps/server/plane/db/migrations/0086_issueversion_alter_teampage_unique_together_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0086_issueversion_alter_teampage_unique_together_and_more.py rename to apps/server/plane/db/migrations/0086_issueversion_alter_teampage_unique_together_and_more.py diff --git a/apiserver/plane/db/migrations/0087_remove_issueversion_description_and_more.py b/apps/server/plane/db/migrations/0087_remove_issueversion_description_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0087_remove_issueversion_description_and_more.py rename to apps/server/plane/db/migrations/0087_remove_issueversion_description_and_more.py diff --git a/apiserver/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py b/apps/server/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py similarity index 100% rename from apiserver/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py rename to apps/server/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py diff --git a/apiserver/plane/db/migrations/0089_workspacehomepreference_and_more.py b/apps/server/plane/db/migrations/0089_workspacehomepreference_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0089_workspacehomepreference_and_more.py rename to apps/server/plane/db/migrations/0089_workspacehomepreference_and_more.py diff --git a/apiserver/plane/db/migrations/0090_rename_dashboard_deprecateddashboard_and_more.py b/apps/server/plane/db/migrations/0090_rename_dashboard_deprecateddashboard_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0090_rename_dashboard_deprecateddashboard_and_more.py rename to apps/server/plane/db/migrations/0090_rename_dashboard_deprecateddashboard_and_more.py diff --git a/apiserver/plane/db/migrations/0091_issuecomment_edited_at_and_more.py b/apps/server/plane/db/migrations/0091_issuecomment_edited_at_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0091_issuecomment_edited_at_and_more.py rename to apps/server/plane/db/migrations/0091_issuecomment_edited_at_and_more.py diff --git a/apiserver/plane/db/migrations/0092_alter_deprecateddashboardwidget_unique_together_and_more.py b/apps/server/plane/db/migrations/0092_alter_deprecateddashboardwidget_unique_together_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0092_alter_deprecateddashboardwidget_unique_together_and_more.py rename to apps/server/plane/db/migrations/0092_alter_deprecateddashboardwidget_unique_together_and_more.py diff --git a/apiserver/plane/db/migrations/0093_page_moved_to_page_page_moved_to_project_and_more.py b/apps/server/plane/db/migrations/0093_page_moved_to_page_page_moved_to_project_and_more.py similarity index 100% rename from apiserver/plane/db/migrations/0093_page_moved_to_page_page_moved_to_project_and_more.py rename to apps/server/plane/db/migrations/0093_page_moved_to_page_page_moved_to_project_and_more.py diff --git a/apiserver/plane/db/migrations/0094_auto_20250425_0902.py b/apps/server/plane/db/migrations/0094_auto_20250425_0902.py similarity index 100% rename from apiserver/plane/db/migrations/0094_auto_20250425_0902.py rename to apps/server/plane/db/migrations/0094_auto_20250425_0902.py diff --git a/apiserver/plane/db/migrations/0095_page_external_id_page_external_source.py b/apps/server/plane/db/migrations/0095_page_external_id_page_external_source.py similarity index 100% rename from apiserver/plane/db/migrations/0095_page_external_id_page_external_source.py rename to apps/server/plane/db/migrations/0095_page_external_id_page_external_source.py diff --git a/apiserver/plane/db/migrations/0096_user_is_email_valid_user_masked_at.py b/apps/server/plane/db/migrations/0096_user_is_email_valid_user_masked_at.py similarity index 100% rename from apiserver/plane/db/migrations/0096_user_is_email_valid_user_masked_at.py rename to apps/server/plane/db/migrations/0096_user_is_email_valid_user_masked_at.py diff --git a/apiserver/plane/db/migrations/0097_project_external_id_project_external_source.py b/apps/server/plane/db/migrations/0097_project_external_id_project_external_source.py similarity index 100% rename from apiserver/plane/db/migrations/0097_project_external_id_project_external_source.py rename to apps/server/plane/db/migrations/0097_project_external_id_project_external_source.py diff --git a/apiserver/plane/db/migrations/__init__.py b/apps/server/plane/db/migrations/__init__.py similarity index 100% rename from apiserver/plane/db/migrations/__init__.py rename to apps/server/plane/db/migrations/__init__.py diff --git a/apiserver/plane/db/mixins.py b/apps/server/plane/db/mixins.py similarity index 100% rename from apiserver/plane/db/mixins.py rename to apps/server/plane/db/mixins.py diff --git a/apiserver/plane/db/models/__init__.py b/apps/server/plane/db/models/__init__.py similarity index 100% rename from apiserver/plane/db/models/__init__.py rename to apps/server/plane/db/models/__init__.py diff --git a/apiserver/plane/db/models/analytic.py b/apps/server/plane/db/models/analytic.py similarity index 100% rename from apiserver/plane/db/models/analytic.py rename to apps/server/plane/db/models/analytic.py diff --git a/apiserver/plane/db/models/api.py b/apps/server/plane/db/models/api.py similarity index 100% rename from apiserver/plane/db/models/api.py rename to apps/server/plane/db/models/api.py diff --git a/apiserver/plane/db/models/asset.py b/apps/server/plane/db/models/asset.py similarity index 100% rename from apiserver/plane/db/models/asset.py rename to apps/server/plane/db/models/asset.py diff --git a/apiserver/plane/db/models/base.py b/apps/server/plane/db/models/base.py similarity index 100% rename from apiserver/plane/db/models/base.py rename to apps/server/plane/db/models/base.py diff --git a/apiserver/plane/db/models/cycle.py b/apps/server/plane/db/models/cycle.py similarity index 100% rename from apiserver/plane/db/models/cycle.py rename to apps/server/plane/db/models/cycle.py diff --git a/apiserver/plane/db/models/deploy_board.py b/apps/server/plane/db/models/deploy_board.py similarity index 100% rename from apiserver/plane/db/models/deploy_board.py rename to apps/server/plane/db/models/deploy_board.py diff --git a/apiserver/plane/db/models/device.py b/apps/server/plane/db/models/device.py similarity index 100% rename from apiserver/plane/db/models/device.py rename to apps/server/plane/db/models/device.py diff --git a/apiserver/plane/db/models/draft.py b/apps/server/plane/db/models/draft.py similarity index 100% rename from apiserver/plane/db/models/draft.py rename to apps/server/plane/db/models/draft.py diff --git a/apiserver/plane/db/models/estimate.py b/apps/server/plane/db/models/estimate.py similarity index 100% rename from apiserver/plane/db/models/estimate.py rename to apps/server/plane/db/models/estimate.py diff --git a/apiserver/plane/db/models/exporter.py b/apps/server/plane/db/models/exporter.py similarity index 100% rename from apiserver/plane/db/models/exporter.py rename to apps/server/plane/db/models/exporter.py diff --git a/apiserver/plane/db/models/favorite.py b/apps/server/plane/db/models/favorite.py similarity index 100% rename from apiserver/plane/db/models/favorite.py rename to apps/server/plane/db/models/favorite.py diff --git a/apiserver/plane/db/models/importer.py b/apps/server/plane/db/models/importer.py similarity index 100% rename from apiserver/plane/db/models/importer.py rename to apps/server/plane/db/models/importer.py diff --git a/apiserver/plane/db/models/intake.py b/apps/server/plane/db/models/intake.py similarity index 100% rename from apiserver/plane/db/models/intake.py rename to apps/server/plane/db/models/intake.py diff --git a/apiserver/plane/db/models/integration/__init__.py b/apps/server/plane/db/models/integration/__init__.py similarity index 100% rename from apiserver/plane/db/models/integration/__init__.py rename to apps/server/plane/db/models/integration/__init__.py diff --git a/apiserver/plane/db/models/integration/base.py b/apps/server/plane/db/models/integration/base.py similarity index 100% rename from apiserver/plane/db/models/integration/base.py rename to apps/server/plane/db/models/integration/base.py diff --git a/apiserver/plane/db/models/integration/github.py b/apps/server/plane/db/models/integration/github.py similarity index 100% rename from apiserver/plane/db/models/integration/github.py rename to apps/server/plane/db/models/integration/github.py diff --git a/apiserver/plane/db/models/integration/slack.py b/apps/server/plane/db/models/integration/slack.py similarity index 100% rename from apiserver/plane/db/models/integration/slack.py rename to apps/server/plane/db/models/integration/slack.py diff --git a/apiserver/plane/db/models/issue.py b/apps/server/plane/db/models/issue.py similarity index 100% rename from apiserver/plane/db/models/issue.py rename to apps/server/plane/db/models/issue.py diff --git a/apiserver/plane/db/models/issue_type.py b/apps/server/plane/db/models/issue_type.py similarity index 100% rename from apiserver/plane/db/models/issue_type.py rename to apps/server/plane/db/models/issue_type.py diff --git a/apiserver/plane/db/models/label.py b/apps/server/plane/db/models/label.py similarity index 100% rename from apiserver/plane/db/models/label.py rename to apps/server/plane/db/models/label.py diff --git a/apiserver/plane/db/models/module.py b/apps/server/plane/db/models/module.py similarity index 100% rename from apiserver/plane/db/models/module.py rename to apps/server/plane/db/models/module.py diff --git a/apiserver/plane/db/models/notification.py b/apps/server/plane/db/models/notification.py similarity index 100% rename from apiserver/plane/db/models/notification.py rename to apps/server/plane/db/models/notification.py diff --git a/apiserver/plane/db/models/page.py b/apps/server/plane/db/models/page.py similarity index 100% rename from apiserver/plane/db/models/page.py rename to apps/server/plane/db/models/page.py diff --git a/apiserver/plane/db/models/project.py b/apps/server/plane/db/models/project.py similarity index 100% rename from apiserver/plane/db/models/project.py rename to apps/server/plane/db/models/project.py diff --git a/apiserver/plane/db/models/recent_visit.py b/apps/server/plane/db/models/recent_visit.py similarity index 100% rename from apiserver/plane/db/models/recent_visit.py rename to apps/server/plane/db/models/recent_visit.py diff --git a/apiserver/plane/db/models/session.py b/apps/server/plane/db/models/session.py similarity index 100% rename from apiserver/plane/db/models/session.py rename to apps/server/plane/db/models/session.py diff --git a/apiserver/plane/db/models/social_connection.py b/apps/server/plane/db/models/social_connection.py similarity index 100% rename from apiserver/plane/db/models/social_connection.py rename to apps/server/plane/db/models/social_connection.py diff --git a/apiserver/plane/db/models/state.py b/apps/server/plane/db/models/state.py similarity index 100% rename from apiserver/plane/db/models/state.py rename to apps/server/plane/db/models/state.py diff --git a/apiserver/plane/db/models/sticky.py b/apps/server/plane/db/models/sticky.py similarity index 100% rename from apiserver/plane/db/models/sticky.py rename to apps/server/plane/db/models/sticky.py diff --git a/apiserver/plane/db/models/user.py b/apps/server/plane/db/models/user.py similarity index 100% rename from apiserver/plane/db/models/user.py rename to apps/server/plane/db/models/user.py diff --git a/apiserver/plane/db/models/view.py b/apps/server/plane/db/models/view.py similarity index 100% rename from apiserver/plane/db/models/view.py rename to apps/server/plane/db/models/view.py diff --git a/apiserver/plane/db/models/webhook.py b/apps/server/plane/db/models/webhook.py similarity index 100% rename from apiserver/plane/db/models/webhook.py rename to apps/server/plane/db/models/webhook.py diff --git a/apiserver/plane/db/models/workspace.py b/apps/server/plane/db/models/workspace.py similarity index 100% rename from apiserver/plane/db/models/workspace.py rename to apps/server/plane/db/models/workspace.py diff --git a/apiserver/plane/license/__init__.py b/apps/server/plane/license/__init__.py similarity index 100% rename from apiserver/plane/license/__init__.py rename to apps/server/plane/license/__init__.py diff --git a/apiserver/plane/license/api/__init__.py b/apps/server/plane/license/api/__init__.py similarity index 100% rename from apiserver/plane/license/api/__init__.py rename to apps/server/plane/license/api/__init__.py diff --git a/apiserver/plane/license/api/permissions/__init__.py b/apps/server/plane/license/api/permissions/__init__.py similarity index 100% rename from apiserver/plane/license/api/permissions/__init__.py rename to apps/server/plane/license/api/permissions/__init__.py diff --git a/apiserver/plane/license/api/permissions/instance.py b/apps/server/plane/license/api/permissions/instance.py similarity index 100% rename from apiserver/plane/license/api/permissions/instance.py rename to apps/server/plane/license/api/permissions/instance.py diff --git a/apiserver/plane/license/api/serializers/__init__.py b/apps/server/plane/license/api/serializers/__init__.py similarity index 100% rename from apiserver/plane/license/api/serializers/__init__.py rename to apps/server/plane/license/api/serializers/__init__.py diff --git a/apiserver/plane/license/api/serializers/admin.py b/apps/server/plane/license/api/serializers/admin.py similarity index 100% rename from apiserver/plane/license/api/serializers/admin.py rename to apps/server/plane/license/api/serializers/admin.py diff --git a/apiserver/plane/license/api/serializers/base.py b/apps/server/plane/license/api/serializers/base.py similarity index 100% rename from apiserver/plane/license/api/serializers/base.py rename to apps/server/plane/license/api/serializers/base.py diff --git a/apiserver/plane/license/api/serializers/configuration.py b/apps/server/plane/license/api/serializers/configuration.py similarity index 100% rename from apiserver/plane/license/api/serializers/configuration.py rename to apps/server/plane/license/api/serializers/configuration.py diff --git a/apiserver/plane/license/api/serializers/instance.py b/apps/server/plane/license/api/serializers/instance.py similarity index 100% rename from apiserver/plane/license/api/serializers/instance.py rename to apps/server/plane/license/api/serializers/instance.py diff --git a/apiserver/plane/license/api/serializers/user.py b/apps/server/plane/license/api/serializers/user.py similarity index 100% rename from apiserver/plane/license/api/serializers/user.py rename to apps/server/plane/license/api/serializers/user.py diff --git a/apiserver/plane/license/api/serializers/workspace.py b/apps/server/plane/license/api/serializers/workspace.py similarity index 100% rename from apiserver/plane/license/api/serializers/workspace.py rename to apps/server/plane/license/api/serializers/workspace.py diff --git a/apiserver/plane/license/api/views/__init__.py b/apps/server/plane/license/api/views/__init__.py similarity index 100% rename from apiserver/plane/license/api/views/__init__.py rename to apps/server/plane/license/api/views/__init__.py diff --git a/apiserver/plane/license/api/views/admin.py b/apps/server/plane/license/api/views/admin.py similarity index 100% rename from apiserver/plane/license/api/views/admin.py rename to apps/server/plane/license/api/views/admin.py diff --git a/apiserver/plane/license/api/views/base.py b/apps/server/plane/license/api/views/base.py similarity index 100% rename from apiserver/plane/license/api/views/base.py rename to apps/server/plane/license/api/views/base.py diff --git a/apiserver/plane/license/api/views/configuration.py b/apps/server/plane/license/api/views/configuration.py similarity index 100% rename from apiserver/plane/license/api/views/configuration.py rename to apps/server/plane/license/api/views/configuration.py diff --git a/apiserver/plane/license/api/views/instance.py b/apps/server/plane/license/api/views/instance.py similarity index 100% rename from apiserver/plane/license/api/views/instance.py rename to apps/server/plane/license/api/views/instance.py diff --git a/apiserver/plane/license/api/views/workspace.py b/apps/server/plane/license/api/views/workspace.py similarity index 100% rename from apiserver/plane/license/api/views/workspace.py rename to apps/server/plane/license/api/views/workspace.py diff --git a/apiserver/plane/license/apps.py b/apps/server/plane/license/apps.py similarity index 100% rename from apiserver/plane/license/apps.py rename to apps/server/plane/license/apps.py diff --git a/apiserver/plane/license/bgtasks/__init__.py b/apps/server/plane/license/bgtasks/__init__.py similarity index 100% rename from apiserver/plane/license/bgtasks/__init__.py rename to apps/server/plane/license/bgtasks/__init__.py diff --git a/apiserver/plane/license/bgtasks/tracer.py b/apps/server/plane/license/bgtasks/tracer.py similarity index 100% rename from apiserver/plane/license/bgtasks/tracer.py rename to apps/server/plane/license/bgtasks/tracer.py diff --git a/apiserver/plane/license/management/__init__.py b/apps/server/plane/license/management/__init__.py similarity index 100% rename from apiserver/plane/license/management/__init__.py rename to apps/server/plane/license/management/__init__.py diff --git a/apiserver/plane/license/management/commands/__init__.py b/apps/server/plane/license/management/commands/__init__.py similarity index 100% rename from apiserver/plane/license/management/commands/__init__.py rename to apps/server/plane/license/management/commands/__init__.py diff --git a/apiserver/plane/license/management/commands/configure_instance.py b/apps/server/plane/license/management/commands/configure_instance.py similarity index 100% rename from apiserver/plane/license/management/commands/configure_instance.py rename to apps/server/plane/license/management/commands/configure_instance.py diff --git a/apiserver/plane/license/management/commands/register_instance.py b/apps/server/plane/license/management/commands/register_instance.py similarity index 100% rename from apiserver/plane/license/management/commands/register_instance.py rename to apps/server/plane/license/management/commands/register_instance.py diff --git a/apiserver/plane/license/migrations/0001_initial.py b/apps/server/plane/license/migrations/0001_initial.py similarity index 100% rename from apiserver/plane/license/migrations/0001_initial.py rename to apps/server/plane/license/migrations/0001_initial.py diff --git a/apiserver/plane/license/migrations/0002_rename_version_instance_current_version_and_more.py b/apps/server/plane/license/migrations/0002_rename_version_instance_current_version_and_more.py similarity index 100% rename from apiserver/plane/license/migrations/0002_rename_version_instance_current_version_and_more.py rename to apps/server/plane/license/migrations/0002_rename_version_instance_current_version_and_more.py diff --git a/apiserver/plane/license/migrations/0003_alter_changelog_title_alter_changelog_version_and_more.py b/apps/server/plane/license/migrations/0003_alter_changelog_title_alter_changelog_version_and_more.py similarity index 100% rename from apiserver/plane/license/migrations/0003_alter_changelog_title_alter_changelog_version_and_more.py rename to apps/server/plane/license/migrations/0003_alter_changelog_title_alter_changelog_version_and_more.py diff --git a/apiserver/plane/license/migrations/0004_changelog_deleted_at_instance_deleted_at_and_more.py b/apps/server/plane/license/migrations/0004_changelog_deleted_at_instance_deleted_at_and_more.py similarity index 100% rename from apiserver/plane/license/migrations/0004_changelog_deleted_at_instance_deleted_at_and_more.py rename to apps/server/plane/license/migrations/0004_changelog_deleted_at_instance_deleted_at_and_more.py diff --git a/apiserver/plane/license/migrations/0005_rename_product_instance_edition_and_more.py b/apps/server/plane/license/migrations/0005_rename_product_instance_edition_and_more.py similarity index 100% rename from apiserver/plane/license/migrations/0005_rename_product_instance_edition_and_more.py rename to apps/server/plane/license/migrations/0005_rename_product_instance_edition_and_more.py diff --git a/apiserver/plane/license/migrations/__init__.py b/apps/server/plane/license/migrations/__init__.py similarity index 100% rename from apiserver/plane/license/migrations/__init__.py rename to apps/server/plane/license/migrations/__init__.py diff --git a/apiserver/plane/license/models/__init__.py b/apps/server/plane/license/models/__init__.py similarity index 100% rename from apiserver/plane/license/models/__init__.py rename to apps/server/plane/license/models/__init__.py diff --git a/apiserver/plane/license/models/instance.py b/apps/server/plane/license/models/instance.py similarity index 100% rename from apiserver/plane/license/models/instance.py rename to apps/server/plane/license/models/instance.py diff --git a/apiserver/plane/license/urls.py b/apps/server/plane/license/urls.py similarity index 100% rename from apiserver/plane/license/urls.py rename to apps/server/plane/license/urls.py diff --git a/apiserver/plane/license/utils/__init__.py b/apps/server/plane/license/utils/__init__.py similarity index 100% rename from apiserver/plane/license/utils/__init__.py rename to apps/server/plane/license/utils/__init__.py diff --git a/apiserver/plane/license/utils/encryption.py b/apps/server/plane/license/utils/encryption.py similarity index 100% rename from apiserver/plane/license/utils/encryption.py rename to apps/server/plane/license/utils/encryption.py diff --git a/apiserver/plane/license/utils/instance_value.py b/apps/server/plane/license/utils/instance_value.py similarity index 100% rename from apiserver/plane/license/utils/instance_value.py rename to apps/server/plane/license/utils/instance_value.py diff --git a/apiserver/plane/middleware/__init__.py b/apps/server/plane/middleware/__init__.py similarity index 100% rename from apiserver/plane/middleware/__init__.py rename to apps/server/plane/middleware/__init__.py diff --git a/apiserver/plane/middleware/apps.py b/apps/server/plane/middleware/apps.py similarity index 100% rename from apiserver/plane/middleware/apps.py rename to apps/server/plane/middleware/apps.py diff --git a/apiserver/plane/middleware/logger.py b/apps/server/plane/middleware/logger.py similarity index 100% rename from apiserver/plane/middleware/logger.py rename to apps/server/plane/middleware/logger.py diff --git a/apiserver/plane/seeds/data/issues.json b/apps/server/plane/seeds/data/issues.json similarity index 100% rename from apiserver/plane/seeds/data/issues.json rename to apps/server/plane/seeds/data/issues.json diff --git a/apiserver/plane/seeds/data/labels.json b/apps/server/plane/seeds/data/labels.json similarity index 100% rename from apiserver/plane/seeds/data/labels.json rename to apps/server/plane/seeds/data/labels.json diff --git a/apiserver/plane/seeds/data/projects.json b/apps/server/plane/seeds/data/projects.json similarity index 100% rename from apiserver/plane/seeds/data/projects.json rename to apps/server/plane/seeds/data/projects.json diff --git a/apiserver/plane/seeds/data/states.json b/apps/server/plane/seeds/data/states.json similarity index 100% rename from apiserver/plane/seeds/data/states.json rename to apps/server/plane/seeds/data/states.json diff --git a/apiserver/plane/settings/__init__.py b/apps/server/plane/settings/__init__.py similarity index 100% rename from apiserver/plane/settings/__init__.py rename to apps/server/plane/settings/__init__.py diff --git a/apiserver/plane/settings/common.py b/apps/server/plane/settings/common.py similarity index 100% rename from apiserver/plane/settings/common.py rename to apps/server/plane/settings/common.py diff --git a/apiserver/plane/settings/local.py b/apps/server/plane/settings/local.py similarity index 100% rename from apiserver/plane/settings/local.py rename to apps/server/plane/settings/local.py diff --git a/apiserver/plane/settings/production.py b/apps/server/plane/settings/production.py similarity index 100% rename from apiserver/plane/settings/production.py rename to apps/server/plane/settings/production.py diff --git a/apiserver/plane/settings/redis.py b/apps/server/plane/settings/redis.py similarity index 100% rename from apiserver/plane/settings/redis.py rename to apps/server/plane/settings/redis.py diff --git a/apiserver/plane/settings/storage.py b/apps/server/plane/settings/storage.py similarity index 100% rename from apiserver/plane/settings/storage.py rename to apps/server/plane/settings/storage.py diff --git a/apiserver/plane/settings/test.py b/apps/server/plane/settings/test.py similarity index 100% rename from apiserver/plane/settings/test.py rename to apps/server/plane/settings/test.py diff --git a/apiserver/plane/space/__init__.py b/apps/server/plane/space/__init__.py similarity index 100% rename from apiserver/plane/space/__init__.py rename to apps/server/plane/space/__init__.py diff --git a/apiserver/plane/space/apps.py b/apps/server/plane/space/apps.py similarity index 100% rename from apiserver/plane/space/apps.py rename to apps/server/plane/space/apps.py diff --git a/apiserver/plane/space/serializer/__init__.py b/apps/server/plane/space/serializer/__init__.py similarity index 100% rename from apiserver/plane/space/serializer/__init__.py rename to apps/server/plane/space/serializer/__init__.py diff --git a/apiserver/plane/space/serializer/base.py b/apps/server/plane/space/serializer/base.py similarity index 100% rename from apiserver/plane/space/serializer/base.py rename to apps/server/plane/space/serializer/base.py diff --git a/apiserver/plane/space/serializer/cycle.py b/apps/server/plane/space/serializer/cycle.py similarity index 100% rename from apiserver/plane/space/serializer/cycle.py rename to apps/server/plane/space/serializer/cycle.py diff --git a/apiserver/plane/space/serializer/intake.py b/apps/server/plane/space/serializer/intake.py similarity index 100% rename from apiserver/plane/space/serializer/intake.py rename to apps/server/plane/space/serializer/intake.py diff --git a/apiserver/plane/space/serializer/issue.py b/apps/server/plane/space/serializer/issue.py similarity index 100% rename from apiserver/plane/space/serializer/issue.py rename to apps/server/plane/space/serializer/issue.py diff --git a/apiserver/plane/space/serializer/module.py b/apps/server/plane/space/serializer/module.py similarity index 100% rename from apiserver/plane/space/serializer/module.py rename to apps/server/plane/space/serializer/module.py diff --git a/apiserver/plane/space/serializer/project.py b/apps/server/plane/space/serializer/project.py similarity index 100% rename from apiserver/plane/space/serializer/project.py rename to apps/server/plane/space/serializer/project.py diff --git a/apiserver/plane/space/serializer/state.py b/apps/server/plane/space/serializer/state.py similarity index 100% rename from apiserver/plane/space/serializer/state.py rename to apps/server/plane/space/serializer/state.py diff --git a/apiserver/plane/space/serializer/user.py b/apps/server/plane/space/serializer/user.py similarity index 100% rename from apiserver/plane/space/serializer/user.py rename to apps/server/plane/space/serializer/user.py diff --git a/apiserver/plane/space/serializer/workspace.py b/apps/server/plane/space/serializer/workspace.py similarity index 100% rename from apiserver/plane/space/serializer/workspace.py rename to apps/server/plane/space/serializer/workspace.py diff --git a/apiserver/plane/space/urls/__init__.py b/apps/server/plane/space/urls/__init__.py similarity index 100% rename from apiserver/plane/space/urls/__init__.py rename to apps/server/plane/space/urls/__init__.py diff --git a/apiserver/plane/space/urls/asset.py b/apps/server/plane/space/urls/asset.py similarity index 100% rename from apiserver/plane/space/urls/asset.py rename to apps/server/plane/space/urls/asset.py diff --git a/apiserver/plane/space/urls/intake.py b/apps/server/plane/space/urls/intake.py similarity index 100% rename from apiserver/plane/space/urls/intake.py rename to apps/server/plane/space/urls/intake.py diff --git a/apiserver/plane/space/urls/issue.py b/apps/server/plane/space/urls/issue.py similarity index 100% rename from apiserver/plane/space/urls/issue.py rename to apps/server/plane/space/urls/issue.py diff --git a/apiserver/plane/space/urls/project.py b/apps/server/plane/space/urls/project.py similarity index 100% rename from apiserver/plane/space/urls/project.py rename to apps/server/plane/space/urls/project.py diff --git a/apiserver/plane/space/utils/grouper.py b/apps/server/plane/space/utils/grouper.py similarity index 100% rename from apiserver/plane/space/utils/grouper.py rename to apps/server/plane/space/utils/grouper.py diff --git a/apiserver/plane/space/views/__init__.py b/apps/server/plane/space/views/__init__.py similarity index 100% rename from apiserver/plane/space/views/__init__.py rename to apps/server/plane/space/views/__init__.py diff --git a/apiserver/plane/space/views/asset.py b/apps/server/plane/space/views/asset.py similarity index 100% rename from apiserver/plane/space/views/asset.py rename to apps/server/plane/space/views/asset.py diff --git a/apiserver/plane/space/views/base.py b/apps/server/plane/space/views/base.py similarity index 100% rename from apiserver/plane/space/views/base.py rename to apps/server/plane/space/views/base.py diff --git a/apiserver/plane/space/views/cycle.py b/apps/server/plane/space/views/cycle.py similarity index 100% rename from apiserver/plane/space/views/cycle.py rename to apps/server/plane/space/views/cycle.py diff --git a/apiserver/plane/space/views/intake.py b/apps/server/plane/space/views/intake.py similarity index 100% rename from apiserver/plane/space/views/intake.py rename to apps/server/plane/space/views/intake.py diff --git a/apiserver/plane/space/views/issue.py b/apps/server/plane/space/views/issue.py similarity index 100% rename from apiserver/plane/space/views/issue.py rename to apps/server/plane/space/views/issue.py diff --git a/apiserver/plane/space/views/label.py b/apps/server/plane/space/views/label.py similarity index 100% rename from apiserver/plane/space/views/label.py rename to apps/server/plane/space/views/label.py diff --git a/apiserver/plane/space/views/meta.py b/apps/server/plane/space/views/meta.py similarity index 100% rename from apiserver/plane/space/views/meta.py rename to apps/server/plane/space/views/meta.py diff --git a/apiserver/plane/space/views/module.py b/apps/server/plane/space/views/module.py similarity index 100% rename from apiserver/plane/space/views/module.py rename to apps/server/plane/space/views/module.py diff --git a/apiserver/plane/space/views/project.py b/apps/server/plane/space/views/project.py similarity index 100% rename from apiserver/plane/space/views/project.py rename to apps/server/plane/space/views/project.py diff --git a/apiserver/plane/space/views/state.py b/apps/server/plane/space/views/state.py similarity index 100% rename from apiserver/plane/space/views/state.py rename to apps/server/plane/space/views/state.py diff --git a/apiserver/plane/static/css/style.css b/apps/server/plane/static/css/style.css similarity index 100% rename from apiserver/plane/static/css/style.css rename to apps/server/plane/static/css/style.css diff --git a/apiserver/plane/static/humans.txt b/apps/server/plane/static/humans.txt similarity index 100% rename from apiserver/plane/static/humans.txt rename to apps/server/plane/static/humans.txt diff --git a/apiserver/plane/static/js/script.js b/apps/server/plane/static/js/script.js similarity index 100% rename from apiserver/plane/static/js/script.js rename to apps/server/plane/static/js/script.js diff --git a/apiserver/plane/tests/README.md b/apps/server/plane/tests/README.md similarity index 100% rename from apiserver/plane/tests/README.md rename to apps/server/plane/tests/README.md diff --git a/apiserver/plane/tests/TESTING_GUIDE.md b/apps/server/plane/tests/TESTING_GUIDE.md similarity index 100% rename from apiserver/plane/tests/TESTING_GUIDE.md rename to apps/server/plane/tests/TESTING_GUIDE.md diff --git a/apiserver/plane/tests/__init__.py b/apps/server/plane/tests/__init__.py similarity index 100% rename from apiserver/plane/tests/__init__.py rename to apps/server/plane/tests/__init__.py diff --git a/apiserver/plane/tests/apps.py b/apps/server/plane/tests/apps.py similarity index 100% rename from apiserver/plane/tests/apps.py rename to apps/server/plane/tests/apps.py diff --git a/apiserver/plane/tests/conftest.py b/apps/server/plane/tests/conftest.py similarity index 100% rename from apiserver/plane/tests/conftest.py rename to apps/server/plane/tests/conftest.py diff --git a/apiserver/plane/tests/conftest_external.py b/apps/server/plane/tests/conftest_external.py similarity index 100% rename from apiserver/plane/tests/conftest_external.py rename to apps/server/plane/tests/conftest_external.py diff --git a/apiserver/plane/tests/contract/__init__.py b/apps/server/plane/tests/contract/__init__.py similarity index 100% rename from apiserver/plane/tests/contract/__init__.py rename to apps/server/plane/tests/contract/__init__.py diff --git a/apiserver/plane/tests/contract/api/__init__.py b/apps/server/plane/tests/contract/api/__init__.py similarity index 100% rename from apiserver/plane/tests/contract/api/__init__.py rename to apps/server/plane/tests/contract/api/__init__.py diff --git a/apiserver/plane/tests/contract/app/__init__.py b/apps/server/plane/tests/contract/app/__init__.py similarity index 100% rename from apiserver/plane/tests/contract/app/__init__.py rename to apps/server/plane/tests/contract/app/__init__.py diff --git a/apiserver/plane/tests/contract/app/test_api_token.py b/apps/server/plane/tests/contract/app/test_api_token.py similarity index 100% rename from apiserver/plane/tests/contract/app/test_api_token.py rename to apps/server/plane/tests/contract/app/test_api_token.py diff --git a/apiserver/plane/tests/contract/app/test_authentication.py b/apps/server/plane/tests/contract/app/test_authentication.py similarity index 100% rename from apiserver/plane/tests/contract/app/test_authentication.py rename to apps/server/plane/tests/contract/app/test_authentication.py diff --git a/apiserver/plane/tests/contract/app/test_project_app.py b/apps/server/plane/tests/contract/app/test_project_app.py similarity index 100% rename from apiserver/plane/tests/contract/app/test_project_app.py rename to apps/server/plane/tests/contract/app/test_project_app.py diff --git a/apiserver/plane/tests/contract/app/test_workspace_app.py b/apps/server/plane/tests/contract/app/test_workspace_app.py similarity index 100% rename from apiserver/plane/tests/contract/app/test_workspace_app.py rename to apps/server/plane/tests/contract/app/test_workspace_app.py diff --git a/apiserver/plane/tests/factories.py b/apps/server/plane/tests/factories.py similarity index 100% rename from apiserver/plane/tests/factories.py rename to apps/server/plane/tests/factories.py diff --git a/apiserver/plane/tests/smoke/__init__.py b/apps/server/plane/tests/smoke/__init__.py similarity index 100% rename from apiserver/plane/tests/smoke/__init__.py rename to apps/server/plane/tests/smoke/__init__.py diff --git a/apiserver/plane/tests/smoke/test_auth_smoke.py b/apps/server/plane/tests/smoke/test_auth_smoke.py similarity index 100% rename from apiserver/plane/tests/smoke/test_auth_smoke.py rename to apps/server/plane/tests/smoke/test_auth_smoke.py diff --git a/apiserver/plane/tests/unit/__init__.py b/apps/server/plane/tests/unit/__init__.py similarity index 100% rename from apiserver/plane/tests/unit/__init__.py rename to apps/server/plane/tests/unit/__init__.py diff --git a/apiserver/plane/tests/unit/models/__init__.py b/apps/server/plane/tests/unit/models/__init__.py similarity index 100% rename from apiserver/plane/tests/unit/models/__init__.py rename to apps/server/plane/tests/unit/models/__init__.py diff --git a/apiserver/plane/tests/unit/models/test_workspace_model.py b/apps/server/plane/tests/unit/models/test_workspace_model.py similarity index 100% rename from apiserver/plane/tests/unit/models/test_workspace_model.py rename to apps/server/plane/tests/unit/models/test_workspace_model.py diff --git a/apiserver/plane/tests/unit/serializers/__init__.py b/apps/server/plane/tests/unit/serializers/__init__.py similarity index 100% rename from apiserver/plane/tests/unit/serializers/__init__.py rename to apps/server/plane/tests/unit/serializers/__init__.py diff --git a/apiserver/plane/tests/unit/serializers/test_issue_recent_visit.py b/apps/server/plane/tests/unit/serializers/test_issue_recent_visit.py similarity index 100% rename from apiserver/plane/tests/unit/serializers/test_issue_recent_visit.py rename to apps/server/plane/tests/unit/serializers/test_issue_recent_visit.py diff --git a/apiserver/plane/tests/unit/serializers/test_workspace.py b/apps/server/plane/tests/unit/serializers/test_workspace.py similarity index 100% rename from apiserver/plane/tests/unit/serializers/test_workspace.py rename to apps/server/plane/tests/unit/serializers/test_workspace.py diff --git a/apiserver/plane/tests/unit/utils/__init__.py b/apps/server/plane/tests/unit/utils/__init__.py similarity index 100% rename from apiserver/plane/tests/unit/utils/__init__.py rename to apps/server/plane/tests/unit/utils/__init__.py diff --git a/apiserver/plane/tests/unit/utils/test_uuid.py b/apps/server/plane/tests/unit/utils/test_uuid.py similarity index 100% rename from apiserver/plane/tests/unit/utils/test_uuid.py rename to apps/server/plane/tests/unit/utils/test_uuid.py diff --git a/apiserver/plane/urls.py b/apps/server/plane/urls.py similarity index 100% rename from apiserver/plane/urls.py rename to apps/server/plane/urls.py diff --git a/apiserver/plane/utils/__init__.py b/apps/server/plane/utils/__init__.py similarity index 100% rename from apiserver/plane/utils/__init__.py rename to apps/server/plane/utils/__init__.py diff --git a/apiserver/plane/utils/analytics_plot.py b/apps/server/plane/utils/analytics_plot.py similarity index 100% rename from apiserver/plane/utils/analytics_plot.py rename to apps/server/plane/utils/analytics_plot.py diff --git a/apiserver/plane/utils/build_chart.py b/apps/server/plane/utils/build_chart.py similarity index 100% rename from apiserver/plane/utils/build_chart.py rename to apps/server/plane/utils/build_chart.py diff --git a/apiserver/plane/utils/cache.py b/apps/server/plane/utils/cache.py similarity index 100% rename from apiserver/plane/utils/cache.py rename to apps/server/plane/utils/cache.py diff --git a/apiserver/plane/utils/constants.py b/apps/server/plane/utils/constants.py similarity index 100% rename from apiserver/plane/utils/constants.py rename to apps/server/plane/utils/constants.py diff --git a/apiserver/plane/utils/date_utils.py b/apps/server/plane/utils/date_utils.py similarity index 100% rename from apiserver/plane/utils/date_utils.py rename to apps/server/plane/utils/date_utils.py diff --git a/apiserver/plane/utils/error_codes.py b/apps/server/plane/utils/error_codes.py similarity index 100% rename from apiserver/plane/utils/error_codes.py rename to apps/server/plane/utils/error_codes.py diff --git a/apiserver/plane/utils/exception_logger.py b/apps/server/plane/utils/exception_logger.py similarity index 100% rename from apiserver/plane/utils/exception_logger.py rename to apps/server/plane/utils/exception_logger.py diff --git a/apiserver/plane/utils/global_paginator.py b/apps/server/plane/utils/global_paginator.py similarity index 100% rename from apiserver/plane/utils/global_paginator.py rename to apps/server/plane/utils/global_paginator.py diff --git a/apiserver/plane/utils/grouper.py b/apps/server/plane/utils/grouper.py similarity index 100% rename from apiserver/plane/utils/grouper.py rename to apps/server/plane/utils/grouper.py diff --git a/apiserver/plane/utils/host.py b/apps/server/plane/utils/host.py similarity index 100% rename from apiserver/plane/utils/host.py rename to apps/server/plane/utils/host.py diff --git a/apiserver/plane/utils/html_processor.py b/apps/server/plane/utils/html_processor.py similarity index 100% rename from apiserver/plane/utils/html_processor.py rename to apps/server/plane/utils/html_processor.py diff --git a/apiserver/plane/utils/imports.py b/apps/server/plane/utils/imports.py similarity index 100% rename from apiserver/plane/utils/imports.py rename to apps/server/plane/utils/imports.py diff --git a/apiserver/plane/utils/ip_address.py b/apps/server/plane/utils/ip_address.py similarity index 100% rename from apiserver/plane/utils/ip_address.py rename to apps/server/plane/utils/ip_address.py diff --git a/apiserver/plane/utils/issue_filters.py b/apps/server/plane/utils/issue_filters.py similarity index 100% rename from apiserver/plane/utils/issue_filters.py rename to apps/server/plane/utils/issue_filters.py diff --git a/apiserver/plane/utils/issue_relation_mapper.py b/apps/server/plane/utils/issue_relation_mapper.py similarity index 100% rename from apiserver/plane/utils/issue_relation_mapper.py rename to apps/server/plane/utils/issue_relation_mapper.py diff --git a/apiserver/plane/utils/issue_search.py b/apps/server/plane/utils/issue_search.py similarity index 100% rename from apiserver/plane/utils/issue_search.py rename to apps/server/plane/utils/issue_search.py diff --git a/apiserver/plane/utils/logging.py b/apps/server/plane/utils/logging.py similarity index 100% rename from apiserver/plane/utils/logging.py rename to apps/server/plane/utils/logging.py diff --git a/apiserver/plane/utils/markdown.py b/apps/server/plane/utils/markdown.py similarity index 100% rename from apiserver/plane/utils/markdown.py rename to apps/server/plane/utils/markdown.py diff --git a/apiserver/plane/utils/order_queryset.py b/apps/server/plane/utils/order_queryset.py similarity index 100% rename from apiserver/plane/utils/order_queryset.py rename to apps/server/plane/utils/order_queryset.py diff --git a/apiserver/plane/utils/paginator.py b/apps/server/plane/utils/paginator.py similarity index 100% rename from apiserver/plane/utils/paginator.py rename to apps/server/plane/utils/paginator.py diff --git a/apiserver/plane/utils/path_validator.py b/apps/server/plane/utils/path_validator.py similarity index 100% rename from apiserver/plane/utils/path_validator.py rename to apps/server/plane/utils/path_validator.py diff --git a/apiserver/plane/utils/telemetry.py b/apps/server/plane/utils/telemetry.py similarity index 100% rename from apiserver/plane/utils/telemetry.py rename to apps/server/plane/utils/telemetry.py diff --git a/apiserver/plane/utils/timezone_converter.py b/apps/server/plane/utils/timezone_converter.py similarity index 100% rename from apiserver/plane/utils/timezone_converter.py rename to apps/server/plane/utils/timezone_converter.py diff --git a/apiserver/plane/utils/url.py b/apps/server/plane/utils/url.py similarity index 100% rename from apiserver/plane/utils/url.py rename to apps/server/plane/utils/url.py diff --git a/apiserver/plane/utils/uuid.py b/apps/server/plane/utils/uuid.py similarity index 100% rename from apiserver/plane/utils/uuid.py rename to apps/server/plane/utils/uuid.py diff --git a/apiserver/plane/web/__init__.py b/apps/server/plane/web/__init__.py similarity index 100% rename from apiserver/plane/web/__init__.py rename to apps/server/plane/web/__init__.py diff --git a/apiserver/plane/web/apps.py b/apps/server/plane/web/apps.py similarity index 100% rename from apiserver/plane/web/apps.py rename to apps/server/plane/web/apps.py diff --git a/apiserver/plane/web/urls.py b/apps/server/plane/web/urls.py similarity index 100% rename from apiserver/plane/web/urls.py rename to apps/server/plane/web/urls.py diff --git a/apiserver/plane/web/views.py b/apps/server/plane/web/views.py similarity index 100% rename from apiserver/plane/web/views.py rename to apps/server/plane/web/views.py diff --git a/apiserver/plane/wsgi.py b/apps/server/plane/wsgi.py similarity index 100% rename from apiserver/plane/wsgi.py rename to apps/server/plane/wsgi.py diff --git a/apiserver/pyproject.toml b/apps/server/pyproject.toml similarity index 100% rename from apiserver/pyproject.toml rename to apps/server/pyproject.toml diff --git a/apiserver/pytest.ini b/apps/server/pytest.ini similarity index 100% rename from apiserver/pytest.ini rename to apps/server/pytest.ini diff --git a/apiserver/requirements.txt b/apps/server/requirements.txt similarity index 100% rename from apiserver/requirements.txt rename to apps/server/requirements.txt diff --git a/apiserver/requirements/base.txt b/apps/server/requirements/base.txt similarity index 100% rename from apiserver/requirements/base.txt rename to apps/server/requirements/base.txt diff --git a/apiserver/requirements/local.txt b/apps/server/requirements/local.txt similarity index 100% rename from apiserver/requirements/local.txt rename to apps/server/requirements/local.txt diff --git a/apiserver/requirements/production.txt b/apps/server/requirements/production.txt similarity index 100% rename from apiserver/requirements/production.txt rename to apps/server/requirements/production.txt diff --git a/apiserver/requirements/test.txt b/apps/server/requirements/test.txt similarity index 100% rename from apiserver/requirements/test.txt rename to apps/server/requirements/test.txt diff --git a/apiserver/run_tests.py b/apps/server/run_tests.py similarity index 100% rename from apiserver/run_tests.py rename to apps/server/run_tests.py diff --git a/apiserver/run_tests.sh b/apps/server/run_tests.sh similarity index 100% rename from apiserver/run_tests.sh rename to apps/server/run_tests.sh diff --git a/apiserver/runtime.txt b/apps/server/runtime.txt similarity index 100% rename from apiserver/runtime.txt rename to apps/server/runtime.txt diff --git a/apiserver/templates/admin/base_site.html b/apps/server/templates/admin/base_site.html similarity index 100% rename from apiserver/templates/admin/base_site.html rename to apps/server/templates/admin/base_site.html diff --git a/apiserver/templates/base.html b/apps/server/templates/base.html similarity index 100% rename from apiserver/templates/base.html rename to apps/server/templates/base.html diff --git a/apiserver/templates/csrf_failure.html b/apps/server/templates/csrf_failure.html similarity index 100% rename from apiserver/templates/csrf_failure.html rename to apps/server/templates/csrf_failure.html diff --git a/apiserver/templates/emails/auth/forgot_password.html b/apps/server/templates/emails/auth/forgot_password.html similarity index 100% rename from apiserver/templates/emails/auth/forgot_password.html rename to apps/server/templates/emails/auth/forgot_password.html diff --git a/apiserver/templates/emails/auth/magic_signin.html b/apps/server/templates/emails/auth/magic_signin.html similarity index 100% rename from apiserver/templates/emails/auth/magic_signin.html rename to apps/server/templates/emails/auth/magic_signin.html diff --git a/apiserver/templates/emails/exports/analytics.html b/apps/server/templates/emails/exports/analytics.html similarity index 100% rename from apiserver/templates/emails/exports/analytics.html rename to apps/server/templates/emails/exports/analytics.html diff --git a/apiserver/templates/emails/invitations/project_invitation.html b/apps/server/templates/emails/invitations/project_invitation.html similarity index 100% rename from apiserver/templates/emails/invitations/project_invitation.html rename to apps/server/templates/emails/invitations/project_invitation.html diff --git a/apiserver/templates/emails/invitations/workspace_invitation.html b/apps/server/templates/emails/invitations/workspace_invitation.html similarity index 100% rename from apiserver/templates/emails/invitations/workspace_invitation.html rename to apps/server/templates/emails/invitations/workspace_invitation.html diff --git a/apiserver/templates/emails/notifications/issue-updates.html b/apps/server/templates/emails/notifications/issue-updates.html similarity index 100% rename from apiserver/templates/emails/notifications/issue-updates.html rename to apps/server/templates/emails/notifications/issue-updates.html diff --git a/apiserver/templates/emails/notifications/project_addition.html b/apps/server/templates/emails/notifications/project_addition.html similarity index 100% rename from apiserver/templates/emails/notifications/project_addition.html rename to apps/server/templates/emails/notifications/project_addition.html diff --git a/apiserver/templates/emails/notifications/webhook-deactivate.html b/apps/server/templates/emails/notifications/webhook-deactivate.html similarity index 100% rename from apiserver/templates/emails/notifications/webhook-deactivate.html rename to apps/server/templates/emails/notifications/webhook-deactivate.html diff --git a/apiserver/templates/emails/test_email.html b/apps/server/templates/emails/test_email.html similarity index 100% rename from apiserver/templates/emails/test_email.html rename to apps/server/templates/emails/test_email.html diff --git a/apiserver/templates/emails/user/user_activation.html b/apps/server/templates/emails/user/user_activation.html similarity index 100% rename from apiserver/templates/emails/user/user_activation.html rename to apps/server/templates/emails/user/user_activation.html diff --git a/apiserver/templates/emails/user/user_deactivation.html b/apps/server/templates/emails/user/user_deactivation.html similarity index 100% rename from apiserver/templates/emails/user/user_deactivation.html rename to apps/server/templates/emails/user/user_deactivation.html diff --git a/space/.env.example b/apps/space/.env.example similarity index 100% rename from space/.env.example rename to apps/space/.env.example diff --git a/space/.eslintrc.js b/apps/space/.eslintrc.js similarity index 100% rename from space/.eslintrc.js rename to apps/space/.eslintrc.js diff --git a/space/.gitignore b/apps/space/.gitignore similarity index 100% rename from space/.gitignore rename to apps/space/.gitignore diff --git a/space/.prettierignore b/apps/space/.prettierignore similarity index 100% rename from space/.prettierignore rename to apps/space/.prettierignore diff --git a/space/.prettierrc.json b/apps/space/.prettierrc.json similarity index 100% rename from space/.prettierrc.json rename to apps/space/.prettierrc.json diff --git a/space/Dockerfile.dev b/apps/space/Dockerfile.dev similarity index 100% rename from space/Dockerfile.dev rename to apps/space/Dockerfile.dev diff --git a/space/Dockerfile.space b/apps/space/Dockerfile.space similarity index 100% rename from space/Dockerfile.space rename to apps/space/Dockerfile.space diff --git a/space/README.md b/apps/space/README.md similarity index 100% rename from space/README.md rename to apps/space/README.md diff --git a/space/additional.d.ts b/apps/space/additional.d.ts similarity index 100% rename from space/additional.d.ts rename to apps/space/additional.d.ts diff --git a/space/app/[workspaceSlug]/[projectId]/page.ts b/apps/space/app/[workspaceSlug]/[projectId]/page.ts similarity index 100% rename from space/app/[workspaceSlug]/[projectId]/page.ts rename to apps/space/app/[workspaceSlug]/[projectId]/page.ts diff --git a/space/app/error.tsx b/apps/space/app/error.tsx similarity index 100% rename from space/app/error.tsx rename to apps/space/app/error.tsx diff --git a/space/app/issues/[anchor]/client-layout.tsx b/apps/space/app/issues/[anchor]/client-layout.tsx similarity index 100% rename from space/app/issues/[anchor]/client-layout.tsx rename to apps/space/app/issues/[anchor]/client-layout.tsx diff --git a/space/app/issues/[anchor]/layout.tsx b/apps/space/app/issues/[anchor]/layout.tsx similarity index 100% rename from space/app/issues/[anchor]/layout.tsx rename to apps/space/app/issues/[anchor]/layout.tsx diff --git a/space/app/issues/[anchor]/page.tsx b/apps/space/app/issues/[anchor]/page.tsx similarity index 100% rename from space/app/issues/[anchor]/page.tsx rename to apps/space/app/issues/[anchor]/page.tsx diff --git a/space/app/layout.tsx b/apps/space/app/layout.tsx similarity index 100% rename from space/app/layout.tsx rename to apps/space/app/layout.tsx diff --git a/space/app/not-found.tsx b/apps/space/app/not-found.tsx similarity index 100% rename from space/app/not-found.tsx rename to apps/space/app/not-found.tsx diff --git a/space/app/page.tsx b/apps/space/app/page.tsx similarity index 100% rename from space/app/page.tsx rename to apps/space/app/page.tsx diff --git a/space/app/provider.tsx b/apps/space/app/provider.tsx similarity index 100% rename from space/app/provider.tsx rename to apps/space/app/provider.tsx diff --git a/space/app/views/[anchor]/layout.tsx b/apps/space/app/views/[anchor]/layout.tsx similarity index 100% rename from space/app/views/[anchor]/layout.tsx rename to apps/space/app/views/[anchor]/layout.tsx diff --git a/space/app/views/[anchor]/page.tsx b/apps/space/app/views/[anchor]/page.tsx similarity index 100% rename from space/app/views/[anchor]/page.tsx rename to apps/space/app/views/[anchor]/page.tsx diff --git a/space/ce/components/editor/embeds/index.ts b/apps/space/ce/components/editor/embeds/index.ts similarity index 100% rename from space/ce/components/editor/embeds/index.ts rename to apps/space/ce/components/editor/embeds/index.ts diff --git a/space/ce/components/editor/embeds/mentions/index.ts b/apps/space/ce/components/editor/embeds/mentions/index.ts similarity index 100% rename from space/ce/components/editor/embeds/mentions/index.ts rename to apps/space/ce/components/editor/embeds/mentions/index.ts diff --git a/space/ce/components/editor/embeds/mentions/root.tsx b/apps/space/ce/components/editor/embeds/mentions/root.tsx similarity index 100% rename from space/ce/components/editor/embeds/mentions/root.tsx rename to apps/space/ce/components/editor/embeds/mentions/root.tsx diff --git a/space/ce/components/editor/index.ts b/apps/space/ce/components/editor/index.ts similarity index 100% rename from space/ce/components/editor/index.ts rename to apps/space/ce/components/editor/index.ts diff --git a/space/ce/components/issue-layouts/root.tsx b/apps/space/ce/components/issue-layouts/root.tsx similarity index 100% rename from space/ce/components/issue-layouts/root.tsx rename to apps/space/ce/components/issue-layouts/root.tsx diff --git a/space/ce/components/navbar/index.tsx b/apps/space/ce/components/navbar/index.tsx similarity index 100% rename from space/ce/components/navbar/index.tsx rename to apps/space/ce/components/navbar/index.tsx diff --git a/space/ce/hooks/store/index.ts b/apps/space/ce/hooks/store/index.ts similarity index 100% rename from space/ce/hooks/store/index.ts rename to apps/space/ce/hooks/store/index.ts diff --git a/space/ce/hooks/store/use-published-view.ts b/apps/space/ce/hooks/store/use-published-view.ts similarity index 100% rename from space/ce/hooks/store/use-published-view.ts rename to apps/space/ce/hooks/store/use-published-view.ts diff --git a/space/ce/store/root.store.ts b/apps/space/ce/store/root.store.ts similarity index 100% rename from space/ce/store/root.store.ts rename to apps/space/ce/store/root.store.ts diff --git a/space/core/components/account/auth-forms/auth-banner.tsx b/apps/space/core/components/account/auth-forms/auth-banner.tsx similarity index 100% rename from space/core/components/account/auth-forms/auth-banner.tsx rename to apps/space/core/components/account/auth-forms/auth-banner.tsx diff --git a/space/core/components/account/auth-forms/auth-header.tsx b/apps/space/core/components/account/auth-forms/auth-header.tsx similarity index 100% rename from space/core/components/account/auth-forms/auth-header.tsx rename to apps/space/core/components/account/auth-forms/auth-header.tsx diff --git a/space/core/components/account/auth-forms/auth-root.tsx b/apps/space/core/components/account/auth-forms/auth-root.tsx similarity index 100% rename from space/core/components/account/auth-forms/auth-root.tsx rename to apps/space/core/components/account/auth-forms/auth-root.tsx diff --git a/space/core/components/account/auth-forms/email.tsx b/apps/space/core/components/account/auth-forms/email.tsx similarity index 100% rename from space/core/components/account/auth-forms/email.tsx rename to apps/space/core/components/account/auth-forms/email.tsx diff --git a/space/core/components/account/auth-forms/index.ts b/apps/space/core/components/account/auth-forms/index.ts similarity index 100% rename from space/core/components/account/auth-forms/index.ts rename to apps/space/core/components/account/auth-forms/index.ts diff --git a/space/core/components/account/auth-forms/password.tsx b/apps/space/core/components/account/auth-forms/password.tsx similarity index 100% rename from space/core/components/account/auth-forms/password.tsx rename to apps/space/core/components/account/auth-forms/password.tsx diff --git a/space/core/components/account/auth-forms/unique-code.tsx b/apps/space/core/components/account/auth-forms/unique-code.tsx similarity index 100% rename from space/core/components/account/auth-forms/unique-code.tsx rename to apps/space/core/components/account/auth-forms/unique-code.tsx diff --git a/space/core/components/account/helpers/index.ts b/apps/space/core/components/account/helpers/index.ts similarity index 100% rename from space/core/components/account/helpers/index.ts rename to apps/space/core/components/account/helpers/index.ts diff --git a/space/core/components/account/helpers/password-strength-meter.tsx b/apps/space/core/components/account/helpers/password-strength-meter.tsx similarity index 100% rename from space/core/components/account/helpers/password-strength-meter.tsx rename to apps/space/core/components/account/helpers/password-strength-meter.tsx diff --git a/space/core/components/account/index.ts b/apps/space/core/components/account/index.ts similarity index 100% rename from space/core/components/account/index.ts rename to apps/space/core/components/account/index.ts diff --git a/space/core/components/account/oauth/github-button.tsx b/apps/space/core/components/account/oauth/github-button.tsx similarity index 100% rename from space/core/components/account/oauth/github-button.tsx rename to apps/space/core/components/account/oauth/github-button.tsx diff --git a/space/core/components/account/oauth/gitlab-button.tsx b/apps/space/core/components/account/oauth/gitlab-button.tsx similarity index 100% rename from space/core/components/account/oauth/gitlab-button.tsx rename to apps/space/core/components/account/oauth/gitlab-button.tsx diff --git a/space/core/components/account/oauth/google-button.tsx b/apps/space/core/components/account/oauth/google-button.tsx similarity index 100% rename from space/core/components/account/oauth/google-button.tsx rename to apps/space/core/components/account/oauth/google-button.tsx diff --git a/space/core/components/account/oauth/index.ts b/apps/space/core/components/account/oauth/index.ts similarity index 100% rename from space/core/components/account/oauth/index.ts rename to apps/space/core/components/account/oauth/index.ts diff --git a/space/core/components/account/oauth/oauth-options.tsx b/apps/space/core/components/account/oauth/oauth-options.tsx similarity index 100% rename from space/core/components/account/oauth/oauth-options.tsx rename to apps/space/core/components/account/oauth/oauth-options.tsx diff --git a/space/core/components/account/terms-and-conditions.tsx b/apps/space/core/components/account/terms-and-conditions.tsx similarity index 100% rename from space/core/components/account/terms-and-conditions.tsx rename to apps/space/core/components/account/terms-and-conditions.tsx diff --git a/space/core/components/account/user-logged-in.tsx b/apps/space/core/components/account/user-logged-in.tsx similarity index 100% rename from space/core/components/account/user-logged-in.tsx rename to apps/space/core/components/account/user-logged-in.tsx diff --git a/space/core/components/common/index.ts b/apps/space/core/components/common/index.ts similarity index 100% rename from space/core/components/common/index.ts rename to apps/space/core/components/common/index.ts diff --git a/space/core/components/common/logo-spinner.tsx b/apps/space/core/components/common/logo-spinner.tsx similarity index 100% rename from space/core/components/common/logo-spinner.tsx rename to apps/space/core/components/common/logo-spinner.tsx diff --git a/space/core/components/common/powered-by.tsx b/apps/space/core/components/common/powered-by.tsx similarity index 100% rename from space/core/components/common/powered-by.tsx rename to apps/space/core/components/common/powered-by.tsx diff --git a/space/core/components/common/project-logo.tsx b/apps/space/core/components/common/project-logo.tsx similarity index 100% rename from space/core/components/common/project-logo.tsx rename to apps/space/core/components/common/project-logo.tsx diff --git a/space/core/components/editor/embeds/index.ts b/apps/space/core/components/editor/embeds/index.ts similarity index 100% rename from space/core/components/editor/embeds/index.ts rename to apps/space/core/components/editor/embeds/index.ts diff --git a/space/core/components/editor/embeds/mentions/index.ts b/apps/space/core/components/editor/embeds/mentions/index.ts similarity index 100% rename from space/core/components/editor/embeds/mentions/index.ts rename to apps/space/core/components/editor/embeds/mentions/index.ts diff --git a/space/core/components/editor/embeds/mentions/root.tsx b/apps/space/core/components/editor/embeds/mentions/root.tsx similarity index 100% rename from space/core/components/editor/embeds/mentions/root.tsx rename to apps/space/core/components/editor/embeds/mentions/root.tsx diff --git a/space/core/components/editor/embeds/mentions/user.tsx b/apps/space/core/components/editor/embeds/mentions/user.tsx similarity index 100% rename from space/core/components/editor/embeds/mentions/user.tsx rename to apps/space/core/components/editor/embeds/mentions/user.tsx diff --git a/space/core/components/editor/index.ts b/apps/space/core/components/editor/index.ts similarity index 100% rename from space/core/components/editor/index.ts rename to apps/space/core/components/editor/index.ts diff --git a/space/core/components/editor/lite-text-editor.tsx b/apps/space/core/components/editor/lite-text-editor.tsx similarity index 100% rename from space/core/components/editor/lite-text-editor.tsx rename to apps/space/core/components/editor/lite-text-editor.tsx diff --git a/space/core/components/editor/lite-text-read-only-editor.tsx b/apps/space/core/components/editor/lite-text-read-only-editor.tsx similarity index 100% rename from space/core/components/editor/lite-text-read-only-editor.tsx rename to apps/space/core/components/editor/lite-text-read-only-editor.tsx diff --git a/space/core/components/editor/rich-text-editor.tsx b/apps/space/core/components/editor/rich-text-editor.tsx similarity index 100% rename from space/core/components/editor/rich-text-editor.tsx rename to apps/space/core/components/editor/rich-text-editor.tsx diff --git a/space/core/components/editor/rich-text-read-only-editor.tsx b/apps/space/core/components/editor/rich-text-read-only-editor.tsx similarity index 100% rename from space/core/components/editor/rich-text-read-only-editor.tsx rename to apps/space/core/components/editor/rich-text-read-only-editor.tsx diff --git a/space/core/components/editor/toolbar.tsx b/apps/space/core/components/editor/toolbar.tsx similarity index 100% rename from space/core/components/editor/toolbar.tsx rename to apps/space/core/components/editor/toolbar.tsx diff --git a/space/core/components/instance/index.ts b/apps/space/core/components/instance/index.ts similarity index 100% rename from space/core/components/instance/index.ts rename to apps/space/core/components/instance/index.ts diff --git a/space/core/components/instance/instance-failure-view.tsx b/apps/space/core/components/instance/instance-failure-view.tsx similarity index 100% rename from space/core/components/instance/instance-failure-view.tsx rename to apps/space/core/components/instance/instance-failure-view.tsx diff --git a/space/core/components/issues/filters/applied-filters/filters-list.tsx b/apps/space/core/components/issues/filters/applied-filters/filters-list.tsx similarity index 100% rename from space/core/components/issues/filters/applied-filters/filters-list.tsx rename to apps/space/core/components/issues/filters/applied-filters/filters-list.tsx diff --git a/space/core/components/issues/filters/applied-filters/label.tsx b/apps/space/core/components/issues/filters/applied-filters/label.tsx similarity index 100% rename from space/core/components/issues/filters/applied-filters/label.tsx rename to apps/space/core/components/issues/filters/applied-filters/label.tsx diff --git a/space/core/components/issues/filters/applied-filters/priority.tsx b/apps/space/core/components/issues/filters/applied-filters/priority.tsx similarity index 100% rename from space/core/components/issues/filters/applied-filters/priority.tsx rename to apps/space/core/components/issues/filters/applied-filters/priority.tsx diff --git a/space/core/components/issues/filters/applied-filters/root.tsx b/apps/space/core/components/issues/filters/applied-filters/root.tsx similarity index 100% rename from space/core/components/issues/filters/applied-filters/root.tsx rename to apps/space/core/components/issues/filters/applied-filters/root.tsx diff --git a/space/core/components/issues/filters/applied-filters/state.tsx b/apps/space/core/components/issues/filters/applied-filters/state.tsx similarity index 100% rename from space/core/components/issues/filters/applied-filters/state.tsx rename to apps/space/core/components/issues/filters/applied-filters/state.tsx diff --git a/space/core/components/issues/filters/helpers/dropdown.tsx b/apps/space/core/components/issues/filters/helpers/dropdown.tsx similarity index 100% rename from space/core/components/issues/filters/helpers/dropdown.tsx rename to apps/space/core/components/issues/filters/helpers/dropdown.tsx diff --git a/space/core/components/issues/filters/helpers/filter-header.tsx b/apps/space/core/components/issues/filters/helpers/filter-header.tsx similarity index 100% rename from space/core/components/issues/filters/helpers/filter-header.tsx rename to apps/space/core/components/issues/filters/helpers/filter-header.tsx diff --git a/space/core/components/issues/filters/helpers/filter-option.tsx b/apps/space/core/components/issues/filters/helpers/filter-option.tsx similarity index 100% rename from space/core/components/issues/filters/helpers/filter-option.tsx rename to apps/space/core/components/issues/filters/helpers/filter-option.tsx diff --git a/space/core/components/issues/filters/helpers/index.ts b/apps/space/core/components/issues/filters/helpers/index.ts similarity index 100% rename from space/core/components/issues/filters/helpers/index.ts rename to apps/space/core/components/issues/filters/helpers/index.ts diff --git a/space/core/components/issues/filters/index.ts b/apps/space/core/components/issues/filters/index.ts similarity index 100% rename from space/core/components/issues/filters/index.ts rename to apps/space/core/components/issues/filters/index.ts diff --git a/space/core/components/issues/filters/labels.tsx b/apps/space/core/components/issues/filters/labels.tsx similarity index 100% rename from space/core/components/issues/filters/labels.tsx rename to apps/space/core/components/issues/filters/labels.tsx diff --git a/space/core/components/issues/filters/priority.tsx b/apps/space/core/components/issues/filters/priority.tsx similarity index 100% rename from space/core/components/issues/filters/priority.tsx rename to apps/space/core/components/issues/filters/priority.tsx diff --git a/space/core/components/issues/filters/root.tsx b/apps/space/core/components/issues/filters/root.tsx similarity index 100% rename from space/core/components/issues/filters/root.tsx rename to apps/space/core/components/issues/filters/root.tsx diff --git a/space/core/components/issues/filters/selection.tsx b/apps/space/core/components/issues/filters/selection.tsx similarity index 100% rename from space/core/components/issues/filters/selection.tsx rename to apps/space/core/components/issues/filters/selection.tsx diff --git a/space/core/components/issues/filters/state.tsx b/apps/space/core/components/issues/filters/state.tsx similarity index 100% rename from space/core/components/issues/filters/state.tsx rename to apps/space/core/components/issues/filters/state.tsx diff --git a/space/core/components/issues/index.ts b/apps/space/core/components/issues/index.ts similarity index 100% rename from space/core/components/issues/index.ts rename to apps/space/core/components/issues/index.ts diff --git a/space/core/components/issues/issue-layouts/error.tsx b/apps/space/core/components/issues/issue-layouts/error.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/error.tsx rename to apps/space/core/components/issues/issue-layouts/error.tsx diff --git a/space/core/components/issues/issue-layouts/index.ts b/apps/space/core/components/issues/issue-layouts/index.ts similarity index 100% rename from space/core/components/issues/issue-layouts/index.ts rename to apps/space/core/components/issues/issue-layouts/index.ts diff --git a/space/core/components/issues/issue-layouts/issue-layout-HOC.tsx b/apps/space/core/components/issues/issue-layouts/issue-layout-HOC.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/issue-layout-HOC.tsx rename to apps/space/core/components/issues/issue-layouts/issue-layout-HOC.tsx diff --git a/space/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx b/apps/space/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx rename to apps/space/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx diff --git a/space/core/components/issues/issue-layouts/kanban/block-reactions.tsx b/apps/space/core/components/issues/issue-layouts/kanban/block-reactions.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/kanban/block-reactions.tsx rename to apps/space/core/components/issues/issue-layouts/kanban/block-reactions.tsx diff --git a/space/core/components/issues/issue-layouts/kanban/block.tsx b/apps/space/core/components/issues/issue-layouts/kanban/block.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/kanban/block.tsx rename to apps/space/core/components/issues/issue-layouts/kanban/block.tsx diff --git a/space/core/components/issues/issue-layouts/kanban/blocks-list.tsx b/apps/space/core/components/issues/issue-layouts/kanban/blocks-list.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/kanban/blocks-list.tsx rename to apps/space/core/components/issues/issue-layouts/kanban/blocks-list.tsx diff --git a/space/core/components/issues/issue-layouts/kanban/default.tsx b/apps/space/core/components/issues/issue-layouts/kanban/default.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/kanban/default.tsx rename to apps/space/core/components/issues/issue-layouts/kanban/default.tsx diff --git a/space/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx b/apps/space/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx rename to apps/space/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx diff --git a/space/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx b/apps/space/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx rename to apps/space/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx diff --git a/space/core/components/issues/issue-layouts/kanban/index.ts b/apps/space/core/components/issues/issue-layouts/kanban/index.ts similarity index 100% rename from space/core/components/issues/issue-layouts/kanban/index.ts rename to apps/space/core/components/issues/issue-layouts/kanban/index.ts diff --git a/space/core/components/issues/issue-layouts/kanban/kanban-group.tsx b/apps/space/core/components/issues/issue-layouts/kanban/kanban-group.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/kanban/kanban-group.tsx rename to apps/space/core/components/issues/issue-layouts/kanban/kanban-group.tsx diff --git a/space/core/components/issues/issue-layouts/kanban/swimlanes.tsx b/apps/space/core/components/issues/issue-layouts/kanban/swimlanes.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/kanban/swimlanes.tsx rename to apps/space/core/components/issues/issue-layouts/kanban/swimlanes.tsx diff --git a/space/core/components/issues/issue-layouts/list/base-list-root.tsx b/apps/space/core/components/issues/issue-layouts/list/base-list-root.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/list/base-list-root.tsx rename to apps/space/core/components/issues/issue-layouts/list/base-list-root.tsx diff --git a/space/core/components/issues/issue-layouts/list/block.tsx b/apps/space/core/components/issues/issue-layouts/list/block.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/list/block.tsx rename to apps/space/core/components/issues/issue-layouts/list/block.tsx diff --git a/space/core/components/issues/issue-layouts/list/blocks-list.tsx b/apps/space/core/components/issues/issue-layouts/list/blocks-list.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/list/blocks-list.tsx rename to apps/space/core/components/issues/issue-layouts/list/blocks-list.tsx diff --git a/space/core/components/issues/issue-layouts/list/default.tsx b/apps/space/core/components/issues/issue-layouts/list/default.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/list/default.tsx rename to apps/space/core/components/issues/issue-layouts/list/default.tsx diff --git a/space/core/components/issues/issue-layouts/list/headers/group-by-card.tsx b/apps/space/core/components/issues/issue-layouts/list/headers/group-by-card.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/list/headers/group-by-card.tsx rename to apps/space/core/components/issues/issue-layouts/list/headers/group-by-card.tsx diff --git a/space/core/components/issues/issue-layouts/list/index.ts b/apps/space/core/components/issues/issue-layouts/list/index.ts similarity index 100% rename from space/core/components/issues/issue-layouts/list/index.ts rename to apps/space/core/components/issues/issue-layouts/list/index.ts diff --git a/space/core/components/issues/issue-layouts/list/list-group.tsx b/apps/space/core/components/issues/issue-layouts/list/list-group.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/list/list-group.tsx rename to apps/space/core/components/issues/issue-layouts/list/list-group.tsx diff --git a/space/core/components/issues/issue-layouts/properties/all-properties.tsx b/apps/space/core/components/issues/issue-layouts/properties/all-properties.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/properties/all-properties.tsx rename to apps/space/core/components/issues/issue-layouts/properties/all-properties.tsx diff --git a/space/core/components/issues/issue-layouts/properties/cycle.tsx b/apps/space/core/components/issues/issue-layouts/properties/cycle.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/properties/cycle.tsx rename to apps/space/core/components/issues/issue-layouts/properties/cycle.tsx diff --git a/space/core/components/issues/issue-layouts/properties/due-date.tsx b/apps/space/core/components/issues/issue-layouts/properties/due-date.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/properties/due-date.tsx rename to apps/space/core/components/issues/issue-layouts/properties/due-date.tsx diff --git a/space/core/components/issues/issue-layouts/properties/index.ts b/apps/space/core/components/issues/issue-layouts/properties/index.ts similarity index 100% rename from space/core/components/issues/issue-layouts/properties/index.ts rename to apps/space/core/components/issues/issue-layouts/properties/index.ts diff --git a/space/core/components/issues/issue-layouts/properties/labels.tsx b/apps/space/core/components/issues/issue-layouts/properties/labels.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/properties/labels.tsx rename to apps/space/core/components/issues/issue-layouts/properties/labels.tsx diff --git a/space/core/components/issues/issue-layouts/properties/member.tsx b/apps/space/core/components/issues/issue-layouts/properties/member.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/properties/member.tsx rename to apps/space/core/components/issues/issue-layouts/properties/member.tsx diff --git a/space/core/components/issues/issue-layouts/properties/modules.tsx b/apps/space/core/components/issues/issue-layouts/properties/modules.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/properties/modules.tsx rename to apps/space/core/components/issues/issue-layouts/properties/modules.tsx diff --git a/space/core/components/issues/issue-layouts/properties/priority.tsx b/apps/space/core/components/issues/issue-layouts/properties/priority.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/properties/priority.tsx rename to apps/space/core/components/issues/issue-layouts/properties/priority.tsx diff --git a/space/core/components/issues/issue-layouts/properties/state.tsx b/apps/space/core/components/issues/issue-layouts/properties/state.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/properties/state.tsx rename to apps/space/core/components/issues/issue-layouts/properties/state.tsx diff --git a/space/core/components/issues/issue-layouts/root.tsx b/apps/space/core/components/issues/issue-layouts/root.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/root.tsx rename to apps/space/core/components/issues/issue-layouts/root.tsx diff --git a/space/core/components/issues/issue-layouts/utils.tsx b/apps/space/core/components/issues/issue-layouts/utils.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/utils.tsx rename to apps/space/core/components/issues/issue-layouts/utils.tsx diff --git a/space/core/components/issues/issue-layouts/with-display-properties-HOC.tsx b/apps/space/core/components/issues/issue-layouts/with-display-properties-HOC.tsx similarity index 100% rename from space/core/components/issues/issue-layouts/with-display-properties-HOC.tsx rename to apps/space/core/components/issues/issue-layouts/with-display-properties-HOC.tsx diff --git a/space/core/components/issues/navbar/controls.tsx b/apps/space/core/components/issues/navbar/controls.tsx similarity index 100% rename from space/core/components/issues/navbar/controls.tsx rename to apps/space/core/components/issues/navbar/controls.tsx diff --git a/space/core/components/issues/navbar/index.ts b/apps/space/core/components/issues/navbar/index.ts similarity index 100% rename from space/core/components/issues/navbar/index.ts rename to apps/space/core/components/issues/navbar/index.ts diff --git a/space/core/components/issues/navbar/layout-icon.tsx b/apps/space/core/components/issues/navbar/layout-icon.tsx similarity index 100% rename from space/core/components/issues/navbar/layout-icon.tsx rename to apps/space/core/components/issues/navbar/layout-icon.tsx diff --git a/space/core/components/issues/navbar/layout-selection.tsx b/apps/space/core/components/issues/navbar/layout-selection.tsx similarity index 100% rename from space/core/components/issues/navbar/layout-selection.tsx rename to apps/space/core/components/issues/navbar/layout-selection.tsx diff --git a/space/core/components/issues/navbar/root.tsx b/apps/space/core/components/issues/navbar/root.tsx similarity index 100% rename from space/core/components/issues/navbar/root.tsx rename to apps/space/core/components/issues/navbar/root.tsx diff --git a/space/core/components/issues/navbar/theme.tsx b/apps/space/core/components/issues/navbar/theme.tsx similarity index 100% rename from space/core/components/issues/navbar/theme.tsx rename to apps/space/core/components/issues/navbar/theme.tsx diff --git a/space/core/components/issues/navbar/user-avatar.tsx b/apps/space/core/components/issues/navbar/user-avatar.tsx similarity index 100% rename from space/core/components/issues/navbar/user-avatar.tsx rename to apps/space/core/components/issues/navbar/user-avatar.tsx diff --git a/space/core/components/issues/peek-overview/comment/add-comment.tsx b/apps/space/core/components/issues/peek-overview/comment/add-comment.tsx similarity index 100% rename from space/core/components/issues/peek-overview/comment/add-comment.tsx rename to apps/space/core/components/issues/peek-overview/comment/add-comment.tsx diff --git a/space/core/components/issues/peek-overview/comment/comment-detail-card.tsx b/apps/space/core/components/issues/peek-overview/comment/comment-detail-card.tsx similarity index 100% rename from space/core/components/issues/peek-overview/comment/comment-detail-card.tsx rename to apps/space/core/components/issues/peek-overview/comment/comment-detail-card.tsx diff --git a/space/core/components/issues/peek-overview/comment/comment-reactions.tsx b/apps/space/core/components/issues/peek-overview/comment/comment-reactions.tsx similarity index 100% rename from space/core/components/issues/peek-overview/comment/comment-reactions.tsx rename to apps/space/core/components/issues/peek-overview/comment/comment-reactions.tsx diff --git a/space/core/components/issues/peek-overview/comment/index.ts b/apps/space/core/components/issues/peek-overview/comment/index.ts similarity index 100% rename from space/core/components/issues/peek-overview/comment/index.ts rename to apps/space/core/components/issues/peek-overview/comment/index.ts diff --git a/space/core/components/issues/peek-overview/full-screen-peek-view.tsx b/apps/space/core/components/issues/peek-overview/full-screen-peek-view.tsx similarity index 100% rename from space/core/components/issues/peek-overview/full-screen-peek-view.tsx rename to apps/space/core/components/issues/peek-overview/full-screen-peek-view.tsx diff --git a/space/core/components/issues/peek-overview/header.tsx b/apps/space/core/components/issues/peek-overview/header.tsx similarity index 100% rename from space/core/components/issues/peek-overview/header.tsx rename to apps/space/core/components/issues/peek-overview/header.tsx diff --git a/space/core/components/issues/peek-overview/index.ts b/apps/space/core/components/issues/peek-overview/index.ts similarity index 100% rename from space/core/components/issues/peek-overview/index.ts rename to apps/space/core/components/issues/peek-overview/index.ts diff --git a/space/core/components/issues/peek-overview/issue-activity.tsx b/apps/space/core/components/issues/peek-overview/issue-activity.tsx similarity index 100% rename from space/core/components/issues/peek-overview/issue-activity.tsx rename to apps/space/core/components/issues/peek-overview/issue-activity.tsx diff --git a/space/core/components/issues/peek-overview/issue-details.tsx b/apps/space/core/components/issues/peek-overview/issue-details.tsx similarity index 100% rename from space/core/components/issues/peek-overview/issue-details.tsx rename to apps/space/core/components/issues/peek-overview/issue-details.tsx diff --git a/space/core/components/issues/peek-overview/issue-properties.tsx b/apps/space/core/components/issues/peek-overview/issue-properties.tsx similarity index 100% rename from space/core/components/issues/peek-overview/issue-properties.tsx rename to apps/space/core/components/issues/peek-overview/issue-properties.tsx diff --git a/space/core/components/issues/peek-overview/issue-reaction.tsx b/apps/space/core/components/issues/peek-overview/issue-reaction.tsx similarity index 100% rename from space/core/components/issues/peek-overview/issue-reaction.tsx rename to apps/space/core/components/issues/peek-overview/issue-reaction.tsx diff --git a/space/core/components/issues/peek-overview/layout.tsx b/apps/space/core/components/issues/peek-overview/layout.tsx similarity index 100% rename from space/core/components/issues/peek-overview/layout.tsx rename to apps/space/core/components/issues/peek-overview/layout.tsx diff --git a/space/core/components/issues/peek-overview/side-peek-view.tsx b/apps/space/core/components/issues/peek-overview/side-peek-view.tsx similarity index 100% rename from space/core/components/issues/peek-overview/side-peek-view.tsx rename to apps/space/core/components/issues/peek-overview/side-peek-view.tsx diff --git a/space/core/components/issues/reactions/index.ts b/apps/space/core/components/issues/reactions/index.ts similarity index 100% rename from space/core/components/issues/reactions/index.ts rename to apps/space/core/components/issues/reactions/index.ts diff --git a/space/core/components/issues/reactions/issue-emoji-reactions.tsx b/apps/space/core/components/issues/reactions/issue-emoji-reactions.tsx similarity index 100% rename from space/core/components/issues/reactions/issue-emoji-reactions.tsx rename to apps/space/core/components/issues/reactions/issue-emoji-reactions.tsx diff --git a/space/core/components/issues/reactions/issue-vote-reactions.tsx b/apps/space/core/components/issues/reactions/issue-vote-reactions.tsx similarity index 100% rename from space/core/components/issues/reactions/issue-vote-reactions.tsx rename to apps/space/core/components/issues/reactions/issue-vote-reactions.tsx diff --git a/space/core/components/ui/icon.tsx b/apps/space/core/components/ui/icon.tsx similarity index 100% rename from space/core/components/ui/icon.tsx rename to apps/space/core/components/ui/icon.tsx diff --git a/space/core/components/ui/index.ts b/apps/space/core/components/ui/index.ts similarity index 100% rename from space/core/components/ui/index.ts rename to apps/space/core/components/ui/index.ts diff --git a/space/core/components/ui/not-found.tsx b/apps/space/core/components/ui/not-found.tsx similarity index 100% rename from space/core/components/ui/not-found.tsx rename to apps/space/core/components/ui/not-found.tsx diff --git a/space/core/components/ui/reaction-selector.tsx b/apps/space/core/components/ui/reaction-selector.tsx similarity index 100% rename from space/core/components/ui/reaction-selector.tsx rename to apps/space/core/components/ui/reaction-selector.tsx diff --git a/space/core/components/views/auth.tsx b/apps/space/core/components/views/auth.tsx similarity index 100% rename from space/core/components/views/auth.tsx rename to apps/space/core/components/views/auth.tsx diff --git a/space/core/components/views/index.ts b/apps/space/core/components/views/index.ts similarity index 100% rename from space/core/components/views/index.ts rename to apps/space/core/components/views/index.ts diff --git a/space/core/hooks/store/index.ts b/apps/space/core/hooks/store/index.ts similarity index 100% rename from space/core/hooks/store/index.ts rename to apps/space/core/hooks/store/index.ts diff --git a/space/core/hooks/store/publish/index.ts b/apps/space/core/hooks/store/publish/index.ts similarity index 100% rename from space/core/hooks/store/publish/index.ts rename to apps/space/core/hooks/store/publish/index.ts diff --git a/space/core/hooks/store/publish/use-publish-list.ts b/apps/space/core/hooks/store/publish/use-publish-list.ts similarity index 100% rename from space/core/hooks/store/publish/use-publish-list.ts rename to apps/space/core/hooks/store/publish/use-publish-list.ts diff --git a/space/core/hooks/store/publish/use-publish.ts b/apps/space/core/hooks/store/publish/use-publish.ts similarity index 100% rename from space/core/hooks/store/publish/use-publish.ts rename to apps/space/core/hooks/store/publish/use-publish.ts diff --git a/space/core/hooks/store/use-cycle.ts b/apps/space/core/hooks/store/use-cycle.ts similarity index 100% rename from space/core/hooks/store/use-cycle.ts rename to apps/space/core/hooks/store/use-cycle.ts diff --git a/space/core/hooks/store/use-instance.ts b/apps/space/core/hooks/store/use-instance.ts similarity index 100% rename from space/core/hooks/store/use-instance.ts rename to apps/space/core/hooks/store/use-instance.ts diff --git a/space/core/hooks/store/use-issue-details.tsx b/apps/space/core/hooks/store/use-issue-details.tsx similarity index 100% rename from space/core/hooks/store/use-issue-details.tsx rename to apps/space/core/hooks/store/use-issue-details.tsx diff --git a/space/core/hooks/store/use-issue-filter.ts b/apps/space/core/hooks/store/use-issue-filter.ts similarity index 100% rename from space/core/hooks/store/use-issue-filter.ts rename to apps/space/core/hooks/store/use-issue-filter.ts diff --git a/space/core/hooks/store/use-issue.ts b/apps/space/core/hooks/store/use-issue.ts similarity index 100% rename from space/core/hooks/store/use-issue.ts rename to apps/space/core/hooks/store/use-issue.ts diff --git a/space/core/hooks/store/use-label.ts b/apps/space/core/hooks/store/use-label.ts similarity index 100% rename from space/core/hooks/store/use-label.ts rename to apps/space/core/hooks/store/use-label.ts diff --git a/space/core/hooks/store/use-member.ts b/apps/space/core/hooks/store/use-member.ts similarity index 100% rename from space/core/hooks/store/use-member.ts rename to apps/space/core/hooks/store/use-member.ts diff --git a/space/core/hooks/store/use-module.ts b/apps/space/core/hooks/store/use-module.ts similarity index 100% rename from space/core/hooks/store/use-module.ts rename to apps/space/core/hooks/store/use-module.ts diff --git a/space/core/hooks/store/use-state.ts b/apps/space/core/hooks/store/use-state.ts similarity index 100% rename from space/core/hooks/store/use-state.ts rename to apps/space/core/hooks/store/use-state.ts diff --git a/space/core/hooks/store/use-user-profile.ts b/apps/space/core/hooks/store/use-user-profile.ts similarity index 100% rename from space/core/hooks/store/use-user-profile.ts rename to apps/space/core/hooks/store/use-user-profile.ts diff --git a/space/core/hooks/store/use-user.ts b/apps/space/core/hooks/store/use-user.ts similarity index 100% rename from space/core/hooks/store/use-user.ts rename to apps/space/core/hooks/store/use-user.ts diff --git a/space/core/hooks/use-clipboard-write-permission.tsx b/apps/space/core/hooks/use-clipboard-write-permission.tsx similarity index 100% rename from space/core/hooks/use-clipboard-write-permission.tsx rename to apps/space/core/hooks/use-clipboard-write-permission.tsx diff --git a/space/core/hooks/use-intersection-observer.tsx b/apps/space/core/hooks/use-intersection-observer.tsx similarity index 100% rename from space/core/hooks/use-intersection-observer.tsx rename to apps/space/core/hooks/use-intersection-observer.tsx diff --git a/space/core/hooks/use-is-in-iframe.tsx b/apps/space/core/hooks/use-is-in-iframe.tsx similarity index 100% rename from space/core/hooks/use-is-in-iframe.tsx rename to apps/space/core/hooks/use-is-in-iframe.tsx diff --git a/space/core/hooks/use-mention.tsx b/apps/space/core/hooks/use-mention.tsx similarity index 100% rename from space/core/hooks/use-mention.tsx rename to apps/space/core/hooks/use-mention.tsx diff --git a/space/core/hooks/use-timer.tsx b/apps/space/core/hooks/use-timer.tsx similarity index 100% rename from space/core/hooks/use-timer.tsx rename to apps/space/core/hooks/use-timer.tsx diff --git a/space/core/lib/instance-provider.tsx b/apps/space/core/lib/instance-provider.tsx similarity index 100% rename from space/core/lib/instance-provider.tsx rename to apps/space/core/lib/instance-provider.tsx diff --git a/space/core/lib/store-provider.tsx b/apps/space/core/lib/store-provider.tsx similarity index 100% rename from space/core/lib/store-provider.tsx rename to apps/space/core/lib/store-provider.tsx diff --git a/space/core/lib/toast-provider.tsx b/apps/space/core/lib/toast-provider.tsx similarity index 100% rename from space/core/lib/toast-provider.tsx rename to apps/space/core/lib/toast-provider.tsx diff --git a/space/core/store/cycle.store.ts b/apps/space/core/store/cycle.store.ts similarity index 100% rename from space/core/store/cycle.store.ts rename to apps/space/core/store/cycle.store.ts diff --git a/space/core/store/helpers/base-issues.store.ts b/apps/space/core/store/helpers/base-issues.store.ts similarity index 100% rename from space/core/store/helpers/base-issues.store.ts rename to apps/space/core/store/helpers/base-issues.store.ts diff --git a/space/core/store/helpers/filter.helpers.ts b/apps/space/core/store/helpers/filter.helpers.ts similarity index 100% rename from space/core/store/helpers/filter.helpers.ts rename to apps/space/core/store/helpers/filter.helpers.ts diff --git a/space/core/store/instance.store.ts b/apps/space/core/store/instance.store.ts similarity index 100% rename from space/core/store/instance.store.ts rename to apps/space/core/store/instance.store.ts diff --git a/space/core/store/issue-detail.store.ts b/apps/space/core/store/issue-detail.store.ts similarity index 100% rename from space/core/store/issue-detail.store.ts rename to apps/space/core/store/issue-detail.store.ts diff --git a/space/core/store/issue-filters.store.ts b/apps/space/core/store/issue-filters.store.ts similarity index 100% rename from space/core/store/issue-filters.store.ts rename to apps/space/core/store/issue-filters.store.ts diff --git a/space/core/store/issue.store.ts b/apps/space/core/store/issue.store.ts similarity index 100% rename from space/core/store/issue.store.ts rename to apps/space/core/store/issue.store.ts diff --git a/space/core/store/label.store.ts b/apps/space/core/store/label.store.ts similarity index 100% rename from space/core/store/label.store.ts rename to apps/space/core/store/label.store.ts diff --git a/space/core/store/members.store.ts b/apps/space/core/store/members.store.ts similarity index 100% rename from space/core/store/members.store.ts rename to apps/space/core/store/members.store.ts diff --git a/space/core/store/module.store.ts b/apps/space/core/store/module.store.ts similarity index 100% rename from space/core/store/module.store.ts rename to apps/space/core/store/module.store.ts diff --git a/space/core/store/profile.store.ts b/apps/space/core/store/profile.store.ts similarity index 100% rename from space/core/store/profile.store.ts rename to apps/space/core/store/profile.store.ts diff --git a/space/core/store/publish/publish.store.ts b/apps/space/core/store/publish/publish.store.ts similarity index 100% rename from space/core/store/publish/publish.store.ts rename to apps/space/core/store/publish/publish.store.ts diff --git a/space/core/store/publish/publish_list.store.ts b/apps/space/core/store/publish/publish_list.store.ts similarity index 100% rename from space/core/store/publish/publish_list.store.ts rename to apps/space/core/store/publish/publish_list.store.ts diff --git a/space/core/store/root.store.ts b/apps/space/core/store/root.store.ts similarity index 100% rename from space/core/store/root.store.ts rename to apps/space/core/store/root.store.ts diff --git a/space/core/store/state.store.ts b/apps/space/core/store/state.store.ts similarity index 100% rename from space/core/store/state.store.ts rename to apps/space/core/store/state.store.ts diff --git a/space/core/store/user.store.ts b/apps/space/core/store/user.store.ts similarity index 100% rename from space/core/store/user.store.ts rename to apps/space/core/store/user.store.ts diff --git a/space/core/types/auth.ts b/apps/space/core/types/auth.ts similarity index 100% rename from space/core/types/auth.ts rename to apps/space/core/types/auth.ts diff --git a/space/core/types/cycle.d.ts b/apps/space/core/types/cycle.d.ts similarity index 100% rename from space/core/types/cycle.d.ts rename to apps/space/core/types/cycle.d.ts diff --git a/space/core/types/intake.d.ts b/apps/space/core/types/intake.d.ts similarity index 100% rename from space/core/types/intake.d.ts rename to apps/space/core/types/intake.d.ts diff --git a/space/core/types/issue.d.ts b/apps/space/core/types/issue.d.ts similarity index 100% rename from space/core/types/issue.d.ts rename to apps/space/core/types/issue.d.ts diff --git a/space/core/types/member.d.ts b/apps/space/core/types/member.d.ts similarity index 100% rename from space/core/types/member.d.ts rename to apps/space/core/types/member.d.ts diff --git a/space/core/types/modules.d.ts b/apps/space/core/types/modules.d.ts similarity index 100% rename from space/core/types/modules.d.ts rename to apps/space/core/types/modules.d.ts diff --git a/space/ee/components/editor/index.ts b/apps/space/ee/components/editor/index.ts similarity index 100% rename from space/ee/components/editor/index.ts rename to apps/space/ee/components/editor/index.ts diff --git a/space/ee/components/issue-layouts/root.tsx b/apps/space/ee/components/issue-layouts/root.tsx similarity index 100% rename from space/ee/components/issue-layouts/root.tsx rename to apps/space/ee/components/issue-layouts/root.tsx diff --git a/space/ee/components/navbar/index.tsx b/apps/space/ee/components/navbar/index.tsx similarity index 100% rename from space/ee/components/navbar/index.tsx rename to apps/space/ee/components/navbar/index.tsx diff --git a/space/ee/hooks/store/index.ts b/apps/space/ee/hooks/store/index.ts similarity index 100% rename from space/ee/hooks/store/index.ts rename to apps/space/ee/hooks/store/index.ts diff --git a/space/ee/store/root.store.ts b/apps/space/ee/store/root.store.ts similarity index 100% rename from space/ee/store/root.store.ts rename to apps/space/ee/store/root.store.ts diff --git a/space/helpers/authentication.helper.tsx b/apps/space/helpers/authentication.helper.tsx similarity index 100% rename from space/helpers/authentication.helper.tsx rename to apps/space/helpers/authentication.helper.tsx diff --git a/space/helpers/common.helper.ts b/apps/space/helpers/common.helper.ts similarity index 100% rename from space/helpers/common.helper.ts rename to apps/space/helpers/common.helper.ts diff --git a/space/helpers/date-time.helper.ts b/apps/space/helpers/date-time.helper.ts similarity index 100% rename from space/helpers/date-time.helper.ts rename to apps/space/helpers/date-time.helper.ts diff --git a/space/helpers/editor.helper.ts b/apps/space/helpers/editor.helper.ts similarity index 100% rename from space/helpers/editor.helper.ts rename to apps/space/helpers/editor.helper.ts diff --git a/space/helpers/emoji.helper.tsx b/apps/space/helpers/emoji.helper.tsx similarity index 100% rename from space/helpers/emoji.helper.tsx rename to apps/space/helpers/emoji.helper.tsx diff --git a/space/helpers/file.helper.ts b/apps/space/helpers/file.helper.ts similarity index 100% rename from space/helpers/file.helper.ts rename to apps/space/helpers/file.helper.ts diff --git a/space/helpers/issue.helper.ts b/apps/space/helpers/issue.helper.ts similarity index 100% rename from space/helpers/issue.helper.ts rename to apps/space/helpers/issue.helper.ts diff --git a/space/helpers/password.helper.ts b/apps/space/helpers/password.helper.ts similarity index 100% rename from space/helpers/password.helper.ts rename to apps/space/helpers/password.helper.ts diff --git a/space/helpers/query-param-generator.ts b/apps/space/helpers/query-param-generator.ts similarity index 100% rename from space/helpers/query-param-generator.ts rename to apps/space/helpers/query-param-generator.ts diff --git a/space/helpers/state.helper.ts b/apps/space/helpers/state.helper.ts similarity index 100% rename from space/helpers/state.helper.ts rename to apps/space/helpers/state.helper.ts diff --git a/space/helpers/string.helper.ts b/apps/space/helpers/string.helper.ts similarity index 100% rename from space/helpers/string.helper.ts rename to apps/space/helpers/string.helper.ts diff --git a/space/next.config.js b/apps/space/next.config.js similarity index 100% rename from space/next.config.js rename to apps/space/next.config.js diff --git a/space/package.json b/apps/space/package.json similarity index 100% rename from space/package.json rename to apps/space/package.json diff --git a/space/postcss.config.js b/apps/space/postcss.config.js similarity index 100% rename from space/postcss.config.js rename to apps/space/postcss.config.js diff --git a/space/public/404.svg b/apps/space/public/404.svg similarity index 100% rename from space/public/404.svg rename to apps/space/public/404.svg diff --git a/space/public/auth/background-pattern-dark.svg b/apps/space/public/auth/background-pattern-dark.svg similarity index 100% rename from space/public/auth/background-pattern-dark.svg rename to apps/space/public/auth/background-pattern-dark.svg diff --git a/space/public/auth/background-pattern.svg b/apps/space/public/auth/background-pattern.svg similarity index 100% rename from space/public/auth/background-pattern.svg rename to apps/space/public/auth/background-pattern.svg diff --git a/space/public/favicon/android-chrome-192x192.png b/apps/space/public/favicon/android-chrome-192x192.png similarity index 100% rename from space/public/favicon/android-chrome-192x192.png rename to apps/space/public/favicon/android-chrome-192x192.png diff --git a/space/public/favicon/android-chrome-512x512.png b/apps/space/public/favicon/android-chrome-512x512.png similarity index 100% rename from space/public/favicon/android-chrome-512x512.png rename to apps/space/public/favicon/android-chrome-512x512.png diff --git a/space/public/favicon/apple-touch-icon.png b/apps/space/public/favicon/apple-touch-icon.png similarity index 100% rename from space/public/favicon/apple-touch-icon.png rename to apps/space/public/favicon/apple-touch-icon.png diff --git a/space/public/favicon/favicon-16x16.png b/apps/space/public/favicon/favicon-16x16.png similarity index 100% rename from space/public/favicon/favicon-16x16.png rename to apps/space/public/favicon/favicon-16x16.png diff --git a/space/public/favicon/favicon-32x32.png b/apps/space/public/favicon/favicon-32x32.png similarity index 100% rename from space/public/favicon/favicon-32x32.png rename to apps/space/public/favicon/favicon-32x32.png diff --git a/space/public/favicon/favicon.ico b/apps/space/public/favicon/favicon.ico similarity index 100% rename from space/public/favicon/favicon.ico rename to apps/space/public/favicon/favicon.ico diff --git a/space/public/favicon/site.webmanifest b/apps/space/public/favicon/site.webmanifest similarity index 100% rename from space/public/favicon/site.webmanifest rename to apps/space/public/favicon/site.webmanifest diff --git a/space/public/images/logo-spinner-dark.gif b/apps/space/public/images/logo-spinner-dark.gif similarity index 100% rename from space/public/images/logo-spinner-dark.gif rename to apps/space/public/images/logo-spinner-dark.gif diff --git a/space/public/images/logo-spinner-light.gif b/apps/space/public/images/logo-spinner-light.gif similarity index 100% rename from space/public/images/logo-spinner-light.gif rename to apps/space/public/images/logo-spinner-light.gif diff --git a/space/public/instance/instance-failure-dark.svg b/apps/space/public/instance/instance-failure-dark.svg similarity index 100% rename from space/public/instance/instance-failure-dark.svg rename to apps/space/public/instance/instance-failure-dark.svg diff --git a/space/public/instance/instance-failure.svg b/apps/space/public/instance/instance-failure.svg similarity index 100% rename from space/public/instance/instance-failure.svg rename to apps/space/public/instance/instance-failure.svg diff --git a/space/public/instance/intake-sent-dark.png b/apps/space/public/instance/intake-sent-dark.png similarity index 100% rename from space/public/instance/intake-sent-dark.png rename to apps/space/public/instance/intake-sent-dark.png diff --git a/space/public/instance/intake-sent-light.png b/apps/space/public/instance/intake-sent-light.png similarity index 100% rename from space/public/instance/intake-sent-light.png rename to apps/space/public/instance/intake-sent-light.png diff --git a/space/public/instance/plane-instance-not-ready.webp b/apps/space/public/instance/plane-instance-not-ready.webp similarity index 100% rename from space/public/instance/plane-instance-not-ready.webp rename to apps/space/public/instance/plane-instance-not-ready.webp diff --git a/space/public/instance/plane-takeoff.png b/apps/space/public/instance/plane-takeoff.png similarity index 100% rename from space/public/instance/plane-takeoff.png rename to apps/space/public/instance/plane-takeoff.png diff --git a/space/public/logos/github-black.png b/apps/space/public/logos/github-black.png similarity index 100% rename from space/public/logos/github-black.png rename to apps/space/public/logos/github-black.png diff --git a/space/public/logos/github-dark.svg b/apps/space/public/logos/github-dark.svg similarity index 100% rename from space/public/logos/github-dark.svg rename to apps/space/public/logos/github-dark.svg diff --git a/space/public/logos/github-square.svg b/apps/space/public/logos/github-square.svg similarity index 100% rename from space/public/logos/github-square.svg rename to apps/space/public/logos/github-square.svg diff --git a/space/public/logos/github-white.svg b/apps/space/public/logos/github-white.svg similarity index 100% rename from space/public/logos/github-white.svg rename to apps/space/public/logos/github-white.svg diff --git a/space/public/logos/gitlab-logo.svg b/apps/space/public/logos/gitlab-logo.svg similarity index 100% rename from space/public/logos/gitlab-logo.svg rename to apps/space/public/logos/gitlab-logo.svg diff --git a/space/public/logos/google-logo.svg b/apps/space/public/logos/google-logo.svg similarity index 100% rename from space/public/logos/google-logo.svg rename to apps/space/public/logos/google-logo.svg diff --git a/space/public/plane-logo.svg b/apps/space/public/plane-logo.svg similarity index 100% rename from space/public/plane-logo.svg rename to apps/space/public/plane-logo.svg diff --git a/space/public/plane-logos/black-horizontal-with-blue-logo.png b/apps/space/public/plane-logos/black-horizontal-with-blue-logo.png similarity index 100% rename from space/public/plane-logos/black-horizontal-with-blue-logo.png rename to apps/space/public/plane-logos/black-horizontal-with-blue-logo.png diff --git a/space/public/plane-logos/blue-without-text-new.png b/apps/space/public/plane-logos/blue-without-text-new.png similarity index 100% rename from space/public/plane-logos/blue-without-text-new.png rename to apps/space/public/plane-logos/blue-without-text-new.png diff --git a/space/public/plane-logos/blue-without-text.png b/apps/space/public/plane-logos/blue-without-text.png similarity index 100% rename from space/public/plane-logos/blue-without-text.png rename to apps/space/public/plane-logos/blue-without-text.png diff --git a/space/public/plane-logos/white-horizontal-with-blue-logo.png b/apps/space/public/plane-logos/white-horizontal-with-blue-logo.png similarity index 100% rename from space/public/plane-logos/white-horizontal-with-blue-logo.png rename to apps/space/public/plane-logos/white-horizontal-with-blue-logo.png diff --git a/space/public/plane-logos/white-horizontal.svg b/apps/space/public/plane-logos/white-horizontal.svg similarity index 100% rename from space/public/plane-logos/white-horizontal.svg rename to apps/space/public/plane-logos/white-horizontal.svg diff --git a/space/public/project-not-published.svg b/apps/space/public/project-not-published.svg similarity index 100% rename from space/public/project-not-published.svg rename to apps/space/public/project-not-published.svg diff --git a/space/public/robots.txt b/apps/space/public/robots.txt similarity index 100% rename from space/public/robots.txt rename to apps/space/public/robots.txt diff --git a/space/public/site.webmanifest.json b/apps/space/public/site.webmanifest.json similarity index 100% rename from space/public/site.webmanifest.json rename to apps/space/public/site.webmanifest.json diff --git a/space/public/something-went-wrong.svg b/apps/space/public/something-went-wrong.svg similarity index 100% rename from space/public/something-went-wrong.svg rename to apps/space/public/something-went-wrong.svg diff --git a/space/public/user-logged-in.svg b/apps/space/public/user-logged-in.svg similarity index 100% rename from space/public/user-logged-in.svg rename to apps/space/public/user-logged-in.svg diff --git a/space/styles/globals.css b/apps/space/styles/globals.css similarity index 100% rename from space/styles/globals.css rename to apps/space/styles/globals.css diff --git a/space/tailwind.config.js b/apps/space/tailwind.config.js similarity index 100% rename from space/tailwind.config.js rename to apps/space/tailwind.config.js diff --git a/space/tsconfig.json b/apps/space/tsconfig.json similarity index 100% rename from space/tsconfig.json rename to apps/space/tsconfig.json diff --git a/web/.env.example b/apps/web/.env.example similarity index 100% rename from web/.env.example rename to apps/web/.env.example diff --git a/web/.eslintignore b/apps/web/.eslintignore similarity index 100% rename from web/.eslintignore rename to apps/web/.eslintignore diff --git a/web/.eslintrc.js b/apps/web/.eslintrc.js similarity index 100% rename from web/.eslintrc.js rename to apps/web/.eslintrc.js diff --git a/web/.gitignore b/apps/web/.gitignore similarity index 100% rename from web/.gitignore rename to apps/web/.gitignore diff --git a/web/.prettierignore b/apps/web/.prettierignore similarity index 100% rename from web/.prettierignore rename to apps/web/.prettierignore diff --git a/web/.prettierrc b/apps/web/.prettierrc similarity index 100% rename from web/.prettierrc rename to apps/web/.prettierrc diff --git a/web/Dockerfile.dev b/apps/web/Dockerfile.dev similarity index 100% rename from web/Dockerfile.dev rename to apps/web/Dockerfile.dev diff --git a/web/Dockerfile.web b/apps/web/Dockerfile.web similarity index 100% rename from web/Dockerfile.web rename to apps/web/Dockerfile.web diff --git a/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/active-cycles/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/active-cycles/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/active-cycles/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/active-cycles/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/analytics/[tabId]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/browse/[workItem]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/drafts/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/drafts/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/drafts/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/drafts/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/drafts/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/extended-project-sidebar.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/extended-sidebar.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/extended-sidebar.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/extended-sidebar.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/extended-sidebar.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/notifications/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/notifications/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/notifications/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/notifications/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/notifications/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/notifications/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/notifications/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/notifications/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/[profileViewId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/[profileViewId]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/[profileViewId]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/[profileViewId]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/mobile-header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/navbar.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/navbar.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/navbar.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/navbar.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/[archivedIssueId]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(detail)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/modules/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/modules/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/modules/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/modules/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/modules/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/modules/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/modules/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/modules/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/[cycleId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/[cycleId]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/[cycleId]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/[cycleId]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/mobile-header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/mobile-header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/mobile-header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/mobile-header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/mobile-header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/mobile-header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/mobile-header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/mobile-header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/draft-issues/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/intake/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(detail)/[issueId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(detail)/[issueId]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(detail)/[issueId]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(detail)/[issueId]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/[moduleId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/[moduleId]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/[moduleId]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/[moduleId]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/mobile-header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/mobile-header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/mobile-header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/mobile-header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/mobile-header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(list)/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(list)/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/mobile-header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/mobile-header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/mobile-header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/mobile-header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/archives/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/archives/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/archives/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/archives/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/archives/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/archives/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/archives/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/archives/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(list)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(list)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(list)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(list)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/projects/(list)/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(list)/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/projects/(list)/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(list)/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/stickies/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/stickies/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/[globalViewId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/[globalViewId]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/workspace-views/[globalViewId]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/[globalViewId]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/header.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/workspace-views/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(projects)/workspace-views/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/billing/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/billing/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/billing/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/billing/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/exports/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/exports/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/exports/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/exports/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/imports/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/imports/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/imports/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/imports/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/integrations/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/mobile-header-tabs.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/mobile-header-tabs.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/mobile-header-tabs.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/mobile-header-tabs.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/[webhookId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/[webhookId]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/[webhookId]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/[webhookId]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/webhooks/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/account/activity/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/activity/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/account/activity/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/activity/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/account/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/account/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/account/notifications/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/notifications/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/account/notifications/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/notifications/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/account/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/account/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/account/preferences/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/preferences/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/account/preferences/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/preferences/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/security/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/account/sidebar.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/sidebar.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/account/sidebar.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/sidebar.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/automations/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/estimates/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/estimates/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/estimates/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/estimates/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/features/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/features/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/features/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/features/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/labels/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/labels/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/labels/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/labels/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/members/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/members/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/members/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/members/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/states/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/states/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/states/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/[projectId]/states/page.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/layout.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/layout.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/projects/layout.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/layout.tsx diff --git a/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx similarity index 100% rename from web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx rename to apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx diff --git a/web/app/(all)/accounts/forgot-password/layout.tsx b/apps/web/app/(all)/accounts/forgot-password/layout.tsx similarity index 100% rename from web/app/(all)/accounts/forgot-password/layout.tsx rename to apps/web/app/(all)/accounts/forgot-password/layout.tsx diff --git a/web/app/(all)/accounts/forgot-password/page.tsx b/apps/web/app/(all)/accounts/forgot-password/page.tsx similarity index 100% rename from web/app/(all)/accounts/forgot-password/page.tsx rename to apps/web/app/(all)/accounts/forgot-password/page.tsx diff --git a/web/app/(all)/accounts/reset-password/layout.tsx b/apps/web/app/(all)/accounts/reset-password/layout.tsx similarity index 100% rename from web/app/(all)/accounts/reset-password/layout.tsx rename to apps/web/app/(all)/accounts/reset-password/layout.tsx diff --git a/web/app/(all)/accounts/reset-password/page.tsx b/apps/web/app/(all)/accounts/reset-password/page.tsx similarity index 100% rename from web/app/(all)/accounts/reset-password/page.tsx rename to apps/web/app/(all)/accounts/reset-password/page.tsx diff --git a/web/app/(all)/accounts/set-password/layout.tsx b/apps/web/app/(all)/accounts/set-password/layout.tsx similarity index 100% rename from web/app/(all)/accounts/set-password/layout.tsx rename to apps/web/app/(all)/accounts/set-password/layout.tsx diff --git a/web/app/(all)/accounts/set-password/page.tsx b/apps/web/app/(all)/accounts/set-password/page.tsx similarity index 100% rename from web/app/(all)/accounts/set-password/page.tsx rename to apps/web/app/(all)/accounts/set-password/page.tsx diff --git a/web/app/(all)/create-workspace/layout.tsx b/apps/web/app/(all)/create-workspace/layout.tsx similarity index 100% rename from web/app/(all)/create-workspace/layout.tsx rename to apps/web/app/(all)/create-workspace/layout.tsx diff --git a/web/app/(all)/create-workspace/page.tsx b/apps/web/app/(all)/create-workspace/page.tsx similarity index 100% rename from web/app/(all)/create-workspace/page.tsx rename to apps/web/app/(all)/create-workspace/page.tsx diff --git a/web/app/(all)/installations/[provider]/layout.tsx b/apps/web/app/(all)/installations/[provider]/layout.tsx similarity index 100% rename from web/app/(all)/installations/[provider]/layout.tsx rename to apps/web/app/(all)/installations/[provider]/layout.tsx diff --git a/web/app/(all)/installations/[provider]/page.tsx b/apps/web/app/(all)/installations/[provider]/page.tsx similarity index 100% rename from web/app/(all)/installations/[provider]/page.tsx rename to apps/web/app/(all)/installations/[provider]/page.tsx diff --git a/web/app/(all)/invitations/layout.tsx b/apps/web/app/(all)/invitations/layout.tsx similarity index 100% rename from web/app/(all)/invitations/layout.tsx rename to apps/web/app/(all)/invitations/layout.tsx diff --git a/web/app/(all)/invitations/page.tsx b/apps/web/app/(all)/invitations/page.tsx similarity index 100% rename from web/app/(all)/invitations/page.tsx rename to apps/web/app/(all)/invitations/page.tsx diff --git a/web/app/(all)/layout.preload.tsx b/apps/web/app/(all)/layout.preload.tsx similarity index 100% rename from web/app/(all)/layout.preload.tsx rename to apps/web/app/(all)/layout.preload.tsx diff --git a/web/app/(all)/layout.tsx b/apps/web/app/(all)/layout.tsx similarity index 100% rename from web/app/(all)/layout.tsx rename to apps/web/app/(all)/layout.tsx diff --git a/web/app/(all)/onboarding/layout.tsx b/apps/web/app/(all)/onboarding/layout.tsx similarity index 100% rename from web/app/(all)/onboarding/layout.tsx rename to apps/web/app/(all)/onboarding/layout.tsx diff --git a/web/app/(all)/onboarding/page.tsx b/apps/web/app/(all)/onboarding/page.tsx similarity index 100% rename from web/app/(all)/onboarding/page.tsx rename to apps/web/app/(all)/onboarding/page.tsx diff --git a/web/app/(all)/profile/activity/page.tsx b/apps/web/app/(all)/profile/activity/page.tsx similarity index 100% rename from web/app/(all)/profile/activity/page.tsx rename to apps/web/app/(all)/profile/activity/page.tsx diff --git a/web/app/(all)/profile/appearance/page.tsx b/apps/web/app/(all)/profile/appearance/page.tsx similarity index 100% rename from web/app/(all)/profile/appearance/page.tsx rename to apps/web/app/(all)/profile/appearance/page.tsx diff --git a/web/app/(all)/profile/layout.tsx b/apps/web/app/(all)/profile/layout.tsx similarity index 100% rename from web/app/(all)/profile/layout.tsx rename to apps/web/app/(all)/profile/layout.tsx diff --git a/web/app/(all)/profile/notifications/page.tsx b/apps/web/app/(all)/profile/notifications/page.tsx similarity index 100% rename from web/app/(all)/profile/notifications/page.tsx rename to apps/web/app/(all)/profile/notifications/page.tsx diff --git a/web/app/(all)/profile/page.tsx b/apps/web/app/(all)/profile/page.tsx similarity index 100% rename from web/app/(all)/profile/page.tsx rename to apps/web/app/(all)/profile/page.tsx diff --git a/web/app/(all)/profile/security/page.tsx b/apps/web/app/(all)/profile/security/page.tsx similarity index 100% rename from web/app/(all)/profile/security/page.tsx rename to apps/web/app/(all)/profile/security/page.tsx diff --git a/web/app/(all)/profile/sidebar.tsx b/apps/web/app/(all)/profile/sidebar.tsx similarity index 100% rename from web/app/(all)/profile/sidebar.tsx rename to apps/web/app/(all)/profile/sidebar.tsx diff --git a/web/app/(all)/sign-up/layout.tsx b/apps/web/app/(all)/sign-up/layout.tsx similarity index 100% rename from web/app/(all)/sign-up/layout.tsx rename to apps/web/app/(all)/sign-up/layout.tsx diff --git a/web/app/(all)/sign-up/page.tsx b/apps/web/app/(all)/sign-up/page.tsx similarity index 100% rename from web/app/(all)/sign-up/page.tsx rename to apps/web/app/(all)/sign-up/page.tsx diff --git a/web/app/(all)/workspace-invitations/layout.tsx b/apps/web/app/(all)/workspace-invitations/layout.tsx similarity index 100% rename from web/app/(all)/workspace-invitations/layout.tsx rename to apps/web/app/(all)/workspace-invitations/layout.tsx diff --git a/web/app/(all)/workspace-invitations/page.tsx b/apps/web/app/(all)/workspace-invitations/page.tsx similarity index 100% rename from web/app/(all)/workspace-invitations/page.tsx rename to apps/web/app/(all)/workspace-invitations/page.tsx diff --git a/web/app/(home)/layout.tsx b/apps/web/app/(home)/layout.tsx similarity index 100% rename from web/app/(home)/layout.tsx rename to apps/web/app/(home)/layout.tsx diff --git a/web/app/(home)/page.tsx b/apps/web/app/(home)/page.tsx similarity index 100% rename from web/app/(home)/page.tsx rename to apps/web/app/(home)/page.tsx diff --git a/web/app/error.tsx b/apps/web/app/error.tsx similarity index 100% rename from web/app/error.tsx rename to apps/web/app/error.tsx diff --git a/web/app/global-error.tsx b/apps/web/app/global-error.tsx similarity index 100% rename from web/app/global-error.tsx rename to apps/web/app/global-error.tsx diff --git a/web/app/layout.tsx b/apps/web/app/layout.tsx similarity index 100% rename from web/app/layout.tsx rename to apps/web/app/layout.tsx diff --git a/web/app/not-found.tsx b/apps/web/app/not-found.tsx similarity index 100% rename from web/app/not-found.tsx rename to apps/web/app/not-found.tsx diff --git a/web/app/provider.tsx b/apps/web/app/provider.tsx similarity index 100% rename from web/app/provider.tsx rename to apps/web/app/provider.tsx diff --git a/web/ce/components/active-cycles/index.ts b/apps/web/ce/components/active-cycles/index.ts similarity index 100% rename from web/ce/components/active-cycles/index.ts rename to apps/web/ce/components/active-cycles/index.ts diff --git a/web/ce/components/active-cycles/root.tsx b/apps/web/ce/components/active-cycles/root.tsx similarity index 100% rename from web/ce/components/active-cycles/root.tsx rename to apps/web/ce/components/active-cycles/root.tsx diff --git a/web/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx b/apps/web/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx similarity index 100% rename from web/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx rename to apps/web/ce/components/active-cycles/workspace-active-cycles-upgrade.tsx diff --git a/web/ce/components/analytics/tabs.tsx b/apps/web/ce/components/analytics/tabs.tsx similarity index 100% rename from web/ce/components/analytics/tabs.tsx rename to apps/web/ce/components/analytics/tabs.tsx diff --git a/web/ce/components/breadcrumbs/common.tsx b/apps/web/ce/components/breadcrumbs/common.tsx similarity index 100% rename from web/ce/components/breadcrumbs/common.tsx rename to apps/web/ce/components/breadcrumbs/common.tsx diff --git a/web/ce/components/breadcrumbs/index.ts b/apps/web/ce/components/breadcrumbs/index.ts similarity index 100% rename from web/ce/components/breadcrumbs/index.ts rename to apps/web/ce/components/breadcrumbs/index.ts diff --git a/web/ce/components/breadcrumbs/project-feature.tsx b/apps/web/ce/components/breadcrumbs/project-feature.tsx similarity index 100% rename from web/ce/components/breadcrumbs/project-feature.tsx rename to apps/web/ce/components/breadcrumbs/project-feature.tsx diff --git a/web/ce/components/breadcrumbs/project.tsx b/apps/web/ce/components/breadcrumbs/project.tsx similarity index 100% rename from web/ce/components/breadcrumbs/project.tsx rename to apps/web/ce/components/breadcrumbs/project.tsx diff --git a/web/ce/components/command-palette/actions/index.ts b/apps/web/ce/components/command-palette/actions/index.ts similarity index 100% rename from web/ce/components/command-palette/actions/index.ts rename to apps/web/ce/components/command-palette/actions/index.ts diff --git a/web/ce/components/command-palette/actions/work-item-actions/change-state-list.tsx b/apps/web/ce/components/command-palette/actions/work-item-actions/change-state-list.tsx similarity index 100% rename from web/ce/components/command-palette/actions/work-item-actions/change-state-list.tsx rename to apps/web/ce/components/command-palette/actions/work-item-actions/change-state-list.tsx diff --git a/web/ce/components/command-palette/actions/work-item-actions/index.ts b/apps/web/ce/components/command-palette/actions/work-item-actions/index.ts similarity index 100% rename from web/ce/components/command-palette/actions/work-item-actions/index.ts rename to apps/web/ce/components/command-palette/actions/work-item-actions/index.ts diff --git a/web/ce/components/command-palette/helpers.tsx b/apps/web/ce/components/command-palette/helpers.tsx similarity index 100% rename from web/ce/components/command-palette/helpers.tsx rename to apps/web/ce/components/command-palette/helpers.tsx diff --git a/web/ce/components/command-palette/index.ts b/apps/web/ce/components/command-palette/index.ts similarity index 100% rename from web/ce/components/command-palette/index.ts rename to apps/web/ce/components/command-palette/index.ts diff --git a/web/ce/components/command-palette/modals/index.ts b/apps/web/ce/components/command-palette/modals/index.ts similarity index 100% rename from web/ce/components/command-palette/modals/index.ts rename to apps/web/ce/components/command-palette/modals/index.ts diff --git a/web/ce/components/command-palette/modals/issue-level.tsx b/apps/web/ce/components/command-palette/modals/issue-level.tsx similarity index 100% rename from web/ce/components/command-palette/modals/issue-level.tsx rename to apps/web/ce/components/command-palette/modals/issue-level.tsx diff --git a/web/ce/components/command-palette/modals/project-level.tsx b/apps/web/ce/components/command-palette/modals/project-level.tsx similarity index 100% rename from web/ce/components/command-palette/modals/project-level.tsx rename to apps/web/ce/components/command-palette/modals/project-level.tsx diff --git a/web/ce/components/command-palette/modals/workspace-level.tsx b/apps/web/ce/components/command-palette/modals/workspace-level.tsx similarity index 100% rename from web/ce/components/command-palette/modals/workspace-level.tsx rename to apps/web/ce/components/command-palette/modals/workspace-level.tsx diff --git a/web/ce/components/comments/comment-block.tsx b/apps/web/ce/components/comments/comment-block.tsx similarity index 100% rename from web/ce/components/comments/comment-block.tsx rename to apps/web/ce/components/comments/comment-block.tsx diff --git a/web/ce/components/comments/index.ts b/apps/web/ce/components/comments/index.ts similarity index 100% rename from web/ce/components/comments/index.ts rename to apps/web/ce/components/comments/index.ts diff --git a/web/ce/components/common/index.ts b/apps/web/ce/components/common/index.ts similarity index 100% rename from web/ce/components/common/index.ts rename to apps/web/ce/components/common/index.ts diff --git a/web/ce/components/common/subscription/index.ts b/apps/web/ce/components/common/subscription/index.ts similarity index 100% rename from web/ce/components/common/subscription/index.ts rename to apps/web/ce/components/common/subscription/index.ts diff --git a/web/ce/components/common/subscription/subscription-pill.tsx b/apps/web/ce/components/common/subscription/subscription-pill.tsx similarity index 100% rename from web/ce/components/common/subscription/subscription-pill.tsx rename to apps/web/ce/components/common/subscription/subscription-pill.tsx diff --git a/web/ce/components/cycles/active-cycle/index.ts b/apps/web/ce/components/cycles/active-cycle/index.ts similarity index 100% rename from web/ce/components/cycles/active-cycle/index.ts rename to apps/web/ce/components/cycles/active-cycle/index.ts diff --git a/web/ce/components/cycles/active-cycle/root.tsx b/apps/web/ce/components/cycles/active-cycle/root.tsx similarity index 100% rename from web/ce/components/cycles/active-cycle/root.tsx rename to apps/web/ce/components/cycles/active-cycle/root.tsx diff --git a/web/ce/components/cycles/additional-actions.tsx b/apps/web/ce/components/cycles/additional-actions.tsx similarity index 100% rename from web/ce/components/cycles/additional-actions.tsx rename to apps/web/ce/components/cycles/additional-actions.tsx diff --git a/web/ce/components/cycles/analytics-sidebar/base.tsx b/apps/web/ce/components/cycles/analytics-sidebar/base.tsx similarity index 100% rename from web/ce/components/cycles/analytics-sidebar/base.tsx rename to apps/web/ce/components/cycles/analytics-sidebar/base.tsx diff --git a/web/ce/components/cycles/analytics-sidebar/index.ts b/apps/web/ce/components/cycles/analytics-sidebar/index.ts similarity index 100% rename from web/ce/components/cycles/analytics-sidebar/index.ts rename to apps/web/ce/components/cycles/analytics-sidebar/index.ts diff --git a/web/ce/components/cycles/analytics-sidebar/root.tsx b/apps/web/ce/components/cycles/analytics-sidebar/root.tsx similarity index 100% rename from web/ce/components/cycles/analytics-sidebar/root.tsx rename to apps/web/ce/components/cycles/analytics-sidebar/root.tsx diff --git a/web/ce/components/cycles/end-cycle/index.ts b/apps/web/ce/components/cycles/end-cycle/index.ts similarity index 100% rename from web/ce/components/cycles/end-cycle/index.ts rename to apps/web/ce/components/cycles/end-cycle/index.ts diff --git a/web/ce/components/cycles/end-cycle/modal.tsx b/apps/web/ce/components/cycles/end-cycle/modal.tsx similarity index 100% rename from web/ce/components/cycles/end-cycle/modal.tsx rename to apps/web/ce/components/cycles/end-cycle/modal.tsx diff --git a/web/ce/components/cycles/end-cycle/use-end-cycle.tsx b/apps/web/ce/components/cycles/end-cycle/use-end-cycle.tsx similarity index 100% rename from web/ce/components/cycles/end-cycle/use-end-cycle.tsx rename to apps/web/ce/components/cycles/end-cycle/use-end-cycle.tsx diff --git a/web/ce/components/cycles/index.ts b/apps/web/ce/components/cycles/index.ts similarity index 100% rename from web/ce/components/cycles/index.ts rename to apps/web/ce/components/cycles/index.ts diff --git a/web/ce/components/de-dupe/de-dupe-button.tsx b/apps/web/ce/components/de-dupe/de-dupe-button.tsx similarity index 100% rename from web/ce/components/de-dupe/de-dupe-button.tsx rename to apps/web/ce/components/de-dupe/de-dupe-button.tsx diff --git a/web/ce/components/de-dupe/duplicate-modal/index.ts b/apps/web/ce/components/de-dupe/duplicate-modal/index.ts similarity index 100% rename from web/ce/components/de-dupe/duplicate-modal/index.ts rename to apps/web/ce/components/de-dupe/duplicate-modal/index.ts diff --git a/web/ce/components/de-dupe/duplicate-modal/root.tsx b/apps/web/ce/components/de-dupe/duplicate-modal/root.tsx similarity index 100% rename from web/ce/components/de-dupe/duplicate-modal/root.tsx rename to apps/web/ce/components/de-dupe/duplicate-modal/root.tsx diff --git a/web/ce/components/de-dupe/duplicate-popover/index.ts b/apps/web/ce/components/de-dupe/duplicate-popover/index.ts similarity index 100% rename from web/ce/components/de-dupe/duplicate-popover/index.ts rename to apps/web/ce/components/de-dupe/duplicate-popover/index.ts diff --git a/web/ce/components/de-dupe/duplicate-popover/root.tsx b/apps/web/ce/components/de-dupe/duplicate-popover/root.tsx similarity index 100% rename from web/ce/components/de-dupe/duplicate-popover/root.tsx rename to apps/web/ce/components/de-dupe/duplicate-popover/root.tsx diff --git a/web/ce/components/de-dupe/index.ts b/apps/web/ce/components/de-dupe/index.ts similarity index 100% rename from web/ce/components/de-dupe/index.ts rename to apps/web/ce/components/de-dupe/index.ts diff --git a/web/ce/components/de-dupe/issue-block/button-label.tsx b/apps/web/ce/components/de-dupe/issue-block/button-label.tsx similarity index 100% rename from web/ce/components/de-dupe/issue-block/button-label.tsx rename to apps/web/ce/components/de-dupe/issue-block/button-label.tsx diff --git a/web/ce/components/de-dupe/issue-block/index.ts b/apps/web/ce/components/de-dupe/issue-block/index.ts similarity index 100% rename from web/ce/components/de-dupe/issue-block/index.ts rename to apps/web/ce/components/de-dupe/issue-block/index.ts diff --git a/web/ce/components/editor/embeds/index.ts b/apps/web/ce/components/editor/embeds/index.ts similarity index 100% rename from web/ce/components/editor/embeds/index.ts rename to apps/web/ce/components/editor/embeds/index.ts diff --git a/web/ce/components/editor/embeds/mentions/index.ts b/apps/web/ce/components/editor/embeds/mentions/index.ts similarity index 100% rename from web/ce/components/editor/embeds/mentions/index.ts rename to apps/web/ce/components/editor/embeds/mentions/index.ts diff --git a/web/ce/components/editor/embeds/mentions/root.tsx b/apps/web/ce/components/editor/embeds/mentions/root.tsx similarity index 100% rename from web/ce/components/editor/embeds/mentions/root.tsx rename to apps/web/ce/components/editor/embeds/mentions/root.tsx diff --git a/web/ce/components/editor/index.ts b/apps/web/ce/components/editor/index.ts similarity index 100% rename from web/ce/components/editor/index.ts rename to apps/web/ce/components/editor/index.ts diff --git a/web/ce/components/epics/epic-modal/index.ts b/apps/web/ce/components/epics/epic-modal/index.ts similarity index 100% rename from web/ce/components/epics/epic-modal/index.ts rename to apps/web/ce/components/epics/epic-modal/index.ts diff --git a/web/ce/components/epics/epic-modal/modal.tsx b/apps/web/ce/components/epics/epic-modal/modal.tsx similarity index 100% rename from web/ce/components/epics/epic-modal/modal.tsx rename to apps/web/ce/components/epics/epic-modal/modal.tsx diff --git a/web/ce/components/epics/index.ts b/apps/web/ce/components/epics/index.ts similarity index 100% rename from web/ce/components/epics/index.ts rename to apps/web/ce/components/epics/index.ts diff --git a/web/ce/components/estimates/estimate-list-item-buttons.tsx b/apps/web/ce/components/estimates/estimate-list-item-buttons.tsx similarity index 100% rename from web/ce/components/estimates/estimate-list-item-buttons.tsx rename to apps/web/ce/components/estimates/estimate-list-item-buttons.tsx diff --git a/web/ce/components/estimates/helper.tsx b/apps/web/ce/components/estimates/helper.tsx similarity index 100% rename from web/ce/components/estimates/helper.tsx rename to apps/web/ce/components/estimates/helper.tsx diff --git a/web/ce/components/estimates/index.ts b/apps/web/ce/components/estimates/index.ts similarity index 100% rename from web/ce/components/estimates/index.ts rename to apps/web/ce/components/estimates/index.ts diff --git a/web/ce/components/estimates/inputs/index.ts b/apps/web/ce/components/estimates/inputs/index.ts similarity index 100% rename from web/ce/components/estimates/inputs/index.ts rename to apps/web/ce/components/estimates/inputs/index.ts diff --git a/web/ce/components/estimates/inputs/time-input.tsx b/apps/web/ce/components/estimates/inputs/time-input.tsx similarity index 100% rename from web/ce/components/estimates/inputs/time-input.tsx rename to apps/web/ce/components/estimates/inputs/time-input.tsx diff --git a/web/ce/components/estimates/points/delete.tsx b/apps/web/ce/components/estimates/points/delete.tsx similarity index 100% rename from web/ce/components/estimates/points/delete.tsx rename to apps/web/ce/components/estimates/points/delete.tsx diff --git a/web/ce/components/estimates/points/index.ts b/apps/web/ce/components/estimates/points/index.ts similarity index 100% rename from web/ce/components/estimates/points/index.ts rename to apps/web/ce/components/estimates/points/index.ts diff --git a/web/ce/components/estimates/update/index.ts b/apps/web/ce/components/estimates/update/index.ts similarity index 100% rename from web/ce/components/estimates/update/index.ts rename to apps/web/ce/components/estimates/update/index.ts diff --git a/web/ce/components/estimates/update/modal.tsx b/apps/web/ce/components/estimates/update/modal.tsx similarity index 100% rename from web/ce/components/estimates/update/modal.tsx rename to apps/web/ce/components/estimates/update/modal.tsx diff --git a/web/ce/components/gantt-chart/dependency/blockDraggables/index.ts b/apps/web/ce/components/gantt-chart/dependency/blockDraggables/index.ts similarity index 100% rename from web/ce/components/gantt-chart/dependency/blockDraggables/index.ts rename to apps/web/ce/components/gantt-chart/dependency/blockDraggables/index.ts diff --git a/web/ce/components/gantt-chart/dependency/blockDraggables/left-draggable.tsx b/apps/web/ce/components/gantt-chart/dependency/blockDraggables/left-draggable.tsx similarity index 100% rename from web/ce/components/gantt-chart/dependency/blockDraggables/left-draggable.tsx rename to apps/web/ce/components/gantt-chart/dependency/blockDraggables/left-draggable.tsx diff --git a/web/ce/components/gantt-chart/dependency/blockDraggables/right-draggable.tsx b/apps/web/ce/components/gantt-chart/dependency/blockDraggables/right-draggable.tsx similarity index 100% rename from web/ce/components/gantt-chart/dependency/blockDraggables/right-draggable.tsx rename to apps/web/ce/components/gantt-chart/dependency/blockDraggables/right-draggable.tsx diff --git a/web/ce/components/gantt-chart/dependency/dependency-paths.tsx b/apps/web/ce/components/gantt-chart/dependency/dependency-paths.tsx similarity index 100% rename from web/ce/components/gantt-chart/dependency/dependency-paths.tsx rename to apps/web/ce/components/gantt-chart/dependency/dependency-paths.tsx diff --git a/web/ce/components/gantt-chart/dependency/draggable-dependency-path.tsx b/apps/web/ce/components/gantt-chart/dependency/draggable-dependency-path.tsx similarity index 100% rename from web/ce/components/gantt-chart/dependency/draggable-dependency-path.tsx rename to apps/web/ce/components/gantt-chart/dependency/draggable-dependency-path.tsx diff --git a/web/ce/components/gantt-chart/dependency/index.ts b/apps/web/ce/components/gantt-chart/dependency/index.ts similarity index 100% rename from web/ce/components/gantt-chart/dependency/index.ts rename to apps/web/ce/components/gantt-chart/dependency/index.ts diff --git a/web/ce/components/gantt-chart/index.ts b/apps/web/ce/components/gantt-chart/index.ts similarity index 100% rename from web/ce/components/gantt-chart/index.ts rename to apps/web/ce/components/gantt-chart/index.ts diff --git a/web/ce/components/global/index.ts b/apps/web/ce/components/global/index.ts similarity index 100% rename from web/ce/components/global/index.ts rename to apps/web/ce/components/global/index.ts diff --git a/web/ce/components/global/product-updates-header.tsx b/apps/web/ce/components/global/product-updates-header.tsx similarity index 100% rename from web/ce/components/global/product-updates-header.tsx rename to apps/web/ce/components/global/product-updates-header.tsx diff --git a/web/ce/components/global/version-number.tsx b/apps/web/ce/components/global/version-number.tsx similarity index 100% rename from web/ce/components/global/version-number.tsx rename to apps/web/ce/components/global/version-number.tsx diff --git a/web/ce/components/home/header.tsx b/apps/web/ce/components/home/header.tsx similarity index 100% rename from web/ce/components/home/header.tsx rename to apps/web/ce/components/home/header.tsx diff --git a/web/ce/components/home/index.ts b/apps/web/ce/components/home/index.ts similarity index 100% rename from web/ce/components/home/index.ts rename to apps/web/ce/components/home/index.ts diff --git a/web/ce/components/home/peek-overviews.tsx b/apps/web/ce/components/home/peek-overviews.tsx similarity index 100% rename from web/ce/components/home/peek-overviews.tsx rename to apps/web/ce/components/home/peek-overviews.tsx diff --git a/web/ce/components/inbox/source-pill.tsx b/apps/web/ce/components/inbox/source-pill.tsx similarity index 100% rename from web/ce/components/inbox/source-pill.tsx rename to apps/web/ce/components/inbox/source-pill.tsx diff --git a/web/ce/components/instance/index.ts b/apps/web/ce/components/instance/index.ts similarity index 100% rename from web/ce/components/instance/index.ts rename to apps/web/ce/components/instance/index.ts diff --git a/web/ce/components/instance/maintenance-message.tsx b/apps/web/ce/components/instance/maintenance-message.tsx similarity index 100% rename from web/ce/components/instance/maintenance-message.tsx rename to apps/web/ce/components/instance/maintenance-message.tsx diff --git a/web/ce/components/issues/bulk-operations/index.ts b/apps/web/ce/components/issues/bulk-operations/index.ts similarity index 100% rename from web/ce/components/issues/bulk-operations/index.ts rename to apps/web/ce/components/issues/bulk-operations/index.ts diff --git a/web/ce/components/issues/bulk-operations/root.tsx b/apps/web/ce/components/issues/bulk-operations/root.tsx similarity index 100% rename from web/ce/components/issues/bulk-operations/root.tsx rename to apps/web/ce/components/issues/bulk-operations/root.tsx diff --git a/web/ce/components/issues/filters/applied-filters/index.ts b/apps/web/ce/components/issues/filters/applied-filters/index.ts similarity index 100% rename from web/ce/components/issues/filters/applied-filters/index.ts rename to apps/web/ce/components/issues/filters/applied-filters/index.ts diff --git a/web/ce/components/issues/filters/applied-filters/issue-types.tsx b/apps/web/ce/components/issues/filters/applied-filters/issue-types.tsx similarity index 100% rename from web/ce/components/issues/filters/applied-filters/issue-types.tsx rename to apps/web/ce/components/issues/filters/applied-filters/issue-types.tsx diff --git a/web/ce/components/issues/filters/index.ts b/apps/web/ce/components/issues/filters/index.ts similarity index 100% rename from web/ce/components/issues/filters/index.ts rename to apps/web/ce/components/issues/filters/index.ts diff --git a/web/ce/components/issues/filters/issue-types.tsx b/apps/web/ce/components/issues/filters/issue-types.tsx similarity index 100% rename from web/ce/components/issues/filters/issue-types.tsx rename to apps/web/ce/components/issues/filters/issue-types.tsx diff --git a/web/ce/components/issues/filters/team-project.tsx b/apps/web/ce/components/issues/filters/team-project.tsx similarity index 100% rename from web/ce/components/issues/filters/team-project.tsx rename to apps/web/ce/components/issues/filters/team-project.tsx diff --git a/web/ce/components/issues/header.tsx b/apps/web/ce/components/issues/header.tsx similarity index 100% rename from web/ce/components/issues/header.tsx rename to apps/web/ce/components/issues/header.tsx diff --git a/web/ce/components/issues/index.ts b/apps/web/ce/components/issues/index.ts similarity index 100% rename from web/ce/components/issues/index.ts rename to apps/web/ce/components/issues/index.ts diff --git a/web/ce/components/issues/issue-detail-widgets/action-buttons.tsx b/apps/web/ce/components/issues/issue-detail-widgets/action-buttons.tsx similarity index 100% rename from web/ce/components/issues/issue-detail-widgets/action-buttons.tsx rename to apps/web/ce/components/issues/issue-detail-widgets/action-buttons.tsx diff --git a/web/ce/components/issues/issue-detail-widgets/collapsibles.tsx b/apps/web/ce/components/issues/issue-detail-widgets/collapsibles.tsx similarity index 100% rename from web/ce/components/issues/issue-detail-widgets/collapsibles.tsx rename to apps/web/ce/components/issues/issue-detail-widgets/collapsibles.tsx diff --git a/web/ce/components/issues/issue-detail-widgets/modals.tsx b/apps/web/ce/components/issues/issue-detail-widgets/modals.tsx similarity index 100% rename from web/ce/components/issues/issue-detail-widgets/modals.tsx rename to apps/web/ce/components/issues/issue-detail-widgets/modals.tsx diff --git a/web/ce/components/issues/issue-details/additional-activity-root.tsx b/apps/web/ce/components/issues/issue-details/additional-activity-root.tsx similarity index 100% rename from web/ce/components/issues/issue-details/additional-activity-root.tsx rename to apps/web/ce/components/issues/issue-details/additional-activity-root.tsx diff --git a/web/ce/components/issues/issue-details/additional-properties.tsx b/apps/web/ce/components/issues/issue-details/additional-properties.tsx similarity index 100% rename from web/ce/components/issues/issue-details/additional-properties.tsx rename to apps/web/ce/components/issues/issue-details/additional-properties.tsx diff --git a/web/ce/components/issues/issue-details/index.ts b/apps/web/ce/components/issues/issue-details/index.ts similarity index 100% rename from web/ce/components/issues/issue-details/index.ts rename to apps/web/ce/components/issues/issue-details/index.ts diff --git a/web/ce/components/issues/issue-details/issue-creator.tsx b/apps/web/ce/components/issues/issue-details/issue-creator.tsx similarity index 100% rename from web/ce/components/issues/issue-details/issue-creator.tsx rename to apps/web/ce/components/issues/issue-details/issue-creator.tsx diff --git a/web/ce/components/issues/issue-details/issue-identifier.tsx b/apps/web/ce/components/issues/issue-details/issue-identifier.tsx similarity index 100% rename from web/ce/components/issues/issue-details/issue-identifier.tsx rename to apps/web/ce/components/issues/issue-details/issue-identifier.tsx diff --git a/web/ce/components/issues/issue-details/issue-properties-activity/index.ts b/apps/web/ce/components/issues/issue-details/issue-properties-activity/index.ts similarity index 100% rename from web/ce/components/issues/issue-details/issue-properties-activity/index.ts rename to apps/web/ce/components/issues/issue-details/issue-properties-activity/index.ts diff --git a/web/ce/components/issues/issue-details/issue-properties-activity/root.tsx b/apps/web/ce/components/issues/issue-details/issue-properties-activity/root.tsx similarity index 100% rename from web/ce/components/issues/issue-details/issue-properties-activity/root.tsx rename to apps/web/ce/components/issues/issue-details/issue-properties-activity/root.tsx diff --git a/web/ce/components/issues/issue-details/issue-type-activity.tsx b/apps/web/ce/components/issues/issue-details/issue-type-activity.tsx similarity index 100% rename from web/ce/components/issues/issue-details/issue-type-activity.tsx rename to apps/web/ce/components/issues/issue-details/issue-type-activity.tsx diff --git a/web/ce/components/issues/issue-details/issue-type-switcher.tsx b/apps/web/ce/components/issues/issue-details/issue-type-switcher.tsx similarity index 100% rename from web/ce/components/issues/issue-details/issue-type-switcher.tsx rename to apps/web/ce/components/issues/issue-details/issue-type-switcher.tsx diff --git a/web/ce/components/issues/issue-details/parent-select-root.tsx b/apps/web/ce/components/issues/issue-details/parent-select-root.tsx similarity index 100% rename from web/ce/components/issues/issue-details/parent-select-root.tsx rename to apps/web/ce/components/issues/issue-details/parent-select-root.tsx diff --git a/web/ce/components/issues/issue-layouts/additional-properties.tsx b/apps/web/ce/components/issues/issue-layouts/additional-properties.tsx similarity index 100% rename from web/ce/components/issues/issue-layouts/additional-properties.tsx rename to apps/web/ce/components/issues/issue-layouts/additional-properties.tsx diff --git a/web/ce/components/issues/issue-layouts/empty-states/index.ts b/apps/web/ce/components/issues/issue-layouts/empty-states/index.ts similarity index 100% rename from web/ce/components/issues/issue-layouts/empty-states/index.ts rename to apps/web/ce/components/issues/issue-layouts/empty-states/index.ts diff --git a/web/ce/components/issues/issue-layouts/empty-states/team-issues.tsx b/apps/web/ce/components/issues/issue-layouts/empty-states/team-issues.tsx similarity index 100% rename from web/ce/components/issues/issue-layouts/empty-states/team-issues.tsx rename to apps/web/ce/components/issues/issue-layouts/empty-states/team-issues.tsx diff --git a/web/ce/components/issues/issue-layouts/empty-states/team-view-issues.tsx b/apps/web/ce/components/issues/issue-layouts/empty-states/team-view-issues.tsx similarity index 100% rename from web/ce/components/issues/issue-layouts/empty-states/team-view-issues.tsx rename to apps/web/ce/components/issues/issue-layouts/empty-states/team-view-issues.tsx diff --git a/web/ce/components/issues/issue-layouts/issue-stats.tsx b/apps/web/ce/components/issues/issue-layouts/issue-stats.tsx similarity index 100% rename from web/ce/components/issues/issue-layouts/issue-stats.tsx rename to apps/web/ce/components/issues/issue-layouts/issue-stats.tsx diff --git a/web/ce/components/issues/issue-layouts/quick-action-dropdowns/copy-menu-helper.tsx b/apps/web/ce/components/issues/issue-layouts/quick-action-dropdowns/copy-menu-helper.tsx similarity index 100% rename from web/ce/components/issues/issue-layouts/quick-action-dropdowns/copy-menu-helper.tsx rename to apps/web/ce/components/issues/issue-layouts/quick-action-dropdowns/copy-menu-helper.tsx diff --git a/web/ce/components/issues/issue-layouts/quick-action-dropdowns/duplicate-modal.tsx b/apps/web/ce/components/issues/issue-layouts/quick-action-dropdowns/duplicate-modal.tsx similarity index 100% rename from web/ce/components/issues/issue-layouts/quick-action-dropdowns/duplicate-modal.tsx rename to apps/web/ce/components/issues/issue-layouts/quick-action-dropdowns/duplicate-modal.tsx diff --git a/web/ce/components/issues/issue-layouts/quick-action-dropdowns/index.ts b/apps/web/ce/components/issues/issue-layouts/quick-action-dropdowns/index.ts similarity index 100% rename from web/ce/components/issues/issue-layouts/quick-action-dropdowns/index.ts rename to apps/web/ce/components/issues/issue-layouts/quick-action-dropdowns/index.ts diff --git a/web/ce/components/issues/issue-layouts/utils.tsx b/apps/web/ce/components/issues/issue-layouts/utils.tsx similarity index 100% rename from web/ce/components/issues/issue-layouts/utils.tsx rename to apps/web/ce/components/issues/issue-layouts/utils.tsx diff --git a/web/ce/components/issues/issue-modal/additional-properties.tsx b/apps/web/ce/components/issues/issue-modal/additional-properties.tsx similarity index 100% rename from web/ce/components/issues/issue-modal/additional-properties.tsx rename to apps/web/ce/components/issues/issue-modal/additional-properties.tsx diff --git a/web/ce/components/issues/issue-modal/index.ts b/apps/web/ce/components/issues/issue-modal/index.ts similarity index 100% rename from web/ce/components/issues/issue-modal/index.ts rename to apps/web/ce/components/issues/issue-modal/index.ts diff --git a/web/ce/components/issues/issue-modal/issue-type-select.tsx b/apps/web/ce/components/issues/issue-modal/issue-type-select.tsx similarity index 100% rename from web/ce/components/issues/issue-modal/issue-type-select.tsx rename to apps/web/ce/components/issues/issue-modal/issue-type-select.tsx diff --git a/web/ce/components/issues/issue-modal/provider.tsx b/apps/web/ce/components/issues/issue-modal/provider.tsx similarity index 100% rename from web/ce/components/issues/issue-modal/provider.tsx rename to apps/web/ce/components/issues/issue-modal/provider.tsx diff --git a/web/ce/components/issues/issue-modal/template-select.tsx b/apps/web/ce/components/issues/issue-modal/template-select.tsx similarity index 100% rename from web/ce/components/issues/issue-modal/template-select.tsx rename to apps/web/ce/components/issues/issue-modal/template-select.tsx diff --git a/web/ce/components/issues/quick-add/index.ts b/apps/web/ce/components/issues/quick-add/index.ts similarity index 100% rename from web/ce/components/issues/quick-add/index.ts rename to apps/web/ce/components/issues/quick-add/index.ts diff --git a/web/ce/components/issues/quick-add/root.tsx b/apps/web/ce/components/issues/quick-add/root.tsx similarity index 100% rename from web/ce/components/issues/quick-add/root.tsx rename to apps/web/ce/components/issues/quick-add/root.tsx diff --git a/web/ce/components/issues/worklog/activity/filter-root.tsx b/apps/web/ce/components/issues/worklog/activity/filter-root.tsx similarity index 100% rename from web/ce/components/issues/worklog/activity/filter-root.tsx rename to apps/web/ce/components/issues/worklog/activity/filter-root.tsx diff --git a/web/ce/components/issues/worklog/activity/index.ts b/apps/web/ce/components/issues/worklog/activity/index.ts similarity index 100% rename from web/ce/components/issues/worklog/activity/index.ts rename to apps/web/ce/components/issues/worklog/activity/index.ts diff --git a/web/ce/components/issues/worklog/activity/root.tsx b/apps/web/ce/components/issues/worklog/activity/root.tsx similarity index 100% rename from web/ce/components/issues/worklog/activity/root.tsx rename to apps/web/ce/components/issues/worklog/activity/root.tsx diff --git a/web/ce/components/issues/worklog/activity/worklog-create-button.tsx b/apps/web/ce/components/issues/worklog/activity/worklog-create-button.tsx similarity index 100% rename from web/ce/components/issues/worklog/activity/worklog-create-button.tsx rename to apps/web/ce/components/issues/worklog/activity/worklog-create-button.tsx diff --git a/web/ce/components/issues/worklog/index.ts b/apps/web/ce/components/issues/worklog/index.ts similarity index 100% rename from web/ce/components/issues/worklog/index.ts rename to apps/web/ce/components/issues/worklog/index.ts diff --git a/web/ce/components/issues/worklog/property/index.ts b/apps/web/ce/components/issues/worklog/property/index.ts similarity index 100% rename from web/ce/components/issues/worklog/property/index.ts rename to apps/web/ce/components/issues/worklog/property/index.ts diff --git a/web/ce/components/issues/worklog/property/root.tsx b/apps/web/ce/components/issues/worklog/property/root.tsx similarity index 100% rename from web/ce/components/issues/worklog/property/root.tsx rename to apps/web/ce/components/issues/worklog/property/root.tsx diff --git a/web/ce/components/license/index.ts b/apps/web/ce/components/license/index.ts similarity index 100% rename from web/ce/components/license/index.ts rename to apps/web/ce/components/license/index.ts diff --git a/web/ce/components/license/modal/index.ts b/apps/web/ce/components/license/modal/index.ts similarity index 100% rename from web/ce/components/license/modal/index.ts rename to apps/web/ce/components/license/modal/index.ts diff --git a/web/ce/components/license/modal/upgrade-modal.tsx b/apps/web/ce/components/license/modal/upgrade-modal.tsx similarity index 100% rename from web/ce/components/license/modal/upgrade-modal.tsx rename to apps/web/ce/components/license/modal/upgrade-modal.tsx diff --git a/web/ce/components/pages/editor/ai/ask-pi-menu.tsx b/apps/web/ce/components/pages/editor/ai/ask-pi-menu.tsx similarity index 100% rename from web/ce/components/pages/editor/ai/ask-pi-menu.tsx rename to apps/web/ce/components/pages/editor/ai/ask-pi-menu.tsx diff --git a/web/ce/components/pages/editor/ai/index.ts b/apps/web/ce/components/pages/editor/ai/index.ts similarity index 100% rename from web/ce/components/pages/editor/ai/index.ts rename to apps/web/ce/components/pages/editor/ai/index.ts diff --git a/web/ce/components/pages/editor/ai/menu.tsx b/apps/web/ce/components/pages/editor/ai/menu.tsx similarity index 100% rename from web/ce/components/pages/editor/ai/menu.tsx rename to apps/web/ce/components/pages/editor/ai/menu.tsx diff --git a/web/ce/components/pages/editor/embed/index.ts b/apps/web/ce/components/pages/editor/embed/index.ts similarity index 100% rename from web/ce/components/pages/editor/embed/index.ts rename to apps/web/ce/components/pages/editor/embed/index.ts diff --git a/web/ce/components/pages/editor/embed/issue-embed-upgrade-card.tsx b/apps/web/ce/components/pages/editor/embed/issue-embed-upgrade-card.tsx similarity index 100% rename from web/ce/components/pages/editor/embed/issue-embed-upgrade-card.tsx rename to apps/web/ce/components/pages/editor/embed/issue-embed-upgrade-card.tsx diff --git a/web/ce/components/pages/editor/index.ts b/apps/web/ce/components/pages/editor/index.ts similarity index 100% rename from web/ce/components/pages/editor/index.ts rename to apps/web/ce/components/pages/editor/index.ts diff --git a/web/ce/components/pages/extra-actions.tsx b/apps/web/ce/components/pages/extra-actions.tsx similarity index 100% rename from web/ce/components/pages/extra-actions.tsx rename to apps/web/ce/components/pages/extra-actions.tsx diff --git a/web/ce/components/pages/header/collaborators-list.tsx b/apps/web/ce/components/pages/header/collaborators-list.tsx similarity index 100% rename from web/ce/components/pages/header/collaborators-list.tsx rename to apps/web/ce/components/pages/header/collaborators-list.tsx diff --git a/web/ce/components/pages/header/lock-control.tsx b/apps/web/ce/components/pages/header/lock-control.tsx similarity index 100% rename from web/ce/components/pages/header/lock-control.tsx rename to apps/web/ce/components/pages/header/lock-control.tsx diff --git a/web/ce/components/pages/header/move-control.tsx b/apps/web/ce/components/pages/header/move-control.tsx similarity index 100% rename from web/ce/components/pages/header/move-control.tsx rename to apps/web/ce/components/pages/header/move-control.tsx diff --git a/web/ce/components/pages/header/share-control.tsx b/apps/web/ce/components/pages/header/share-control.tsx similarity index 100% rename from web/ce/components/pages/header/share-control.tsx rename to apps/web/ce/components/pages/header/share-control.tsx diff --git a/web/ce/components/pages/index.ts b/apps/web/ce/components/pages/index.ts similarity index 100% rename from web/ce/components/pages/index.ts rename to apps/web/ce/components/pages/index.ts diff --git a/web/ce/components/pages/modals/index.ts b/apps/web/ce/components/pages/modals/index.ts similarity index 100% rename from web/ce/components/pages/modals/index.ts rename to apps/web/ce/components/pages/modals/index.ts diff --git a/web/ce/components/pages/modals/move-page-modal.tsx b/apps/web/ce/components/pages/modals/move-page-modal.tsx similarity index 100% rename from web/ce/components/pages/modals/move-page-modal.tsx rename to apps/web/ce/components/pages/modals/move-page-modal.tsx diff --git a/web/ce/components/pages/navigation-pane/index.ts b/apps/web/ce/components/pages/navigation-pane/index.ts similarity index 100% rename from web/ce/components/pages/navigation-pane/index.ts rename to apps/web/ce/components/pages/navigation-pane/index.ts diff --git a/web/ce/components/pages/navigation-pane/tab-panels/assets.tsx b/apps/web/ce/components/pages/navigation-pane/tab-panels/assets.tsx similarity index 100% rename from web/ce/components/pages/navigation-pane/tab-panels/assets.tsx rename to apps/web/ce/components/pages/navigation-pane/tab-panels/assets.tsx diff --git a/web/ce/components/pages/navigation-pane/tab-panels/empty-states/assets.tsx b/apps/web/ce/components/pages/navigation-pane/tab-panels/empty-states/assets.tsx similarity index 100% rename from web/ce/components/pages/navigation-pane/tab-panels/empty-states/assets.tsx rename to apps/web/ce/components/pages/navigation-pane/tab-panels/empty-states/assets.tsx diff --git a/web/ce/components/pages/navigation-pane/tab-panels/empty-states/outline.tsx b/apps/web/ce/components/pages/navigation-pane/tab-panels/empty-states/outline.tsx similarity index 100% rename from web/ce/components/pages/navigation-pane/tab-panels/empty-states/outline.tsx rename to apps/web/ce/components/pages/navigation-pane/tab-panels/empty-states/outline.tsx diff --git a/web/ce/components/pages/navigation-pane/tab-panels/root.tsx b/apps/web/ce/components/pages/navigation-pane/tab-panels/root.tsx similarity index 100% rename from web/ce/components/pages/navigation-pane/tab-panels/root.tsx rename to apps/web/ce/components/pages/navigation-pane/tab-panels/root.tsx diff --git a/web/ce/components/preferences/config.ts b/apps/web/ce/components/preferences/config.ts similarity index 100% rename from web/ce/components/preferences/config.ts rename to apps/web/ce/components/preferences/config.ts diff --git a/web/ce/components/preferences/theme-switcher.tsx b/apps/web/ce/components/preferences/theme-switcher.tsx similarity index 100% rename from web/ce/components/preferences/theme-switcher.tsx rename to apps/web/ce/components/preferences/theme-switcher.tsx diff --git a/web/ce/components/projects/create/attributes.tsx b/apps/web/ce/components/projects/create/attributes.tsx similarity index 100% rename from web/ce/components/projects/create/attributes.tsx rename to apps/web/ce/components/projects/create/attributes.tsx diff --git a/web/ce/components/projects/create/root.tsx b/apps/web/ce/components/projects/create/root.tsx similarity index 100% rename from web/ce/components/projects/create/root.tsx rename to apps/web/ce/components/projects/create/root.tsx diff --git a/web/ce/components/projects/create/template-select.tsx b/apps/web/ce/components/projects/create/template-select.tsx similarity index 100% rename from web/ce/components/projects/create/template-select.tsx rename to apps/web/ce/components/projects/create/template-select.tsx diff --git a/web/ce/components/projects/header.tsx b/apps/web/ce/components/projects/header.tsx similarity index 100% rename from web/ce/components/projects/header.tsx rename to apps/web/ce/components/projects/header.tsx diff --git a/web/ce/components/projects/mobile-header.tsx b/apps/web/ce/components/projects/mobile-header.tsx similarity index 100% rename from web/ce/components/projects/mobile-header.tsx rename to apps/web/ce/components/projects/mobile-header.tsx diff --git a/web/ce/components/projects/navigation/helper.tsx b/apps/web/ce/components/projects/navigation/helper.tsx similarity index 100% rename from web/ce/components/projects/navigation/helper.tsx rename to apps/web/ce/components/projects/navigation/helper.tsx diff --git a/web/ce/components/projects/navigation/index.ts b/apps/web/ce/components/projects/navigation/index.ts similarity index 100% rename from web/ce/components/projects/navigation/index.ts rename to apps/web/ce/components/projects/navigation/index.ts diff --git a/web/ce/components/projects/page.tsx b/apps/web/ce/components/projects/page.tsx similarity index 100% rename from web/ce/components/projects/page.tsx rename to apps/web/ce/components/projects/page.tsx diff --git a/web/ce/components/projects/settings/intake/header.tsx b/apps/web/ce/components/projects/settings/intake/header.tsx similarity index 100% rename from web/ce/components/projects/settings/intake/header.tsx rename to apps/web/ce/components/projects/settings/intake/header.tsx diff --git a/web/ce/components/projects/settings/intake/index.ts b/apps/web/ce/components/projects/settings/intake/index.ts similarity index 100% rename from web/ce/components/projects/settings/intake/index.ts rename to apps/web/ce/components/projects/settings/intake/index.ts diff --git a/web/ce/components/projects/settings/useProjectColumns.tsx b/apps/web/ce/components/projects/settings/useProjectColumns.tsx similarity index 100% rename from web/ce/components/projects/settings/useProjectColumns.tsx rename to apps/web/ce/components/projects/settings/useProjectColumns.tsx diff --git a/web/ce/components/projects/teamspaces/index.ts b/apps/web/ce/components/projects/teamspaces/index.ts similarity index 100% rename from web/ce/components/projects/teamspaces/index.ts rename to apps/web/ce/components/projects/teamspaces/index.ts diff --git a/web/ce/components/projects/teamspaces/teamspace-list.tsx b/apps/web/ce/components/projects/teamspaces/teamspace-list.tsx similarity index 100% rename from web/ce/components/projects/teamspaces/teamspace-list.tsx rename to apps/web/ce/components/projects/teamspaces/teamspace-list.tsx diff --git a/web/ce/components/relations/activity.ts b/apps/web/ce/components/relations/activity.ts similarity index 100% rename from web/ce/components/relations/activity.ts rename to apps/web/ce/components/relations/activity.ts diff --git a/web/ce/components/relations/index.tsx b/apps/web/ce/components/relations/index.tsx similarity index 100% rename from web/ce/components/relations/index.tsx rename to apps/web/ce/components/relations/index.tsx diff --git a/web/ce/components/sidebar/app-switcher.tsx b/apps/web/ce/components/sidebar/app-switcher.tsx similarity index 100% rename from web/ce/components/sidebar/app-switcher.tsx rename to apps/web/ce/components/sidebar/app-switcher.tsx diff --git a/web/ce/components/sidebar/index.ts b/apps/web/ce/components/sidebar/index.ts similarity index 100% rename from web/ce/components/sidebar/index.ts rename to apps/web/ce/components/sidebar/index.ts diff --git a/web/ce/components/sidebar/project-navigation-root.tsx b/apps/web/ce/components/sidebar/project-navigation-root.tsx similarity index 100% rename from web/ce/components/sidebar/project-navigation-root.tsx rename to apps/web/ce/components/sidebar/project-navigation-root.tsx diff --git a/web/ce/components/views/access-controller.tsx b/apps/web/ce/components/views/access-controller.tsx similarity index 100% rename from web/ce/components/views/access-controller.tsx rename to apps/web/ce/components/views/access-controller.tsx diff --git a/web/ce/components/views/filters/access-filter.tsx b/apps/web/ce/components/views/filters/access-filter.tsx similarity index 100% rename from web/ce/components/views/filters/access-filter.tsx rename to apps/web/ce/components/views/filters/access-filter.tsx diff --git a/web/ce/components/views/helper.tsx b/apps/web/ce/components/views/helper.tsx similarity index 100% rename from web/ce/components/views/helper.tsx rename to apps/web/ce/components/views/helper.tsx diff --git a/web/ce/components/views/publish/index.ts b/apps/web/ce/components/views/publish/index.ts similarity index 100% rename from web/ce/components/views/publish/index.ts rename to apps/web/ce/components/views/publish/index.ts diff --git a/web/ce/components/views/publish/modal.tsx b/apps/web/ce/components/views/publish/modal.tsx similarity index 100% rename from web/ce/components/views/publish/modal.tsx rename to apps/web/ce/components/views/publish/modal.tsx diff --git a/web/ce/components/views/publish/use-view-publish.tsx b/apps/web/ce/components/views/publish/use-view-publish.tsx similarity index 100% rename from web/ce/components/views/publish/use-view-publish.tsx rename to apps/web/ce/components/views/publish/use-view-publish.tsx diff --git a/web/ce/components/workflow/index.ts b/apps/web/ce/components/workflow/index.ts similarity index 100% rename from web/ce/components/workflow/index.ts rename to apps/web/ce/components/workflow/index.ts diff --git a/web/ce/components/workflow/state-option.tsx b/apps/web/ce/components/workflow/state-option.tsx similarity index 100% rename from web/ce/components/workflow/state-option.tsx rename to apps/web/ce/components/workflow/state-option.tsx diff --git a/web/ce/components/workflow/use-workflow-drag-n-drop.ts b/apps/web/ce/components/workflow/use-workflow-drag-n-drop.ts similarity index 100% rename from web/ce/components/workflow/use-workflow-drag-n-drop.ts rename to apps/web/ce/components/workflow/use-workflow-drag-n-drop.ts diff --git a/web/ce/components/workflow/workflow-disabled-message.tsx b/apps/web/ce/components/workflow/workflow-disabled-message.tsx similarity index 100% rename from web/ce/components/workflow/workflow-disabled-message.tsx rename to apps/web/ce/components/workflow/workflow-disabled-message.tsx diff --git a/web/ce/components/workflow/workflow-disabled-overlay.tsx b/apps/web/ce/components/workflow/workflow-disabled-overlay.tsx similarity index 100% rename from web/ce/components/workflow/workflow-disabled-overlay.tsx rename to apps/web/ce/components/workflow/workflow-disabled-overlay.tsx diff --git a/web/ce/components/workflow/workflow-group-tree.tsx b/apps/web/ce/components/workflow/workflow-group-tree.tsx similarity index 100% rename from web/ce/components/workflow/workflow-group-tree.tsx rename to apps/web/ce/components/workflow/workflow-group-tree.tsx diff --git a/web/ce/components/workspace-notifications/index.ts b/apps/web/ce/components/workspace-notifications/index.ts similarity index 100% rename from web/ce/components/workspace-notifications/index.ts rename to apps/web/ce/components/workspace-notifications/index.ts diff --git a/web/ce/components/workspace-notifications/list-root.tsx b/apps/web/ce/components/workspace-notifications/list-root.tsx similarity index 100% rename from web/ce/components/workspace-notifications/list-root.tsx rename to apps/web/ce/components/workspace-notifications/list-root.tsx diff --git a/web/ce/components/workspace-notifications/notification-card/root.tsx b/apps/web/ce/components/workspace-notifications/notification-card/root.tsx similarity index 100% rename from web/ce/components/workspace-notifications/notification-card/root.tsx rename to apps/web/ce/components/workspace-notifications/notification-card/root.tsx diff --git a/web/ce/components/workspace/billing/billing-actions-button.tsx b/apps/web/ce/components/workspace/billing/billing-actions-button.tsx similarity index 100% rename from web/ce/components/workspace/billing/billing-actions-button.tsx rename to apps/web/ce/components/workspace/billing/billing-actions-button.tsx diff --git a/web/ce/components/workspace/billing/comparison/frequency-toggle.tsx b/apps/web/ce/components/workspace/billing/comparison/frequency-toggle.tsx similarity index 100% rename from web/ce/components/workspace/billing/comparison/frequency-toggle.tsx rename to apps/web/ce/components/workspace/billing/comparison/frequency-toggle.tsx diff --git a/web/ce/components/workspace/billing/comparison/plan-detail.tsx b/apps/web/ce/components/workspace/billing/comparison/plan-detail.tsx similarity index 100% rename from web/ce/components/workspace/billing/comparison/plan-detail.tsx rename to apps/web/ce/components/workspace/billing/comparison/plan-detail.tsx diff --git a/web/ce/components/workspace/billing/comparison/root.tsx b/apps/web/ce/components/workspace/billing/comparison/root.tsx similarity index 100% rename from web/ce/components/workspace/billing/comparison/root.tsx rename to apps/web/ce/components/workspace/billing/comparison/root.tsx diff --git a/web/ce/components/workspace/billing/index.ts b/apps/web/ce/components/workspace/billing/index.ts similarity index 100% rename from web/ce/components/workspace/billing/index.ts rename to apps/web/ce/components/workspace/billing/index.ts diff --git a/web/ce/components/workspace/billing/root.tsx b/apps/web/ce/components/workspace/billing/root.tsx similarity index 100% rename from web/ce/components/workspace/billing/root.tsx rename to apps/web/ce/components/workspace/billing/root.tsx diff --git a/web/ce/components/workspace/delete-workspace-modal.tsx b/apps/web/ce/components/workspace/delete-workspace-modal.tsx similarity index 100% rename from web/ce/components/workspace/delete-workspace-modal.tsx rename to apps/web/ce/components/workspace/delete-workspace-modal.tsx diff --git a/web/ce/components/workspace/delete-workspace-section.tsx b/apps/web/ce/components/workspace/delete-workspace-section.tsx similarity index 100% rename from web/ce/components/workspace/delete-workspace-section.tsx rename to apps/web/ce/components/workspace/delete-workspace-section.tsx diff --git a/web/ce/components/workspace/edition-badge.tsx b/apps/web/ce/components/workspace/edition-badge.tsx similarity index 100% rename from web/ce/components/workspace/edition-badge.tsx rename to apps/web/ce/components/workspace/edition-badge.tsx diff --git a/web/ce/components/workspace/index.ts b/apps/web/ce/components/workspace/index.ts similarity index 100% rename from web/ce/components/workspace/index.ts rename to apps/web/ce/components/workspace/index.ts diff --git a/web/ce/components/workspace/members/index.ts b/apps/web/ce/components/workspace/members/index.ts similarity index 100% rename from web/ce/components/workspace/members/index.ts rename to apps/web/ce/components/workspace/members/index.ts diff --git a/web/ce/components/workspace/members/invite-modal.tsx b/apps/web/ce/components/workspace/members/invite-modal.tsx similarity index 100% rename from web/ce/components/workspace/members/invite-modal.tsx rename to apps/web/ce/components/workspace/members/invite-modal.tsx diff --git a/web/ce/components/workspace/settings/useMemberColumns.tsx b/apps/web/ce/components/workspace/settings/useMemberColumns.tsx similarity index 100% rename from web/ce/components/workspace/settings/useMemberColumns.tsx rename to apps/web/ce/components/workspace/settings/useMemberColumns.tsx diff --git a/web/ce/components/workspace/sidebar/app-search.tsx b/apps/web/ce/components/workspace/sidebar/app-search.tsx similarity index 100% rename from web/ce/components/workspace/sidebar/app-search.tsx rename to apps/web/ce/components/workspace/sidebar/app-search.tsx diff --git a/web/ce/components/workspace/sidebar/extended-sidebar-item.tsx b/apps/web/ce/components/workspace/sidebar/extended-sidebar-item.tsx similarity index 100% rename from web/ce/components/workspace/sidebar/extended-sidebar-item.tsx rename to apps/web/ce/components/workspace/sidebar/extended-sidebar-item.tsx diff --git a/web/ce/components/workspace/sidebar/helper.tsx b/apps/web/ce/components/workspace/sidebar/helper.tsx similarity index 100% rename from web/ce/components/workspace/sidebar/helper.tsx rename to apps/web/ce/components/workspace/sidebar/helper.tsx diff --git a/web/ce/components/workspace/sidebar/index.ts b/apps/web/ce/components/workspace/sidebar/index.ts similarity index 100% rename from web/ce/components/workspace/sidebar/index.ts rename to apps/web/ce/components/workspace/sidebar/index.ts diff --git a/web/ce/components/workspace/sidebar/sidebar-item.tsx b/apps/web/ce/components/workspace/sidebar/sidebar-item.tsx similarity index 100% rename from web/ce/components/workspace/sidebar/sidebar-item.tsx rename to apps/web/ce/components/workspace/sidebar/sidebar-item.tsx diff --git a/web/ce/components/workspace/sidebar/teams-sidebar-list.tsx b/apps/web/ce/components/workspace/sidebar/teams-sidebar-list.tsx similarity index 100% rename from web/ce/components/workspace/sidebar/teams-sidebar-list.tsx rename to apps/web/ce/components/workspace/sidebar/teams-sidebar-list.tsx diff --git a/web/ce/components/workspace/upgrade-badge.tsx b/apps/web/ce/components/workspace/upgrade-badge.tsx similarity index 100% rename from web/ce/components/workspace/upgrade-badge.tsx rename to apps/web/ce/components/workspace/upgrade-badge.tsx diff --git a/web/ce/constants/ai.ts b/apps/web/ce/constants/ai.ts similarity index 100% rename from web/ce/constants/ai.ts rename to apps/web/ce/constants/ai.ts diff --git a/web/ce/constants/editor.ts b/apps/web/ce/constants/editor.ts similarity index 100% rename from web/ce/constants/editor.ts rename to apps/web/ce/constants/editor.ts diff --git a/web/ce/constants/gantt-chart.ts b/apps/web/ce/constants/gantt-chart.ts similarity index 100% rename from web/ce/constants/gantt-chart.ts rename to apps/web/ce/constants/gantt-chart.ts diff --git a/web/ce/constants/index.ts b/apps/web/ce/constants/index.ts similarity index 100% rename from web/ce/constants/index.ts rename to apps/web/ce/constants/index.ts diff --git a/web/ce/constants/project/index.ts b/apps/web/ce/constants/project/index.ts similarity index 100% rename from web/ce/constants/project/index.ts rename to apps/web/ce/constants/project/index.ts diff --git a/web/ce/constants/project/settings/features.tsx b/apps/web/ce/constants/project/settings/features.tsx similarity index 100% rename from web/ce/constants/project/settings/features.tsx rename to apps/web/ce/constants/project/settings/features.tsx diff --git a/web/ce/constants/project/settings/index.ts b/apps/web/ce/constants/project/settings/index.ts similarity index 100% rename from web/ce/constants/project/settings/index.ts rename to apps/web/ce/constants/project/settings/index.ts diff --git a/web/ce/constants/project/settings/tabs.ts b/apps/web/ce/constants/project/settings/tabs.ts similarity index 100% rename from web/ce/constants/project/settings/tabs.ts rename to apps/web/ce/constants/project/settings/tabs.ts diff --git a/web/ce/constants/sidebar-favorites.ts b/apps/web/ce/constants/sidebar-favorites.ts similarity index 100% rename from web/ce/constants/sidebar-favorites.ts rename to apps/web/ce/constants/sidebar-favorites.ts diff --git a/web/ce/helpers/command-palette.ts b/apps/web/ce/helpers/command-palette.ts similarity index 100% rename from web/ce/helpers/command-palette.ts rename to apps/web/ce/helpers/command-palette.ts diff --git a/web/ce/helpers/epic-analytics.ts b/apps/web/ce/helpers/epic-analytics.ts similarity index 100% rename from web/ce/helpers/epic-analytics.ts rename to apps/web/ce/helpers/epic-analytics.ts diff --git a/web/ce/helpers/instance.helper.ts b/apps/web/ce/helpers/instance.helper.ts similarity index 100% rename from web/ce/helpers/instance.helper.ts rename to apps/web/ce/helpers/instance.helper.ts diff --git a/web/ce/helpers/issue-action-helper.ts b/apps/web/ce/helpers/issue-action-helper.ts similarity index 100% rename from web/ce/helpers/issue-action-helper.ts rename to apps/web/ce/helpers/issue-action-helper.ts diff --git a/web/ce/helpers/issue-filter.helper.ts b/apps/web/ce/helpers/issue-filter.helper.ts similarity index 100% rename from web/ce/helpers/issue-filter.helper.ts rename to apps/web/ce/helpers/issue-filter.helper.ts diff --git a/web/ce/helpers/pi-chat.helper.ts b/apps/web/ce/helpers/pi-chat.helper.ts similarity index 100% rename from web/ce/helpers/pi-chat.helper.ts rename to apps/web/ce/helpers/pi-chat.helper.ts diff --git a/web/ce/helpers/project-settings.ts b/apps/web/ce/helpers/project-settings.ts similarity index 100% rename from web/ce/helpers/project-settings.ts rename to apps/web/ce/helpers/project-settings.ts diff --git a/web/ce/helpers/workspace.helper.ts b/apps/web/ce/helpers/workspace.helper.ts similarity index 100% rename from web/ce/helpers/workspace.helper.ts rename to apps/web/ce/helpers/workspace.helper.ts diff --git a/web/ce/hooks/store/index.ts b/apps/web/ce/hooks/store/index.ts similarity index 100% rename from web/ce/hooks/store/index.ts rename to apps/web/ce/hooks/store/index.ts diff --git a/web/ce/hooks/store/use-page-store.ts b/apps/web/ce/hooks/store/use-page-store.ts similarity index 100% rename from web/ce/hooks/store/use-page-store.ts rename to apps/web/ce/hooks/store/use-page-store.ts diff --git a/web/ce/hooks/store/use-page.ts b/apps/web/ce/hooks/store/use-page.ts similarity index 100% rename from web/ce/hooks/store/use-page.ts rename to apps/web/ce/hooks/store/use-page.ts diff --git a/web/ce/hooks/use-additional-editor-mention.tsx b/apps/web/ce/hooks/use-additional-editor-mention.tsx similarity index 100% rename from web/ce/hooks/use-additional-editor-mention.tsx rename to apps/web/ce/hooks/use-additional-editor-mention.tsx diff --git a/web/ce/hooks/use-additional-favorite-item-details.ts b/apps/web/ce/hooks/use-additional-favorite-item-details.ts similarity index 100% rename from web/ce/hooks/use-additional-favorite-item-details.ts rename to apps/web/ce/hooks/use-additional-favorite-item-details.ts diff --git a/web/ce/hooks/use-bulk-operation-status.ts b/apps/web/ce/hooks/use-bulk-operation-status.ts similarity index 100% rename from web/ce/hooks/use-bulk-operation-status.ts rename to apps/web/ce/hooks/use-bulk-operation-status.ts diff --git a/web/ce/hooks/use-debounced-duplicate-issues.tsx b/apps/web/ce/hooks/use-debounced-duplicate-issues.tsx similarity index 100% rename from web/ce/hooks/use-debounced-duplicate-issues.tsx rename to apps/web/ce/hooks/use-debounced-duplicate-issues.tsx diff --git a/web/ce/hooks/use-editor-flagging.ts b/apps/web/ce/hooks/use-editor-flagging.ts similarity index 100% rename from web/ce/hooks/use-editor-flagging.ts rename to apps/web/ce/hooks/use-editor-flagging.ts diff --git a/web/ce/hooks/use-file-size.ts b/apps/web/ce/hooks/use-file-size.ts similarity index 100% rename from web/ce/hooks/use-file-size.ts rename to apps/web/ce/hooks/use-file-size.ts diff --git a/web/ce/hooks/use-issue-embed.tsx b/apps/web/ce/hooks/use-issue-embed.tsx similarity index 100% rename from web/ce/hooks/use-issue-embed.tsx rename to apps/web/ce/hooks/use-issue-embed.tsx diff --git a/web/ce/hooks/use-issue-properties.tsx b/apps/web/ce/hooks/use-issue-properties.tsx similarity index 100% rename from web/ce/hooks/use-issue-properties.tsx rename to apps/web/ce/hooks/use-issue-properties.tsx diff --git a/web/ce/hooks/use-notification-preview.tsx b/apps/web/ce/hooks/use-notification-preview.tsx similarity index 100% rename from web/ce/hooks/use-notification-preview.tsx rename to apps/web/ce/hooks/use-notification-preview.tsx diff --git a/web/ce/hooks/use-page-flag.ts b/apps/web/ce/hooks/use-page-flag.ts similarity index 100% rename from web/ce/hooks/use-page-flag.ts rename to apps/web/ce/hooks/use-page-flag.ts diff --git a/web/ce/hooks/use-workspace-issue-properties-extended.tsx b/apps/web/ce/hooks/use-workspace-issue-properties-extended.tsx similarity index 100% rename from web/ce/hooks/use-workspace-issue-properties-extended.tsx rename to apps/web/ce/hooks/use-workspace-issue-properties-extended.tsx diff --git a/web/ce/layouts/project-wrapper.tsx b/apps/web/ce/layouts/project-wrapper.tsx similarity index 100% rename from web/ce/layouts/project-wrapper.tsx rename to apps/web/ce/layouts/project-wrapper.tsx diff --git a/web/ce/layouts/workspace-wrapper.tsx b/apps/web/ce/layouts/workspace-wrapper.tsx similarity index 100% rename from web/ce/layouts/workspace-wrapper.tsx rename to apps/web/ce/layouts/workspace-wrapper.tsx diff --git a/web/ce/services/index.ts b/apps/web/ce/services/index.ts similarity index 100% rename from web/ce/services/index.ts rename to apps/web/ce/services/index.ts diff --git a/web/ce/services/project/estimate.service.ts b/apps/web/ce/services/project/estimate.service.ts similarity index 100% rename from web/ce/services/project/estimate.service.ts rename to apps/web/ce/services/project/estimate.service.ts diff --git a/web/ce/services/project/index.ts b/apps/web/ce/services/project/index.ts similarity index 100% rename from web/ce/services/project/index.ts rename to apps/web/ce/services/project/index.ts diff --git a/web/ce/services/project/project-state.service.ts b/apps/web/ce/services/project/project-state.service.ts similarity index 100% rename from web/ce/services/project/project-state.service.ts rename to apps/web/ce/services/project/project-state.service.ts diff --git a/web/ce/services/project/view.service.ts b/apps/web/ce/services/project/view.service.ts similarity index 100% rename from web/ce/services/project/view.service.ts rename to apps/web/ce/services/project/view.service.ts diff --git a/web/ce/services/workspace.service.ts b/apps/web/ce/services/workspace.service.ts similarity index 100% rename from web/ce/services/workspace.service.ts rename to apps/web/ce/services/workspace.service.ts diff --git a/web/ce/store/analytics.store.ts b/apps/web/ce/store/analytics.store.ts similarity index 100% rename from web/ce/store/analytics.store.ts rename to apps/web/ce/store/analytics.store.ts diff --git a/web/ce/store/command-palette.store.ts b/apps/web/ce/store/command-palette.store.ts similarity index 100% rename from web/ce/store/command-palette.store.ts rename to apps/web/ce/store/command-palette.store.ts diff --git a/web/ce/store/cycle/index.ts b/apps/web/ce/store/cycle/index.ts similarity index 100% rename from web/ce/store/cycle/index.ts rename to apps/web/ce/store/cycle/index.ts diff --git a/web/ce/store/estimates/estimate.ts b/apps/web/ce/store/estimates/estimate.ts similarity index 100% rename from web/ce/store/estimates/estimate.ts rename to apps/web/ce/store/estimates/estimate.ts diff --git a/web/ce/store/issue/epic/filter.store.ts b/apps/web/ce/store/issue/epic/filter.store.ts similarity index 100% rename from web/ce/store/issue/epic/filter.store.ts rename to apps/web/ce/store/issue/epic/filter.store.ts diff --git a/web/ce/store/issue/epic/index.ts b/apps/web/ce/store/issue/epic/index.ts similarity index 100% rename from web/ce/store/issue/epic/index.ts rename to apps/web/ce/store/issue/epic/index.ts diff --git a/web/ce/store/issue/epic/issue.store.ts b/apps/web/ce/store/issue/epic/issue.store.ts similarity index 100% rename from web/ce/store/issue/epic/issue.store.ts rename to apps/web/ce/store/issue/epic/issue.store.ts diff --git a/web/ce/store/issue/helpers/base-issue-store.ts b/apps/web/ce/store/issue/helpers/base-issue-store.ts similarity index 100% rename from web/ce/store/issue/helpers/base-issue-store.ts rename to apps/web/ce/store/issue/helpers/base-issue-store.ts diff --git a/web/ce/store/issue/helpers/base-issue.store.ts b/apps/web/ce/store/issue/helpers/base-issue.store.ts similarity index 100% rename from web/ce/store/issue/helpers/base-issue.store.ts rename to apps/web/ce/store/issue/helpers/base-issue.store.ts diff --git a/web/ce/store/issue/issue-details/activity.store.ts b/apps/web/ce/store/issue/issue-details/activity.store.ts similarity index 100% rename from web/ce/store/issue/issue-details/activity.store.ts rename to apps/web/ce/store/issue/issue-details/activity.store.ts diff --git a/web/ce/store/issue/issue-details/root.store.ts b/apps/web/ce/store/issue/issue-details/root.store.ts similarity index 100% rename from web/ce/store/issue/issue-details/root.store.ts rename to apps/web/ce/store/issue/issue-details/root.store.ts diff --git a/web/ce/store/issue/team-views/filter.store.ts b/apps/web/ce/store/issue/team-views/filter.store.ts similarity index 100% rename from web/ce/store/issue/team-views/filter.store.ts rename to apps/web/ce/store/issue/team-views/filter.store.ts diff --git a/web/ce/store/issue/team-views/index.ts b/apps/web/ce/store/issue/team-views/index.ts similarity index 100% rename from web/ce/store/issue/team-views/index.ts rename to apps/web/ce/store/issue/team-views/index.ts diff --git a/web/ce/store/issue/team-views/issue.store.ts b/apps/web/ce/store/issue/team-views/issue.store.ts similarity index 100% rename from web/ce/store/issue/team-views/issue.store.ts rename to apps/web/ce/store/issue/team-views/issue.store.ts diff --git a/web/ce/store/issue/team/filter.store.ts b/apps/web/ce/store/issue/team/filter.store.ts similarity index 100% rename from web/ce/store/issue/team/filter.store.ts rename to apps/web/ce/store/issue/team/filter.store.ts diff --git a/web/ce/store/issue/team/index.ts b/apps/web/ce/store/issue/team/index.ts similarity index 100% rename from web/ce/store/issue/team/index.ts rename to apps/web/ce/store/issue/team/index.ts diff --git a/web/ce/store/issue/team/issue.store.ts b/apps/web/ce/store/issue/team/issue.store.ts similarity index 100% rename from web/ce/store/issue/team/issue.store.ts rename to apps/web/ce/store/issue/team/issue.store.ts diff --git a/web/ce/store/issue/workspace/issue.store.ts b/apps/web/ce/store/issue/workspace/issue.store.ts similarity index 100% rename from web/ce/store/issue/workspace/issue.store.ts rename to apps/web/ce/store/issue/workspace/issue.store.ts diff --git a/web/ce/store/member/project-member.store.ts b/apps/web/ce/store/member/project-member.store.ts similarity index 100% rename from web/ce/store/member/project-member.store.ts rename to apps/web/ce/store/member/project-member.store.ts diff --git a/web/ce/store/pages/extended-base-page.ts b/apps/web/ce/store/pages/extended-base-page.ts similarity index 100% rename from web/ce/store/pages/extended-base-page.ts rename to apps/web/ce/store/pages/extended-base-page.ts diff --git a/web/ce/store/project-inbox.store.ts b/apps/web/ce/store/project-inbox.store.ts similarity index 100% rename from web/ce/store/project-inbox.store.ts rename to apps/web/ce/store/project-inbox.store.ts diff --git a/web/ce/store/root.store.ts b/apps/web/ce/store/root.store.ts similarity index 100% rename from web/ce/store/root.store.ts rename to apps/web/ce/store/root.store.ts diff --git a/web/ce/store/state.store.ts b/apps/web/ce/store/state.store.ts similarity index 100% rename from web/ce/store/state.store.ts rename to apps/web/ce/store/state.store.ts diff --git a/web/ce/store/timeline/base-timeline.store.ts b/apps/web/ce/store/timeline/base-timeline.store.ts similarity index 100% rename from web/ce/store/timeline/base-timeline.store.ts rename to apps/web/ce/store/timeline/base-timeline.store.ts diff --git a/web/ce/store/timeline/index.ts b/apps/web/ce/store/timeline/index.ts similarity index 100% rename from web/ce/store/timeline/index.ts rename to apps/web/ce/store/timeline/index.ts diff --git a/web/ce/store/user/permission.store.ts b/apps/web/ce/store/user/permission.store.ts similarity index 100% rename from web/ce/store/user/permission.store.ts rename to apps/web/ce/store/user/permission.store.ts diff --git a/web/ce/types/gantt-chart.ts b/apps/web/ce/types/gantt-chart.ts similarity index 100% rename from web/ce/types/gantt-chart.ts rename to apps/web/ce/types/gantt-chart.ts diff --git a/web/ce/types/index.ts b/apps/web/ce/types/index.ts similarity index 100% rename from web/ce/types/index.ts rename to apps/web/ce/types/index.ts diff --git a/web/ce/types/issue-types/index.ts b/apps/web/ce/types/issue-types/index.ts similarity index 100% rename from web/ce/types/issue-types/index.ts rename to apps/web/ce/types/issue-types/index.ts diff --git a/web/ce/types/issue-types/issue-property-values.d.ts b/apps/web/ce/types/issue-types/issue-property-values.d.ts similarity index 100% rename from web/ce/types/issue-types/issue-property-values.d.ts rename to apps/web/ce/types/issue-types/issue-property-values.d.ts diff --git a/web/ce/types/projects/index.ts b/apps/web/ce/types/projects/index.ts similarity index 100% rename from web/ce/types/projects/index.ts rename to apps/web/ce/types/projects/index.ts diff --git a/web/ce/types/projects/project-activity.ts b/apps/web/ce/types/projects/project-activity.ts similarity index 100% rename from web/ce/types/projects/project-activity.ts rename to apps/web/ce/types/projects/project-activity.ts diff --git a/web/ce/types/projects/projects.ts b/apps/web/ce/types/projects/projects.ts similarity index 100% rename from web/ce/types/projects/projects.ts rename to apps/web/ce/types/projects/projects.ts diff --git a/web/core/components/account/auth-forms/auth-banner.tsx b/apps/web/core/components/account/auth-forms/auth-banner.tsx similarity index 100% rename from web/core/components/account/auth-forms/auth-banner.tsx rename to apps/web/core/components/account/auth-forms/auth-banner.tsx diff --git a/web/core/components/account/auth-forms/auth-header.tsx b/apps/web/core/components/account/auth-forms/auth-header.tsx similarity index 100% rename from web/core/components/account/auth-forms/auth-header.tsx rename to apps/web/core/components/account/auth-forms/auth-header.tsx diff --git a/web/core/components/account/auth-forms/auth-root.tsx b/apps/web/core/components/account/auth-forms/auth-root.tsx similarity index 100% rename from web/core/components/account/auth-forms/auth-root.tsx rename to apps/web/core/components/account/auth-forms/auth-root.tsx diff --git a/web/core/components/account/auth-forms/email.tsx b/apps/web/core/components/account/auth-forms/email.tsx similarity index 100% rename from web/core/components/account/auth-forms/email.tsx rename to apps/web/core/components/account/auth-forms/email.tsx diff --git a/web/core/components/account/auth-forms/forgot-password-popover.tsx b/apps/web/core/components/account/auth-forms/forgot-password-popover.tsx similarity index 100% rename from web/core/components/account/auth-forms/forgot-password-popover.tsx rename to apps/web/core/components/account/auth-forms/forgot-password-popover.tsx diff --git a/web/core/components/account/auth-forms/index.ts b/apps/web/core/components/account/auth-forms/index.ts similarity index 100% rename from web/core/components/account/auth-forms/index.ts rename to apps/web/core/components/account/auth-forms/index.ts diff --git a/web/core/components/account/auth-forms/password.tsx b/apps/web/core/components/account/auth-forms/password.tsx similarity index 100% rename from web/core/components/account/auth-forms/password.tsx rename to apps/web/core/components/account/auth-forms/password.tsx diff --git a/web/core/components/account/auth-forms/unique-code.tsx b/apps/web/core/components/account/auth-forms/unique-code.tsx similarity index 100% rename from web/core/components/account/auth-forms/unique-code.tsx rename to apps/web/core/components/account/auth-forms/unique-code.tsx diff --git a/web/core/components/account/deactivate-account-modal.tsx b/apps/web/core/components/account/deactivate-account-modal.tsx similarity index 100% rename from web/core/components/account/deactivate-account-modal.tsx rename to apps/web/core/components/account/deactivate-account-modal.tsx diff --git a/web/core/components/account/index.ts b/apps/web/core/components/account/index.ts similarity index 100% rename from web/core/components/account/index.ts rename to apps/web/core/components/account/index.ts diff --git a/web/core/components/account/oauth/github-button.tsx b/apps/web/core/components/account/oauth/github-button.tsx similarity index 100% rename from web/core/components/account/oauth/github-button.tsx rename to apps/web/core/components/account/oauth/github-button.tsx diff --git a/web/core/components/account/oauth/gitlab-button.tsx b/apps/web/core/components/account/oauth/gitlab-button.tsx similarity index 100% rename from web/core/components/account/oauth/gitlab-button.tsx rename to apps/web/core/components/account/oauth/gitlab-button.tsx diff --git a/web/core/components/account/oauth/google-button.tsx b/apps/web/core/components/account/oauth/google-button.tsx similarity index 100% rename from web/core/components/account/oauth/google-button.tsx rename to apps/web/core/components/account/oauth/google-button.tsx diff --git a/web/core/components/account/oauth/index.ts b/apps/web/core/components/account/oauth/index.ts similarity index 100% rename from web/core/components/account/oauth/index.ts rename to apps/web/core/components/account/oauth/index.ts diff --git a/web/core/components/account/oauth/oauth-options.tsx b/apps/web/core/components/account/oauth/oauth-options.tsx similarity index 100% rename from web/core/components/account/oauth/oauth-options.tsx rename to apps/web/core/components/account/oauth/oauth-options.tsx diff --git a/web/core/components/account/password-strength-meter.tsx b/apps/web/core/components/account/password-strength-meter.tsx similarity index 100% rename from web/core/components/account/password-strength-meter.tsx rename to apps/web/core/components/account/password-strength-meter.tsx diff --git a/web/core/components/account/terms-and-conditions.tsx b/apps/web/core/components/account/terms-and-conditions.tsx similarity index 100% rename from web/core/components/account/terms-and-conditions.tsx rename to apps/web/core/components/account/terms-and-conditions.tsx diff --git a/web/core/components/analytics/analytics-filter-actions.tsx b/apps/web/core/components/analytics/analytics-filter-actions.tsx similarity index 100% rename from web/core/components/analytics/analytics-filter-actions.tsx rename to apps/web/core/components/analytics/analytics-filter-actions.tsx diff --git a/web/core/components/analytics/analytics-section-wrapper.tsx b/apps/web/core/components/analytics/analytics-section-wrapper.tsx similarity index 100% rename from web/core/components/analytics/analytics-section-wrapper.tsx rename to apps/web/core/components/analytics/analytics-section-wrapper.tsx diff --git a/web/core/components/analytics/analytics-wrapper.tsx b/apps/web/core/components/analytics/analytics-wrapper.tsx similarity index 100% rename from web/core/components/analytics/analytics-wrapper.tsx rename to apps/web/core/components/analytics/analytics-wrapper.tsx diff --git a/web/core/components/analytics/empty-state.tsx b/apps/web/core/components/analytics/empty-state.tsx similarity index 100% rename from web/core/components/analytics/empty-state.tsx rename to apps/web/core/components/analytics/empty-state.tsx diff --git a/web/core/components/analytics/export.ts b/apps/web/core/components/analytics/export.ts similarity index 100% rename from web/core/components/analytics/export.ts rename to apps/web/core/components/analytics/export.ts diff --git a/web/core/components/analytics/index.ts b/apps/web/core/components/analytics/index.ts similarity index 100% rename from web/core/components/analytics/index.ts rename to apps/web/core/components/analytics/index.ts diff --git a/web/core/components/analytics/insight-card.tsx b/apps/web/core/components/analytics/insight-card.tsx similarity index 100% rename from web/core/components/analytics/insight-card.tsx rename to apps/web/core/components/analytics/insight-card.tsx diff --git a/web/core/components/analytics/insight-table/data-table.tsx b/apps/web/core/components/analytics/insight-table/data-table.tsx similarity index 100% rename from web/core/components/analytics/insight-table/data-table.tsx rename to apps/web/core/components/analytics/insight-table/data-table.tsx diff --git a/web/core/components/analytics/insight-table/index.ts b/apps/web/core/components/analytics/insight-table/index.ts similarity index 100% rename from web/core/components/analytics/insight-table/index.ts rename to apps/web/core/components/analytics/insight-table/index.ts diff --git a/web/core/components/analytics/insight-table/loader.tsx b/apps/web/core/components/analytics/insight-table/loader.tsx similarity index 100% rename from web/core/components/analytics/insight-table/loader.tsx rename to apps/web/core/components/analytics/insight-table/loader.tsx diff --git a/web/core/components/analytics/insight-table/root.tsx b/apps/web/core/components/analytics/insight-table/root.tsx similarity index 100% rename from web/core/components/analytics/insight-table/root.tsx rename to apps/web/core/components/analytics/insight-table/root.tsx diff --git a/web/core/components/analytics/loaders.tsx b/apps/web/core/components/analytics/loaders.tsx similarity index 100% rename from web/core/components/analytics/loaders.tsx rename to apps/web/core/components/analytics/loaders.tsx diff --git a/web/core/components/analytics/overview/active-project-item.tsx b/apps/web/core/components/analytics/overview/active-project-item.tsx similarity index 100% rename from web/core/components/analytics/overview/active-project-item.tsx rename to apps/web/core/components/analytics/overview/active-project-item.tsx diff --git a/web/core/components/analytics/overview/active-projects.tsx b/apps/web/core/components/analytics/overview/active-projects.tsx similarity index 100% rename from web/core/components/analytics/overview/active-projects.tsx rename to apps/web/core/components/analytics/overview/active-projects.tsx diff --git a/web/core/components/analytics/overview/index.ts b/apps/web/core/components/analytics/overview/index.ts similarity index 100% rename from web/core/components/analytics/overview/index.ts rename to apps/web/core/components/analytics/overview/index.ts diff --git a/web/core/components/analytics/overview/project-insights.tsx b/apps/web/core/components/analytics/overview/project-insights.tsx similarity index 100% rename from web/core/components/analytics/overview/project-insights.tsx rename to apps/web/core/components/analytics/overview/project-insights.tsx diff --git a/web/core/components/analytics/overview/root.tsx b/apps/web/core/components/analytics/overview/root.tsx similarity index 100% rename from web/core/components/analytics/overview/root.tsx rename to apps/web/core/components/analytics/overview/root.tsx diff --git a/web/core/components/analytics/select/analytics-params.tsx b/apps/web/core/components/analytics/select/analytics-params.tsx similarity index 100% rename from web/core/components/analytics/select/analytics-params.tsx rename to apps/web/core/components/analytics/select/analytics-params.tsx diff --git a/web/core/components/analytics/select/duration.tsx b/apps/web/core/components/analytics/select/duration.tsx similarity index 100% rename from web/core/components/analytics/select/duration.tsx rename to apps/web/core/components/analytics/select/duration.tsx diff --git a/web/core/components/analytics/select/project.tsx b/apps/web/core/components/analytics/select/project.tsx similarity index 100% rename from web/core/components/analytics/select/project.tsx rename to apps/web/core/components/analytics/select/project.tsx diff --git a/web/core/components/analytics/select/select-x-axis.tsx b/apps/web/core/components/analytics/select/select-x-axis.tsx similarity index 100% rename from web/core/components/analytics/select/select-x-axis.tsx rename to apps/web/core/components/analytics/select/select-x-axis.tsx diff --git a/web/core/components/analytics/select/select-y-axis.tsx b/apps/web/core/components/analytics/select/select-y-axis.tsx similarity index 100% rename from web/core/components/analytics/select/select-y-axis.tsx rename to apps/web/core/components/analytics/select/select-y-axis.tsx diff --git a/web/core/components/analytics/total-insights.tsx b/apps/web/core/components/analytics/total-insights.tsx similarity index 100% rename from web/core/components/analytics/total-insights.tsx rename to apps/web/core/components/analytics/total-insights.tsx diff --git a/web/core/components/analytics/trend-piece.tsx b/apps/web/core/components/analytics/trend-piece.tsx similarity index 100% rename from web/core/components/analytics/trend-piece.tsx rename to apps/web/core/components/analytics/trend-piece.tsx diff --git a/web/core/components/analytics/work-items/created-vs-resolved.tsx b/apps/web/core/components/analytics/work-items/created-vs-resolved.tsx similarity index 100% rename from web/core/components/analytics/work-items/created-vs-resolved.tsx rename to apps/web/core/components/analytics/work-items/created-vs-resolved.tsx diff --git a/web/core/components/analytics/work-items/customized-insights.tsx b/apps/web/core/components/analytics/work-items/customized-insights.tsx similarity index 100% rename from web/core/components/analytics/work-items/customized-insights.tsx rename to apps/web/core/components/analytics/work-items/customized-insights.tsx diff --git a/web/core/components/analytics/work-items/index.ts b/apps/web/core/components/analytics/work-items/index.ts similarity index 100% rename from web/core/components/analytics/work-items/index.ts rename to apps/web/core/components/analytics/work-items/index.ts diff --git a/web/core/components/analytics/work-items/modal/content.tsx b/apps/web/core/components/analytics/work-items/modal/content.tsx similarity index 100% rename from web/core/components/analytics/work-items/modal/content.tsx rename to apps/web/core/components/analytics/work-items/modal/content.tsx diff --git a/web/core/components/analytics/work-items/modal/header.tsx b/apps/web/core/components/analytics/work-items/modal/header.tsx similarity index 100% rename from web/core/components/analytics/work-items/modal/header.tsx rename to apps/web/core/components/analytics/work-items/modal/header.tsx diff --git a/web/core/components/analytics/work-items/modal/index.tsx b/apps/web/core/components/analytics/work-items/modal/index.tsx similarity index 100% rename from web/core/components/analytics/work-items/modal/index.tsx rename to apps/web/core/components/analytics/work-items/modal/index.tsx diff --git a/web/core/components/analytics/work-items/priority-chart.tsx b/apps/web/core/components/analytics/work-items/priority-chart.tsx similarity index 100% rename from web/core/components/analytics/work-items/priority-chart.tsx rename to apps/web/core/components/analytics/work-items/priority-chart.tsx diff --git a/web/core/components/analytics/work-items/root.tsx b/apps/web/core/components/analytics/work-items/root.tsx similarity index 100% rename from web/core/components/analytics/work-items/root.tsx rename to apps/web/core/components/analytics/work-items/root.tsx diff --git a/web/core/components/analytics/work-items/utils.ts b/apps/web/core/components/analytics/work-items/utils.ts similarity index 100% rename from web/core/components/analytics/work-items/utils.ts rename to apps/web/core/components/analytics/work-items/utils.ts diff --git a/web/core/components/analytics/work-items/workitems-insight-table.tsx b/apps/web/core/components/analytics/work-items/workitems-insight-table.tsx similarity index 100% rename from web/core/components/analytics/work-items/workitems-insight-table.tsx rename to apps/web/core/components/analytics/work-items/workitems-insight-table.tsx diff --git a/web/core/components/api-token/delete-token-modal.tsx b/apps/web/core/components/api-token/delete-token-modal.tsx similarity index 100% rename from web/core/components/api-token/delete-token-modal.tsx rename to apps/web/core/components/api-token/delete-token-modal.tsx diff --git a/web/core/components/api-token/empty-state.tsx b/apps/web/core/components/api-token/empty-state.tsx similarity index 100% rename from web/core/components/api-token/empty-state.tsx rename to apps/web/core/components/api-token/empty-state.tsx diff --git a/web/core/components/api-token/index.ts b/apps/web/core/components/api-token/index.ts similarity index 100% rename from web/core/components/api-token/index.ts rename to apps/web/core/components/api-token/index.ts diff --git a/web/core/components/api-token/modal/create-token-modal.tsx b/apps/web/core/components/api-token/modal/create-token-modal.tsx similarity index 100% rename from web/core/components/api-token/modal/create-token-modal.tsx rename to apps/web/core/components/api-token/modal/create-token-modal.tsx diff --git a/web/core/components/api-token/modal/form.tsx b/apps/web/core/components/api-token/modal/form.tsx similarity index 100% rename from web/core/components/api-token/modal/form.tsx rename to apps/web/core/components/api-token/modal/form.tsx diff --git a/web/core/components/api-token/modal/generated-token-details.tsx b/apps/web/core/components/api-token/modal/generated-token-details.tsx similarity index 100% rename from web/core/components/api-token/modal/generated-token-details.tsx rename to apps/web/core/components/api-token/modal/generated-token-details.tsx diff --git a/web/core/components/api-token/modal/index.ts b/apps/web/core/components/api-token/modal/index.ts similarity index 100% rename from web/core/components/api-token/modal/index.ts rename to apps/web/core/components/api-token/modal/index.ts diff --git a/web/core/components/api-token/token-list-item.tsx b/apps/web/core/components/api-token/token-list-item.tsx similarity index 100% rename from web/core/components/api-token/token-list-item.tsx rename to apps/web/core/components/api-token/token-list-item.tsx diff --git a/web/core/components/archives/archive-tabs-list.tsx b/apps/web/core/components/archives/archive-tabs-list.tsx similarity index 100% rename from web/core/components/archives/archive-tabs-list.tsx rename to apps/web/core/components/archives/archive-tabs-list.tsx diff --git a/web/core/components/archives/index.ts b/apps/web/core/components/archives/index.ts similarity index 100% rename from web/core/components/archives/index.ts rename to apps/web/core/components/archives/index.ts diff --git a/web/core/components/auth-screens/index.ts b/apps/web/core/components/auth-screens/index.ts similarity index 100% rename from web/core/components/auth-screens/index.ts rename to apps/web/core/components/auth-screens/index.ts diff --git a/web/core/components/auth-screens/not-authorized-view.tsx b/apps/web/core/components/auth-screens/not-authorized-view.tsx similarity index 100% rename from web/core/components/auth-screens/not-authorized-view.tsx rename to apps/web/core/components/auth-screens/not-authorized-view.tsx diff --git a/web/core/components/auth-screens/project/index.ts b/apps/web/core/components/auth-screens/project/index.ts similarity index 100% rename from web/core/components/auth-screens/project/index.ts rename to apps/web/core/components/auth-screens/project/index.ts diff --git a/web/core/components/auth-screens/project/join-project.tsx b/apps/web/core/components/auth-screens/project/join-project.tsx similarity index 100% rename from web/core/components/auth-screens/project/join-project.tsx rename to apps/web/core/components/auth-screens/project/join-project.tsx diff --git a/web/core/components/auth-screens/workspace/index.ts b/apps/web/core/components/auth-screens/workspace/index.ts similarity index 100% rename from web/core/components/auth-screens/workspace/index.ts rename to apps/web/core/components/auth-screens/workspace/index.ts diff --git a/web/core/components/auth-screens/workspace/not-a-member.tsx b/apps/web/core/components/auth-screens/workspace/not-a-member.tsx similarity index 100% rename from web/core/components/auth-screens/workspace/not-a-member.tsx rename to apps/web/core/components/auth-screens/workspace/not-a-member.tsx diff --git a/web/core/components/automation/auto-archive-automation.tsx b/apps/web/core/components/automation/auto-archive-automation.tsx similarity index 100% rename from web/core/components/automation/auto-archive-automation.tsx rename to apps/web/core/components/automation/auto-archive-automation.tsx diff --git a/web/core/components/automation/auto-close-automation.tsx b/apps/web/core/components/automation/auto-close-automation.tsx similarity index 100% rename from web/core/components/automation/auto-close-automation.tsx rename to apps/web/core/components/automation/auto-close-automation.tsx diff --git a/web/core/components/automation/index.ts b/apps/web/core/components/automation/index.ts similarity index 100% rename from web/core/components/automation/index.ts rename to apps/web/core/components/automation/index.ts diff --git a/web/core/components/automation/select-month-modal.tsx b/apps/web/core/components/automation/select-month-modal.tsx similarity index 100% rename from web/core/components/automation/select-month-modal.tsx rename to apps/web/core/components/automation/select-month-modal.tsx diff --git a/web/core/components/chart/utils.ts b/apps/web/core/components/chart/utils.ts similarity index 100% rename from web/core/components/chart/utils.ts rename to apps/web/core/components/chart/utils.ts diff --git a/web/core/components/command-palette/actions/help-actions.tsx b/apps/web/core/components/command-palette/actions/help-actions.tsx similarity index 100% rename from web/core/components/command-palette/actions/help-actions.tsx rename to apps/web/core/components/command-palette/actions/help-actions.tsx diff --git a/web/core/components/command-palette/actions/helper.tsx b/apps/web/core/components/command-palette/actions/helper.tsx similarity index 100% rename from web/core/components/command-palette/actions/helper.tsx rename to apps/web/core/components/command-palette/actions/helper.tsx diff --git a/web/core/components/command-palette/actions/index.ts b/apps/web/core/components/command-palette/actions/index.ts similarity index 100% rename from web/core/components/command-palette/actions/index.ts rename to apps/web/core/components/command-palette/actions/index.ts diff --git a/web/core/components/command-palette/actions/issue-actions/actions-list.tsx b/apps/web/core/components/command-palette/actions/issue-actions/actions-list.tsx similarity index 100% rename from web/core/components/command-palette/actions/issue-actions/actions-list.tsx rename to apps/web/core/components/command-palette/actions/issue-actions/actions-list.tsx diff --git a/web/core/components/command-palette/actions/issue-actions/change-assignee.tsx b/apps/web/core/components/command-palette/actions/issue-actions/change-assignee.tsx similarity index 100% rename from web/core/components/command-palette/actions/issue-actions/change-assignee.tsx rename to apps/web/core/components/command-palette/actions/issue-actions/change-assignee.tsx diff --git a/web/core/components/command-palette/actions/issue-actions/change-priority.tsx b/apps/web/core/components/command-palette/actions/issue-actions/change-priority.tsx similarity index 100% rename from web/core/components/command-palette/actions/issue-actions/change-priority.tsx rename to apps/web/core/components/command-palette/actions/issue-actions/change-priority.tsx diff --git a/web/core/components/command-palette/actions/issue-actions/change-state.tsx b/apps/web/core/components/command-palette/actions/issue-actions/change-state.tsx similarity index 100% rename from web/core/components/command-palette/actions/issue-actions/change-state.tsx rename to apps/web/core/components/command-palette/actions/issue-actions/change-state.tsx diff --git a/web/core/components/command-palette/actions/issue-actions/index.ts b/apps/web/core/components/command-palette/actions/issue-actions/index.ts similarity index 100% rename from web/core/components/command-palette/actions/issue-actions/index.ts rename to apps/web/core/components/command-palette/actions/issue-actions/index.ts diff --git a/web/core/components/command-palette/actions/project-actions.tsx b/apps/web/core/components/command-palette/actions/project-actions.tsx similarity index 100% rename from web/core/components/command-palette/actions/project-actions.tsx rename to apps/web/core/components/command-palette/actions/project-actions.tsx diff --git a/web/core/components/command-palette/actions/search-results.tsx b/apps/web/core/components/command-palette/actions/search-results.tsx similarity index 100% rename from web/core/components/command-palette/actions/search-results.tsx rename to apps/web/core/components/command-palette/actions/search-results.tsx diff --git a/web/core/components/command-palette/actions/theme-actions.tsx b/apps/web/core/components/command-palette/actions/theme-actions.tsx similarity index 100% rename from web/core/components/command-palette/actions/theme-actions.tsx rename to apps/web/core/components/command-palette/actions/theme-actions.tsx diff --git a/web/core/components/command-palette/actions/workspace-settings-actions.tsx b/apps/web/core/components/command-palette/actions/workspace-settings-actions.tsx similarity index 100% rename from web/core/components/command-palette/actions/workspace-settings-actions.tsx rename to apps/web/core/components/command-palette/actions/workspace-settings-actions.tsx diff --git a/web/core/components/command-palette/command-modal.tsx b/apps/web/core/components/command-palette/command-modal.tsx similarity index 100% rename from web/core/components/command-palette/command-modal.tsx rename to apps/web/core/components/command-palette/command-modal.tsx diff --git a/web/core/components/command-palette/command-palette.tsx b/apps/web/core/components/command-palette/command-palette.tsx similarity index 100% rename from web/core/components/command-palette/command-palette.tsx rename to apps/web/core/components/command-palette/command-palette.tsx diff --git a/web/core/components/command-palette/index.ts b/apps/web/core/components/command-palette/index.ts similarity index 100% rename from web/core/components/command-palette/index.ts rename to apps/web/core/components/command-palette/index.ts diff --git a/web/core/components/command-palette/shortcuts-modal/commands-list.tsx b/apps/web/core/components/command-palette/shortcuts-modal/commands-list.tsx similarity index 100% rename from web/core/components/command-palette/shortcuts-modal/commands-list.tsx rename to apps/web/core/components/command-palette/shortcuts-modal/commands-list.tsx diff --git a/web/core/components/command-palette/shortcuts-modal/index.ts b/apps/web/core/components/command-palette/shortcuts-modal/index.ts similarity index 100% rename from web/core/components/command-palette/shortcuts-modal/index.ts rename to apps/web/core/components/command-palette/shortcuts-modal/index.ts diff --git a/web/core/components/command-palette/shortcuts-modal/modal.tsx b/apps/web/core/components/command-palette/shortcuts-modal/modal.tsx similarity index 100% rename from web/core/components/command-palette/shortcuts-modal/modal.tsx rename to apps/web/core/components/command-palette/shortcuts-modal/modal.tsx diff --git a/web/core/components/comments/comment-card.tsx b/apps/web/core/components/comments/comment-card.tsx similarity index 100% rename from web/core/components/comments/comment-card.tsx rename to apps/web/core/components/comments/comment-card.tsx diff --git a/web/core/components/comments/comment-create.tsx b/apps/web/core/components/comments/comment-create.tsx similarity index 100% rename from web/core/components/comments/comment-create.tsx rename to apps/web/core/components/comments/comment-create.tsx diff --git a/web/core/components/comments/comment-reaction.tsx b/apps/web/core/components/comments/comment-reaction.tsx similarity index 100% rename from web/core/components/comments/comment-reaction.tsx rename to apps/web/core/components/comments/comment-reaction.tsx diff --git a/web/core/components/comments/comments.tsx b/apps/web/core/components/comments/comments.tsx similarity index 100% rename from web/core/components/comments/comments.tsx rename to apps/web/core/components/comments/comments.tsx diff --git a/web/core/components/comments/index.ts b/apps/web/core/components/comments/index.ts similarity index 100% rename from web/core/components/comments/index.ts rename to apps/web/core/components/comments/index.ts diff --git a/web/core/components/common/access-field.tsx b/apps/web/core/components/common/access-field.tsx similarity index 100% rename from web/core/components/common/access-field.tsx rename to apps/web/core/components/common/access-field.tsx diff --git a/web/core/components/common/activity/activity-block.tsx b/apps/web/core/components/common/activity/activity-block.tsx similarity index 100% rename from web/core/components/common/activity/activity-block.tsx rename to apps/web/core/components/common/activity/activity-block.tsx diff --git a/web/core/components/common/activity/activity-item.tsx b/apps/web/core/components/common/activity/activity-item.tsx similarity index 100% rename from web/core/components/common/activity/activity-item.tsx rename to apps/web/core/components/common/activity/activity-item.tsx diff --git a/web/core/components/common/activity/helper.tsx b/apps/web/core/components/common/activity/helper.tsx similarity index 100% rename from web/core/components/common/activity/helper.tsx rename to apps/web/core/components/common/activity/helper.tsx diff --git a/web/core/components/common/activity/index.ts b/apps/web/core/components/common/activity/index.ts similarity index 100% rename from web/core/components/common/activity/index.ts rename to apps/web/core/components/common/activity/index.ts diff --git a/web/core/components/common/activity/user.tsx b/apps/web/core/components/common/activity/user.tsx similarity index 100% rename from web/core/components/common/activity/user.tsx rename to apps/web/core/components/common/activity/user.tsx diff --git a/web/core/components/common/applied-filters/date.tsx b/apps/web/core/components/common/applied-filters/date.tsx similarity index 100% rename from web/core/components/common/applied-filters/date.tsx rename to apps/web/core/components/common/applied-filters/date.tsx diff --git a/web/core/components/common/applied-filters/index.ts b/apps/web/core/components/common/applied-filters/index.ts similarity index 100% rename from web/core/components/common/applied-filters/index.ts rename to apps/web/core/components/common/applied-filters/index.ts diff --git a/web/core/components/common/applied-filters/members.tsx b/apps/web/core/components/common/applied-filters/members.tsx similarity index 100% rename from web/core/components/common/applied-filters/members.tsx rename to apps/web/core/components/common/applied-filters/members.tsx diff --git a/web/core/components/common/breadcrumb-link.tsx b/apps/web/core/components/common/breadcrumb-link.tsx similarity index 100% rename from web/core/components/common/breadcrumb-link.tsx rename to apps/web/core/components/common/breadcrumb-link.tsx diff --git a/web/core/components/common/count-chip.tsx b/apps/web/core/components/common/count-chip.tsx similarity index 100% rename from web/core/components/common/count-chip.tsx rename to apps/web/core/components/common/count-chip.tsx diff --git a/web/core/components/common/empty-state.tsx b/apps/web/core/components/common/empty-state.tsx similarity index 100% rename from web/core/components/common/empty-state.tsx rename to apps/web/core/components/common/empty-state.tsx diff --git a/web/core/components/common/filters/created-at.tsx b/apps/web/core/components/common/filters/created-at.tsx similarity index 100% rename from web/core/components/common/filters/created-at.tsx rename to apps/web/core/components/common/filters/created-at.tsx diff --git a/web/core/components/common/filters/created-by.tsx b/apps/web/core/components/common/filters/created-by.tsx similarity index 100% rename from web/core/components/common/filters/created-by.tsx rename to apps/web/core/components/common/filters/created-by.tsx diff --git a/web/core/components/common/filters/index.ts b/apps/web/core/components/common/filters/index.ts similarity index 100% rename from web/core/components/common/filters/index.ts rename to apps/web/core/components/common/filters/index.ts diff --git a/web/core/components/common/index.ts b/apps/web/core/components/common/index.ts similarity index 100% rename from web/core/components/common/index.ts rename to apps/web/core/components/common/index.ts diff --git a/web/core/components/common/latest-feature-block.tsx b/apps/web/core/components/common/latest-feature-block.tsx similarity index 100% rename from web/core/components/common/latest-feature-block.tsx rename to apps/web/core/components/common/latest-feature-block.tsx diff --git a/web/core/components/common/logo-spinner.tsx b/apps/web/core/components/common/logo-spinner.tsx similarity index 100% rename from web/core/components/common/logo-spinner.tsx rename to apps/web/core/components/common/logo-spinner.tsx diff --git a/web/core/components/common/logo.tsx b/apps/web/core/components/common/logo.tsx similarity index 100% rename from web/core/components/common/logo.tsx rename to apps/web/core/components/common/logo.tsx diff --git a/web/core/components/common/new-empty-state.tsx b/apps/web/core/components/common/new-empty-state.tsx similarity index 100% rename from web/core/components/common/new-empty-state.tsx rename to apps/web/core/components/common/new-empty-state.tsx diff --git a/web/core/components/common/page-access-icon.tsx b/apps/web/core/components/common/page-access-icon.tsx similarity index 100% rename from web/core/components/common/page-access-icon.tsx rename to apps/web/core/components/common/page-access-icon.tsx diff --git a/web/core/components/common/pro-icon.tsx b/apps/web/core/components/common/pro-icon.tsx similarity index 100% rename from web/core/components/common/pro-icon.tsx rename to apps/web/core/components/common/pro-icon.tsx diff --git a/web/core/components/common/switcher-label.tsx b/apps/web/core/components/common/switcher-label.tsx similarity index 100% rename from web/core/components/common/switcher-label.tsx rename to apps/web/core/components/common/switcher-label.tsx diff --git a/web/core/components/core/activity.tsx b/apps/web/core/components/core/activity.tsx similarity index 100% rename from web/core/components/core/activity.tsx rename to apps/web/core/components/core/activity.tsx diff --git a/web/core/components/core/app-header.tsx b/apps/web/core/components/core/app-header.tsx similarity index 100% rename from web/core/components/core/app-header.tsx rename to apps/web/core/components/core/app-header.tsx diff --git a/web/core/components/core/content-overflow-HOC.tsx b/apps/web/core/components/core/content-overflow-HOC.tsx similarity index 100% rename from web/core/components/core/content-overflow-HOC.tsx rename to apps/web/core/components/core/content-overflow-HOC.tsx diff --git a/web/core/components/core/content-wrapper.tsx b/apps/web/core/components/core/content-wrapper.tsx similarity index 100% rename from web/core/components/core/content-wrapper.tsx rename to apps/web/core/components/core/content-wrapper.tsx diff --git a/web/core/components/core/description-versions/dropdown-item.tsx b/apps/web/core/components/core/description-versions/dropdown-item.tsx similarity index 100% rename from web/core/components/core/description-versions/dropdown-item.tsx rename to apps/web/core/components/core/description-versions/dropdown-item.tsx diff --git a/web/core/components/core/description-versions/dropdown.tsx b/apps/web/core/components/core/description-versions/dropdown.tsx similarity index 100% rename from web/core/components/core/description-versions/dropdown.tsx rename to apps/web/core/components/core/description-versions/dropdown.tsx diff --git a/web/core/components/core/description-versions/index.ts b/apps/web/core/components/core/description-versions/index.ts similarity index 100% rename from web/core/components/core/description-versions/index.ts rename to apps/web/core/components/core/description-versions/index.ts diff --git a/web/core/components/core/description-versions/modal.tsx b/apps/web/core/components/core/description-versions/modal.tsx similarity index 100% rename from web/core/components/core/description-versions/modal.tsx rename to apps/web/core/components/core/description-versions/modal.tsx diff --git a/web/core/components/core/description-versions/root.tsx b/apps/web/core/components/core/description-versions/root.tsx similarity index 100% rename from web/core/components/core/description-versions/root.tsx rename to apps/web/core/components/core/description-versions/root.tsx diff --git a/web/core/components/core/filters/date-filter-modal.tsx b/apps/web/core/components/core/filters/date-filter-modal.tsx similarity index 100% rename from web/core/components/core/filters/date-filter-modal.tsx rename to apps/web/core/components/core/filters/date-filter-modal.tsx diff --git a/web/core/components/core/filters/date-filter-select.tsx b/apps/web/core/components/core/filters/date-filter-select.tsx similarity index 100% rename from web/core/components/core/filters/date-filter-select.tsx rename to apps/web/core/components/core/filters/date-filter-select.tsx diff --git a/web/core/components/core/filters/index.ts b/apps/web/core/components/core/filters/index.ts similarity index 100% rename from web/core/components/core/filters/index.ts rename to apps/web/core/components/core/filters/index.ts diff --git a/web/core/components/core/image-picker-popover.tsx b/apps/web/core/components/core/image-picker-popover.tsx similarity index 100% rename from web/core/components/core/image-picker-popover.tsx rename to apps/web/core/components/core/image-picker-popover.tsx diff --git a/web/core/components/core/index.ts b/apps/web/core/components/core/index.ts similarity index 100% rename from web/core/components/core/index.ts rename to apps/web/core/components/core/index.ts diff --git a/web/core/components/core/list/index.ts b/apps/web/core/components/core/list/index.ts similarity index 100% rename from web/core/components/core/list/index.ts rename to apps/web/core/components/core/list/index.ts diff --git a/web/core/components/core/list/list-item.tsx b/apps/web/core/components/core/list/list-item.tsx similarity index 100% rename from web/core/components/core/list/list-item.tsx rename to apps/web/core/components/core/list/list-item.tsx diff --git a/web/core/components/core/list/list-root.tsx b/apps/web/core/components/core/list/list-root.tsx similarity index 100% rename from web/core/components/core/list/list-root.tsx rename to apps/web/core/components/core/list/list-root.tsx diff --git a/web/core/components/core/modals/bulk-delete-issues-modal-item.tsx b/apps/web/core/components/core/modals/bulk-delete-issues-modal-item.tsx similarity index 100% rename from web/core/components/core/modals/bulk-delete-issues-modal-item.tsx rename to apps/web/core/components/core/modals/bulk-delete-issues-modal-item.tsx diff --git a/web/core/components/core/modals/bulk-delete-issues-modal.tsx b/apps/web/core/components/core/modals/bulk-delete-issues-modal.tsx similarity index 100% rename from web/core/components/core/modals/bulk-delete-issues-modal.tsx rename to apps/web/core/components/core/modals/bulk-delete-issues-modal.tsx diff --git a/web/core/components/core/modals/existing-issues-list-modal.tsx b/apps/web/core/components/core/modals/existing-issues-list-modal.tsx similarity index 100% rename from web/core/components/core/modals/existing-issues-list-modal.tsx rename to apps/web/core/components/core/modals/existing-issues-list-modal.tsx diff --git a/web/core/components/core/modals/gpt-assistant-popover.tsx b/apps/web/core/components/core/modals/gpt-assistant-popover.tsx similarity index 100% rename from web/core/components/core/modals/gpt-assistant-popover.tsx rename to apps/web/core/components/core/modals/gpt-assistant-popover.tsx diff --git a/web/core/components/core/modals/index.ts b/apps/web/core/components/core/modals/index.ts similarity index 100% rename from web/core/components/core/modals/index.ts rename to apps/web/core/components/core/modals/index.ts diff --git a/web/core/components/core/modals/issue-search-modal-empty-state.tsx b/apps/web/core/components/core/modals/issue-search-modal-empty-state.tsx similarity index 100% rename from web/core/components/core/modals/issue-search-modal-empty-state.tsx rename to apps/web/core/components/core/modals/issue-search-modal-empty-state.tsx diff --git a/web/core/components/core/modals/user-image-upload-modal.tsx b/apps/web/core/components/core/modals/user-image-upload-modal.tsx similarity index 100% rename from web/core/components/core/modals/user-image-upload-modal.tsx rename to apps/web/core/components/core/modals/user-image-upload-modal.tsx diff --git a/web/core/components/core/modals/workspace-image-upload-modal.tsx b/apps/web/core/components/core/modals/workspace-image-upload-modal.tsx similarity index 100% rename from web/core/components/core/modals/workspace-image-upload-modal.tsx rename to apps/web/core/components/core/modals/workspace-image-upload-modal.tsx diff --git a/web/core/components/core/multiple-select/entity-select-action.tsx b/apps/web/core/components/core/multiple-select/entity-select-action.tsx similarity index 100% rename from web/core/components/core/multiple-select/entity-select-action.tsx rename to apps/web/core/components/core/multiple-select/entity-select-action.tsx diff --git a/web/core/components/core/multiple-select/group-select-action.tsx b/apps/web/core/components/core/multiple-select/group-select-action.tsx similarity index 100% rename from web/core/components/core/multiple-select/group-select-action.tsx rename to apps/web/core/components/core/multiple-select/group-select-action.tsx diff --git a/web/core/components/core/multiple-select/index.ts b/apps/web/core/components/core/multiple-select/index.ts similarity index 100% rename from web/core/components/core/multiple-select/index.ts rename to apps/web/core/components/core/multiple-select/index.ts diff --git a/web/core/components/core/multiple-select/select-group.tsx b/apps/web/core/components/core/multiple-select/select-group.tsx similarity index 100% rename from web/core/components/core/multiple-select/select-group.tsx rename to apps/web/core/components/core/multiple-select/select-group.tsx diff --git a/web/core/components/core/page-title.tsx b/apps/web/core/components/core/page-title.tsx similarity index 100% rename from web/core/components/core/page-title.tsx rename to apps/web/core/components/core/page-title.tsx diff --git a/web/core/components/core/render-if-visible-HOC.tsx b/apps/web/core/components/core/render-if-visible-HOC.tsx similarity index 100% rename from web/core/components/core/render-if-visible-HOC.tsx rename to apps/web/core/components/core/render-if-visible-HOC.tsx diff --git a/web/core/components/core/sidebar/index.ts b/apps/web/core/components/core/sidebar/index.ts similarity index 100% rename from web/core/components/core/sidebar/index.ts rename to apps/web/core/components/core/sidebar/index.ts diff --git a/web/core/components/core/sidebar/progress-chart.tsx b/apps/web/core/components/core/sidebar/progress-chart.tsx similarity index 100% rename from web/core/components/core/sidebar/progress-chart.tsx rename to apps/web/core/components/core/sidebar/progress-chart.tsx diff --git a/web/core/components/core/sidebar/sidebar-menu-hamburger-toggle.tsx b/apps/web/core/components/core/sidebar/sidebar-menu-hamburger-toggle.tsx similarity index 100% rename from web/core/components/core/sidebar/sidebar-menu-hamburger-toggle.tsx rename to apps/web/core/components/core/sidebar/sidebar-menu-hamburger-toggle.tsx diff --git a/web/core/components/core/sidebar/single-progress-stats.tsx b/apps/web/core/components/core/sidebar/single-progress-stats.tsx similarity index 100% rename from web/core/components/core/sidebar/single-progress-stats.tsx rename to apps/web/core/components/core/sidebar/single-progress-stats.tsx diff --git a/web/core/components/core/theme/color-picker-input.tsx b/apps/web/core/components/core/theme/color-picker-input.tsx similarity index 100% rename from web/core/components/core/theme/color-picker-input.tsx rename to apps/web/core/components/core/theme/color-picker-input.tsx diff --git a/web/core/components/core/theme/custom-theme-selector.tsx b/apps/web/core/components/core/theme/custom-theme-selector.tsx similarity index 100% rename from web/core/components/core/theme/custom-theme-selector.tsx rename to apps/web/core/components/core/theme/custom-theme-selector.tsx diff --git a/web/core/components/core/theme/index.ts b/apps/web/core/components/core/theme/index.ts similarity index 100% rename from web/core/components/core/theme/index.ts rename to apps/web/core/components/core/theme/index.ts diff --git a/web/core/components/core/theme/theme-switch.tsx b/apps/web/core/components/core/theme/theme-switch.tsx similarity index 100% rename from web/core/components/core/theme/theme-switch.tsx rename to apps/web/core/components/core/theme/theme-switch.tsx diff --git a/web/core/components/cycles/active-cycle/cycle-stats.tsx b/apps/web/core/components/cycles/active-cycle/cycle-stats.tsx similarity index 100% rename from web/core/components/cycles/active-cycle/cycle-stats.tsx rename to apps/web/core/components/cycles/active-cycle/cycle-stats.tsx diff --git a/web/core/components/cycles/active-cycle/index.ts b/apps/web/core/components/cycles/active-cycle/index.ts similarity index 100% rename from web/core/components/cycles/active-cycle/index.ts rename to apps/web/core/components/cycles/active-cycle/index.ts diff --git a/web/core/components/cycles/active-cycle/productivity.tsx b/apps/web/core/components/cycles/active-cycle/productivity.tsx similarity index 100% rename from web/core/components/cycles/active-cycle/productivity.tsx rename to apps/web/core/components/cycles/active-cycle/productivity.tsx diff --git a/web/core/components/cycles/active-cycle/progress.tsx b/apps/web/core/components/cycles/active-cycle/progress.tsx similarity index 100% rename from web/core/components/cycles/active-cycle/progress.tsx rename to apps/web/core/components/cycles/active-cycle/progress.tsx diff --git a/web/core/components/cycles/active-cycle/use-cycles-details.ts b/apps/web/core/components/cycles/active-cycle/use-cycles-details.ts similarity index 100% rename from web/core/components/cycles/active-cycle/use-cycles-details.ts rename to apps/web/core/components/cycles/active-cycle/use-cycles-details.ts diff --git a/web/core/components/cycles/analytics-sidebar/index.ts b/apps/web/core/components/cycles/analytics-sidebar/index.ts similarity index 100% rename from web/core/components/cycles/analytics-sidebar/index.ts rename to apps/web/core/components/cycles/analytics-sidebar/index.ts diff --git a/web/core/components/cycles/analytics-sidebar/issue-progress.tsx b/apps/web/core/components/cycles/analytics-sidebar/issue-progress.tsx similarity index 100% rename from web/core/components/cycles/analytics-sidebar/issue-progress.tsx rename to apps/web/core/components/cycles/analytics-sidebar/issue-progress.tsx diff --git a/web/core/components/cycles/analytics-sidebar/progress-stats.tsx b/apps/web/core/components/cycles/analytics-sidebar/progress-stats.tsx similarity index 100% rename from web/core/components/cycles/analytics-sidebar/progress-stats.tsx rename to apps/web/core/components/cycles/analytics-sidebar/progress-stats.tsx diff --git a/web/core/components/cycles/analytics-sidebar/root.tsx b/apps/web/core/components/cycles/analytics-sidebar/root.tsx similarity index 100% rename from web/core/components/cycles/analytics-sidebar/root.tsx rename to apps/web/core/components/cycles/analytics-sidebar/root.tsx diff --git a/web/core/components/cycles/analytics-sidebar/sidebar-details.tsx b/apps/web/core/components/cycles/analytics-sidebar/sidebar-details.tsx similarity index 100% rename from web/core/components/cycles/analytics-sidebar/sidebar-details.tsx rename to apps/web/core/components/cycles/analytics-sidebar/sidebar-details.tsx diff --git a/web/core/components/cycles/analytics-sidebar/sidebar-header.tsx b/apps/web/core/components/cycles/analytics-sidebar/sidebar-header.tsx similarity index 100% rename from web/core/components/cycles/analytics-sidebar/sidebar-header.tsx rename to apps/web/core/components/cycles/analytics-sidebar/sidebar-header.tsx diff --git a/web/core/components/cycles/applied-filters/date.tsx b/apps/web/core/components/cycles/applied-filters/date.tsx similarity index 100% rename from web/core/components/cycles/applied-filters/date.tsx rename to apps/web/core/components/cycles/applied-filters/date.tsx diff --git a/web/core/components/cycles/applied-filters/index.ts b/apps/web/core/components/cycles/applied-filters/index.ts similarity index 100% rename from web/core/components/cycles/applied-filters/index.ts rename to apps/web/core/components/cycles/applied-filters/index.ts diff --git a/web/core/components/cycles/applied-filters/root.tsx b/apps/web/core/components/cycles/applied-filters/root.tsx similarity index 100% rename from web/core/components/cycles/applied-filters/root.tsx rename to apps/web/core/components/cycles/applied-filters/root.tsx diff --git a/web/core/components/cycles/applied-filters/status.tsx b/apps/web/core/components/cycles/applied-filters/status.tsx similarity index 100% rename from web/core/components/cycles/applied-filters/status.tsx rename to apps/web/core/components/cycles/applied-filters/status.tsx diff --git a/web/core/components/cycles/archived-cycles/header.tsx b/apps/web/core/components/cycles/archived-cycles/header.tsx similarity index 100% rename from web/core/components/cycles/archived-cycles/header.tsx rename to apps/web/core/components/cycles/archived-cycles/header.tsx diff --git a/web/core/components/cycles/archived-cycles/index.ts b/apps/web/core/components/cycles/archived-cycles/index.ts similarity index 100% rename from web/core/components/cycles/archived-cycles/index.ts rename to apps/web/core/components/cycles/archived-cycles/index.ts diff --git a/web/core/components/cycles/archived-cycles/modal.tsx b/apps/web/core/components/cycles/archived-cycles/modal.tsx similarity index 100% rename from web/core/components/cycles/archived-cycles/modal.tsx rename to apps/web/core/components/cycles/archived-cycles/modal.tsx diff --git a/web/core/components/cycles/archived-cycles/root.tsx b/apps/web/core/components/cycles/archived-cycles/root.tsx similarity index 100% rename from web/core/components/cycles/archived-cycles/root.tsx rename to apps/web/core/components/cycles/archived-cycles/root.tsx diff --git a/web/core/components/cycles/archived-cycles/view.tsx b/apps/web/core/components/cycles/archived-cycles/view.tsx similarity index 100% rename from web/core/components/cycles/archived-cycles/view.tsx rename to apps/web/core/components/cycles/archived-cycles/view.tsx diff --git a/web/core/components/cycles/cycle-peek-overview.tsx b/apps/web/core/components/cycles/cycle-peek-overview.tsx similarity index 100% rename from web/core/components/cycles/cycle-peek-overview.tsx rename to apps/web/core/components/cycles/cycle-peek-overview.tsx diff --git a/web/core/components/cycles/cycles-view-header.tsx b/apps/web/core/components/cycles/cycles-view-header.tsx similarity index 100% rename from web/core/components/cycles/cycles-view-header.tsx rename to apps/web/core/components/cycles/cycles-view-header.tsx diff --git a/web/core/components/cycles/cycles-view.tsx b/apps/web/core/components/cycles/cycles-view.tsx similarity index 100% rename from web/core/components/cycles/cycles-view.tsx rename to apps/web/core/components/cycles/cycles-view.tsx diff --git a/web/core/components/cycles/delete-modal.tsx b/apps/web/core/components/cycles/delete-modal.tsx similarity index 100% rename from web/core/components/cycles/delete-modal.tsx rename to apps/web/core/components/cycles/delete-modal.tsx diff --git a/web/core/components/cycles/dropdowns/estimate-type-dropdown.tsx b/apps/web/core/components/cycles/dropdowns/estimate-type-dropdown.tsx similarity index 100% rename from web/core/components/cycles/dropdowns/estimate-type-dropdown.tsx rename to apps/web/core/components/cycles/dropdowns/estimate-type-dropdown.tsx diff --git a/web/core/components/cycles/dropdowns/filters/end-date.tsx b/apps/web/core/components/cycles/dropdowns/filters/end-date.tsx similarity index 100% rename from web/core/components/cycles/dropdowns/filters/end-date.tsx rename to apps/web/core/components/cycles/dropdowns/filters/end-date.tsx diff --git a/web/core/components/cycles/dropdowns/filters/index.ts b/apps/web/core/components/cycles/dropdowns/filters/index.ts similarity index 100% rename from web/core/components/cycles/dropdowns/filters/index.ts rename to apps/web/core/components/cycles/dropdowns/filters/index.ts diff --git a/web/core/components/cycles/dropdowns/filters/root.tsx b/apps/web/core/components/cycles/dropdowns/filters/root.tsx similarity index 100% rename from web/core/components/cycles/dropdowns/filters/root.tsx rename to apps/web/core/components/cycles/dropdowns/filters/root.tsx diff --git a/web/core/components/cycles/dropdowns/filters/start-date.tsx b/apps/web/core/components/cycles/dropdowns/filters/start-date.tsx similarity index 100% rename from web/core/components/cycles/dropdowns/filters/start-date.tsx rename to apps/web/core/components/cycles/dropdowns/filters/start-date.tsx diff --git a/web/core/components/cycles/dropdowns/filters/status.tsx b/apps/web/core/components/cycles/dropdowns/filters/status.tsx similarity index 100% rename from web/core/components/cycles/dropdowns/filters/status.tsx rename to apps/web/core/components/cycles/dropdowns/filters/status.tsx diff --git a/web/core/components/cycles/dropdowns/index.ts b/apps/web/core/components/cycles/dropdowns/index.ts similarity index 100% rename from web/core/components/cycles/dropdowns/index.ts rename to apps/web/core/components/cycles/dropdowns/index.ts diff --git a/web/core/components/cycles/form.tsx b/apps/web/core/components/cycles/form.tsx similarity index 100% rename from web/core/components/cycles/form.tsx rename to apps/web/core/components/cycles/form.tsx diff --git a/web/core/components/cycles/index.ts b/apps/web/core/components/cycles/index.ts similarity index 100% rename from web/core/components/cycles/index.ts rename to apps/web/core/components/cycles/index.ts diff --git a/web/core/components/cycles/list/cycle-list-group-header.tsx b/apps/web/core/components/cycles/list/cycle-list-group-header.tsx similarity index 100% rename from web/core/components/cycles/list/cycle-list-group-header.tsx rename to apps/web/core/components/cycles/list/cycle-list-group-header.tsx diff --git a/web/core/components/cycles/list/cycle-list-item-action.tsx b/apps/web/core/components/cycles/list/cycle-list-item-action.tsx similarity index 100% rename from web/core/components/cycles/list/cycle-list-item-action.tsx rename to apps/web/core/components/cycles/list/cycle-list-item-action.tsx diff --git a/web/core/components/cycles/list/cycle-list-project-group-header.tsx b/apps/web/core/components/cycles/list/cycle-list-project-group-header.tsx similarity index 100% rename from web/core/components/cycles/list/cycle-list-project-group-header.tsx rename to apps/web/core/components/cycles/list/cycle-list-project-group-header.tsx diff --git a/web/core/components/cycles/list/cycles-list-item.tsx b/apps/web/core/components/cycles/list/cycles-list-item.tsx similarity index 100% rename from web/core/components/cycles/list/cycles-list-item.tsx rename to apps/web/core/components/cycles/list/cycles-list-item.tsx diff --git a/web/core/components/cycles/list/cycles-list-map.tsx b/apps/web/core/components/cycles/list/cycles-list-map.tsx similarity index 100% rename from web/core/components/cycles/list/cycles-list-map.tsx rename to apps/web/core/components/cycles/list/cycles-list-map.tsx diff --git a/web/core/components/cycles/list/index.ts b/apps/web/core/components/cycles/list/index.ts similarity index 100% rename from web/core/components/cycles/list/index.ts rename to apps/web/core/components/cycles/list/index.ts diff --git a/web/core/components/cycles/list/root.tsx b/apps/web/core/components/cycles/list/root.tsx similarity index 100% rename from web/core/components/cycles/list/root.tsx rename to apps/web/core/components/cycles/list/root.tsx diff --git a/web/core/components/cycles/modal.tsx b/apps/web/core/components/cycles/modal.tsx similarity index 100% rename from web/core/components/cycles/modal.tsx rename to apps/web/core/components/cycles/modal.tsx diff --git a/web/core/components/cycles/quick-actions.tsx b/apps/web/core/components/cycles/quick-actions.tsx similarity index 100% rename from web/core/components/cycles/quick-actions.tsx rename to apps/web/core/components/cycles/quick-actions.tsx diff --git a/web/core/components/cycles/transfer-issues-modal.tsx b/apps/web/core/components/cycles/transfer-issues-modal.tsx similarity index 100% rename from web/core/components/cycles/transfer-issues-modal.tsx rename to apps/web/core/components/cycles/transfer-issues-modal.tsx diff --git a/web/core/components/cycles/transfer-issues.tsx b/apps/web/core/components/cycles/transfer-issues.tsx similarity index 100% rename from web/core/components/cycles/transfer-issues.tsx rename to apps/web/core/components/cycles/transfer-issues.tsx diff --git a/web/core/components/dropdowns/buttons.tsx b/apps/web/core/components/dropdowns/buttons.tsx similarity index 100% rename from web/core/components/dropdowns/buttons.tsx rename to apps/web/core/components/dropdowns/buttons.tsx diff --git a/web/core/components/dropdowns/constants.ts b/apps/web/core/components/dropdowns/constants.ts similarity index 100% rename from web/core/components/dropdowns/constants.ts rename to apps/web/core/components/dropdowns/constants.ts diff --git a/web/core/components/dropdowns/cycle/cycle-options.tsx b/apps/web/core/components/dropdowns/cycle/cycle-options.tsx similarity index 100% rename from web/core/components/dropdowns/cycle/cycle-options.tsx rename to apps/web/core/components/dropdowns/cycle/cycle-options.tsx diff --git a/web/core/components/dropdowns/cycle/index.tsx b/apps/web/core/components/dropdowns/cycle/index.tsx similarity index 100% rename from web/core/components/dropdowns/cycle/index.tsx rename to apps/web/core/components/dropdowns/cycle/index.tsx diff --git a/web/core/components/dropdowns/date-range.tsx b/apps/web/core/components/dropdowns/date-range.tsx similarity index 100% rename from web/core/components/dropdowns/date-range.tsx rename to apps/web/core/components/dropdowns/date-range.tsx diff --git a/web/core/components/dropdowns/date.tsx b/apps/web/core/components/dropdowns/date.tsx similarity index 100% rename from web/core/components/dropdowns/date.tsx rename to apps/web/core/components/dropdowns/date.tsx diff --git a/web/core/components/dropdowns/estimate.tsx b/apps/web/core/components/dropdowns/estimate.tsx similarity index 100% rename from web/core/components/dropdowns/estimate.tsx rename to apps/web/core/components/dropdowns/estimate.tsx diff --git a/web/core/components/dropdowns/index.ts b/apps/web/core/components/dropdowns/index.ts similarity index 100% rename from web/core/components/dropdowns/index.ts rename to apps/web/core/components/dropdowns/index.ts diff --git a/web/core/components/dropdowns/layout.tsx b/apps/web/core/components/dropdowns/layout.tsx similarity index 100% rename from web/core/components/dropdowns/layout.tsx rename to apps/web/core/components/dropdowns/layout.tsx diff --git a/web/core/components/dropdowns/member/avatar.tsx b/apps/web/core/components/dropdowns/member/avatar.tsx similarity index 100% rename from web/core/components/dropdowns/member/avatar.tsx rename to apps/web/core/components/dropdowns/member/avatar.tsx diff --git a/web/core/components/dropdowns/member/index.tsx b/apps/web/core/components/dropdowns/member/index.tsx similarity index 100% rename from web/core/components/dropdowns/member/index.tsx rename to apps/web/core/components/dropdowns/member/index.tsx diff --git a/web/core/components/dropdowns/member/member-options.tsx b/apps/web/core/components/dropdowns/member/member-options.tsx similarity index 100% rename from web/core/components/dropdowns/member/member-options.tsx rename to apps/web/core/components/dropdowns/member/member-options.tsx diff --git a/web/core/components/dropdowns/member/types.d.ts b/apps/web/core/components/dropdowns/member/types.d.ts similarity index 100% rename from web/core/components/dropdowns/member/types.d.ts rename to apps/web/core/components/dropdowns/member/types.d.ts diff --git a/web/core/components/dropdowns/merged-date.tsx b/apps/web/core/components/dropdowns/merged-date.tsx similarity index 100% rename from web/core/components/dropdowns/merged-date.tsx rename to apps/web/core/components/dropdowns/merged-date.tsx diff --git a/web/core/components/dropdowns/module/index.tsx b/apps/web/core/components/dropdowns/module/index.tsx similarity index 100% rename from web/core/components/dropdowns/module/index.tsx rename to apps/web/core/components/dropdowns/module/index.tsx diff --git a/web/core/components/dropdowns/module/module-options.tsx b/apps/web/core/components/dropdowns/module/module-options.tsx similarity index 100% rename from web/core/components/dropdowns/module/module-options.tsx rename to apps/web/core/components/dropdowns/module/module-options.tsx diff --git a/web/core/components/dropdowns/priority.tsx b/apps/web/core/components/dropdowns/priority.tsx similarity index 100% rename from web/core/components/dropdowns/priority.tsx rename to apps/web/core/components/dropdowns/priority.tsx diff --git a/web/core/components/dropdowns/project.tsx b/apps/web/core/components/dropdowns/project.tsx similarity index 100% rename from web/core/components/dropdowns/project.tsx rename to apps/web/core/components/dropdowns/project.tsx diff --git a/web/core/components/dropdowns/state.tsx b/apps/web/core/components/dropdowns/state.tsx similarity index 100% rename from web/core/components/dropdowns/state.tsx rename to apps/web/core/components/dropdowns/state.tsx diff --git a/web/core/components/dropdowns/types.d.ts b/apps/web/core/components/dropdowns/types.d.ts similarity index 100% rename from web/core/components/dropdowns/types.d.ts rename to apps/web/core/components/dropdowns/types.d.ts diff --git a/web/core/components/editor/embeds/index.ts b/apps/web/core/components/editor/embeds/index.ts similarity index 100% rename from web/core/components/editor/embeds/index.ts rename to apps/web/core/components/editor/embeds/index.ts diff --git a/web/core/components/editor/embeds/mentions/index.ts b/apps/web/core/components/editor/embeds/mentions/index.ts similarity index 100% rename from web/core/components/editor/embeds/mentions/index.ts rename to apps/web/core/components/editor/embeds/mentions/index.ts diff --git a/web/core/components/editor/embeds/mentions/root.tsx b/apps/web/core/components/editor/embeds/mentions/root.tsx similarity index 100% rename from web/core/components/editor/embeds/mentions/root.tsx rename to apps/web/core/components/editor/embeds/mentions/root.tsx diff --git a/web/core/components/editor/embeds/mentions/user.tsx b/apps/web/core/components/editor/embeds/mentions/user.tsx similarity index 100% rename from web/core/components/editor/embeds/mentions/user.tsx rename to apps/web/core/components/editor/embeds/mentions/user.tsx diff --git a/web/core/components/editor/index.ts b/apps/web/core/components/editor/index.ts similarity index 100% rename from web/core/components/editor/index.ts rename to apps/web/core/components/editor/index.ts diff --git a/web/core/components/editor/lite-text-editor/index.ts b/apps/web/core/components/editor/lite-text-editor/index.ts similarity index 100% rename from web/core/components/editor/lite-text-editor/index.ts rename to apps/web/core/components/editor/lite-text-editor/index.ts diff --git a/web/core/components/editor/lite-text-editor/lite-text-editor.tsx b/apps/web/core/components/editor/lite-text-editor/lite-text-editor.tsx similarity index 100% rename from web/core/components/editor/lite-text-editor/lite-text-editor.tsx rename to apps/web/core/components/editor/lite-text-editor/lite-text-editor.tsx diff --git a/web/core/components/editor/lite-text-editor/lite-text-read-only-editor.tsx b/apps/web/core/components/editor/lite-text-editor/lite-text-read-only-editor.tsx similarity index 100% rename from web/core/components/editor/lite-text-editor/lite-text-read-only-editor.tsx rename to apps/web/core/components/editor/lite-text-editor/lite-text-read-only-editor.tsx diff --git a/web/core/components/editor/lite-text-editor/toolbar.tsx b/apps/web/core/components/editor/lite-text-editor/toolbar.tsx similarity index 100% rename from web/core/components/editor/lite-text-editor/toolbar.tsx rename to apps/web/core/components/editor/lite-text-editor/toolbar.tsx diff --git a/web/core/components/editor/pdf/document.tsx b/apps/web/core/components/editor/pdf/document.tsx similarity index 100% rename from web/core/components/editor/pdf/document.tsx rename to apps/web/core/components/editor/pdf/document.tsx diff --git a/web/core/components/editor/pdf/index.ts b/apps/web/core/components/editor/pdf/index.ts similarity index 100% rename from web/core/components/editor/pdf/index.ts rename to apps/web/core/components/editor/pdf/index.ts diff --git a/web/core/components/editor/rich-text-editor/index.ts b/apps/web/core/components/editor/rich-text-editor/index.ts similarity index 100% rename from web/core/components/editor/rich-text-editor/index.ts rename to apps/web/core/components/editor/rich-text-editor/index.ts diff --git a/web/core/components/editor/rich-text-editor/rich-text-editor.tsx b/apps/web/core/components/editor/rich-text-editor/rich-text-editor.tsx similarity index 100% rename from web/core/components/editor/rich-text-editor/rich-text-editor.tsx rename to apps/web/core/components/editor/rich-text-editor/rich-text-editor.tsx diff --git a/web/core/components/editor/rich-text-editor/rich-text-read-only-editor.tsx b/apps/web/core/components/editor/rich-text-editor/rich-text-read-only-editor.tsx similarity index 100% rename from web/core/components/editor/rich-text-editor/rich-text-read-only-editor.tsx rename to apps/web/core/components/editor/rich-text-editor/rich-text-read-only-editor.tsx diff --git a/web/core/components/editor/sticky-editor/color-palette.tsx b/apps/web/core/components/editor/sticky-editor/color-palette.tsx similarity index 100% rename from web/core/components/editor/sticky-editor/color-palette.tsx rename to apps/web/core/components/editor/sticky-editor/color-palette.tsx diff --git a/web/core/components/editor/sticky-editor/editor.tsx b/apps/web/core/components/editor/sticky-editor/editor.tsx similarity index 100% rename from web/core/components/editor/sticky-editor/editor.tsx rename to apps/web/core/components/editor/sticky-editor/editor.tsx diff --git a/web/core/components/editor/sticky-editor/index.ts b/apps/web/core/components/editor/sticky-editor/index.ts similarity index 100% rename from web/core/components/editor/sticky-editor/index.ts rename to apps/web/core/components/editor/sticky-editor/index.ts diff --git a/web/core/components/editor/sticky-editor/toolbar.tsx b/apps/web/core/components/editor/sticky-editor/toolbar.tsx similarity index 100% rename from web/core/components/editor/sticky-editor/toolbar.tsx rename to apps/web/core/components/editor/sticky-editor/toolbar.tsx diff --git a/web/core/components/empty-state/comic-box-button.tsx b/apps/web/core/components/empty-state/comic-box-button.tsx similarity index 100% rename from web/core/components/empty-state/comic-box-button.tsx rename to apps/web/core/components/empty-state/comic-box-button.tsx diff --git a/web/core/components/empty-state/detailed-empty-state-root.tsx b/apps/web/core/components/empty-state/detailed-empty-state-root.tsx similarity index 100% rename from web/core/components/empty-state/detailed-empty-state-root.tsx rename to apps/web/core/components/empty-state/detailed-empty-state-root.tsx diff --git a/web/core/components/empty-state/helper.tsx b/apps/web/core/components/empty-state/helper.tsx similarity index 100% rename from web/core/components/empty-state/helper.tsx rename to apps/web/core/components/empty-state/helper.tsx diff --git a/web/core/components/empty-state/index.ts b/apps/web/core/components/empty-state/index.ts similarity index 100% rename from web/core/components/empty-state/index.ts rename to apps/web/core/components/empty-state/index.ts diff --git a/web/core/components/empty-state/section-empty-state-root.tsx b/apps/web/core/components/empty-state/section-empty-state-root.tsx similarity index 100% rename from web/core/components/empty-state/section-empty-state-root.tsx rename to apps/web/core/components/empty-state/section-empty-state-root.tsx diff --git a/web/core/components/empty-state/simple-empty-state-root.tsx b/apps/web/core/components/empty-state/simple-empty-state-root.tsx similarity index 100% rename from web/core/components/empty-state/simple-empty-state-root.tsx rename to apps/web/core/components/empty-state/simple-empty-state-root.tsx diff --git a/web/core/components/estimates/create/index.ts b/apps/web/core/components/estimates/create/index.ts similarity index 100% rename from web/core/components/estimates/create/index.ts rename to apps/web/core/components/estimates/create/index.ts diff --git a/web/core/components/estimates/create/modal.tsx b/apps/web/core/components/estimates/create/modal.tsx similarity index 100% rename from web/core/components/estimates/create/modal.tsx rename to apps/web/core/components/estimates/create/modal.tsx diff --git a/web/core/components/estimates/create/stage-one.tsx b/apps/web/core/components/estimates/create/stage-one.tsx similarity index 100% rename from web/core/components/estimates/create/stage-one.tsx rename to apps/web/core/components/estimates/create/stage-one.tsx diff --git a/web/core/components/estimates/delete/index.ts b/apps/web/core/components/estimates/delete/index.ts similarity index 100% rename from web/core/components/estimates/delete/index.ts rename to apps/web/core/components/estimates/delete/index.ts diff --git a/web/core/components/estimates/delete/modal.tsx b/apps/web/core/components/estimates/delete/modal.tsx similarity index 100% rename from web/core/components/estimates/delete/modal.tsx rename to apps/web/core/components/estimates/delete/modal.tsx diff --git a/web/core/components/estimates/empty-screen.tsx b/apps/web/core/components/estimates/empty-screen.tsx similarity index 100% rename from web/core/components/estimates/empty-screen.tsx rename to apps/web/core/components/estimates/empty-screen.tsx diff --git a/web/core/components/estimates/estimate-disable-switch.tsx b/apps/web/core/components/estimates/estimate-disable-switch.tsx similarity index 100% rename from web/core/components/estimates/estimate-disable-switch.tsx rename to apps/web/core/components/estimates/estimate-disable-switch.tsx diff --git a/web/core/components/estimates/estimate-list-item.tsx b/apps/web/core/components/estimates/estimate-list-item.tsx similarity index 100% rename from web/core/components/estimates/estimate-list-item.tsx rename to apps/web/core/components/estimates/estimate-list-item.tsx diff --git a/web/core/components/estimates/estimate-list.tsx b/apps/web/core/components/estimates/estimate-list.tsx similarity index 100% rename from web/core/components/estimates/estimate-list.tsx rename to apps/web/core/components/estimates/estimate-list.tsx diff --git a/web/core/components/estimates/estimate-search.tsx b/apps/web/core/components/estimates/estimate-search.tsx similarity index 100% rename from web/core/components/estimates/estimate-search.tsx rename to apps/web/core/components/estimates/estimate-search.tsx diff --git a/web/core/components/estimates/index.ts b/apps/web/core/components/estimates/index.ts similarity index 100% rename from web/core/components/estimates/index.ts rename to apps/web/core/components/estimates/index.ts diff --git a/web/core/components/estimates/inputs/index.ts b/apps/web/core/components/estimates/inputs/index.ts similarity index 100% rename from web/core/components/estimates/inputs/index.ts rename to apps/web/core/components/estimates/inputs/index.ts diff --git a/web/core/components/estimates/inputs/number-input.tsx b/apps/web/core/components/estimates/inputs/number-input.tsx similarity index 100% rename from web/core/components/estimates/inputs/number-input.tsx rename to apps/web/core/components/estimates/inputs/number-input.tsx diff --git a/web/core/components/estimates/inputs/root.tsx b/apps/web/core/components/estimates/inputs/root.tsx similarity index 100% rename from web/core/components/estimates/inputs/root.tsx rename to apps/web/core/components/estimates/inputs/root.tsx diff --git a/web/core/components/estimates/inputs/text-input.tsx b/apps/web/core/components/estimates/inputs/text-input.tsx similarity index 100% rename from web/core/components/estimates/inputs/text-input.tsx rename to apps/web/core/components/estimates/inputs/text-input.tsx diff --git a/web/core/components/estimates/loader-screen.tsx b/apps/web/core/components/estimates/loader-screen.tsx similarity index 100% rename from web/core/components/estimates/loader-screen.tsx rename to apps/web/core/components/estimates/loader-screen.tsx diff --git a/web/core/components/estimates/points/create-root.tsx b/apps/web/core/components/estimates/points/create-root.tsx similarity index 100% rename from web/core/components/estimates/points/create-root.tsx rename to apps/web/core/components/estimates/points/create-root.tsx diff --git a/web/core/components/estimates/points/create.tsx b/apps/web/core/components/estimates/points/create.tsx similarity index 100% rename from web/core/components/estimates/points/create.tsx rename to apps/web/core/components/estimates/points/create.tsx diff --git a/web/core/components/estimates/points/index.ts b/apps/web/core/components/estimates/points/index.ts similarity index 100% rename from web/core/components/estimates/points/index.ts rename to apps/web/core/components/estimates/points/index.ts diff --git a/web/core/components/estimates/points/preview.tsx b/apps/web/core/components/estimates/points/preview.tsx similarity index 100% rename from web/core/components/estimates/points/preview.tsx rename to apps/web/core/components/estimates/points/preview.tsx diff --git a/web/core/components/estimates/points/update.tsx b/apps/web/core/components/estimates/points/update.tsx similarity index 100% rename from web/core/components/estimates/points/update.tsx rename to apps/web/core/components/estimates/points/update.tsx diff --git a/web/core/components/estimates/radio-select.tsx b/apps/web/core/components/estimates/radio-select.tsx similarity index 100% rename from web/core/components/estimates/radio-select.tsx rename to apps/web/core/components/estimates/radio-select.tsx diff --git a/web/core/components/estimates/root.tsx b/apps/web/core/components/estimates/root.tsx similarity index 100% rename from web/core/components/estimates/root.tsx rename to apps/web/core/components/estimates/root.tsx diff --git a/web/core/components/exporter/column.tsx b/apps/web/core/components/exporter/column.tsx similarity index 100% rename from web/core/components/exporter/column.tsx rename to apps/web/core/components/exporter/column.tsx diff --git a/web/core/components/exporter/export-form.tsx b/apps/web/core/components/exporter/export-form.tsx similarity index 100% rename from web/core/components/exporter/export-form.tsx rename to apps/web/core/components/exporter/export-form.tsx diff --git a/web/core/components/exporter/export-modal.tsx b/apps/web/core/components/exporter/export-modal.tsx similarity index 100% rename from web/core/components/exporter/export-modal.tsx rename to apps/web/core/components/exporter/export-modal.tsx diff --git a/web/core/components/exporter/guide.tsx b/apps/web/core/components/exporter/guide.tsx similarity index 100% rename from web/core/components/exporter/guide.tsx rename to apps/web/core/components/exporter/guide.tsx diff --git a/web/core/components/exporter/index.tsx b/apps/web/core/components/exporter/index.tsx similarity index 100% rename from web/core/components/exporter/index.tsx rename to apps/web/core/components/exporter/index.tsx diff --git a/web/core/components/exporter/prev-exports.tsx b/apps/web/core/components/exporter/prev-exports.tsx similarity index 100% rename from web/core/components/exporter/prev-exports.tsx rename to apps/web/core/components/exporter/prev-exports.tsx diff --git a/web/core/components/exporter/single-export.tsx b/apps/web/core/components/exporter/single-export.tsx similarity index 100% rename from web/core/components/exporter/single-export.tsx rename to apps/web/core/components/exporter/single-export.tsx diff --git a/web/core/components/gantt-chart/blocks/block-row-list.tsx b/apps/web/core/components/gantt-chart/blocks/block-row-list.tsx similarity index 100% rename from web/core/components/gantt-chart/blocks/block-row-list.tsx rename to apps/web/core/components/gantt-chart/blocks/block-row-list.tsx diff --git a/web/core/components/gantt-chart/blocks/block-row.tsx b/apps/web/core/components/gantt-chart/blocks/block-row.tsx similarity index 100% rename from web/core/components/gantt-chart/blocks/block-row.tsx rename to apps/web/core/components/gantt-chart/blocks/block-row.tsx diff --git a/web/core/components/gantt-chart/blocks/block.tsx b/apps/web/core/components/gantt-chart/blocks/block.tsx similarity index 100% rename from web/core/components/gantt-chart/blocks/block.tsx rename to apps/web/core/components/gantt-chart/blocks/block.tsx diff --git a/web/core/components/gantt-chart/blocks/blocks-list.tsx b/apps/web/core/components/gantt-chart/blocks/blocks-list.tsx similarity index 100% rename from web/core/components/gantt-chart/blocks/blocks-list.tsx rename to apps/web/core/components/gantt-chart/blocks/blocks-list.tsx diff --git a/web/core/components/gantt-chart/blocks/index.ts b/apps/web/core/components/gantt-chart/blocks/index.ts similarity index 100% rename from web/core/components/gantt-chart/blocks/index.ts rename to apps/web/core/components/gantt-chart/blocks/index.ts diff --git a/web/core/components/gantt-chart/chart/header.tsx b/apps/web/core/components/gantt-chart/chart/header.tsx similarity index 100% rename from web/core/components/gantt-chart/chart/header.tsx rename to apps/web/core/components/gantt-chart/chart/header.tsx diff --git a/web/core/components/gantt-chart/chart/index.ts b/apps/web/core/components/gantt-chart/chart/index.ts similarity index 100% rename from web/core/components/gantt-chart/chart/index.ts rename to apps/web/core/components/gantt-chart/chart/index.ts diff --git a/web/core/components/gantt-chart/chart/main-content.tsx b/apps/web/core/components/gantt-chart/chart/main-content.tsx similarity index 100% rename from web/core/components/gantt-chart/chart/main-content.tsx rename to apps/web/core/components/gantt-chart/chart/main-content.tsx diff --git a/web/core/components/gantt-chart/chart/root.tsx b/apps/web/core/components/gantt-chart/chart/root.tsx similarity index 100% rename from web/core/components/gantt-chart/chart/root.tsx rename to apps/web/core/components/gantt-chart/chart/root.tsx diff --git a/web/core/components/gantt-chart/chart/timeline-drag-helper.tsx b/apps/web/core/components/gantt-chart/chart/timeline-drag-helper.tsx similarity index 100% rename from web/core/components/gantt-chart/chart/timeline-drag-helper.tsx rename to apps/web/core/components/gantt-chart/chart/timeline-drag-helper.tsx diff --git a/web/core/components/gantt-chart/chart/views/index.ts b/apps/web/core/components/gantt-chart/chart/views/index.ts similarity index 100% rename from web/core/components/gantt-chart/chart/views/index.ts rename to apps/web/core/components/gantt-chart/chart/views/index.ts diff --git a/web/core/components/gantt-chart/chart/views/month.tsx b/apps/web/core/components/gantt-chart/chart/views/month.tsx similarity index 100% rename from web/core/components/gantt-chart/chart/views/month.tsx rename to apps/web/core/components/gantt-chart/chart/views/month.tsx diff --git a/web/core/components/gantt-chart/chart/views/quarter.tsx b/apps/web/core/components/gantt-chart/chart/views/quarter.tsx similarity index 100% rename from web/core/components/gantt-chart/chart/views/quarter.tsx rename to apps/web/core/components/gantt-chart/chart/views/quarter.tsx diff --git a/web/core/components/gantt-chart/chart/views/week.tsx b/apps/web/core/components/gantt-chart/chart/views/week.tsx similarity index 100% rename from web/core/components/gantt-chart/chart/views/week.tsx rename to apps/web/core/components/gantt-chart/chart/views/week.tsx diff --git a/web/core/components/gantt-chart/constants.ts b/apps/web/core/components/gantt-chart/constants.ts similarity index 100% rename from web/core/components/gantt-chart/constants.ts rename to apps/web/core/components/gantt-chart/constants.ts diff --git a/web/core/components/gantt-chart/contexts/index.tsx b/apps/web/core/components/gantt-chart/contexts/index.tsx similarity index 100% rename from web/core/components/gantt-chart/contexts/index.tsx rename to apps/web/core/components/gantt-chart/contexts/index.tsx diff --git a/web/core/components/gantt-chart/data/index.ts b/apps/web/core/components/gantt-chart/data/index.ts similarity index 100% rename from web/core/components/gantt-chart/data/index.ts rename to apps/web/core/components/gantt-chart/data/index.ts diff --git a/web/core/components/gantt-chart/helpers/add-block.tsx b/apps/web/core/components/gantt-chart/helpers/add-block.tsx similarity index 100% rename from web/core/components/gantt-chart/helpers/add-block.tsx rename to apps/web/core/components/gantt-chart/helpers/add-block.tsx diff --git a/web/core/components/gantt-chart/helpers/blockResizables/left-resizable.tsx b/apps/web/core/components/gantt-chart/helpers/blockResizables/left-resizable.tsx similarity index 100% rename from web/core/components/gantt-chart/helpers/blockResizables/left-resizable.tsx rename to apps/web/core/components/gantt-chart/helpers/blockResizables/left-resizable.tsx diff --git a/web/core/components/gantt-chart/helpers/blockResizables/right-resizable.tsx b/apps/web/core/components/gantt-chart/helpers/blockResizables/right-resizable.tsx similarity index 100% rename from web/core/components/gantt-chart/helpers/blockResizables/right-resizable.tsx rename to apps/web/core/components/gantt-chart/helpers/blockResizables/right-resizable.tsx diff --git a/web/core/components/gantt-chart/helpers/blockResizables/use-gantt-resizable.ts b/apps/web/core/components/gantt-chart/helpers/blockResizables/use-gantt-resizable.ts similarity index 100% rename from web/core/components/gantt-chart/helpers/blockResizables/use-gantt-resizable.ts rename to apps/web/core/components/gantt-chart/helpers/blockResizables/use-gantt-resizable.ts diff --git a/web/core/components/gantt-chart/helpers/draggable.tsx b/apps/web/core/components/gantt-chart/helpers/draggable.tsx similarity index 100% rename from web/core/components/gantt-chart/helpers/draggable.tsx rename to apps/web/core/components/gantt-chart/helpers/draggable.tsx diff --git a/web/core/components/gantt-chart/helpers/index.ts b/apps/web/core/components/gantt-chart/helpers/index.ts similarity index 100% rename from web/core/components/gantt-chart/helpers/index.ts rename to apps/web/core/components/gantt-chart/helpers/index.ts diff --git a/web/core/components/gantt-chart/index.ts b/apps/web/core/components/gantt-chart/index.ts similarity index 100% rename from web/core/components/gantt-chart/index.ts rename to apps/web/core/components/gantt-chart/index.ts diff --git a/web/core/components/gantt-chart/root.tsx b/apps/web/core/components/gantt-chart/root.tsx similarity index 100% rename from web/core/components/gantt-chart/root.tsx rename to apps/web/core/components/gantt-chart/root.tsx diff --git a/web/core/components/gantt-chart/sidebar/gantt-dnd-HOC.tsx b/apps/web/core/components/gantt-chart/sidebar/gantt-dnd-HOC.tsx similarity index 100% rename from web/core/components/gantt-chart/sidebar/gantt-dnd-HOC.tsx rename to apps/web/core/components/gantt-chart/sidebar/gantt-dnd-HOC.tsx diff --git a/web/core/components/gantt-chart/sidebar/index.ts b/apps/web/core/components/gantt-chart/sidebar/index.ts similarity index 100% rename from web/core/components/gantt-chart/sidebar/index.ts rename to apps/web/core/components/gantt-chart/sidebar/index.ts diff --git a/web/core/components/gantt-chart/sidebar/issues/block.tsx b/apps/web/core/components/gantt-chart/sidebar/issues/block.tsx similarity index 100% rename from web/core/components/gantt-chart/sidebar/issues/block.tsx rename to apps/web/core/components/gantt-chart/sidebar/issues/block.tsx diff --git a/web/core/components/gantt-chart/sidebar/issues/index.ts b/apps/web/core/components/gantt-chart/sidebar/issues/index.ts similarity index 100% rename from web/core/components/gantt-chart/sidebar/issues/index.ts rename to apps/web/core/components/gantt-chart/sidebar/issues/index.ts diff --git a/web/core/components/gantt-chart/sidebar/issues/sidebar.tsx b/apps/web/core/components/gantt-chart/sidebar/issues/sidebar.tsx similarity index 100% rename from web/core/components/gantt-chart/sidebar/issues/sidebar.tsx rename to apps/web/core/components/gantt-chart/sidebar/issues/sidebar.tsx diff --git a/web/core/components/gantt-chart/sidebar/modules/block.tsx b/apps/web/core/components/gantt-chart/sidebar/modules/block.tsx similarity index 100% rename from web/core/components/gantt-chart/sidebar/modules/block.tsx rename to apps/web/core/components/gantt-chart/sidebar/modules/block.tsx diff --git a/web/core/components/gantt-chart/sidebar/modules/index.ts b/apps/web/core/components/gantt-chart/sidebar/modules/index.ts similarity index 100% rename from web/core/components/gantt-chart/sidebar/modules/index.ts rename to apps/web/core/components/gantt-chart/sidebar/modules/index.ts diff --git a/web/core/components/gantt-chart/sidebar/modules/sidebar.tsx b/apps/web/core/components/gantt-chart/sidebar/modules/sidebar.tsx similarity index 100% rename from web/core/components/gantt-chart/sidebar/modules/sidebar.tsx rename to apps/web/core/components/gantt-chart/sidebar/modules/sidebar.tsx diff --git a/web/core/components/gantt-chart/sidebar/root.tsx b/apps/web/core/components/gantt-chart/sidebar/root.tsx similarity index 100% rename from web/core/components/gantt-chart/sidebar/root.tsx rename to apps/web/core/components/gantt-chart/sidebar/root.tsx diff --git a/web/core/components/gantt-chart/sidebar/utils.ts b/apps/web/core/components/gantt-chart/sidebar/utils.ts similarity index 100% rename from web/core/components/gantt-chart/sidebar/utils.ts rename to apps/web/core/components/gantt-chart/sidebar/utils.ts diff --git a/web/core/components/gantt-chart/views/helpers.ts b/apps/web/core/components/gantt-chart/views/helpers.ts similarity index 100% rename from web/core/components/gantt-chart/views/helpers.ts rename to apps/web/core/components/gantt-chart/views/helpers.ts diff --git a/web/core/components/gantt-chart/views/index.ts b/apps/web/core/components/gantt-chart/views/index.ts similarity index 100% rename from web/core/components/gantt-chart/views/index.ts rename to apps/web/core/components/gantt-chart/views/index.ts diff --git a/web/core/components/gantt-chart/views/month-view.ts b/apps/web/core/components/gantt-chart/views/month-view.ts similarity index 100% rename from web/core/components/gantt-chart/views/month-view.ts rename to apps/web/core/components/gantt-chart/views/month-view.ts diff --git a/web/core/components/gantt-chart/views/quarter-view.ts b/apps/web/core/components/gantt-chart/views/quarter-view.ts similarity index 100% rename from web/core/components/gantt-chart/views/quarter-view.ts rename to apps/web/core/components/gantt-chart/views/quarter-view.ts diff --git a/web/core/components/gantt-chart/views/week-view.ts b/apps/web/core/components/gantt-chart/views/week-view.ts similarity index 100% rename from web/core/components/gantt-chart/views/week-view.ts rename to apps/web/core/components/gantt-chart/views/week-view.ts diff --git a/web/core/components/global/index.ts b/apps/web/core/components/global/index.ts similarity index 100% rename from web/core/components/global/index.ts rename to apps/web/core/components/global/index.ts diff --git a/web/core/components/global/product-updates/footer.tsx b/apps/web/core/components/global/product-updates/footer.tsx similarity index 100% rename from web/core/components/global/product-updates/footer.tsx rename to apps/web/core/components/global/product-updates/footer.tsx diff --git a/web/core/components/global/product-updates/index.ts b/apps/web/core/components/global/product-updates/index.ts similarity index 100% rename from web/core/components/global/product-updates/index.ts rename to apps/web/core/components/global/product-updates/index.ts diff --git a/web/core/components/global/product-updates/modal.tsx b/apps/web/core/components/global/product-updates/modal.tsx similarity index 100% rename from web/core/components/global/product-updates/modal.tsx rename to apps/web/core/components/global/product-updates/modal.tsx diff --git a/web/core/components/global/timezone-select.tsx b/apps/web/core/components/global/timezone-select.tsx similarity index 100% rename from web/core/components/global/timezone-select.tsx rename to apps/web/core/components/global/timezone-select.tsx diff --git a/web/core/components/home/home-dashboard-widgets.tsx b/apps/web/core/components/home/home-dashboard-widgets.tsx similarity index 100% rename from web/core/components/home/home-dashboard-widgets.tsx rename to apps/web/core/components/home/home-dashboard-widgets.tsx diff --git a/web/core/components/home/index.ts b/apps/web/core/components/home/index.ts similarity index 100% rename from web/core/components/home/index.ts rename to apps/web/core/components/home/index.ts diff --git a/web/core/components/home/root.tsx b/apps/web/core/components/home/root.tsx similarity index 100% rename from web/core/components/home/root.tsx rename to apps/web/core/components/home/root.tsx diff --git a/web/core/components/home/user-greetings.tsx b/apps/web/core/components/home/user-greetings.tsx similarity index 100% rename from web/core/components/home/user-greetings.tsx rename to apps/web/core/components/home/user-greetings.tsx diff --git a/web/core/components/home/widgets/empty-states/index.ts b/apps/web/core/components/home/widgets/empty-states/index.ts similarity index 100% rename from web/core/components/home/widgets/empty-states/index.ts rename to apps/web/core/components/home/widgets/empty-states/index.ts diff --git a/web/core/components/home/widgets/empty-states/links.tsx b/apps/web/core/components/home/widgets/empty-states/links.tsx similarity index 100% rename from web/core/components/home/widgets/empty-states/links.tsx rename to apps/web/core/components/home/widgets/empty-states/links.tsx diff --git a/web/core/components/home/widgets/empty-states/no-projects.tsx b/apps/web/core/components/home/widgets/empty-states/no-projects.tsx similarity index 100% rename from web/core/components/home/widgets/empty-states/no-projects.tsx rename to apps/web/core/components/home/widgets/empty-states/no-projects.tsx diff --git a/web/core/components/home/widgets/empty-states/recents.tsx b/apps/web/core/components/home/widgets/empty-states/recents.tsx similarity index 100% rename from web/core/components/home/widgets/empty-states/recents.tsx rename to apps/web/core/components/home/widgets/empty-states/recents.tsx diff --git a/web/core/components/home/widgets/empty-states/stickies.tsx b/apps/web/core/components/home/widgets/empty-states/stickies.tsx similarity index 100% rename from web/core/components/home/widgets/empty-states/stickies.tsx rename to apps/web/core/components/home/widgets/empty-states/stickies.tsx diff --git a/web/core/components/home/widgets/index.ts b/apps/web/core/components/home/widgets/index.ts similarity index 100% rename from web/core/components/home/widgets/index.ts rename to apps/web/core/components/home/widgets/index.ts diff --git a/web/core/components/home/widgets/links/action.tsx b/apps/web/core/components/home/widgets/links/action.tsx similarity index 100% rename from web/core/components/home/widgets/links/action.tsx rename to apps/web/core/components/home/widgets/links/action.tsx diff --git a/web/core/components/home/widgets/links/create-update-link-modal.tsx b/apps/web/core/components/home/widgets/links/create-update-link-modal.tsx similarity index 100% rename from web/core/components/home/widgets/links/create-update-link-modal.tsx rename to apps/web/core/components/home/widgets/links/create-update-link-modal.tsx diff --git a/web/core/components/home/widgets/links/index.ts b/apps/web/core/components/home/widgets/links/index.ts similarity index 100% rename from web/core/components/home/widgets/links/index.ts rename to apps/web/core/components/home/widgets/links/index.ts diff --git a/web/core/components/home/widgets/links/link-detail.tsx b/apps/web/core/components/home/widgets/links/link-detail.tsx similarity index 100% rename from web/core/components/home/widgets/links/link-detail.tsx rename to apps/web/core/components/home/widgets/links/link-detail.tsx diff --git a/web/core/components/home/widgets/links/links.tsx b/apps/web/core/components/home/widgets/links/links.tsx similarity index 100% rename from web/core/components/home/widgets/links/links.tsx rename to apps/web/core/components/home/widgets/links/links.tsx diff --git a/web/core/components/home/widgets/links/root.tsx b/apps/web/core/components/home/widgets/links/root.tsx similarity index 100% rename from web/core/components/home/widgets/links/root.tsx rename to apps/web/core/components/home/widgets/links/root.tsx diff --git a/web/core/components/home/widgets/links/use-links.tsx b/apps/web/core/components/home/widgets/links/use-links.tsx similarity index 100% rename from web/core/components/home/widgets/links/use-links.tsx rename to apps/web/core/components/home/widgets/links/use-links.tsx diff --git a/web/core/components/home/widgets/loaders/home-loader.tsx b/apps/web/core/components/home/widgets/loaders/home-loader.tsx similarity index 100% rename from web/core/components/home/widgets/loaders/home-loader.tsx rename to apps/web/core/components/home/widgets/loaders/home-loader.tsx diff --git a/web/core/components/home/widgets/loaders/index.ts b/apps/web/core/components/home/widgets/loaders/index.ts similarity index 100% rename from web/core/components/home/widgets/loaders/index.ts rename to apps/web/core/components/home/widgets/loaders/index.ts diff --git a/web/core/components/home/widgets/loaders/loader.tsx b/apps/web/core/components/home/widgets/loaders/loader.tsx similarity index 100% rename from web/core/components/home/widgets/loaders/loader.tsx rename to apps/web/core/components/home/widgets/loaders/loader.tsx diff --git a/web/core/components/home/widgets/loaders/quick-links.tsx b/apps/web/core/components/home/widgets/loaders/quick-links.tsx similarity index 100% rename from web/core/components/home/widgets/loaders/quick-links.tsx rename to apps/web/core/components/home/widgets/loaders/quick-links.tsx diff --git a/web/core/components/home/widgets/loaders/recent-activity.tsx b/apps/web/core/components/home/widgets/loaders/recent-activity.tsx similarity index 100% rename from web/core/components/home/widgets/loaders/recent-activity.tsx rename to apps/web/core/components/home/widgets/loaders/recent-activity.tsx diff --git a/web/core/components/home/widgets/manage/index.tsx b/apps/web/core/components/home/widgets/manage/index.tsx similarity index 100% rename from web/core/components/home/widgets/manage/index.tsx rename to apps/web/core/components/home/widgets/manage/index.tsx diff --git a/web/core/components/home/widgets/manage/widget-item-drag-handle.tsx b/apps/web/core/components/home/widgets/manage/widget-item-drag-handle.tsx similarity index 100% rename from web/core/components/home/widgets/manage/widget-item-drag-handle.tsx rename to apps/web/core/components/home/widgets/manage/widget-item-drag-handle.tsx diff --git a/web/core/components/home/widgets/manage/widget-item.tsx b/apps/web/core/components/home/widgets/manage/widget-item.tsx similarity index 100% rename from web/core/components/home/widgets/manage/widget-item.tsx rename to apps/web/core/components/home/widgets/manage/widget-item.tsx diff --git a/web/core/components/home/widgets/manage/widget-list.tsx b/apps/web/core/components/home/widgets/manage/widget-list.tsx similarity index 100% rename from web/core/components/home/widgets/manage/widget-list.tsx rename to apps/web/core/components/home/widgets/manage/widget-list.tsx diff --git a/web/core/components/home/widgets/manage/widget.helpers.ts b/apps/web/core/components/home/widgets/manage/widget.helpers.ts similarity index 100% rename from web/core/components/home/widgets/manage/widget.helpers.ts rename to apps/web/core/components/home/widgets/manage/widget.helpers.ts diff --git a/web/core/components/home/widgets/recents/filters.tsx b/apps/web/core/components/home/widgets/recents/filters.tsx similarity index 100% rename from web/core/components/home/widgets/recents/filters.tsx rename to apps/web/core/components/home/widgets/recents/filters.tsx diff --git a/web/core/components/home/widgets/recents/index.tsx b/apps/web/core/components/home/widgets/recents/index.tsx similarity index 100% rename from web/core/components/home/widgets/recents/index.tsx rename to apps/web/core/components/home/widgets/recents/index.tsx diff --git a/web/core/components/home/widgets/recents/issue.tsx b/apps/web/core/components/home/widgets/recents/issue.tsx similarity index 100% rename from web/core/components/home/widgets/recents/issue.tsx rename to apps/web/core/components/home/widgets/recents/issue.tsx diff --git a/web/core/components/home/widgets/recents/page.tsx b/apps/web/core/components/home/widgets/recents/page.tsx similarity index 100% rename from web/core/components/home/widgets/recents/page.tsx rename to apps/web/core/components/home/widgets/recents/page.tsx diff --git a/web/core/components/home/widgets/recents/project.tsx b/apps/web/core/components/home/widgets/recents/project.tsx similarity index 100% rename from web/core/components/home/widgets/recents/project.tsx rename to apps/web/core/components/home/widgets/recents/project.tsx diff --git a/web/core/components/icons/attachment/attachment-icon.tsx b/apps/web/core/components/icons/attachment/attachment-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/attachment-icon.tsx rename to apps/web/core/components/icons/attachment/attachment-icon.tsx diff --git a/web/core/components/icons/attachment/audio-file-icon.tsx b/apps/web/core/components/icons/attachment/audio-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/audio-file-icon.tsx rename to apps/web/core/components/icons/attachment/audio-file-icon.tsx diff --git a/web/core/components/icons/attachment/css-file-icon.tsx b/apps/web/core/components/icons/attachment/css-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/css-file-icon.tsx rename to apps/web/core/components/icons/attachment/css-file-icon.tsx diff --git a/web/core/components/icons/attachment/csv-file-icon.tsx b/apps/web/core/components/icons/attachment/csv-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/csv-file-icon.tsx rename to apps/web/core/components/icons/attachment/csv-file-icon.tsx diff --git a/web/core/components/icons/attachment/default-file-icon.tsx b/apps/web/core/components/icons/attachment/default-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/default-file-icon.tsx rename to apps/web/core/components/icons/attachment/default-file-icon.tsx diff --git a/web/core/components/icons/attachment/doc-file-icon.tsx b/apps/web/core/components/icons/attachment/doc-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/doc-file-icon.tsx rename to apps/web/core/components/icons/attachment/doc-file-icon.tsx diff --git a/web/core/components/icons/attachment/document-icon.tsx b/apps/web/core/components/icons/attachment/document-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/document-icon.tsx rename to apps/web/core/components/icons/attachment/document-icon.tsx diff --git a/web/core/components/icons/attachment/figma-file-icon.tsx b/apps/web/core/components/icons/attachment/figma-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/figma-file-icon.tsx rename to apps/web/core/components/icons/attachment/figma-file-icon.tsx diff --git a/web/core/components/icons/attachment/html-file-icon.tsx b/apps/web/core/components/icons/attachment/html-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/html-file-icon.tsx rename to apps/web/core/components/icons/attachment/html-file-icon.tsx diff --git a/web/core/components/icons/attachment/img-file-icon.tsx b/apps/web/core/components/icons/attachment/img-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/img-file-icon.tsx rename to apps/web/core/components/icons/attachment/img-file-icon.tsx diff --git a/web/core/components/icons/attachment/index.ts b/apps/web/core/components/icons/attachment/index.ts similarity index 100% rename from web/core/components/icons/attachment/index.ts rename to apps/web/core/components/icons/attachment/index.ts diff --git a/web/core/components/icons/attachment/jpg-file-icon.tsx b/apps/web/core/components/icons/attachment/jpg-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/jpg-file-icon.tsx rename to apps/web/core/components/icons/attachment/jpg-file-icon.tsx diff --git a/web/core/components/icons/attachment/js-file-icon.tsx b/apps/web/core/components/icons/attachment/js-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/js-file-icon.tsx rename to apps/web/core/components/icons/attachment/js-file-icon.tsx diff --git a/web/core/components/icons/attachment/pdf-file-icon.tsx b/apps/web/core/components/icons/attachment/pdf-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/pdf-file-icon.tsx rename to apps/web/core/components/icons/attachment/pdf-file-icon.tsx diff --git a/web/core/components/icons/attachment/png-file-icon.tsx b/apps/web/core/components/icons/attachment/png-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/png-file-icon.tsx rename to apps/web/core/components/icons/attachment/png-file-icon.tsx diff --git a/web/core/components/icons/attachment/rar-file-icon.tsx b/apps/web/core/components/icons/attachment/rar-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/rar-file-icon.tsx rename to apps/web/core/components/icons/attachment/rar-file-icon.tsx diff --git a/web/core/components/icons/attachment/setting-icon.tsx b/apps/web/core/components/icons/attachment/setting-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/setting-icon.tsx rename to apps/web/core/components/icons/attachment/setting-icon.tsx diff --git a/web/core/components/icons/attachment/sheet-file-icon.tsx b/apps/web/core/components/icons/attachment/sheet-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/sheet-file-icon.tsx rename to apps/web/core/components/icons/attachment/sheet-file-icon.tsx diff --git a/web/core/components/icons/attachment/svg-file-icon.tsx b/apps/web/core/components/icons/attachment/svg-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/svg-file-icon.tsx rename to apps/web/core/components/icons/attachment/svg-file-icon.tsx diff --git a/web/core/components/icons/attachment/tune-icon.tsx b/apps/web/core/components/icons/attachment/tune-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/tune-icon.tsx rename to apps/web/core/components/icons/attachment/tune-icon.tsx diff --git a/web/core/components/icons/attachment/txt-file-icon.tsx b/apps/web/core/components/icons/attachment/txt-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/txt-file-icon.tsx rename to apps/web/core/components/icons/attachment/txt-file-icon.tsx diff --git a/web/core/components/icons/attachment/video-file-icon.tsx b/apps/web/core/components/icons/attachment/video-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/video-file-icon.tsx rename to apps/web/core/components/icons/attachment/video-file-icon.tsx diff --git a/web/core/components/icons/attachment/zip-file-icon.tsx b/apps/web/core/components/icons/attachment/zip-file-icon.tsx similarity index 100% rename from web/core/components/icons/attachment/zip-file-icon.tsx rename to apps/web/core/components/icons/attachment/zip-file-icon.tsx diff --git a/web/core/components/icons/index.ts b/apps/web/core/components/icons/index.ts similarity index 100% rename from web/core/components/icons/index.ts rename to apps/web/core/components/icons/index.ts diff --git a/web/core/components/icons/locked-component.tsx b/apps/web/core/components/icons/locked-component.tsx similarity index 100% rename from web/core/components/icons/locked-component.tsx rename to apps/web/core/components/icons/locked-component.tsx diff --git a/web/core/components/icons/types.d.ts b/apps/web/core/components/icons/types.d.ts similarity index 100% rename from web/core/components/icons/types.d.ts rename to apps/web/core/components/icons/types.d.ts diff --git a/web/core/components/inbox/content/inbox-issue-header.tsx b/apps/web/core/components/inbox/content/inbox-issue-header.tsx similarity index 100% rename from web/core/components/inbox/content/inbox-issue-header.tsx rename to apps/web/core/components/inbox/content/inbox-issue-header.tsx diff --git a/web/core/components/inbox/content/inbox-issue-mobile-header.tsx b/apps/web/core/components/inbox/content/inbox-issue-mobile-header.tsx similarity index 100% rename from web/core/components/inbox/content/inbox-issue-mobile-header.tsx rename to apps/web/core/components/inbox/content/inbox-issue-mobile-header.tsx diff --git a/web/core/components/inbox/content/index.ts b/apps/web/core/components/inbox/content/index.ts similarity index 100% rename from web/core/components/inbox/content/index.ts rename to apps/web/core/components/inbox/content/index.ts diff --git a/web/core/components/inbox/content/issue-properties.tsx b/apps/web/core/components/inbox/content/issue-properties.tsx similarity index 100% rename from web/core/components/inbox/content/issue-properties.tsx rename to apps/web/core/components/inbox/content/issue-properties.tsx diff --git a/web/core/components/inbox/content/issue-root.tsx b/apps/web/core/components/inbox/content/issue-root.tsx similarity index 100% rename from web/core/components/inbox/content/issue-root.tsx rename to apps/web/core/components/inbox/content/issue-root.tsx diff --git a/web/core/components/inbox/content/root.tsx b/apps/web/core/components/inbox/content/root.tsx similarity index 100% rename from web/core/components/inbox/content/root.tsx rename to apps/web/core/components/inbox/content/root.tsx diff --git a/web/core/components/inbox/inbox-filter/applied-filters/date.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/applied-filters/date.tsx rename to apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx diff --git a/web/core/components/inbox/inbox-filter/applied-filters/index.ts b/apps/web/core/components/inbox/inbox-filter/applied-filters/index.ts similarity index 100% rename from web/core/components/inbox/inbox-filter/applied-filters/index.ts rename to apps/web/core/components/inbox/inbox-filter/applied-filters/index.ts diff --git a/web/core/components/inbox/inbox-filter/applied-filters/label.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/label.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/applied-filters/label.tsx rename to apps/web/core/components/inbox/inbox-filter/applied-filters/label.tsx diff --git a/web/core/components/inbox/inbox-filter/applied-filters/member.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/member.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/applied-filters/member.tsx rename to apps/web/core/components/inbox/inbox-filter/applied-filters/member.tsx diff --git a/web/core/components/inbox/inbox-filter/applied-filters/priority.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/priority.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/applied-filters/priority.tsx rename to apps/web/core/components/inbox/inbox-filter/applied-filters/priority.tsx diff --git a/web/core/components/inbox/inbox-filter/applied-filters/root.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/root.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/applied-filters/root.tsx rename to apps/web/core/components/inbox/inbox-filter/applied-filters/root.tsx diff --git a/web/core/components/inbox/inbox-filter/applied-filters/state.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/state.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/applied-filters/state.tsx rename to apps/web/core/components/inbox/inbox-filter/applied-filters/state.tsx diff --git a/web/core/components/inbox/inbox-filter/applied-filters/status.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/status.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/applied-filters/status.tsx rename to apps/web/core/components/inbox/inbox-filter/applied-filters/status.tsx diff --git a/web/core/components/inbox/inbox-filter/filters/date.tsx b/apps/web/core/components/inbox/inbox-filter/filters/date.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/filters/date.tsx rename to apps/web/core/components/inbox/inbox-filter/filters/date.tsx diff --git a/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx b/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/filters/filter-selection.tsx rename to apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx diff --git a/web/core/components/inbox/inbox-filter/filters/index.ts b/apps/web/core/components/inbox/inbox-filter/filters/index.ts similarity index 100% rename from web/core/components/inbox/inbox-filter/filters/index.ts rename to apps/web/core/components/inbox/inbox-filter/filters/index.ts diff --git a/web/core/components/inbox/inbox-filter/filters/labels.tsx b/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/filters/labels.tsx rename to apps/web/core/components/inbox/inbox-filter/filters/labels.tsx diff --git a/web/core/components/inbox/inbox-filter/filters/members.tsx b/apps/web/core/components/inbox/inbox-filter/filters/members.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/filters/members.tsx rename to apps/web/core/components/inbox/inbox-filter/filters/members.tsx diff --git a/web/core/components/inbox/inbox-filter/filters/priority.tsx b/apps/web/core/components/inbox/inbox-filter/filters/priority.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/filters/priority.tsx rename to apps/web/core/components/inbox/inbox-filter/filters/priority.tsx diff --git a/web/core/components/inbox/inbox-filter/filters/state.tsx b/apps/web/core/components/inbox/inbox-filter/filters/state.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/filters/state.tsx rename to apps/web/core/components/inbox/inbox-filter/filters/state.tsx diff --git a/web/core/components/inbox/inbox-filter/filters/status.tsx b/apps/web/core/components/inbox/inbox-filter/filters/status.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/filters/status.tsx rename to apps/web/core/components/inbox/inbox-filter/filters/status.tsx diff --git a/web/core/components/inbox/inbox-filter/index.ts b/apps/web/core/components/inbox/inbox-filter/index.ts similarity index 100% rename from web/core/components/inbox/inbox-filter/index.ts rename to apps/web/core/components/inbox/inbox-filter/index.ts diff --git a/web/core/components/inbox/inbox-filter/root.tsx b/apps/web/core/components/inbox/inbox-filter/root.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/root.tsx rename to apps/web/core/components/inbox/inbox-filter/root.tsx diff --git a/web/core/components/inbox/inbox-filter/sorting/index.ts b/apps/web/core/components/inbox/inbox-filter/sorting/index.ts similarity index 100% rename from web/core/components/inbox/inbox-filter/sorting/index.ts rename to apps/web/core/components/inbox/inbox-filter/sorting/index.ts diff --git a/web/core/components/inbox/inbox-filter/sorting/order-by.tsx b/apps/web/core/components/inbox/inbox-filter/sorting/order-by.tsx similarity index 100% rename from web/core/components/inbox/inbox-filter/sorting/order-by.tsx rename to apps/web/core/components/inbox/inbox-filter/sorting/order-by.tsx diff --git a/web/core/components/inbox/inbox-issue-status.tsx b/apps/web/core/components/inbox/inbox-issue-status.tsx similarity index 100% rename from web/core/components/inbox/inbox-issue-status.tsx rename to apps/web/core/components/inbox/inbox-issue-status.tsx diff --git a/web/core/components/inbox/inbox-status-icon.tsx b/apps/web/core/components/inbox/inbox-status-icon.tsx similarity index 100% rename from web/core/components/inbox/inbox-status-icon.tsx rename to apps/web/core/components/inbox/inbox-status-icon.tsx diff --git a/web/core/components/inbox/index.ts b/apps/web/core/components/inbox/index.ts similarity index 100% rename from web/core/components/inbox/index.ts rename to apps/web/core/components/inbox/index.ts diff --git a/web/core/components/inbox/modals/create-modal/create-root.tsx b/apps/web/core/components/inbox/modals/create-modal/create-root.tsx similarity index 100% rename from web/core/components/inbox/modals/create-modal/create-root.tsx rename to apps/web/core/components/inbox/modals/create-modal/create-root.tsx diff --git a/web/core/components/inbox/modals/create-modal/index.ts b/apps/web/core/components/inbox/modals/create-modal/index.ts similarity index 100% rename from web/core/components/inbox/modals/create-modal/index.ts rename to apps/web/core/components/inbox/modals/create-modal/index.ts diff --git a/web/core/components/inbox/modals/create-modal/issue-description.tsx b/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx similarity index 100% rename from web/core/components/inbox/modals/create-modal/issue-description.tsx rename to apps/web/core/components/inbox/modals/create-modal/issue-description.tsx diff --git a/web/core/components/inbox/modals/create-modal/issue-properties.tsx b/apps/web/core/components/inbox/modals/create-modal/issue-properties.tsx similarity index 100% rename from web/core/components/inbox/modals/create-modal/issue-properties.tsx rename to apps/web/core/components/inbox/modals/create-modal/issue-properties.tsx diff --git a/web/core/components/inbox/modals/create-modal/issue-title.tsx b/apps/web/core/components/inbox/modals/create-modal/issue-title.tsx similarity index 100% rename from web/core/components/inbox/modals/create-modal/issue-title.tsx rename to apps/web/core/components/inbox/modals/create-modal/issue-title.tsx diff --git a/web/core/components/inbox/modals/create-modal/modal.tsx b/apps/web/core/components/inbox/modals/create-modal/modal.tsx similarity index 100% rename from web/core/components/inbox/modals/create-modal/modal.tsx rename to apps/web/core/components/inbox/modals/create-modal/modal.tsx diff --git a/web/core/components/inbox/modals/decline-issue-modal.tsx b/apps/web/core/components/inbox/modals/decline-issue-modal.tsx similarity index 100% rename from web/core/components/inbox/modals/decline-issue-modal.tsx rename to apps/web/core/components/inbox/modals/decline-issue-modal.tsx diff --git a/web/core/components/inbox/modals/delete-issue-modal.tsx b/apps/web/core/components/inbox/modals/delete-issue-modal.tsx similarity index 100% rename from web/core/components/inbox/modals/delete-issue-modal.tsx rename to apps/web/core/components/inbox/modals/delete-issue-modal.tsx diff --git a/web/core/components/inbox/modals/index.ts b/apps/web/core/components/inbox/modals/index.ts similarity index 100% rename from web/core/components/inbox/modals/index.ts rename to apps/web/core/components/inbox/modals/index.ts diff --git a/web/core/components/inbox/modals/select-duplicate.tsx b/apps/web/core/components/inbox/modals/select-duplicate.tsx similarity index 100% rename from web/core/components/inbox/modals/select-duplicate.tsx rename to apps/web/core/components/inbox/modals/select-duplicate.tsx diff --git a/web/core/components/inbox/modals/snooze-issue-modal.tsx b/apps/web/core/components/inbox/modals/snooze-issue-modal.tsx similarity index 100% rename from web/core/components/inbox/modals/snooze-issue-modal.tsx rename to apps/web/core/components/inbox/modals/snooze-issue-modal.tsx diff --git a/web/core/components/inbox/root.tsx b/apps/web/core/components/inbox/root.tsx similarity index 100% rename from web/core/components/inbox/root.tsx rename to apps/web/core/components/inbox/root.tsx diff --git a/web/core/components/inbox/sidebar/inbox-list-item.tsx b/apps/web/core/components/inbox/sidebar/inbox-list-item.tsx similarity index 100% rename from web/core/components/inbox/sidebar/inbox-list-item.tsx rename to apps/web/core/components/inbox/sidebar/inbox-list-item.tsx diff --git a/web/core/components/inbox/sidebar/inbox-list.tsx b/apps/web/core/components/inbox/sidebar/inbox-list.tsx similarity index 100% rename from web/core/components/inbox/sidebar/inbox-list.tsx rename to apps/web/core/components/inbox/sidebar/inbox-list.tsx diff --git a/web/core/components/inbox/sidebar/index.ts b/apps/web/core/components/inbox/sidebar/index.ts similarity index 100% rename from web/core/components/inbox/sidebar/index.ts rename to apps/web/core/components/inbox/sidebar/index.ts diff --git a/web/core/components/inbox/sidebar/root.tsx b/apps/web/core/components/inbox/sidebar/root.tsx similarity index 100% rename from web/core/components/inbox/sidebar/root.tsx rename to apps/web/core/components/inbox/sidebar/root.tsx diff --git a/web/core/components/instance/index.ts b/apps/web/core/components/instance/index.ts similarity index 100% rename from web/core/components/instance/index.ts rename to apps/web/core/components/instance/index.ts diff --git a/web/core/components/instance/maintenance-view.tsx b/apps/web/core/components/instance/maintenance-view.tsx similarity index 100% rename from web/core/components/instance/maintenance-view.tsx rename to apps/web/core/components/instance/maintenance-view.tsx diff --git a/web/core/components/instance/not-ready-view.tsx b/apps/web/core/components/instance/not-ready-view.tsx similarity index 100% rename from web/core/components/instance/not-ready-view.tsx rename to apps/web/core/components/instance/not-ready-view.tsx diff --git a/web/core/components/integration/delete-import-modal.tsx b/apps/web/core/components/integration/delete-import-modal.tsx similarity index 100% rename from web/core/components/integration/delete-import-modal.tsx rename to apps/web/core/components/integration/delete-import-modal.tsx diff --git a/web/core/components/integration/github/auth.tsx b/apps/web/core/components/integration/github/auth.tsx similarity index 100% rename from web/core/components/integration/github/auth.tsx rename to apps/web/core/components/integration/github/auth.tsx diff --git a/web/core/components/integration/github/import-configure.tsx b/apps/web/core/components/integration/github/import-configure.tsx similarity index 100% rename from web/core/components/integration/github/import-configure.tsx rename to apps/web/core/components/integration/github/import-configure.tsx diff --git a/web/core/components/integration/github/import-confirm.tsx b/apps/web/core/components/integration/github/import-confirm.tsx similarity index 100% rename from web/core/components/integration/github/import-confirm.tsx rename to apps/web/core/components/integration/github/import-confirm.tsx diff --git a/web/core/components/integration/github/import-data.tsx b/apps/web/core/components/integration/github/import-data.tsx similarity index 100% rename from web/core/components/integration/github/import-data.tsx rename to apps/web/core/components/integration/github/import-data.tsx diff --git a/web/core/components/integration/github/import-users.tsx b/apps/web/core/components/integration/github/import-users.tsx similarity index 100% rename from web/core/components/integration/github/import-users.tsx rename to apps/web/core/components/integration/github/import-users.tsx diff --git a/web/core/components/integration/github/index.ts b/apps/web/core/components/integration/github/index.ts similarity index 100% rename from web/core/components/integration/github/index.ts rename to apps/web/core/components/integration/github/index.ts diff --git a/web/core/components/integration/github/repo-details.tsx b/apps/web/core/components/integration/github/repo-details.tsx similarity index 100% rename from web/core/components/integration/github/repo-details.tsx rename to apps/web/core/components/integration/github/repo-details.tsx diff --git a/web/core/components/integration/github/root.tsx b/apps/web/core/components/integration/github/root.tsx similarity index 100% rename from web/core/components/integration/github/root.tsx rename to apps/web/core/components/integration/github/root.tsx diff --git a/web/core/components/integration/github/select-repository.tsx b/apps/web/core/components/integration/github/select-repository.tsx similarity index 100% rename from web/core/components/integration/github/select-repository.tsx rename to apps/web/core/components/integration/github/select-repository.tsx diff --git a/web/core/components/integration/github/single-user-select.tsx b/apps/web/core/components/integration/github/single-user-select.tsx similarity index 100% rename from web/core/components/integration/github/single-user-select.tsx rename to apps/web/core/components/integration/github/single-user-select.tsx diff --git a/web/core/components/integration/guide.tsx b/apps/web/core/components/integration/guide.tsx similarity index 100% rename from web/core/components/integration/guide.tsx rename to apps/web/core/components/integration/guide.tsx diff --git a/web/core/components/integration/index.ts b/apps/web/core/components/integration/index.ts similarity index 100% rename from web/core/components/integration/index.ts rename to apps/web/core/components/integration/index.ts diff --git a/web/core/components/integration/jira/confirm-import.tsx b/apps/web/core/components/integration/jira/confirm-import.tsx similarity index 100% rename from web/core/components/integration/jira/confirm-import.tsx rename to apps/web/core/components/integration/jira/confirm-import.tsx diff --git a/web/core/components/integration/jira/give-details.tsx b/apps/web/core/components/integration/jira/give-details.tsx similarity index 100% rename from web/core/components/integration/jira/give-details.tsx rename to apps/web/core/components/integration/jira/give-details.tsx diff --git a/web/core/components/integration/jira/import-users.tsx b/apps/web/core/components/integration/jira/import-users.tsx similarity index 100% rename from web/core/components/integration/jira/import-users.tsx rename to apps/web/core/components/integration/jira/import-users.tsx diff --git a/web/core/components/integration/jira/index.ts b/apps/web/core/components/integration/jira/index.ts similarity index 100% rename from web/core/components/integration/jira/index.ts rename to apps/web/core/components/integration/jira/index.ts diff --git a/web/core/components/integration/jira/jira-project-detail.tsx b/apps/web/core/components/integration/jira/jira-project-detail.tsx similarity index 100% rename from web/core/components/integration/jira/jira-project-detail.tsx rename to apps/web/core/components/integration/jira/jira-project-detail.tsx diff --git a/web/core/components/integration/jira/root.tsx b/apps/web/core/components/integration/jira/root.tsx similarity index 100% rename from web/core/components/integration/jira/root.tsx rename to apps/web/core/components/integration/jira/root.tsx diff --git a/web/core/components/integration/single-import.tsx b/apps/web/core/components/integration/single-import.tsx similarity index 100% rename from web/core/components/integration/single-import.tsx rename to apps/web/core/components/integration/single-import.tsx diff --git a/web/core/components/integration/single-integration-card.tsx b/apps/web/core/components/integration/single-integration-card.tsx similarity index 100% rename from web/core/components/integration/single-integration-card.tsx rename to apps/web/core/components/integration/single-integration-card.tsx diff --git a/web/core/components/integration/slack/index.ts b/apps/web/core/components/integration/slack/index.ts similarity index 100% rename from web/core/components/integration/slack/index.ts rename to apps/web/core/components/integration/slack/index.ts diff --git a/web/core/components/integration/slack/select-channel.tsx b/apps/web/core/components/integration/slack/select-channel.tsx similarity index 100% rename from web/core/components/integration/slack/select-channel.tsx rename to apps/web/core/components/integration/slack/select-channel.tsx diff --git a/web/core/components/issues/archive-issue-modal.tsx b/apps/web/core/components/issues/archive-issue-modal.tsx similarity index 100% rename from web/core/components/issues/archive-issue-modal.tsx rename to apps/web/core/components/issues/archive-issue-modal.tsx diff --git a/web/core/components/issues/archived-issues-header.tsx b/apps/web/core/components/issues/archived-issues-header.tsx similarity index 100% rename from web/core/components/issues/archived-issues-header.tsx rename to apps/web/core/components/issues/archived-issues-header.tsx diff --git a/web/core/components/issues/attachment/attachment-detail.tsx b/apps/web/core/components/issues/attachment/attachment-detail.tsx similarity index 100% rename from web/core/components/issues/attachment/attachment-detail.tsx rename to apps/web/core/components/issues/attachment/attachment-detail.tsx diff --git a/web/core/components/issues/attachment/attachment-item-list.tsx b/apps/web/core/components/issues/attachment/attachment-item-list.tsx similarity index 100% rename from web/core/components/issues/attachment/attachment-item-list.tsx rename to apps/web/core/components/issues/attachment/attachment-item-list.tsx diff --git a/web/core/components/issues/attachment/attachment-list-item.tsx b/apps/web/core/components/issues/attachment/attachment-list-item.tsx similarity index 100% rename from web/core/components/issues/attachment/attachment-list-item.tsx rename to apps/web/core/components/issues/attachment/attachment-list-item.tsx diff --git a/web/core/components/issues/attachment/attachment-list-upload-item.tsx b/apps/web/core/components/issues/attachment/attachment-list-upload-item.tsx similarity index 100% rename from web/core/components/issues/attachment/attachment-list-upload-item.tsx rename to apps/web/core/components/issues/attachment/attachment-list-upload-item.tsx diff --git a/web/core/components/issues/attachment/attachment-upload-details.tsx b/apps/web/core/components/issues/attachment/attachment-upload-details.tsx similarity index 100% rename from web/core/components/issues/attachment/attachment-upload-details.tsx rename to apps/web/core/components/issues/attachment/attachment-upload-details.tsx diff --git a/web/core/components/issues/attachment/attachment-upload.tsx b/apps/web/core/components/issues/attachment/attachment-upload.tsx similarity index 100% rename from web/core/components/issues/attachment/attachment-upload.tsx rename to apps/web/core/components/issues/attachment/attachment-upload.tsx diff --git a/web/core/components/issues/attachment/attachments-list.tsx b/apps/web/core/components/issues/attachment/attachments-list.tsx similarity index 100% rename from web/core/components/issues/attachment/attachments-list.tsx rename to apps/web/core/components/issues/attachment/attachments-list.tsx diff --git a/web/core/components/issues/attachment/delete-attachment-modal.tsx b/apps/web/core/components/issues/attachment/delete-attachment-modal.tsx similarity index 100% rename from web/core/components/issues/attachment/delete-attachment-modal.tsx rename to apps/web/core/components/issues/attachment/delete-attachment-modal.tsx diff --git a/web/core/components/issues/attachment/index.ts b/apps/web/core/components/issues/attachment/index.ts similarity index 100% rename from web/core/components/issues/attachment/index.ts rename to apps/web/core/components/issues/attachment/index.ts diff --git a/web/core/components/issues/attachment/root.tsx b/apps/web/core/components/issues/attachment/root.tsx similarity index 100% rename from web/core/components/issues/attachment/root.tsx rename to apps/web/core/components/issues/attachment/root.tsx diff --git a/web/core/components/issues/bulk-operations/index.ts b/apps/web/core/components/issues/bulk-operations/index.ts similarity index 100% rename from web/core/components/issues/bulk-operations/index.ts rename to apps/web/core/components/issues/bulk-operations/index.ts diff --git a/web/core/components/issues/bulk-operations/upgrade-banner.tsx b/apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx similarity index 100% rename from web/core/components/issues/bulk-operations/upgrade-banner.tsx rename to apps/web/core/components/issues/bulk-operations/upgrade-banner.tsx diff --git a/web/core/components/issues/confirm-issue-discard.tsx b/apps/web/core/components/issues/confirm-issue-discard.tsx similarity index 100% rename from web/core/components/issues/confirm-issue-discard.tsx rename to apps/web/core/components/issues/confirm-issue-discard.tsx diff --git a/web/core/components/issues/create-issue-toast-action-items.tsx b/apps/web/core/components/issues/create-issue-toast-action-items.tsx similarity index 100% rename from web/core/components/issues/create-issue-toast-action-items.tsx rename to apps/web/core/components/issues/create-issue-toast-action-items.tsx diff --git a/web/core/components/issues/delete-issue-modal.tsx b/apps/web/core/components/issues/delete-issue-modal.tsx similarity index 100% rename from web/core/components/issues/delete-issue-modal.tsx rename to apps/web/core/components/issues/delete-issue-modal.tsx diff --git a/web/core/components/issues/description-input.tsx b/apps/web/core/components/issues/description-input.tsx similarity index 100% rename from web/core/components/issues/description-input.tsx rename to apps/web/core/components/issues/description-input.tsx diff --git a/web/core/components/issues/filters.tsx b/apps/web/core/components/issues/filters.tsx similarity index 100% rename from web/core/components/issues/filters.tsx rename to apps/web/core/components/issues/filters.tsx diff --git a/web/core/components/issues/index.ts b/apps/web/core/components/issues/index.ts similarity index 100% rename from web/core/components/issues/index.ts rename to apps/web/core/components/issues/index.ts diff --git a/web/core/components/issues/issue-detail-widgets/action-buttons.tsx b/apps/web/core/components/issues/issue-detail-widgets/action-buttons.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/action-buttons.tsx rename to apps/web/core/components/issues/issue-detail-widgets/action-buttons.tsx diff --git a/web/core/components/issues/issue-detail-widgets/attachments/content.tsx b/apps/web/core/components/issues/issue-detail-widgets/attachments/content.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/attachments/content.tsx rename to apps/web/core/components/issues/issue-detail-widgets/attachments/content.tsx diff --git a/web/core/components/issues/issue-detail-widgets/attachments/helper.tsx b/apps/web/core/components/issues/issue-detail-widgets/attachments/helper.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/attachments/helper.tsx rename to apps/web/core/components/issues/issue-detail-widgets/attachments/helper.tsx diff --git a/web/core/components/issues/issue-detail-widgets/attachments/index.ts b/apps/web/core/components/issues/issue-detail-widgets/attachments/index.ts similarity index 100% rename from web/core/components/issues/issue-detail-widgets/attachments/index.ts rename to apps/web/core/components/issues/issue-detail-widgets/attachments/index.ts diff --git a/web/core/components/issues/issue-detail-widgets/attachments/quick-action-button.tsx b/apps/web/core/components/issues/issue-detail-widgets/attachments/quick-action-button.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/attachments/quick-action-button.tsx rename to apps/web/core/components/issues/issue-detail-widgets/attachments/quick-action-button.tsx diff --git a/web/core/components/issues/issue-detail-widgets/attachments/root.tsx b/apps/web/core/components/issues/issue-detail-widgets/attachments/root.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/attachments/root.tsx rename to apps/web/core/components/issues/issue-detail-widgets/attachments/root.tsx diff --git a/web/core/components/issues/issue-detail-widgets/attachments/title.tsx b/apps/web/core/components/issues/issue-detail-widgets/attachments/title.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/attachments/title.tsx rename to apps/web/core/components/issues/issue-detail-widgets/attachments/title.tsx diff --git a/web/core/components/issues/issue-detail-widgets/index.ts b/apps/web/core/components/issues/issue-detail-widgets/index.ts similarity index 100% rename from web/core/components/issues/issue-detail-widgets/index.ts rename to apps/web/core/components/issues/issue-detail-widgets/index.ts diff --git a/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx b/apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx rename to apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx diff --git a/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx b/apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx rename to apps/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx diff --git a/web/core/components/issues/issue-detail-widgets/links/content.tsx b/apps/web/core/components/issues/issue-detail-widgets/links/content.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/links/content.tsx rename to apps/web/core/components/issues/issue-detail-widgets/links/content.tsx diff --git a/web/core/components/issues/issue-detail-widgets/links/helper.tsx b/apps/web/core/components/issues/issue-detail-widgets/links/helper.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/links/helper.tsx rename to apps/web/core/components/issues/issue-detail-widgets/links/helper.tsx diff --git a/web/core/components/issues/issue-detail-widgets/links/index.ts b/apps/web/core/components/issues/issue-detail-widgets/links/index.ts similarity index 100% rename from web/core/components/issues/issue-detail-widgets/links/index.ts rename to apps/web/core/components/issues/issue-detail-widgets/links/index.ts diff --git a/web/core/components/issues/issue-detail-widgets/links/quick-action-button.tsx b/apps/web/core/components/issues/issue-detail-widgets/links/quick-action-button.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/links/quick-action-button.tsx rename to apps/web/core/components/issues/issue-detail-widgets/links/quick-action-button.tsx diff --git a/web/core/components/issues/issue-detail-widgets/links/root.tsx b/apps/web/core/components/issues/issue-detail-widgets/links/root.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/links/root.tsx rename to apps/web/core/components/issues/issue-detail-widgets/links/root.tsx diff --git a/web/core/components/issues/issue-detail-widgets/links/title.tsx b/apps/web/core/components/issues/issue-detail-widgets/links/title.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/links/title.tsx rename to apps/web/core/components/issues/issue-detail-widgets/links/title.tsx diff --git a/web/core/components/issues/issue-detail-widgets/relations/content.tsx b/apps/web/core/components/issues/issue-detail-widgets/relations/content.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/relations/content.tsx rename to apps/web/core/components/issues/issue-detail-widgets/relations/content.tsx diff --git a/web/core/components/issues/issue-detail-widgets/relations/helper.tsx b/apps/web/core/components/issues/issue-detail-widgets/relations/helper.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/relations/helper.tsx rename to apps/web/core/components/issues/issue-detail-widgets/relations/helper.tsx diff --git a/web/core/components/issues/issue-detail-widgets/relations/index.ts b/apps/web/core/components/issues/issue-detail-widgets/relations/index.ts similarity index 100% rename from web/core/components/issues/issue-detail-widgets/relations/index.ts rename to apps/web/core/components/issues/issue-detail-widgets/relations/index.ts diff --git a/web/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsx b/apps/web/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsx rename to apps/web/core/components/issues/issue-detail-widgets/relations/quick-action-button.tsx diff --git a/web/core/components/issues/issue-detail-widgets/relations/root.tsx b/apps/web/core/components/issues/issue-detail-widgets/relations/root.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/relations/root.tsx rename to apps/web/core/components/issues/issue-detail-widgets/relations/root.tsx diff --git a/web/core/components/issues/issue-detail-widgets/relations/title.tsx b/apps/web/core/components/issues/issue-detail-widgets/relations/title.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/relations/title.tsx rename to apps/web/core/components/issues/issue-detail-widgets/relations/title.tsx diff --git a/web/core/components/issues/issue-detail-widgets/root.tsx b/apps/web/core/components/issues/issue-detail-widgets/root.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/root.tsx rename to apps/web/core/components/issues/issue-detail-widgets/root.tsx diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/content.tsx diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/display-filters.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/display-filters.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/display-filters.tsx rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/display-filters.tsx diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/filters.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/filters.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/filters.tsx rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/filters.tsx diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/helper.ts diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/index.ts b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/index.ts similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/index.ts rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/index.ts diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-group.tsx diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/list-item.tsx diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/root.tsx diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/quick-action-button.tsx diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/title-actions.tsx diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx b/apps/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx rename to apps/web/core/components/issues/issue-detail-widgets/sub-issues/title.tsx diff --git a/web/core/components/issues/issue-detail-widgets/widget-button.tsx b/apps/web/core/components/issues/issue-detail-widgets/widget-button.tsx similarity index 100% rename from web/core/components/issues/issue-detail-widgets/widget-button.tsx rename to apps/web/core/components/issues/issue-detail-widgets/widget-button.tsx diff --git a/web/core/components/issues/issue-detail/cycle-select.tsx b/apps/web/core/components/issues/issue-detail/cycle-select.tsx similarity index 100% rename from web/core/components/issues/issue-detail/cycle-select.tsx rename to apps/web/core/components/issues/issue-detail/cycle-select.tsx diff --git a/web/core/components/issues/issue-detail/index.ts b/apps/web/core/components/issues/issue-detail/index.ts similarity index 100% rename from web/core/components/issues/issue-detail/index.ts rename to apps/web/core/components/issues/issue-detail/index.ts diff --git a/web/core/components/issues/issue-detail/issue-activity/activity-comment-root.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity-comment-root.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity-comment-root.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity-comment-root.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity-filter.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity-filter.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity-filter.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity-filter.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/archived-at.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/archived-at.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/archived-at.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/archived-at.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/assignee.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/assignee.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/assignee.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/assignee.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/attachment.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/attachment.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/attachment.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/attachment.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/cycle.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/cycle.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/cycle.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/cycle.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/default.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/default.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/default.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/default.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/description.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/description.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/description.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/description.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/estimate.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/estimate.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/estimate.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/estimate.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-link.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-link.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-link.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-link.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-user.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-user.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-user.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-user.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/inbox.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/inbox.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/inbox.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/inbox.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/index.ts b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/index.ts similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/index.ts rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/index.ts diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/label-activity-chip.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/label-activity-chip.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/label-activity-chip.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/label-activity-chip.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/label.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/label.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/label.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/label.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/link.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/link.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/link.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/link.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/module.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/module.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/module.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/module.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/name.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/name.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/name.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/name.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/parent.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/parent.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/parent.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/parent.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/priority.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/priority.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/priority.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/priority.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/relation.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/relation.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/relation.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/relation.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/start_date.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/start_date.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/start_date.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/start_date.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/state.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/state.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/state.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/state.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/activity/activity-list.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/activity/activity-list.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/activity/activity-list.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/activity/activity-list.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/helper.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/helper.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/helper.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/helper.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/index.ts b/apps/web/core/components/issues/issue-detail/issue-activity/index.ts similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/index.ts rename to apps/web/core/components/issues/issue-detail/issue-activity/index.ts diff --git a/web/core/components/issues/issue-detail/issue-activity/root.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/root.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/root.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/root.tsx diff --git a/web/core/components/issues/issue-detail/issue-activity/sort-root.tsx b/apps/web/core/components/issues/issue-detail/issue-activity/sort-root.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-activity/sort-root.tsx rename to apps/web/core/components/issues/issue-detail/issue-activity/sort-root.tsx diff --git a/web/core/components/issues/issue-detail/issue-detail-quick-actions.tsx b/apps/web/core/components/issues/issue-detail/issue-detail-quick-actions.tsx similarity index 100% rename from web/core/components/issues/issue-detail/issue-detail-quick-actions.tsx rename to apps/web/core/components/issues/issue-detail/issue-detail-quick-actions.tsx diff --git a/web/core/components/issues/issue-detail/label/create-label.tsx b/apps/web/core/components/issues/issue-detail/label/create-label.tsx similarity index 100% rename from web/core/components/issues/issue-detail/label/create-label.tsx rename to apps/web/core/components/issues/issue-detail/label/create-label.tsx diff --git a/web/core/components/issues/issue-detail/label/index.ts b/apps/web/core/components/issues/issue-detail/label/index.ts similarity index 100% rename from web/core/components/issues/issue-detail/label/index.ts rename to apps/web/core/components/issues/issue-detail/label/index.ts diff --git a/web/core/components/issues/issue-detail/label/label-list-item.tsx b/apps/web/core/components/issues/issue-detail/label/label-list-item.tsx similarity index 100% rename from web/core/components/issues/issue-detail/label/label-list-item.tsx rename to apps/web/core/components/issues/issue-detail/label/label-list-item.tsx diff --git a/web/core/components/issues/issue-detail/label/label-list.tsx b/apps/web/core/components/issues/issue-detail/label/label-list.tsx similarity index 100% rename from web/core/components/issues/issue-detail/label/label-list.tsx rename to apps/web/core/components/issues/issue-detail/label/label-list.tsx diff --git a/web/core/components/issues/issue-detail/label/root.tsx b/apps/web/core/components/issues/issue-detail/label/root.tsx similarity index 100% rename from web/core/components/issues/issue-detail/label/root.tsx rename to apps/web/core/components/issues/issue-detail/label/root.tsx diff --git a/web/core/components/issues/issue-detail/label/select/label-select.tsx b/apps/web/core/components/issues/issue-detail/label/select/label-select.tsx similarity index 100% rename from web/core/components/issues/issue-detail/label/select/label-select.tsx rename to apps/web/core/components/issues/issue-detail/label/select/label-select.tsx diff --git a/web/core/components/issues/issue-detail/label/select/root.tsx b/apps/web/core/components/issues/issue-detail/label/select/root.tsx similarity index 100% rename from web/core/components/issues/issue-detail/label/select/root.tsx rename to apps/web/core/components/issues/issue-detail/label/select/root.tsx diff --git a/web/core/components/issues/issue-detail/links/create-update-link-modal.tsx b/apps/web/core/components/issues/issue-detail/links/create-update-link-modal.tsx similarity index 100% rename from web/core/components/issues/issue-detail/links/create-update-link-modal.tsx rename to apps/web/core/components/issues/issue-detail/links/create-update-link-modal.tsx diff --git a/web/core/components/issues/issue-detail/links/index.ts b/apps/web/core/components/issues/issue-detail/links/index.ts similarity index 100% rename from web/core/components/issues/issue-detail/links/index.ts rename to apps/web/core/components/issues/issue-detail/links/index.ts diff --git a/web/core/components/issues/issue-detail/links/link-detail.tsx b/apps/web/core/components/issues/issue-detail/links/link-detail.tsx similarity index 100% rename from web/core/components/issues/issue-detail/links/link-detail.tsx rename to apps/web/core/components/issues/issue-detail/links/link-detail.tsx diff --git a/web/core/components/issues/issue-detail/links/link-item.tsx b/apps/web/core/components/issues/issue-detail/links/link-item.tsx similarity index 100% rename from web/core/components/issues/issue-detail/links/link-item.tsx rename to apps/web/core/components/issues/issue-detail/links/link-item.tsx diff --git a/web/core/components/issues/issue-detail/links/link-list.tsx b/apps/web/core/components/issues/issue-detail/links/link-list.tsx similarity index 100% rename from web/core/components/issues/issue-detail/links/link-list.tsx rename to apps/web/core/components/issues/issue-detail/links/link-list.tsx diff --git a/web/core/components/issues/issue-detail/links/links.tsx b/apps/web/core/components/issues/issue-detail/links/links.tsx similarity index 100% rename from web/core/components/issues/issue-detail/links/links.tsx rename to apps/web/core/components/issues/issue-detail/links/links.tsx diff --git a/web/core/components/issues/issue-detail/links/root.tsx b/apps/web/core/components/issues/issue-detail/links/root.tsx similarity index 100% rename from web/core/components/issues/issue-detail/links/root.tsx rename to apps/web/core/components/issues/issue-detail/links/root.tsx diff --git a/web/core/components/issues/issue-detail/main-content.tsx b/apps/web/core/components/issues/issue-detail/main-content.tsx similarity index 100% rename from web/core/components/issues/issue-detail/main-content.tsx rename to apps/web/core/components/issues/issue-detail/main-content.tsx diff --git a/web/core/components/issues/issue-detail/module-select.tsx b/apps/web/core/components/issues/issue-detail/module-select.tsx similarity index 100% rename from web/core/components/issues/issue-detail/module-select.tsx rename to apps/web/core/components/issues/issue-detail/module-select.tsx diff --git a/web/core/components/issues/issue-detail/parent-select.tsx b/apps/web/core/components/issues/issue-detail/parent-select.tsx similarity index 100% rename from web/core/components/issues/issue-detail/parent-select.tsx rename to apps/web/core/components/issues/issue-detail/parent-select.tsx diff --git a/web/core/components/issues/issue-detail/parent/index.ts b/apps/web/core/components/issues/issue-detail/parent/index.ts similarity index 100% rename from web/core/components/issues/issue-detail/parent/index.ts rename to apps/web/core/components/issues/issue-detail/parent/index.ts diff --git a/web/core/components/issues/issue-detail/parent/root.tsx b/apps/web/core/components/issues/issue-detail/parent/root.tsx similarity index 100% rename from web/core/components/issues/issue-detail/parent/root.tsx rename to apps/web/core/components/issues/issue-detail/parent/root.tsx diff --git a/web/core/components/issues/issue-detail/parent/sibling-item.tsx b/apps/web/core/components/issues/issue-detail/parent/sibling-item.tsx similarity index 100% rename from web/core/components/issues/issue-detail/parent/sibling-item.tsx rename to apps/web/core/components/issues/issue-detail/parent/sibling-item.tsx diff --git a/web/core/components/issues/issue-detail/parent/siblings.tsx b/apps/web/core/components/issues/issue-detail/parent/siblings.tsx similarity index 100% rename from web/core/components/issues/issue-detail/parent/siblings.tsx rename to apps/web/core/components/issues/issue-detail/parent/siblings.tsx diff --git a/web/core/components/issues/issue-detail/reactions/index.ts b/apps/web/core/components/issues/issue-detail/reactions/index.ts similarity index 100% rename from web/core/components/issues/issue-detail/reactions/index.ts rename to apps/web/core/components/issues/issue-detail/reactions/index.ts diff --git a/web/core/components/issues/issue-detail/reactions/issue-comment.tsx b/apps/web/core/components/issues/issue-detail/reactions/issue-comment.tsx similarity index 100% rename from web/core/components/issues/issue-detail/reactions/issue-comment.tsx rename to apps/web/core/components/issues/issue-detail/reactions/issue-comment.tsx diff --git a/web/core/components/issues/issue-detail/reactions/issue.tsx b/apps/web/core/components/issues/issue-detail/reactions/issue.tsx similarity index 100% rename from web/core/components/issues/issue-detail/reactions/issue.tsx rename to apps/web/core/components/issues/issue-detail/reactions/issue.tsx diff --git a/web/core/components/issues/issue-detail/reactions/reaction-selector.tsx b/apps/web/core/components/issues/issue-detail/reactions/reaction-selector.tsx similarity index 100% rename from web/core/components/issues/issue-detail/reactions/reaction-selector.tsx rename to apps/web/core/components/issues/issue-detail/reactions/reaction-selector.tsx diff --git a/web/core/components/issues/issue-detail/relation-select.tsx b/apps/web/core/components/issues/issue-detail/relation-select.tsx similarity index 100% rename from web/core/components/issues/issue-detail/relation-select.tsx rename to apps/web/core/components/issues/issue-detail/relation-select.tsx diff --git a/web/core/components/issues/issue-detail/root.tsx b/apps/web/core/components/issues/issue-detail/root.tsx similarity index 100% rename from web/core/components/issues/issue-detail/root.tsx rename to apps/web/core/components/issues/issue-detail/root.tsx diff --git a/web/core/components/issues/issue-detail/sidebar.tsx b/apps/web/core/components/issues/issue-detail/sidebar.tsx similarity index 100% rename from web/core/components/issues/issue-detail/sidebar.tsx rename to apps/web/core/components/issues/issue-detail/sidebar.tsx diff --git a/web/core/components/issues/issue-detail/subscription.tsx b/apps/web/core/components/issues/issue-detail/subscription.tsx similarity index 100% rename from web/core/components/issues/issue-detail/subscription.tsx rename to apps/web/core/components/issues/issue-detail/subscription.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/base-calendar-root.tsx b/apps/web/core/components/issues/issue-layouts/calendar/base-calendar-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/base-calendar-root.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/base-calendar-root.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/calendar.tsx b/apps/web/core/components/issues/issue-layouts/calendar/calendar.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/calendar.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/calendar.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/day-tile.tsx b/apps/web/core/components/issues/issue-layouts/calendar/day-tile.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/day-tile.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/day-tile.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/dropdowns/index.ts b/apps/web/core/components/issues/issue-layouts/calendar/dropdowns/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/dropdowns/index.ts rename to apps/web/core/components/issues/issue-layouts/calendar/dropdowns/index.ts diff --git a/web/core/components/issues/issue-layouts/calendar/dropdowns/months-dropdown.tsx b/apps/web/core/components/issues/issue-layouts/calendar/dropdowns/months-dropdown.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/dropdowns/months-dropdown.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/dropdowns/months-dropdown.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx b/apps/web/core/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/header.tsx b/apps/web/core/components/issues/issue-layouts/calendar/header.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/header.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/header.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/index.ts b/apps/web/core/components/issues/issue-layouts/calendar/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/index.ts rename to apps/web/core/components/issues/issue-layouts/calendar/index.ts diff --git a/web/core/components/issues/issue-layouts/calendar/issue-block-root.tsx b/apps/web/core/components/issues/issue-layouts/calendar/issue-block-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/issue-block-root.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/issue-block-root.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/issue-block.tsx b/apps/web/core/components/issues/issue-layouts/calendar/issue-block.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/issue-block.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/issue-block.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/issue-blocks.tsx b/apps/web/core/components/issues/issue-layouts/calendar/issue-blocks.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/issue-blocks.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/issue-blocks.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/quick-add-issue-actions.tsx b/apps/web/core/components/issues/issue-layouts/calendar/quick-add-issue-actions.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/quick-add-issue-actions.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/quick-add-issue-actions.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/roots/cycle-root.tsx b/apps/web/core/components/issues/issue-layouts/calendar/roots/cycle-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/roots/cycle-root.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/roots/cycle-root.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/roots/index.ts b/apps/web/core/components/issues/issue-layouts/calendar/roots/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/roots/index.ts rename to apps/web/core/components/issues/issue-layouts/calendar/roots/index.ts diff --git a/web/core/components/issues/issue-layouts/calendar/roots/module-root.tsx b/apps/web/core/components/issues/issue-layouts/calendar/roots/module-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/roots/module-root.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/roots/module-root.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/roots/project-root.tsx b/apps/web/core/components/issues/issue-layouts/calendar/roots/project-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/roots/project-root.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/roots/project-root.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/roots/project-view-root.tsx b/apps/web/core/components/issues/issue-layouts/calendar/roots/project-view-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/roots/project-view-root.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/roots/project-view-root.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/utils.ts b/apps/web/core/components/issues/issue-layouts/calendar/utils.ts similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/utils.ts rename to apps/web/core/components/issues/issue-layouts/calendar/utils.ts diff --git a/web/core/components/issues/issue-layouts/calendar/week-days.tsx b/apps/web/core/components/issues/issue-layouts/calendar/week-days.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/week-days.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/week-days.tsx diff --git a/web/core/components/issues/issue-layouts/calendar/week-header.tsx b/apps/web/core/components/issues/issue-layouts/calendar/week-header.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/calendar/week-header.tsx rename to apps/web/core/components/issues/issue-layouts/calendar/week-header.tsx diff --git a/web/core/components/issues/issue-layouts/empty-states/archived-issues.tsx b/apps/web/core/components/issues/issue-layouts/empty-states/archived-issues.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/empty-states/archived-issues.tsx rename to apps/web/core/components/issues/issue-layouts/empty-states/archived-issues.tsx diff --git a/web/core/components/issues/issue-layouts/empty-states/cycle.tsx b/apps/web/core/components/issues/issue-layouts/empty-states/cycle.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/empty-states/cycle.tsx rename to apps/web/core/components/issues/issue-layouts/empty-states/cycle.tsx diff --git a/web/core/components/issues/issue-layouts/empty-states/draft-issues.tsx b/apps/web/core/components/issues/issue-layouts/empty-states/draft-issues.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/empty-states/draft-issues.tsx rename to apps/web/core/components/issues/issue-layouts/empty-states/draft-issues.tsx diff --git a/web/core/components/issues/issue-layouts/empty-states/global-view.tsx b/apps/web/core/components/issues/issue-layouts/empty-states/global-view.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/empty-states/global-view.tsx rename to apps/web/core/components/issues/issue-layouts/empty-states/global-view.tsx diff --git a/web/core/components/issues/issue-layouts/empty-states/index.tsx b/apps/web/core/components/issues/issue-layouts/empty-states/index.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/empty-states/index.tsx rename to apps/web/core/components/issues/issue-layouts/empty-states/index.tsx diff --git a/web/core/components/issues/issue-layouts/empty-states/module.tsx b/apps/web/core/components/issues/issue-layouts/empty-states/module.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/empty-states/module.tsx rename to apps/web/core/components/issues/issue-layouts/empty-states/module.tsx diff --git a/web/core/components/issues/issue-layouts/empty-states/profile-view.tsx b/apps/web/core/components/issues/issue-layouts/empty-states/profile-view.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/empty-states/profile-view.tsx rename to apps/web/core/components/issues/issue-layouts/empty-states/profile-view.tsx diff --git a/web/core/components/issues/issue-layouts/empty-states/project-epic.tsx b/apps/web/core/components/issues/issue-layouts/empty-states/project-epic.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/empty-states/project-epic.tsx rename to apps/web/core/components/issues/issue-layouts/empty-states/project-epic.tsx diff --git a/web/core/components/issues/issue-layouts/empty-states/project-issues.tsx b/apps/web/core/components/issues/issue-layouts/empty-states/project-issues.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/empty-states/project-issues.tsx rename to apps/web/core/components/issues/issue-layouts/empty-states/project-issues.tsx diff --git a/web/core/components/issues/issue-layouts/empty-states/project-view.tsx b/apps/web/core/components/issues/issue-layouts/empty-states/project-view.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/empty-states/project-view.tsx rename to apps/web/core/components/issues/issue-layouts/empty-states/project-view.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/cycle.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/cycle.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/cycle.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/cycle.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/date.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/date.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/date.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/date.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/index.ts b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/index.ts rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/index.ts diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/label.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/label.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/label.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/label.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/members.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/members.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/members.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/members.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/module.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/module.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/module.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/module.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/priority.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/priority.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/priority.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/priority.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/project.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/project.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/project.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/project.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/index.ts b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/roots/index.ts rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/index.ts diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/state-group.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/state-group.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/state-group.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/state-group.tsx diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/state.tsx b/apps/web/core/components/issues/issue-layouts/filters/applied-filters/state.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/applied-filters/state.tsx rename to apps/web/core/components/issues/issue-layouts/filters/applied-filters/state.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/display-filters/extra-options.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/display-filters/extra-options.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/display-filters/extra-options.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/display-filters/extra-options.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/display-filters/index.ts b/apps/web/core/components/issues/issue-layouts/filters/header/display-filters/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/display-filters/index.ts rename to apps/web/core/components/issues/issue-layouts/filters/header/display-filters/index.ts diff --git a/web/core/components/issues/issue-layouts/filters/header/display-filters/issue-grouping.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/display-filters/issue-grouping.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/display-filters/issue-grouping.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/display-filters/issue-grouping.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/display-filters/order-by.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/display-filters/order-by.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/display-filters/order-by.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/display-filters/order-by.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/display-filters/sub-group-by.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/display-filters/sub-group-by.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/display-filters/sub-group-by.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/display-filters/sub-group-by.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/assignee.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/assignee.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/assignee.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/assignee.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/created-by.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/created-by.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/created-by.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/created-by.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/cycle.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/cycle.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/cycle.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/cycle.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/due-date.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/due-date.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/due-date.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/due-date.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/filters-selection.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/filters-selection.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/filters-selection.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/filters-selection.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/index.ts b/apps/web/core/components/issues/issue-layouts/filters/header/filters/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/index.ts rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/index.ts diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/labels.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/labels.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/labels.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/labels.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/mentions.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/mentions.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/mentions.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/mentions.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/module.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/module.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/module.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/module.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/priority.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/priority.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/priority.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/priority.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/project.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/project.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/project.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/project.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/start-date.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/start-date.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/start-date.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/start-date.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/state-group.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/state-group.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/state-group.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/state-group.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/filters/state.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/filters/state.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/filters/state.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/filters/state.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/helpers/filter-header.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/helpers/filter-header.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/helpers/filter-header.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/helpers/filter-header.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/helpers/filter-option.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/helpers/filter-option.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/helpers/filter-option.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/helpers/filter-option.tsx diff --git a/web/core/components/issues/issue-layouts/filters/header/helpers/index.ts b/apps/web/core/components/issues/issue-layouts/filters/header/helpers/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/helpers/index.ts rename to apps/web/core/components/issues/issue-layouts/filters/header/helpers/index.ts diff --git a/web/core/components/issues/issue-layouts/filters/header/index.ts b/apps/web/core/components/issues/issue-layouts/filters/header/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/index.ts rename to apps/web/core/components/issues/issue-layouts/filters/header/index.ts diff --git a/web/core/components/issues/issue-layouts/filters/header/layout-selection.tsx b/apps/web/core/components/issues/issue-layouts/filters/header/layout-selection.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/filters/header/layout-selection.tsx rename to apps/web/core/components/issues/issue-layouts/filters/header/layout-selection.tsx diff --git a/web/core/components/issues/issue-layouts/filters/index.ts b/apps/web/core/components/issues/issue-layouts/filters/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/filters/index.ts rename to apps/web/core/components/issues/issue-layouts/filters/index.ts diff --git a/web/core/components/issues/issue-layouts/gantt/base-gantt-root.tsx b/apps/web/core/components/issues/issue-layouts/gantt/base-gantt-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/gantt/base-gantt-root.tsx rename to apps/web/core/components/issues/issue-layouts/gantt/base-gantt-root.tsx diff --git a/web/core/components/issues/issue-layouts/gantt/blocks.tsx b/apps/web/core/components/issues/issue-layouts/gantt/blocks.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/gantt/blocks.tsx rename to apps/web/core/components/issues/issue-layouts/gantt/blocks.tsx diff --git a/web/core/components/issues/issue-layouts/gantt/index.ts b/apps/web/core/components/issues/issue-layouts/gantt/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/gantt/index.ts rename to apps/web/core/components/issues/issue-layouts/gantt/index.ts diff --git a/web/core/components/issues/issue-layouts/group-drag-overlay.tsx b/apps/web/core/components/issues/issue-layouts/group-drag-overlay.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/group-drag-overlay.tsx rename to apps/web/core/components/issues/issue-layouts/group-drag-overlay.tsx diff --git a/web/core/components/issues/issue-layouts/index.ts b/apps/web/core/components/issues/issue-layouts/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/index.ts rename to apps/web/core/components/issues/issue-layouts/index.ts diff --git a/web/core/components/issues/issue-layouts/issue-layout-HOC.tsx b/apps/web/core/components/issues/issue-layouts/issue-layout-HOC.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/issue-layout-HOC.tsx rename to apps/web/core/components/issues/issue-layouts/issue-layout-HOC.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx b/apps/web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/base-kanban-root.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/block.tsx b/apps/web/core/components/issues/issue-layouts/kanban/block.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/block.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/block.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/blocks-list.tsx b/apps/web/core/components/issues/issue-layouts/kanban/blocks-list.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/blocks-list.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/blocks-list.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/default.tsx b/apps/web/core/components/issues/issue-layouts/kanban/default.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/default.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/default.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx b/apps/web/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/headers/group-by-card.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx b/apps/web/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/index.ts b/apps/web/core/components/issues/issue-layouts/kanban/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/index.ts rename to apps/web/core/components/issues/issue-layouts/kanban/index.ts diff --git a/web/core/components/issues/issue-layouts/kanban/kanban-group.tsx b/apps/web/core/components/issues/issue-layouts/kanban/kanban-group.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/kanban-group.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/kanban-group.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/roots/cycle-root.tsx b/apps/web/core/components/issues/issue-layouts/kanban/roots/cycle-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/roots/cycle-root.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/roots/cycle-root.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/roots/draft-issue-root.tsx b/apps/web/core/components/issues/issue-layouts/kanban/roots/draft-issue-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/roots/draft-issue-root.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/roots/draft-issue-root.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/roots/index.ts b/apps/web/core/components/issues/issue-layouts/kanban/roots/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/roots/index.ts rename to apps/web/core/components/issues/issue-layouts/kanban/roots/index.ts diff --git a/web/core/components/issues/issue-layouts/kanban/roots/module-root.tsx b/apps/web/core/components/issues/issue-layouts/kanban/roots/module-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/roots/module-root.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/roots/module-root.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx b/apps/web/core/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/roots/project-root.tsx b/apps/web/core/components/issues/issue-layouts/kanban/roots/project-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/roots/project-root.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/roots/project-root.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/roots/project-view-root.tsx b/apps/web/core/components/issues/issue-layouts/kanban/roots/project-view-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/roots/project-view-root.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/roots/project-view-root.tsx diff --git a/web/core/components/issues/issue-layouts/kanban/swimlanes.tsx b/apps/web/core/components/issues/issue-layouts/kanban/swimlanes.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/kanban/swimlanes.tsx rename to apps/web/core/components/issues/issue-layouts/kanban/swimlanes.tsx diff --git a/web/core/components/issues/issue-layouts/layout-icon.tsx b/apps/web/core/components/issues/issue-layouts/layout-icon.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/layout-icon.tsx rename to apps/web/core/components/issues/issue-layouts/layout-icon.tsx diff --git a/web/core/components/issues/issue-layouts/list/base-list-root.tsx b/apps/web/core/components/issues/issue-layouts/list/base-list-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/base-list-root.tsx rename to apps/web/core/components/issues/issue-layouts/list/base-list-root.tsx diff --git a/web/core/components/issues/issue-layouts/list/block-root.tsx b/apps/web/core/components/issues/issue-layouts/list/block-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/block-root.tsx rename to apps/web/core/components/issues/issue-layouts/list/block-root.tsx diff --git a/web/core/components/issues/issue-layouts/list/block.tsx b/apps/web/core/components/issues/issue-layouts/list/block.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/block.tsx rename to apps/web/core/components/issues/issue-layouts/list/block.tsx diff --git a/web/core/components/issues/issue-layouts/list/blocks-list.tsx b/apps/web/core/components/issues/issue-layouts/list/blocks-list.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/blocks-list.tsx rename to apps/web/core/components/issues/issue-layouts/list/blocks-list.tsx diff --git a/web/core/components/issues/issue-layouts/list/default.tsx b/apps/web/core/components/issues/issue-layouts/list/default.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/default.tsx rename to apps/web/core/components/issues/issue-layouts/list/default.tsx diff --git a/web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx b/apps/web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx rename to apps/web/core/components/issues/issue-layouts/list/headers/group-by-card.tsx diff --git a/web/core/components/issues/issue-layouts/list/index.ts b/apps/web/core/components/issues/issue-layouts/list/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/list/index.ts rename to apps/web/core/components/issues/issue-layouts/list/index.ts diff --git a/web/core/components/issues/issue-layouts/list/list-group.tsx b/apps/web/core/components/issues/issue-layouts/list/list-group.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/list-group.tsx rename to apps/web/core/components/issues/issue-layouts/list/list-group.tsx diff --git a/web/core/components/issues/issue-layouts/list/list-view-types.d.ts b/apps/web/core/components/issues/issue-layouts/list/list-view-types.d.ts similarity index 100% rename from web/core/components/issues/issue-layouts/list/list-view-types.d.ts rename to apps/web/core/components/issues/issue-layouts/list/list-view-types.d.ts diff --git a/web/core/components/issues/issue-layouts/list/roots/archived-issue-root.tsx b/apps/web/core/components/issues/issue-layouts/list/roots/archived-issue-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/roots/archived-issue-root.tsx rename to apps/web/core/components/issues/issue-layouts/list/roots/archived-issue-root.tsx diff --git a/web/core/components/issues/issue-layouts/list/roots/cycle-root.tsx b/apps/web/core/components/issues/issue-layouts/list/roots/cycle-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/roots/cycle-root.tsx rename to apps/web/core/components/issues/issue-layouts/list/roots/cycle-root.tsx diff --git a/web/core/components/issues/issue-layouts/list/roots/draft-issue-root.tsx b/apps/web/core/components/issues/issue-layouts/list/roots/draft-issue-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/roots/draft-issue-root.tsx rename to apps/web/core/components/issues/issue-layouts/list/roots/draft-issue-root.tsx diff --git a/web/core/components/issues/issue-layouts/list/roots/index.ts b/apps/web/core/components/issues/issue-layouts/list/roots/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/list/roots/index.ts rename to apps/web/core/components/issues/issue-layouts/list/roots/index.ts diff --git a/web/core/components/issues/issue-layouts/list/roots/module-root.tsx b/apps/web/core/components/issues/issue-layouts/list/roots/module-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/roots/module-root.tsx rename to apps/web/core/components/issues/issue-layouts/list/roots/module-root.tsx diff --git a/web/core/components/issues/issue-layouts/list/roots/profile-issues-root.tsx b/apps/web/core/components/issues/issue-layouts/list/roots/profile-issues-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/roots/profile-issues-root.tsx rename to apps/web/core/components/issues/issue-layouts/list/roots/profile-issues-root.tsx diff --git a/web/core/components/issues/issue-layouts/list/roots/project-root.tsx b/apps/web/core/components/issues/issue-layouts/list/roots/project-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/roots/project-root.tsx rename to apps/web/core/components/issues/issue-layouts/list/roots/project-root.tsx diff --git a/web/core/components/issues/issue-layouts/list/roots/project-view-root.tsx b/apps/web/core/components/issues/issue-layouts/list/roots/project-view-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/list/roots/project-view-root.tsx rename to apps/web/core/components/issues/issue-layouts/list/roots/project-view-root.tsx diff --git a/web/core/components/issues/issue-layouts/properties/all-properties.tsx b/apps/web/core/components/issues/issue-layouts/properties/all-properties.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/properties/all-properties.tsx rename to apps/web/core/components/issues/issue-layouts/properties/all-properties.tsx diff --git a/web/core/components/issues/issue-layouts/properties/index.ts b/apps/web/core/components/issues/issue-layouts/properties/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/properties/index.ts rename to apps/web/core/components/issues/issue-layouts/properties/index.ts diff --git a/web/core/components/issues/issue-layouts/properties/label-dropdown.tsx b/apps/web/core/components/issues/issue-layouts/properties/label-dropdown.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/properties/label-dropdown.tsx rename to apps/web/core/components/issues/issue-layouts/properties/label-dropdown.tsx diff --git a/web/core/components/issues/issue-layouts/properties/labels.tsx b/apps/web/core/components/issues/issue-layouts/properties/labels.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/properties/labels.tsx rename to apps/web/core/components/issues/issue-layouts/properties/labels.tsx diff --git a/web/core/components/issues/issue-layouts/properties/with-display-properties-HOC.tsx b/apps/web/core/components/issues/issue-layouts/properties/with-display-properties-HOC.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/properties/with-display-properties-HOC.tsx rename to apps/web/core/components/issues/issue-layouts/properties/with-display-properties-HOC.tsx diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/all-issue.tsx b/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/all-issue.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-action-dropdowns/all-issue.tsx rename to apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/all-issue.tsx diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx b/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx rename to apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx b/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx rename to apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx b/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx rename to apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/draft-issue.tsx diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/helper.tsx b/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/helper.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-action-dropdowns/helper.tsx rename to apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/helper.tsx diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/index.ts b/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/quick-action-dropdowns/index.ts rename to apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/index.ts diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx b/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx rename to apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx diff --git a/web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx b/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx rename to apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx diff --git a/web/core/components/issues/issue-layouts/quick-add/button/gantt.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/button/gantt.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/button/gantt.tsx rename to apps/web/core/components/issues/issue-layouts/quick-add/button/gantt.tsx diff --git a/web/core/components/issues/issue-layouts/quick-add/button/index.ts b/apps/web/core/components/issues/issue-layouts/quick-add/button/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/button/index.ts rename to apps/web/core/components/issues/issue-layouts/quick-add/button/index.ts diff --git a/web/core/components/issues/issue-layouts/quick-add/button/kanban.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/button/kanban.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/button/kanban.tsx rename to apps/web/core/components/issues/issue-layouts/quick-add/button/kanban.tsx diff --git a/web/core/components/issues/issue-layouts/quick-add/button/list.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/button/list.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/button/list.tsx rename to apps/web/core/components/issues/issue-layouts/quick-add/button/list.tsx diff --git a/web/core/components/issues/issue-layouts/quick-add/button/spreadsheet.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/button/spreadsheet.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/button/spreadsheet.tsx rename to apps/web/core/components/issues/issue-layouts/quick-add/button/spreadsheet.tsx diff --git a/web/core/components/issues/issue-layouts/quick-add/form/calendar.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/form/calendar.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/form/calendar.tsx rename to apps/web/core/components/issues/issue-layouts/quick-add/form/calendar.tsx diff --git a/web/core/components/issues/issue-layouts/quick-add/form/gantt.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/form/gantt.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/form/gantt.tsx rename to apps/web/core/components/issues/issue-layouts/quick-add/form/gantt.tsx diff --git a/web/core/components/issues/issue-layouts/quick-add/form/index.ts b/apps/web/core/components/issues/issue-layouts/quick-add/form/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/form/index.ts rename to apps/web/core/components/issues/issue-layouts/quick-add/form/index.ts diff --git a/web/core/components/issues/issue-layouts/quick-add/form/kanban.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/form/kanban.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/form/kanban.tsx rename to apps/web/core/components/issues/issue-layouts/quick-add/form/kanban.tsx diff --git a/web/core/components/issues/issue-layouts/quick-add/form/list.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/form/list.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/form/list.tsx rename to apps/web/core/components/issues/issue-layouts/quick-add/form/list.tsx diff --git a/web/core/components/issues/issue-layouts/quick-add/form/spreadsheet.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/form/spreadsheet.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/form/spreadsheet.tsx rename to apps/web/core/components/issues/issue-layouts/quick-add/form/spreadsheet.tsx diff --git a/web/core/components/issues/issue-layouts/quick-add/index.ts b/apps/web/core/components/issues/issue-layouts/quick-add/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/index.ts rename to apps/web/core/components/issues/issue-layouts/quick-add/index.ts diff --git a/web/core/components/issues/issue-layouts/quick-add/root.tsx b/apps/web/core/components/issues/issue-layouts/quick-add/root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/quick-add/root.tsx rename to apps/web/core/components/issues/issue-layouts/quick-add/root.tsx diff --git a/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx b/apps/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx rename to apps/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx diff --git a/web/core/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx b/apps/web/core/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx rename to apps/web/core/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx diff --git a/web/core/components/issues/issue-layouts/roots/cycle-layout-root.tsx b/apps/web/core/components/issues/issue-layouts/roots/cycle-layout-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/roots/cycle-layout-root.tsx rename to apps/web/core/components/issues/issue-layouts/roots/cycle-layout-root.tsx diff --git a/web/core/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx b/apps/web/core/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx rename to apps/web/core/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx diff --git a/web/core/components/issues/issue-layouts/roots/index.ts b/apps/web/core/components/issues/issue-layouts/roots/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/roots/index.ts rename to apps/web/core/components/issues/issue-layouts/roots/index.ts diff --git a/web/core/components/issues/issue-layouts/roots/module-layout-root.tsx b/apps/web/core/components/issues/issue-layouts/roots/module-layout-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/roots/module-layout-root.tsx rename to apps/web/core/components/issues/issue-layouts/roots/module-layout-root.tsx diff --git a/web/core/components/issues/issue-layouts/roots/project-layout-root.tsx b/apps/web/core/components/issues/issue-layouts/roots/project-layout-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/roots/project-layout-root.tsx rename to apps/web/core/components/issues/issue-layouts/roots/project-layout-root.tsx diff --git a/web/core/components/issues/issue-layouts/roots/project-view-layout-root.tsx b/apps/web/core/components/issues/issue-layouts/roots/project-view-layout-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/roots/project-view-layout-root.tsx rename to apps/web/core/components/issues/issue-layouts/roots/project-view-layout-root.tsx diff --git a/web/core/components/issues/issue-layouts/save-filter-view.tsx b/apps/web/core/components/issues/issue-layouts/save-filter-view.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/save-filter-view.tsx rename to apps/web/core/components/issues/issue-layouts/save-filter-view.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/assignee-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/assignee-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/assignee-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/assignee-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/attachment-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/attachment-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/attachment-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/attachment-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/created-on-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/created-on-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/created-on-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/created-on-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/index.ts b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/index.ts rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/index.ts diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/link-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/link-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/link-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/link-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/state-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/state-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/state-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/state-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/columns/updated-on-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/updated-on-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/columns/updated-on-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/columns/updated-on-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/index.ts b/apps/web/core/components/issues/issue-layouts/spreadsheet/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/index.ts rename to apps/web/core/components/issues/issue-layouts/spreadsheet/index.ts diff --git a/web/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/issue-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/issue-row.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/roots/cycle-root.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/roots/cycle-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/roots/cycle-root.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/roots/cycle-root.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/roots/index.ts b/apps/web/core/components/issues/issue-layouts/spreadsheet/roots/index.ts similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/roots/index.ts rename to apps/web/core/components/issues/issue-layouts/spreadsheet/roots/index.ts diff --git a/web/core/components/issues/issue-layouts/spreadsheet/roots/module-root.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/roots/module-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/roots/module-root.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/roots/module-root.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/roots/project-root.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/roots/project-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/roots/project-root.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/roots/project-root.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/roots/project-view-root.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/roots/project-view-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/roots/project-view-root.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/roots/project-view-root.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/roots/workspace-root.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/roots/workspace-root.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/roots/workspace-root.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/roots/workspace-root.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-table.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-table.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-table.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-table.tsx diff --git a/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx b/apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx rename to apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx diff --git a/web/core/components/issues/issue-layouts/utils.tsx b/apps/web/core/components/issues/issue-layouts/utils.tsx similarity index 100% rename from web/core/components/issues/issue-layouts/utils.tsx rename to apps/web/core/components/issues/issue-layouts/utils.tsx diff --git a/web/core/components/issues/issue-modal/base.tsx b/apps/web/core/components/issues/issue-modal/base.tsx similarity index 100% rename from web/core/components/issues/issue-modal/base.tsx rename to apps/web/core/components/issues/issue-modal/base.tsx diff --git a/web/core/components/issues/issue-modal/components/default-properties.tsx b/apps/web/core/components/issues/issue-modal/components/default-properties.tsx similarity index 100% rename from web/core/components/issues/issue-modal/components/default-properties.tsx rename to apps/web/core/components/issues/issue-modal/components/default-properties.tsx diff --git a/web/core/components/issues/issue-modal/components/description-editor.tsx b/apps/web/core/components/issues/issue-modal/components/description-editor.tsx similarity index 100% rename from web/core/components/issues/issue-modal/components/description-editor.tsx rename to apps/web/core/components/issues/issue-modal/components/description-editor.tsx diff --git a/web/core/components/issues/issue-modal/components/index.ts b/apps/web/core/components/issues/issue-modal/components/index.ts similarity index 100% rename from web/core/components/issues/issue-modal/components/index.ts rename to apps/web/core/components/issues/issue-modal/components/index.ts diff --git a/web/core/components/issues/issue-modal/components/parent-tag.tsx b/apps/web/core/components/issues/issue-modal/components/parent-tag.tsx similarity index 100% rename from web/core/components/issues/issue-modal/components/parent-tag.tsx rename to apps/web/core/components/issues/issue-modal/components/parent-tag.tsx diff --git a/web/core/components/issues/issue-modal/components/project-select.tsx b/apps/web/core/components/issues/issue-modal/components/project-select.tsx similarity index 100% rename from web/core/components/issues/issue-modal/components/project-select.tsx rename to apps/web/core/components/issues/issue-modal/components/project-select.tsx diff --git a/web/core/components/issues/issue-modal/components/title-input.tsx b/apps/web/core/components/issues/issue-modal/components/title-input.tsx similarity index 100% rename from web/core/components/issues/issue-modal/components/title-input.tsx rename to apps/web/core/components/issues/issue-modal/components/title-input.tsx diff --git a/web/core/components/issues/issue-modal/context/index.ts b/apps/web/core/components/issues/issue-modal/context/index.ts similarity index 100% rename from web/core/components/issues/issue-modal/context/index.ts rename to apps/web/core/components/issues/issue-modal/context/index.ts diff --git a/web/core/components/issues/issue-modal/context/issue-modal-context.tsx b/apps/web/core/components/issues/issue-modal/context/issue-modal-context.tsx similarity index 100% rename from web/core/components/issues/issue-modal/context/issue-modal-context.tsx rename to apps/web/core/components/issues/issue-modal/context/issue-modal-context.tsx diff --git a/web/core/components/issues/issue-modal/draft-issue-layout.tsx b/apps/web/core/components/issues/issue-modal/draft-issue-layout.tsx similarity index 100% rename from web/core/components/issues/issue-modal/draft-issue-layout.tsx rename to apps/web/core/components/issues/issue-modal/draft-issue-layout.tsx diff --git a/web/core/components/issues/issue-modal/form.tsx b/apps/web/core/components/issues/issue-modal/form.tsx similarity index 100% rename from web/core/components/issues/issue-modal/form.tsx rename to apps/web/core/components/issues/issue-modal/form.tsx diff --git a/web/core/components/issues/issue-modal/index.ts b/apps/web/core/components/issues/issue-modal/index.ts similarity index 100% rename from web/core/components/issues/issue-modal/index.ts rename to apps/web/core/components/issues/issue-modal/index.ts diff --git a/web/core/components/issues/issue-modal/modal.tsx b/apps/web/core/components/issues/issue-modal/modal.tsx similarity index 100% rename from web/core/components/issues/issue-modal/modal.tsx rename to apps/web/core/components/issues/issue-modal/modal.tsx diff --git a/web/core/components/issues/issue-update-status.tsx b/apps/web/core/components/issues/issue-update-status.tsx similarity index 100% rename from web/core/components/issues/issue-update-status.tsx rename to apps/web/core/components/issues/issue-update-status.tsx diff --git a/web/core/components/issues/label.tsx b/apps/web/core/components/issues/label.tsx similarity index 100% rename from web/core/components/issues/label.tsx rename to apps/web/core/components/issues/label.tsx diff --git a/web/core/components/issues/parent-issues-list-modal.tsx b/apps/web/core/components/issues/parent-issues-list-modal.tsx similarity index 100% rename from web/core/components/issues/parent-issues-list-modal.tsx rename to apps/web/core/components/issues/parent-issues-list-modal.tsx diff --git a/web/core/components/issues/peek-overview/error.tsx b/apps/web/core/components/issues/peek-overview/error.tsx similarity index 100% rename from web/core/components/issues/peek-overview/error.tsx rename to apps/web/core/components/issues/peek-overview/error.tsx diff --git a/web/core/components/issues/peek-overview/header.tsx b/apps/web/core/components/issues/peek-overview/header.tsx similarity index 100% rename from web/core/components/issues/peek-overview/header.tsx rename to apps/web/core/components/issues/peek-overview/header.tsx diff --git a/web/core/components/issues/peek-overview/index.ts b/apps/web/core/components/issues/peek-overview/index.ts similarity index 100% rename from web/core/components/issues/peek-overview/index.ts rename to apps/web/core/components/issues/peek-overview/index.ts diff --git a/web/core/components/issues/peek-overview/issue-detail.tsx b/apps/web/core/components/issues/peek-overview/issue-detail.tsx similarity index 100% rename from web/core/components/issues/peek-overview/issue-detail.tsx rename to apps/web/core/components/issues/peek-overview/issue-detail.tsx diff --git a/web/core/components/issues/peek-overview/loader.tsx b/apps/web/core/components/issues/peek-overview/loader.tsx similarity index 100% rename from web/core/components/issues/peek-overview/loader.tsx rename to apps/web/core/components/issues/peek-overview/loader.tsx diff --git a/web/core/components/issues/peek-overview/properties.tsx b/apps/web/core/components/issues/peek-overview/properties.tsx similarity index 100% rename from web/core/components/issues/peek-overview/properties.tsx rename to apps/web/core/components/issues/peek-overview/properties.tsx diff --git a/web/core/components/issues/peek-overview/root.tsx b/apps/web/core/components/issues/peek-overview/root.tsx similarity index 100% rename from web/core/components/issues/peek-overview/root.tsx rename to apps/web/core/components/issues/peek-overview/root.tsx diff --git a/web/core/components/issues/peek-overview/view.tsx b/apps/web/core/components/issues/peek-overview/view.tsx similarity index 100% rename from web/core/components/issues/peek-overview/view.tsx rename to apps/web/core/components/issues/peek-overview/view.tsx diff --git a/web/core/components/issues/relations/index.ts b/apps/web/core/components/issues/relations/index.ts similarity index 100% rename from web/core/components/issues/relations/index.ts rename to apps/web/core/components/issues/relations/index.ts diff --git a/web/core/components/issues/relations/issue-list-item.tsx b/apps/web/core/components/issues/relations/issue-list-item.tsx similarity index 100% rename from web/core/components/issues/relations/issue-list-item.tsx rename to apps/web/core/components/issues/relations/issue-list-item.tsx diff --git a/web/core/components/issues/relations/issue-list.tsx b/apps/web/core/components/issues/relations/issue-list.tsx similarity index 100% rename from web/core/components/issues/relations/issue-list.tsx rename to apps/web/core/components/issues/relations/issue-list.tsx diff --git a/web/core/components/issues/relations/properties.tsx b/apps/web/core/components/issues/relations/properties.tsx similarity index 100% rename from web/core/components/issues/relations/properties.tsx rename to apps/web/core/components/issues/relations/properties.tsx diff --git a/web/core/components/issues/select/index.ts b/apps/web/core/components/issues/select/index.ts similarity index 100% rename from web/core/components/issues/select/index.ts rename to apps/web/core/components/issues/select/index.ts diff --git a/web/core/components/issues/select/label.tsx b/apps/web/core/components/issues/select/label.tsx similarity index 100% rename from web/core/components/issues/select/label.tsx rename to apps/web/core/components/issues/select/label.tsx diff --git a/web/core/components/issues/title-input.tsx b/apps/web/core/components/issues/title-input.tsx similarity index 100% rename from web/core/components/issues/title-input.tsx rename to apps/web/core/components/issues/title-input.tsx diff --git a/web/core/components/issues/workspace-draft/delete-modal.tsx b/apps/web/core/components/issues/workspace-draft/delete-modal.tsx similarity index 100% rename from web/core/components/issues/workspace-draft/delete-modal.tsx rename to apps/web/core/components/issues/workspace-draft/delete-modal.tsx diff --git a/web/core/components/issues/workspace-draft/draft-issue-block.tsx b/apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx similarity index 100% rename from web/core/components/issues/workspace-draft/draft-issue-block.tsx rename to apps/web/core/components/issues/workspace-draft/draft-issue-block.tsx diff --git a/web/core/components/issues/workspace-draft/draft-issue-properties.tsx b/apps/web/core/components/issues/workspace-draft/draft-issue-properties.tsx similarity index 100% rename from web/core/components/issues/workspace-draft/draft-issue-properties.tsx rename to apps/web/core/components/issues/workspace-draft/draft-issue-properties.tsx diff --git a/web/core/components/issues/workspace-draft/empty-state.tsx b/apps/web/core/components/issues/workspace-draft/empty-state.tsx similarity index 100% rename from web/core/components/issues/workspace-draft/empty-state.tsx rename to apps/web/core/components/issues/workspace-draft/empty-state.tsx diff --git a/web/core/components/issues/workspace-draft/index.ts b/apps/web/core/components/issues/workspace-draft/index.ts similarity index 100% rename from web/core/components/issues/workspace-draft/index.ts rename to apps/web/core/components/issues/workspace-draft/index.ts diff --git a/web/core/components/issues/workspace-draft/loader.tsx b/apps/web/core/components/issues/workspace-draft/loader.tsx similarity index 100% rename from web/core/components/issues/workspace-draft/loader.tsx rename to apps/web/core/components/issues/workspace-draft/loader.tsx diff --git a/web/core/components/issues/workspace-draft/quick-action.tsx b/apps/web/core/components/issues/workspace-draft/quick-action.tsx similarity index 100% rename from web/core/components/issues/workspace-draft/quick-action.tsx rename to apps/web/core/components/issues/workspace-draft/quick-action.tsx diff --git a/web/core/components/issues/workspace-draft/root.tsx b/apps/web/core/components/issues/workspace-draft/root.tsx similarity index 100% rename from web/core/components/issues/workspace-draft/root.tsx rename to apps/web/core/components/issues/workspace-draft/root.tsx diff --git a/web/core/components/labels/create-label-modal.tsx b/apps/web/core/components/labels/create-label-modal.tsx similarity index 100% rename from web/core/components/labels/create-label-modal.tsx rename to apps/web/core/components/labels/create-label-modal.tsx diff --git a/web/core/components/labels/create-update-label-inline.tsx b/apps/web/core/components/labels/create-update-label-inline.tsx similarity index 100% rename from web/core/components/labels/create-update-label-inline.tsx rename to apps/web/core/components/labels/create-update-label-inline.tsx diff --git a/web/core/components/labels/delete-label-modal.tsx b/apps/web/core/components/labels/delete-label-modal.tsx similarity index 100% rename from web/core/components/labels/delete-label-modal.tsx rename to apps/web/core/components/labels/delete-label-modal.tsx diff --git a/web/core/components/labels/index.ts b/apps/web/core/components/labels/index.ts similarity index 100% rename from web/core/components/labels/index.ts rename to apps/web/core/components/labels/index.ts diff --git a/web/core/components/labels/label-block/label-item-block.tsx b/apps/web/core/components/labels/label-block/label-item-block.tsx similarity index 100% rename from web/core/components/labels/label-block/label-item-block.tsx rename to apps/web/core/components/labels/label-block/label-item-block.tsx diff --git a/web/core/components/labels/label-block/label-name.tsx b/apps/web/core/components/labels/label-block/label-name.tsx similarity index 100% rename from web/core/components/labels/label-block/label-name.tsx rename to apps/web/core/components/labels/label-block/label-name.tsx diff --git a/web/core/components/labels/label-drag-n-drop-HOC.tsx b/apps/web/core/components/labels/label-drag-n-drop-HOC.tsx similarity index 100% rename from web/core/components/labels/label-drag-n-drop-HOC.tsx rename to apps/web/core/components/labels/label-drag-n-drop-HOC.tsx diff --git a/web/core/components/labels/label-utils.ts b/apps/web/core/components/labels/label-utils.ts similarity index 100% rename from web/core/components/labels/label-utils.ts rename to apps/web/core/components/labels/label-utils.ts diff --git a/web/core/components/labels/project-setting-label-group.tsx b/apps/web/core/components/labels/project-setting-label-group.tsx similarity index 100% rename from web/core/components/labels/project-setting-label-group.tsx rename to apps/web/core/components/labels/project-setting-label-group.tsx diff --git a/web/core/components/labels/project-setting-label-item.tsx b/apps/web/core/components/labels/project-setting-label-item.tsx similarity index 100% rename from web/core/components/labels/project-setting-label-item.tsx rename to apps/web/core/components/labels/project-setting-label-item.tsx diff --git a/web/core/components/labels/project-setting-label-list.tsx b/apps/web/core/components/labels/project-setting-label-list.tsx similarity index 100% rename from web/core/components/labels/project-setting-label-list.tsx rename to apps/web/core/components/labels/project-setting-label-list.tsx diff --git a/web/core/components/license/index.ts b/apps/web/core/components/license/index.ts similarity index 100% rename from web/core/components/license/index.ts rename to apps/web/core/components/license/index.ts diff --git a/web/core/components/license/modal/card/base-paid-plan-card.tsx b/apps/web/core/components/license/modal/card/base-paid-plan-card.tsx similarity index 100% rename from web/core/components/license/modal/card/base-paid-plan-card.tsx rename to apps/web/core/components/license/modal/card/base-paid-plan-card.tsx diff --git a/web/core/components/license/modal/card/checkout-button.tsx b/apps/web/core/components/license/modal/card/checkout-button.tsx similarity index 100% rename from web/core/components/license/modal/card/checkout-button.tsx rename to apps/web/core/components/license/modal/card/checkout-button.tsx diff --git a/web/core/components/license/modal/card/discount-info.tsx b/apps/web/core/components/license/modal/card/discount-info.tsx similarity index 100% rename from web/core/components/license/modal/card/discount-info.tsx rename to apps/web/core/components/license/modal/card/discount-info.tsx diff --git a/web/core/components/license/modal/card/free-plan.tsx b/apps/web/core/components/license/modal/card/free-plan.tsx similarity index 100% rename from web/core/components/license/modal/card/free-plan.tsx rename to apps/web/core/components/license/modal/card/free-plan.tsx diff --git a/web/core/components/license/modal/card/index.ts b/apps/web/core/components/license/modal/card/index.ts similarity index 100% rename from web/core/components/license/modal/card/index.ts rename to apps/web/core/components/license/modal/card/index.ts diff --git a/web/core/components/license/modal/card/plan-upgrade.tsx b/apps/web/core/components/license/modal/card/plan-upgrade.tsx similarity index 100% rename from web/core/components/license/modal/card/plan-upgrade.tsx rename to apps/web/core/components/license/modal/card/plan-upgrade.tsx diff --git a/web/core/components/license/modal/card/talk-to-sales.tsx b/apps/web/core/components/license/modal/card/talk-to-sales.tsx similarity index 100% rename from web/core/components/license/modal/card/talk-to-sales.tsx rename to apps/web/core/components/license/modal/card/talk-to-sales.tsx diff --git a/web/core/components/license/modal/index.ts b/apps/web/core/components/license/modal/index.ts similarity index 100% rename from web/core/components/license/modal/index.ts rename to apps/web/core/components/license/modal/index.ts diff --git a/web/core/components/modules/analytics-sidebar/index.ts b/apps/web/core/components/modules/analytics-sidebar/index.ts similarity index 100% rename from web/core/components/modules/analytics-sidebar/index.ts rename to apps/web/core/components/modules/analytics-sidebar/index.ts diff --git a/web/core/components/modules/analytics-sidebar/issue-progress.tsx b/apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx similarity index 100% rename from web/core/components/modules/analytics-sidebar/issue-progress.tsx rename to apps/web/core/components/modules/analytics-sidebar/issue-progress.tsx diff --git a/web/core/components/modules/analytics-sidebar/progress-stats.tsx b/apps/web/core/components/modules/analytics-sidebar/progress-stats.tsx similarity index 100% rename from web/core/components/modules/analytics-sidebar/progress-stats.tsx rename to apps/web/core/components/modules/analytics-sidebar/progress-stats.tsx diff --git a/web/core/components/modules/analytics-sidebar/root.tsx b/apps/web/core/components/modules/analytics-sidebar/root.tsx similarity index 100% rename from web/core/components/modules/analytics-sidebar/root.tsx rename to apps/web/core/components/modules/analytics-sidebar/root.tsx diff --git a/web/core/components/modules/applied-filters/date.tsx b/apps/web/core/components/modules/applied-filters/date.tsx similarity index 100% rename from web/core/components/modules/applied-filters/date.tsx rename to apps/web/core/components/modules/applied-filters/date.tsx diff --git a/web/core/components/modules/applied-filters/index.ts b/apps/web/core/components/modules/applied-filters/index.ts similarity index 100% rename from web/core/components/modules/applied-filters/index.ts rename to apps/web/core/components/modules/applied-filters/index.ts diff --git a/web/core/components/modules/applied-filters/members.tsx b/apps/web/core/components/modules/applied-filters/members.tsx similarity index 100% rename from web/core/components/modules/applied-filters/members.tsx rename to apps/web/core/components/modules/applied-filters/members.tsx diff --git a/web/core/components/modules/applied-filters/root.tsx b/apps/web/core/components/modules/applied-filters/root.tsx similarity index 100% rename from web/core/components/modules/applied-filters/root.tsx rename to apps/web/core/components/modules/applied-filters/root.tsx diff --git a/web/core/components/modules/applied-filters/status.tsx b/apps/web/core/components/modules/applied-filters/status.tsx similarity index 100% rename from web/core/components/modules/applied-filters/status.tsx rename to apps/web/core/components/modules/applied-filters/status.tsx diff --git a/web/core/components/modules/archived-modules/header.tsx b/apps/web/core/components/modules/archived-modules/header.tsx similarity index 100% rename from web/core/components/modules/archived-modules/header.tsx rename to apps/web/core/components/modules/archived-modules/header.tsx diff --git a/web/core/components/modules/archived-modules/index.ts b/apps/web/core/components/modules/archived-modules/index.ts similarity index 100% rename from web/core/components/modules/archived-modules/index.ts rename to apps/web/core/components/modules/archived-modules/index.ts diff --git a/web/core/components/modules/archived-modules/modal.tsx b/apps/web/core/components/modules/archived-modules/modal.tsx similarity index 100% rename from web/core/components/modules/archived-modules/modal.tsx rename to apps/web/core/components/modules/archived-modules/modal.tsx diff --git a/web/core/components/modules/archived-modules/root.tsx b/apps/web/core/components/modules/archived-modules/root.tsx similarity index 100% rename from web/core/components/modules/archived-modules/root.tsx rename to apps/web/core/components/modules/archived-modules/root.tsx diff --git a/web/core/components/modules/archived-modules/view.tsx b/apps/web/core/components/modules/archived-modules/view.tsx similarity index 100% rename from web/core/components/modules/archived-modules/view.tsx rename to apps/web/core/components/modules/archived-modules/view.tsx diff --git a/web/core/components/modules/delete-module-modal.tsx b/apps/web/core/components/modules/delete-module-modal.tsx similarity index 100% rename from web/core/components/modules/delete-module-modal.tsx rename to apps/web/core/components/modules/delete-module-modal.tsx diff --git a/web/core/components/modules/dropdowns/filters/index.ts b/apps/web/core/components/modules/dropdowns/filters/index.ts similarity index 100% rename from web/core/components/modules/dropdowns/filters/index.ts rename to apps/web/core/components/modules/dropdowns/filters/index.ts diff --git a/web/core/components/modules/dropdowns/filters/lead.tsx b/apps/web/core/components/modules/dropdowns/filters/lead.tsx similarity index 100% rename from web/core/components/modules/dropdowns/filters/lead.tsx rename to apps/web/core/components/modules/dropdowns/filters/lead.tsx diff --git a/web/core/components/modules/dropdowns/filters/members.tsx b/apps/web/core/components/modules/dropdowns/filters/members.tsx similarity index 100% rename from web/core/components/modules/dropdowns/filters/members.tsx rename to apps/web/core/components/modules/dropdowns/filters/members.tsx diff --git a/web/core/components/modules/dropdowns/filters/root.tsx b/apps/web/core/components/modules/dropdowns/filters/root.tsx similarity index 100% rename from web/core/components/modules/dropdowns/filters/root.tsx rename to apps/web/core/components/modules/dropdowns/filters/root.tsx diff --git a/web/core/components/modules/dropdowns/filters/start-date.tsx b/apps/web/core/components/modules/dropdowns/filters/start-date.tsx similarity index 100% rename from web/core/components/modules/dropdowns/filters/start-date.tsx rename to apps/web/core/components/modules/dropdowns/filters/start-date.tsx diff --git a/web/core/components/modules/dropdowns/filters/status.tsx b/apps/web/core/components/modules/dropdowns/filters/status.tsx similarity index 100% rename from web/core/components/modules/dropdowns/filters/status.tsx rename to apps/web/core/components/modules/dropdowns/filters/status.tsx diff --git a/web/core/components/modules/dropdowns/filters/target-date.tsx b/apps/web/core/components/modules/dropdowns/filters/target-date.tsx similarity index 100% rename from web/core/components/modules/dropdowns/filters/target-date.tsx rename to apps/web/core/components/modules/dropdowns/filters/target-date.tsx diff --git a/web/core/components/modules/dropdowns/index.ts b/apps/web/core/components/modules/dropdowns/index.ts similarity index 100% rename from web/core/components/modules/dropdowns/index.ts rename to apps/web/core/components/modules/dropdowns/index.ts diff --git a/web/core/components/modules/dropdowns/order-by.tsx b/apps/web/core/components/modules/dropdowns/order-by.tsx similarity index 100% rename from web/core/components/modules/dropdowns/order-by.tsx rename to apps/web/core/components/modules/dropdowns/order-by.tsx diff --git a/web/core/components/modules/form.tsx b/apps/web/core/components/modules/form.tsx similarity index 100% rename from web/core/components/modules/form.tsx rename to apps/web/core/components/modules/form.tsx diff --git a/web/core/components/modules/gantt-chart/blocks.tsx b/apps/web/core/components/modules/gantt-chart/blocks.tsx similarity index 100% rename from web/core/components/modules/gantt-chart/blocks.tsx rename to apps/web/core/components/modules/gantt-chart/blocks.tsx diff --git a/web/core/components/modules/gantt-chart/index.ts b/apps/web/core/components/modules/gantt-chart/index.ts similarity index 100% rename from web/core/components/modules/gantt-chart/index.ts rename to apps/web/core/components/modules/gantt-chart/index.ts diff --git a/web/core/components/modules/gantt-chart/modules-list-layout.tsx b/apps/web/core/components/modules/gantt-chart/modules-list-layout.tsx similarity index 100% rename from web/core/components/modules/gantt-chart/modules-list-layout.tsx rename to apps/web/core/components/modules/gantt-chart/modules-list-layout.tsx diff --git a/web/core/components/modules/index.ts b/apps/web/core/components/modules/index.ts similarity index 100% rename from web/core/components/modules/index.ts rename to apps/web/core/components/modules/index.ts diff --git a/web/core/components/modules/links/create-update-modal.tsx b/apps/web/core/components/modules/links/create-update-modal.tsx similarity index 100% rename from web/core/components/modules/links/create-update-modal.tsx rename to apps/web/core/components/modules/links/create-update-modal.tsx diff --git a/web/core/components/modules/links/index.ts b/apps/web/core/components/modules/links/index.ts similarity index 100% rename from web/core/components/modules/links/index.ts rename to apps/web/core/components/modules/links/index.ts diff --git a/web/core/components/modules/links/list-item.tsx b/apps/web/core/components/modules/links/list-item.tsx similarity index 100% rename from web/core/components/modules/links/list-item.tsx rename to apps/web/core/components/modules/links/list-item.tsx diff --git a/web/core/components/modules/links/list.tsx b/apps/web/core/components/modules/links/list.tsx similarity index 100% rename from web/core/components/modules/links/list.tsx rename to apps/web/core/components/modules/links/list.tsx diff --git a/web/core/components/modules/modal.tsx b/apps/web/core/components/modules/modal.tsx similarity index 100% rename from web/core/components/modules/modal.tsx rename to apps/web/core/components/modules/modal.tsx diff --git a/web/core/components/modules/module-card-item.tsx b/apps/web/core/components/modules/module-card-item.tsx similarity index 100% rename from web/core/components/modules/module-card-item.tsx rename to apps/web/core/components/modules/module-card-item.tsx diff --git a/web/core/components/modules/module-layout-icon.tsx b/apps/web/core/components/modules/module-layout-icon.tsx similarity index 100% rename from web/core/components/modules/module-layout-icon.tsx rename to apps/web/core/components/modules/module-layout-icon.tsx diff --git a/web/core/components/modules/module-list-item-action.tsx b/apps/web/core/components/modules/module-list-item-action.tsx similarity index 100% rename from web/core/components/modules/module-list-item-action.tsx rename to apps/web/core/components/modules/module-list-item-action.tsx diff --git a/web/core/components/modules/module-list-item.tsx b/apps/web/core/components/modules/module-list-item.tsx similarity index 100% rename from web/core/components/modules/module-list-item.tsx rename to apps/web/core/components/modules/module-list-item.tsx diff --git a/web/core/components/modules/module-peek-overview.tsx b/apps/web/core/components/modules/module-peek-overview.tsx similarity index 100% rename from web/core/components/modules/module-peek-overview.tsx rename to apps/web/core/components/modules/module-peek-overview.tsx diff --git a/web/core/components/modules/module-status-dropdown.tsx b/apps/web/core/components/modules/module-status-dropdown.tsx similarity index 100% rename from web/core/components/modules/module-status-dropdown.tsx rename to apps/web/core/components/modules/module-status-dropdown.tsx diff --git a/web/core/components/modules/module-view-header.tsx b/apps/web/core/components/modules/module-view-header.tsx similarity index 100% rename from web/core/components/modules/module-view-header.tsx rename to apps/web/core/components/modules/module-view-header.tsx diff --git a/web/core/components/modules/modules-list-view.tsx b/apps/web/core/components/modules/modules-list-view.tsx similarity index 100% rename from web/core/components/modules/modules-list-view.tsx rename to apps/web/core/components/modules/modules-list-view.tsx diff --git a/web/core/components/modules/quick-actions.tsx b/apps/web/core/components/modules/quick-actions.tsx similarity index 100% rename from web/core/components/modules/quick-actions.tsx rename to apps/web/core/components/modules/quick-actions.tsx diff --git a/web/core/components/modules/select/index.ts b/apps/web/core/components/modules/select/index.ts similarity index 100% rename from web/core/components/modules/select/index.ts rename to apps/web/core/components/modules/select/index.ts diff --git a/web/core/components/modules/select/status.tsx b/apps/web/core/components/modules/select/status.tsx similarity index 100% rename from web/core/components/modules/select/status.tsx rename to apps/web/core/components/modules/select/status.tsx diff --git a/web/core/components/modules/sidebar-select/index.ts b/apps/web/core/components/modules/sidebar-select/index.ts similarity index 100% rename from web/core/components/modules/sidebar-select/index.ts rename to apps/web/core/components/modules/sidebar-select/index.ts diff --git a/web/core/components/modules/sidebar-select/select-status.tsx b/apps/web/core/components/modules/sidebar-select/select-status.tsx similarity index 100% rename from web/core/components/modules/sidebar-select/select-status.tsx rename to apps/web/core/components/modules/sidebar-select/select-status.tsx diff --git a/web/core/components/onboarding/create-or-join-workspaces.tsx b/apps/web/core/components/onboarding/create-or-join-workspaces.tsx similarity index 100% rename from web/core/components/onboarding/create-or-join-workspaces.tsx rename to apps/web/core/components/onboarding/create-or-join-workspaces.tsx diff --git a/web/core/components/onboarding/create-workspace.tsx b/apps/web/core/components/onboarding/create-workspace.tsx similarity index 100% rename from web/core/components/onboarding/create-workspace.tsx rename to apps/web/core/components/onboarding/create-workspace.tsx diff --git a/web/core/components/onboarding/header.tsx b/apps/web/core/components/onboarding/header.tsx similarity index 100% rename from web/core/components/onboarding/header.tsx rename to apps/web/core/components/onboarding/header.tsx diff --git a/web/core/components/onboarding/index.ts b/apps/web/core/components/onboarding/index.ts similarity index 100% rename from web/core/components/onboarding/index.ts rename to apps/web/core/components/onboarding/index.ts diff --git a/web/core/components/onboarding/invitations.tsx b/apps/web/core/components/onboarding/invitations.tsx similarity index 100% rename from web/core/components/onboarding/invitations.tsx rename to apps/web/core/components/onboarding/invitations.tsx diff --git a/web/core/components/onboarding/invite-members.tsx b/apps/web/core/components/onboarding/invite-members.tsx similarity index 100% rename from web/core/components/onboarding/invite-members.tsx rename to apps/web/core/components/onboarding/invite-members.tsx diff --git a/web/core/components/onboarding/profile-setup.tsx b/apps/web/core/components/onboarding/profile-setup.tsx similarity index 100% rename from web/core/components/onboarding/profile-setup.tsx rename to apps/web/core/components/onboarding/profile-setup.tsx diff --git a/web/core/components/onboarding/step-indicator.tsx b/apps/web/core/components/onboarding/step-indicator.tsx similarity index 100% rename from web/core/components/onboarding/step-indicator.tsx rename to apps/web/core/components/onboarding/step-indicator.tsx diff --git a/web/core/components/onboarding/switch-account-dropdown.tsx b/apps/web/core/components/onboarding/switch-account-dropdown.tsx similarity index 100% rename from web/core/components/onboarding/switch-account-dropdown.tsx rename to apps/web/core/components/onboarding/switch-account-dropdown.tsx diff --git a/web/core/components/onboarding/switch-account-modal.tsx b/apps/web/core/components/onboarding/switch-account-modal.tsx similarity index 100% rename from web/core/components/onboarding/switch-account-modal.tsx rename to apps/web/core/components/onboarding/switch-account-modal.tsx diff --git a/web/core/components/onboarding/tour/index.ts b/apps/web/core/components/onboarding/tour/index.ts similarity index 100% rename from web/core/components/onboarding/tour/index.ts rename to apps/web/core/components/onboarding/tour/index.ts diff --git a/web/core/components/onboarding/tour/root.tsx b/apps/web/core/components/onboarding/tour/root.tsx similarity index 100% rename from web/core/components/onboarding/tour/root.tsx rename to apps/web/core/components/onboarding/tour/root.tsx diff --git a/web/core/components/onboarding/tour/sidebar.tsx b/apps/web/core/components/onboarding/tour/sidebar.tsx similarity index 100% rename from web/core/components/onboarding/tour/sidebar.tsx rename to apps/web/core/components/onboarding/tour/sidebar.tsx diff --git a/web/core/components/pages/dropdowns/actions.tsx b/apps/web/core/components/pages/dropdowns/actions.tsx similarity index 100% rename from web/core/components/pages/dropdowns/actions.tsx rename to apps/web/core/components/pages/dropdowns/actions.tsx diff --git a/web/core/components/pages/dropdowns/index.ts b/apps/web/core/components/pages/dropdowns/index.ts similarity index 100% rename from web/core/components/pages/dropdowns/index.ts rename to apps/web/core/components/pages/dropdowns/index.ts diff --git a/web/core/components/pages/editor/editor-body.tsx b/apps/web/core/components/pages/editor/editor-body.tsx similarity index 100% rename from web/core/components/pages/editor/editor-body.tsx rename to apps/web/core/components/pages/editor/editor-body.tsx diff --git a/web/core/components/pages/editor/header/index.ts b/apps/web/core/components/pages/editor/header/index.ts similarity index 100% rename from web/core/components/pages/editor/header/index.ts rename to apps/web/core/components/pages/editor/header/index.ts diff --git a/web/core/components/pages/editor/header/logo-picker.tsx b/apps/web/core/components/pages/editor/header/logo-picker.tsx similarity index 100% rename from web/core/components/pages/editor/header/logo-picker.tsx rename to apps/web/core/components/pages/editor/header/logo-picker.tsx diff --git a/web/core/components/pages/editor/header/root.tsx b/apps/web/core/components/pages/editor/header/root.tsx similarity index 100% rename from web/core/components/pages/editor/header/root.tsx rename to apps/web/core/components/pages/editor/header/root.tsx diff --git a/web/core/components/pages/editor/index.ts b/apps/web/core/components/pages/editor/index.ts similarity index 100% rename from web/core/components/pages/editor/index.ts rename to apps/web/core/components/pages/editor/index.ts diff --git a/web/core/components/pages/editor/page-root.tsx b/apps/web/core/components/pages/editor/page-root.tsx similarity index 100% rename from web/core/components/pages/editor/page-root.tsx rename to apps/web/core/components/pages/editor/page-root.tsx diff --git a/web/core/components/pages/editor/summary/content-browser.tsx b/apps/web/core/components/pages/editor/summary/content-browser.tsx similarity index 100% rename from web/core/components/pages/editor/summary/content-browser.tsx rename to apps/web/core/components/pages/editor/summary/content-browser.tsx diff --git a/web/core/components/pages/editor/summary/heading-components.tsx b/apps/web/core/components/pages/editor/summary/heading-components.tsx similarity index 100% rename from web/core/components/pages/editor/summary/heading-components.tsx rename to apps/web/core/components/pages/editor/summary/heading-components.tsx diff --git a/web/core/components/pages/editor/summary/index.ts b/apps/web/core/components/pages/editor/summary/index.ts similarity index 100% rename from web/core/components/pages/editor/summary/index.ts rename to apps/web/core/components/pages/editor/summary/index.ts diff --git a/web/core/components/pages/editor/title.tsx b/apps/web/core/components/pages/editor/title.tsx similarity index 100% rename from web/core/components/pages/editor/title.tsx rename to apps/web/core/components/pages/editor/title.tsx diff --git a/web/core/components/pages/editor/toolbar/color-dropdown.tsx b/apps/web/core/components/pages/editor/toolbar/color-dropdown.tsx similarity index 100% rename from web/core/components/pages/editor/toolbar/color-dropdown.tsx rename to apps/web/core/components/pages/editor/toolbar/color-dropdown.tsx diff --git a/web/core/components/pages/editor/toolbar/index.ts b/apps/web/core/components/pages/editor/toolbar/index.ts similarity index 100% rename from web/core/components/pages/editor/toolbar/index.ts rename to apps/web/core/components/pages/editor/toolbar/index.ts diff --git a/web/core/components/pages/editor/toolbar/options-dropdown.tsx b/apps/web/core/components/pages/editor/toolbar/options-dropdown.tsx similarity index 100% rename from web/core/components/pages/editor/toolbar/options-dropdown.tsx rename to apps/web/core/components/pages/editor/toolbar/options-dropdown.tsx diff --git a/web/core/components/pages/editor/toolbar/root.tsx b/apps/web/core/components/pages/editor/toolbar/root.tsx similarity index 100% rename from web/core/components/pages/editor/toolbar/root.tsx rename to apps/web/core/components/pages/editor/toolbar/root.tsx diff --git a/web/core/components/pages/editor/toolbar/toolbar.tsx b/apps/web/core/components/pages/editor/toolbar/toolbar.tsx similarity index 100% rename from web/core/components/pages/editor/toolbar/toolbar.tsx rename to apps/web/core/components/pages/editor/toolbar/toolbar.tsx diff --git a/web/core/components/pages/header/actions.tsx b/apps/web/core/components/pages/header/actions.tsx similarity index 100% rename from web/core/components/pages/header/actions.tsx rename to apps/web/core/components/pages/header/actions.tsx diff --git a/web/core/components/pages/header/archived-badge.tsx b/apps/web/core/components/pages/header/archived-badge.tsx similarity index 100% rename from web/core/components/pages/header/archived-badge.tsx rename to apps/web/core/components/pages/header/archived-badge.tsx diff --git a/web/core/components/pages/header/copy-link-control.tsx b/apps/web/core/components/pages/header/copy-link-control.tsx similarity index 100% rename from web/core/components/pages/header/copy-link-control.tsx rename to apps/web/core/components/pages/header/copy-link-control.tsx diff --git a/web/core/components/pages/header/favorite-control.tsx b/apps/web/core/components/pages/header/favorite-control.tsx similarity index 100% rename from web/core/components/pages/header/favorite-control.tsx rename to apps/web/core/components/pages/header/favorite-control.tsx diff --git a/web/core/components/pages/header/index.ts b/apps/web/core/components/pages/header/index.ts similarity index 100% rename from web/core/components/pages/header/index.ts rename to apps/web/core/components/pages/header/index.ts diff --git a/web/core/components/pages/header/offline-badge.tsx b/apps/web/core/components/pages/header/offline-badge.tsx similarity index 100% rename from web/core/components/pages/header/offline-badge.tsx rename to apps/web/core/components/pages/header/offline-badge.tsx diff --git a/web/core/components/pages/header/root.tsx b/apps/web/core/components/pages/header/root.tsx similarity index 100% rename from web/core/components/pages/header/root.tsx rename to apps/web/core/components/pages/header/root.tsx diff --git a/web/core/components/pages/index.ts b/apps/web/core/components/pages/index.ts similarity index 100% rename from web/core/components/pages/index.ts rename to apps/web/core/components/pages/index.ts diff --git a/web/core/components/pages/list/applied-filters/index.ts b/apps/web/core/components/pages/list/applied-filters/index.ts similarity index 100% rename from web/core/components/pages/list/applied-filters/index.ts rename to apps/web/core/components/pages/list/applied-filters/index.ts diff --git a/web/core/components/pages/list/applied-filters/root.tsx b/apps/web/core/components/pages/list/applied-filters/root.tsx similarity index 100% rename from web/core/components/pages/list/applied-filters/root.tsx rename to apps/web/core/components/pages/list/applied-filters/root.tsx diff --git a/web/core/components/pages/list/block-item-action.tsx b/apps/web/core/components/pages/list/block-item-action.tsx similarity index 100% rename from web/core/components/pages/list/block-item-action.tsx rename to apps/web/core/components/pages/list/block-item-action.tsx diff --git a/web/core/components/pages/list/block.tsx b/apps/web/core/components/pages/list/block.tsx similarity index 100% rename from web/core/components/pages/list/block.tsx rename to apps/web/core/components/pages/list/block.tsx diff --git a/web/core/components/pages/list/filters/index.ts b/apps/web/core/components/pages/list/filters/index.ts similarity index 100% rename from web/core/components/pages/list/filters/index.ts rename to apps/web/core/components/pages/list/filters/index.ts diff --git a/web/core/components/pages/list/filters/root.tsx b/apps/web/core/components/pages/list/filters/root.tsx similarity index 100% rename from web/core/components/pages/list/filters/root.tsx rename to apps/web/core/components/pages/list/filters/root.tsx diff --git a/web/core/components/pages/list/index.ts b/apps/web/core/components/pages/list/index.ts similarity index 100% rename from web/core/components/pages/list/index.ts rename to apps/web/core/components/pages/list/index.ts diff --git a/web/core/components/pages/list/order-by.tsx b/apps/web/core/components/pages/list/order-by.tsx similarity index 100% rename from web/core/components/pages/list/order-by.tsx rename to apps/web/core/components/pages/list/order-by.tsx diff --git a/web/core/components/pages/list/root.tsx b/apps/web/core/components/pages/list/root.tsx similarity index 100% rename from web/core/components/pages/list/root.tsx rename to apps/web/core/components/pages/list/root.tsx diff --git a/web/core/components/pages/list/search-input.tsx b/apps/web/core/components/pages/list/search-input.tsx similarity index 100% rename from web/core/components/pages/list/search-input.tsx rename to apps/web/core/components/pages/list/search-input.tsx diff --git a/web/core/components/pages/list/tab-navigation.tsx b/apps/web/core/components/pages/list/tab-navigation.tsx similarity index 100% rename from web/core/components/pages/list/tab-navigation.tsx rename to apps/web/core/components/pages/list/tab-navigation.tsx diff --git a/web/core/components/pages/loaders/index.ts b/apps/web/core/components/pages/loaders/index.ts similarity index 100% rename from web/core/components/pages/loaders/index.ts rename to apps/web/core/components/pages/loaders/index.ts diff --git a/web/core/components/pages/loaders/page-content-loader.tsx b/apps/web/core/components/pages/loaders/page-content-loader.tsx similarity index 100% rename from web/core/components/pages/loaders/page-content-loader.tsx rename to apps/web/core/components/pages/loaders/page-content-loader.tsx diff --git a/web/core/components/pages/loaders/page-loader.tsx b/apps/web/core/components/pages/loaders/page-loader.tsx similarity index 100% rename from web/core/components/pages/loaders/page-loader.tsx rename to apps/web/core/components/pages/loaders/page-loader.tsx diff --git a/web/core/components/pages/modals/create-page-modal.tsx b/apps/web/core/components/pages/modals/create-page-modal.tsx similarity index 100% rename from web/core/components/pages/modals/create-page-modal.tsx rename to apps/web/core/components/pages/modals/create-page-modal.tsx diff --git a/web/core/components/pages/modals/delete-page-modal.tsx b/apps/web/core/components/pages/modals/delete-page-modal.tsx similarity index 100% rename from web/core/components/pages/modals/delete-page-modal.tsx rename to apps/web/core/components/pages/modals/delete-page-modal.tsx diff --git a/web/core/components/pages/modals/export-page-modal.tsx b/apps/web/core/components/pages/modals/export-page-modal.tsx similarity index 100% rename from web/core/components/pages/modals/export-page-modal.tsx rename to apps/web/core/components/pages/modals/export-page-modal.tsx diff --git a/web/core/components/pages/modals/index.ts b/apps/web/core/components/pages/modals/index.ts similarity index 100% rename from web/core/components/pages/modals/index.ts rename to apps/web/core/components/pages/modals/index.ts diff --git a/web/core/components/pages/modals/page-form.tsx b/apps/web/core/components/pages/modals/page-form.tsx similarity index 100% rename from web/core/components/pages/modals/page-form.tsx rename to apps/web/core/components/pages/modals/page-form.tsx diff --git a/web/core/components/pages/navigation-pane/index.ts b/apps/web/core/components/pages/navigation-pane/index.ts similarity index 100% rename from web/core/components/pages/navigation-pane/index.ts rename to apps/web/core/components/pages/navigation-pane/index.ts diff --git a/web/core/components/pages/navigation-pane/root.tsx b/apps/web/core/components/pages/navigation-pane/root.tsx similarity index 100% rename from web/core/components/pages/navigation-pane/root.tsx rename to apps/web/core/components/pages/navigation-pane/root.tsx diff --git a/web/core/components/pages/navigation-pane/tab-panels/assets.tsx b/apps/web/core/components/pages/navigation-pane/tab-panels/assets.tsx similarity index 100% rename from web/core/components/pages/navigation-pane/tab-panels/assets.tsx rename to apps/web/core/components/pages/navigation-pane/tab-panels/assets.tsx diff --git a/web/core/components/pages/navigation-pane/tab-panels/info/actors-info.tsx b/apps/web/core/components/pages/navigation-pane/tab-panels/info/actors-info.tsx similarity index 100% rename from web/core/components/pages/navigation-pane/tab-panels/info/actors-info.tsx rename to apps/web/core/components/pages/navigation-pane/tab-panels/info/actors-info.tsx diff --git a/web/core/components/pages/navigation-pane/tab-panels/info/document-info.tsx b/apps/web/core/components/pages/navigation-pane/tab-panels/info/document-info.tsx similarity index 100% rename from web/core/components/pages/navigation-pane/tab-panels/info/document-info.tsx rename to apps/web/core/components/pages/navigation-pane/tab-panels/info/document-info.tsx diff --git a/web/core/components/pages/navigation-pane/tab-panels/info/root.tsx b/apps/web/core/components/pages/navigation-pane/tab-panels/info/root.tsx similarity index 100% rename from web/core/components/pages/navigation-pane/tab-panels/info/root.tsx rename to apps/web/core/components/pages/navigation-pane/tab-panels/info/root.tsx diff --git a/web/core/components/pages/navigation-pane/tab-panels/info/version-history.tsx b/apps/web/core/components/pages/navigation-pane/tab-panels/info/version-history.tsx similarity index 100% rename from web/core/components/pages/navigation-pane/tab-panels/info/version-history.tsx rename to apps/web/core/components/pages/navigation-pane/tab-panels/info/version-history.tsx diff --git a/web/core/components/pages/navigation-pane/tab-panels/outline.tsx b/apps/web/core/components/pages/navigation-pane/tab-panels/outline.tsx similarity index 100% rename from web/core/components/pages/navigation-pane/tab-panels/outline.tsx rename to apps/web/core/components/pages/navigation-pane/tab-panels/outline.tsx diff --git a/web/core/components/pages/navigation-pane/tab-panels/root.tsx b/apps/web/core/components/pages/navigation-pane/tab-panels/root.tsx similarity index 100% rename from web/core/components/pages/navigation-pane/tab-panels/root.tsx rename to apps/web/core/components/pages/navigation-pane/tab-panels/root.tsx diff --git a/web/core/components/pages/navigation-pane/tabs-list.tsx b/apps/web/core/components/pages/navigation-pane/tabs-list.tsx similarity index 100% rename from web/core/components/pages/navigation-pane/tabs-list.tsx rename to apps/web/core/components/pages/navigation-pane/tabs-list.tsx diff --git a/web/core/components/pages/pages-list-main-content.tsx b/apps/web/core/components/pages/pages-list-main-content.tsx similarity index 100% rename from web/core/components/pages/pages-list-main-content.tsx rename to apps/web/core/components/pages/pages-list-main-content.tsx diff --git a/web/core/components/pages/pages-list-view.tsx b/apps/web/core/components/pages/pages-list-view.tsx similarity index 100% rename from web/core/components/pages/pages-list-view.tsx rename to apps/web/core/components/pages/pages-list-view.tsx diff --git a/web/core/components/pages/version/editor.tsx b/apps/web/core/components/pages/version/editor.tsx similarity index 100% rename from web/core/components/pages/version/editor.tsx rename to apps/web/core/components/pages/version/editor.tsx diff --git a/web/core/components/pages/version/index.ts b/apps/web/core/components/pages/version/index.ts similarity index 100% rename from web/core/components/pages/version/index.ts rename to apps/web/core/components/pages/version/index.ts diff --git a/web/core/components/pages/version/main-content.tsx b/apps/web/core/components/pages/version/main-content.tsx similarity index 100% rename from web/core/components/pages/version/main-content.tsx rename to apps/web/core/components/pages/version/main-content.tsx diff --git a/web/core/components/pages/version/root.tsx b/apps/web/core/components/pages/version/root.tsx similarity index 100% rename from web/core/components/pages/version/root.tsx rename to apps/web/core/components/pages/version/root.tsx diff --git a/web/core/components/preferences/list.tsx b/apps/web/core/components/preferences/list.tsx similarity index 100% rename from web/core/components/preferences/list.tsx rename to apps/web/core/components/preferences/list.tsx diff --git a/web/core/components/preferences/section.tsx b/apps/web/core/components/preferences/section.tsx similarity index 100% rename from web/core/components/preferences/section.tsx rename to apps/web/core/components/preferences/section.tsx diff --git a/web/core/components/profile/activity/activity-list.tsx b/apps/web/core/components/profile/activity/activity-list.tsx similarity index 100% rename from web/core/components/profile/activity/activity-list.tsx rename to apps/web/core/components/profile/activity/activity-list.tsx diff --git a/web/core/components/profile/activity/download-button.tsx b/apps/web/core/components/profile/activity/download-button.tsx similarity index 100% rename from web/core/components/profile/activity/download-button.tsx rename to apps/web/core/components/profile/activity/download-button.tsx diff --git a/web/core/components/profile/activity/index.ts b/apps/web/core/components/profile/activity/index.ts similarity index 100% rename from web/core/components/profile/activity/index.ts rename to apps/web/core/components/profile/activity/index.ts diff --git a/web/core/components/profile/activity/profile-activity-list.tsx b/apps/web/core/components/profile/activity/profile-activity-list.tsx similarity index 100% rename from web/core/components/profile/activity/profile-activity-list.tsx rename to apps/web/core/components/profile/activity/profile-activity-list.tsx diff --git a/web/core/components/profile/activity/workspace-activity-list.tsx b/apps/web/core/components/profile/activity/workspace-activity-list.tsx similarity index 100% rename from web/core/components/profile/activity/workspace-activity-list.tsx rename to apps/web/core/components/profile/activity/workspace-activity-list.tsx diff --git a/web/core/components/profile/form.tsx b/apps/web/core/components/profile/form.tsx similarity index 100% rename from web/core/components/profile/form.tsx rename to apps/web/core/components/profile/form.tsx diff --git a/web/core/components/profile/index.ts b/apps/web/core/components/profile/index.ts similarity index 100% rename from web/core/components/profile/index.ts rename to apps/web/core/components/profile/index.ts diff --git a/web/core/components/profile/notification/email-notification-form.tsx b/apps/web/core/components/profile/notification/email-notification-form.tsx similarity index 100% rename from web/core/components/profile/notification/email-notification-form.tsx rename to apps/web/core/components/profile/notification/email-notification-form.tsx diff --git a/web/core/components/profile/notification/index.ts b/apps/web/core/components/profile/notification/index.ts similarity index 100% rename from web/core/components/profile/notification/index.ts rename to apps/web/core/components/profile/notification/index.ts diff --git a/web/core/components/profile/overview/activity.tsx b/apps/web/core/components/profile/overview/activity.tsx similarity index 100% rename from web/core/components/profile/overview/activity.tsx rename to apps/web/core/components/profile/overview/activity.tsx diff --git a/web/core/components/profile/overview/index.ts b/apps/web/core/components/profile/overview/index.ts similarity index 100% rename from web/core/components/profile/overview/index.ts rename to apps/web/core/components/profile/overview/index.ts diff --git a/web/core/components/profile/overview/priority-distribution.tsx b/apps/web/core/components/profile/overview/priority-distribution.tsx similarity index 100% rename from web/core/components/profile/overview/priority-distribution.tsx rename to apps/web/core/components/profile/overview/priority-distribution.tsx diff --git a/web/core/components/profile/overview/state-distribution.tsx b/apps/web/core/components/profile/overview/state-distribution.tsx similarity index 100% rename from web/core/components/profile/overview/state-distribution.tsx rename to apps/web/core/components/profile/overview/state-distribution.tsx diff --git a/web/core/components/profile/overview/stats.tsx b/apps/web/core/components/profile/overview/stats.tsx similarity index 100% rename from web/core/components/profile/overview/stats.tsx rename to apps/web/core/components/profile/overview/stats.tsx diff --git a/web/core/components/profile/overview/workload.tsx b/apps/web/core/components/profile/overview/workload.tsx similarity index 100% rename from web/core/components/profile/overview/workload.tsx rename to apps/web/core/components/profile/overview/workload.tsx diff --git a/web/core/components/profile/preferences/language-timezone.tsx b/apps/web/core/components/profile/preferences/language-timezone.tsx similarity index 100% rename from web/core/components/profile/preferences/language-timezone.tsx rename to apps/web/core/components/profile/preferences/language-timezone.tsx diff --git a/web/core/components/profile/profile-issues-filter.tsx b/apps/web/core/components/profile/profile-issues-filter.tsx similarity index 100% rename from web/core/components/profile/profile-issues-filter.tsx rename to apps/web/core/components/profile/profile-issues-filter.tsx diff --git a/web/core/components/profile/profile-issues.tsx b/apps/web/core/components/profile/profile-issues.tsx similarity index 100% rename from web/core/components/profile/profile-issues.tsx rename to apps/web/core/components/profile/profile-issues.tsx diff --git a/web/core/components/profile/profile-setting-content-header.tsx b/apps/web/core/components/profile/profile-setting-content-header.tsx similarity index 100% rename from web/core/components/profile/profile-setting-content-header.tsx rename to apps/web/core/components/profile/profile-setting-content-header.tsx diff --git a/web/core/components/profile/profile-setting-content-wrapper.tsx b/apps/web/core/components/profile/profile-setting-content-wrapper.tsx similarity index 100% rename from web/core/components/profile/profile-setting-content-wrapper.tsx rename to apps/web/core/components/profile/profile-setting-content-wrapper.tsx diff --git a/web/core/components/profile/sidebar.tsx b/apps/web/core/components/profile/sidebar.tsx similarity index 100% rename from web/core/components/profile/sidebar.tsx rename to apps/web/core/components/profile/sidebar.tsx diff --git a/web/core/components/profile/start-of-week-preference.tsx b/apps/web/core/components/profile/start-of-week-preference.tsx similarity index 100% rename from web/core/components/profile/start-of-week-preference.tsx rename to apps/web/core/components/profile/start-of-week-preference.tsx diff --git a/web/core/components/profile/time.tsx b/apps/web/core/components/profile/time.tsx similarity index 100% rename from web/core/components/profile/time.tsx rename to apps/web/core/components/profile/time.tsx diff --git a/web/core/components/project-states/create-update/create.tsx b/apps/web/core/components/project-states/create-update/create.tsx similarity index 100% rename from web/core/components/project-states/create-update/create.tsx rename to apps/web/core/components/project-states/create-update/create.tsx diff --git a/web/core/components/project-states/create-update/form.tsx b/apps/web/core/components/project-states/create-update/form.tsx similarity index 100% rename from web/core/components/project-states/create-update/form.tsx rename to apps/web/core/components/project-states/create-update/form.tsx diff --git a/web/core/components/project-states/create-update/index.ts b/apps/web/core/components/project-states/create-update/index.ts similarity index 100% rename from web/core/components/project-states/create-update/index.ts rename to apps/web/core/components/project-states/create-update/index.ts diff --git a/web/core/components/project-states/create-update/update.tsx b/apps/web/core/components/project-states/create-update/update.tsx similarity index 100% rename from web/core/components/project-states/create-update/update.tsx rename to apps/web/core/components/project-states/create-update/update.tsx diff --git a/web/core/components/project-states/group-item.tsx b/apps/web/core/components/project-states/group-item.tsx similarity index 100% rename from web/core/components/project-states/group-item.tsx rename to apps/web/core/components/project-states/group-item.tsx diff --git a/web/core/components/project-states/group-list.tsx b/apps/web/core/components/project-states/group-list.tsx similarity index 100% rename from web/core/components/project-states/group-list.tsx rename to apps/web/core/components/project-states/group-list.tsx diff --git a/web/core/components/project-states/index.ts b/apps/web/core/components/project-states/index.ts similarity index 100% rename from web/core/components/project-states/index.ts rename to apps/web/core/components/project-states/index.ts diff --git a/web/core/components/project-states/loader.tsx b/apps/web/core/components/project-states/loader.tsx similarity index 100% rename from web/core/components/project-states/loader.tsx rename to apps/web/core/components/project-states/loader.tsx diff --git a/web/core/components/project-states/options/delete.tsx b/apps/web/core/components/project-states/options/delete.tsx similarity index 100% rename from web/core/components/project-states/options/delete.tsx rename to apps/web/core/components/project-states/options/delete.tsx diff --git a/web/core/components/project-states/options/index.ts b/apps/web/core/components/project-states/options/index.ts similarity index 100% rename from web/core/components/project-states/options/index.ts rename to apps/web/core/components/project-states/options/index.ts diff --git a/web/core/components/project-states/options/mark-as-default.tsx b/apps/web/core/components/project-states/options/mark-as-default.tsx similarity index 100% rename from web/core/components/project-states/options/mark-as-default.tsx rename to apps/web/core/components/project-states/options/mark-as-default.tsx diff --git a/web/core/components/project-states/root.tsx b/apps/web/core/components/project-states/root.tsx similarity index 100% rename from web/core/components/project-states/root.tsx rename to apps/web/core/components/project-states/root.tsx diff --git a/web/core/components/project-states/state-delete-modal.tsx b/apps/web/core/components/project-states/state-delete-modal.tsx similarity index 100% rename from web/core/components/project-states/state-delete-modal.tsx rename to apps/web/core/components/project-states/state-delete-modal.tsx diff --git a/web/core/components/project-states/state-item-title.tsx b/apps/web/core/components/project-states/state-item-title.tsx similarity index 100% rename from web/core/components/project-states/state-item-title.tsx rename to apps/web/core/components/project-states/state-item-title.tsx diff --git a/web/core/components/project-states/state-item.tsx b/apps/web/core/components/project-states/state-item.tsx similarity index 100% rename from web/core/components/project-states/state-item.tsx rename to apps/web/core/components/project-states/state-item.tsx diff --git a/web/core/components/project-states/state-list.tsx b/apps/web/core/components/project-states/state-list.tsx similarity index 100% rename from web/core/components/project-states/state-list.tsx rename to apps/web/core/components/project-states/state-list.tsx diff --git a/web/core/components/project/applied-filters/access.tsx b/apps/web/core/components/project/applied-filters/access.tsx similarity index 100% rename from web/core/components/project/applied-filters/access.tsx rename to apps/web/core/components/project/applied-filters/access.tsx diff --git a/web/core/components/project/applied-filters/date.tsx b/apps/web/core/components/project/applied-filters/date.tsx similarity index 100% rename from web/core/components/project/applied-filters/date.tsx rename to apps/web/core/components/project/applied-filters/date.tsx diff --git a/web/core/components/project/applied-filters/index.ts b/apps/web/core/components/project/applied-filters/index.ts similarity index 100% rename from web/core/components/project/applied-filters/index.ts rename to apps/web/core/components/project/applied-filters/index.ts diff --git a/web/core/components/project/applied-filters/members.tsx b/apps/web/core/components/project/applied-filters/members.tsx similarity index 100% rename from web/core/components/project/applied-filters/members.tsx rename to apps/web/core/components/project/applied-filters/members.tsx diff --git a/web/core/components/project/applied-filters/project-display-filters.tsx b/apps/web/core/components/project/applied-filters/project-display-filters.tsx similarity index 100% rename from web/core/components/project/applied-filters/project-display-filters.tsx rename to apps/web/core/components/project/applied-filters/project-display-filters.tsx diff --git a/web/core/components/project/applied-filters/root.tsx b/apps/web/core/components/project/applied-filters/root.tsx similarity index 100% rename from web/core/components/project/applied-filters/root.tsx rename to apps/web/core/components/project/applied-filters/root.tsx diff --git a/web/core/components/project/card-list.tsx b/apps/web/core/components/project/card-list.tsx similarity index 100% rename from web/core/components/project/card-list.tsx rename to apps/web/core/components/project/card-list.tsx diff --git a/web/core/components/project/card.tsx b/apps/web/core/components/project/card.tsx similarity index 100% rename from web/core/components/project/card.tsx rename to apps/web/core/components/project/card.tsx diff --git a/web/core/components/project/confirm-project-member-remove.tsx b/apps/web/core/components/project/confirm-project-member-remove.tsx similarity index 100% rename from web/core/components/project/confirm-project-member-remove.tsx rename to apps/web/core/components/project/confirm-project-member-remove.tsx diff --git a/web/core/components/project/create-project-modal.tsx b/apps/web/core/components/project/create-project-modal.tsx similarity index 100% rename from web/core/components/project/create-project-modal.tsx rename to apps/web/core/components/project/create-project-modal.tsx diff --git a/web/core/components/project/create/common-attributes.tsx b/apps/web/core/components/project/create/common-attributes.tsx similarity index 100% rename from web/core/components/project/create/common-attributes.tsx rename to apps/web/core/components/project/create/common-attributes.tsx diff --git a/web/core/components/project/create/header.tsx b/apps/web/core/components/project/create/header.tsx similarity index 100% rename from web/core/components/project/create/header.tsx rename to apps/web/core/components/project/create/header.tsx diff --git a/web/core/components/project/create/project-create-buttons.tsx b/apps/web/core/components/project/create/project-create-buttons.tsx similarity index 100% rename from web/core/components/project/create/project-create-buttons.tsx rename to apps/web/core/components/project/create/project-create-buttons.tsx diff --git a/web/core/components/project/delete-project-modal.tsx b/apps/web/core/components/project/delete-project-modal.tsx similarity index 100% rename from web/core/components/project/delete-project-modal.tsx rename to apps/web/core/components/project/delete-project-modal.tsx diff --git a/web/core/components/project/dropdowns/filters/access.tsx b/apps/web/core/components/project/dropdowns/filters/access.tsx similarity index 100% rename from web/core/components/project/dropdowns/filters/access.tsx rename to apps/web/core/components/project/dropdowns/filters/access.tsx diff --git a/web/core/components/project/dropdowns/filters/created-at.tsx b/apps/web/core/components/project/dropdowns/filters/created-at.tsx similarity index 100% rename from web/core/components/project/dropdowns/filters/created-at.tsx rename to apps/web/core/components/project/dropdowns/filters/created-at.tsx diff --git a/web/core/components/project/dropdowns/filters/index.ts b/apps/web/core/components/project/dropdowns/filters/index.ts similarity index 100% rename from web/core/components/project/dropdowns/filters/index.ts rename to apps/web/core/components/project/dropdowns/filters/index.ts diff --git a/web/core/components/project/dropdowns/filters/lead.tsx b/apps/web/core/components/project/dropdowns/filters/lead.tsx similarity index 100% rename from web/core/components/project/dropdowns/filters/lead.tsx rename to apps/web/core/components/project/dropdowns/filters/lead.tsx diff --git a/web/core/components/project/dropdowns/filters/members.tsx b/apps/web/core/components/project/dropdowns/filters/members.tsx similarity index 100% rename from web/core/components/project/dropdowns/filters/members.tsx rename to apps/web/core/components/project/dropdowns/filters/members.tsx diff --git a/web/core/components/project/dropdowns/filters/root.tsx b/apps/web/core/components/project/dropdowns/filters/root.tsx similarity index 100% rename from web/core/components/project/dropdowns/filters/root.tsx rename to apps/web/core/components/project/dropdowns/filters/root.tsx diff --git a/web/core/components/project/dropdowns/index.ts b/apps/web/core/components/project/dropdowns/index.ts similarity index 100% rename from web/core/components/project/dropdowns/index.ts rename to apps/web/core/components/project/dropdowns/index.ts diff --git a/web/core/components/project/dropdowns/order-by.tsx b/apps/web/core/components/project/dropdowns/order-by.tsx similarity index 100% rename from web/core/components/project/dropdowns/order-by.tsx rename to apps/web/core/components/project/dropdowns/order-by.tsx diff --git a/web/core/components/project/empty-state.tsx b/apps/web/core/components/project/empty-state.tsx similarity index 100% rename from web/core/components/project/empty-state.tsx rename to apps/web/core/components/project/empty-state.tsx diff --git a/web/core/components/project/filters.tsx b/apps/web/core/components/project/filters.tsx similarity index 100% rename from web/core/components/project/filters.tsx rename to apps/web/core/components/project/filters.tsx diff --git a/web/core/components/project/form-loader.tsx b/apps/web/core/components/project/form-loader.tsx similarity index 100% rename from web/core/components/project/form-loader.tsx rename to apps/web/core/components/project/form-loader.tsx diff --git a/web/core/components/project/form.tsx b/apps/web/core/components/project/form.tsx similarity index 100% rename from web/core/components/project/form.tsx rename to apps/web/core/components/project/form.tsx diff --git a/web/core/components/project/header.tsx b/apps/web/core/components/project/header.tsx similarity index 100% rename from web/core/components/project/header.tsx rename to apps/web/core/components/project/header.tsx diff --git a/web/core/components/project/index.ts b/apps/web/core/components/project/index.ts similarity index 100% rename from web/core/components/project/index.ts rename to apps/web/core/components/project/index.ts diff --git a/web/core/components/project/integration-card.tsx b/apps/web/core/components/project/integration-card.tsx similarity index 100% rename from web/core/components/project/integration-card.tsx rename to apps/web/core/components/project/integration-card.tsx diff --git a/web/core/components/project/join-project-modal.tsx b/apps/web/core/components/project/join-project-modal.tsx similarity index 100% rename from web/core/components/project/join-project-modal.tsx rename to apps/web/core/components/project/join-project-modal.tsx diff --git a/web/core/components/project/leave-project-modal.tsx b/apps/web/core/components/project/leave-project-modal.tsx similarity index 100% rename from web/core/components/project/leave-project-modal.tsx rename to apps/web/core/components/project/leave-project-modal.tsx diff --git a/web/core/components/project/member-list-item.tsx b/apps/web/core/components/project/member-list-item.tsx similarity index 100% rename from web/core/components/project/member-list-item.tsx rename to apps/web/core/components/project/member-list-item.tsx diff --git a/web/core/components/project/member-list.tsx b/apps/web/core/components/project/member-list.tsx similarity index 100% rename from web/core/components/project/member-list.tsx rename to apps/web/core/components/project/member-list.tsx diff --git a/web/core/components/project/member-select.tsx b/apps/web/core/components/project/member-select.tsx similarity index 100% rename from web/core/components/project/member-select.tsx rename to apps/web/core/components/project/member-select.tsx diff --git a/web/core/components/project/multi-select-modal.tsx b/apps/web/core/components/project/multi-select-modal.tsx similarity index 100% rename from web/core/components/project/multi-select-modal.tsx rename to apps/web/core/components/project/multi-select-modal.tsx diff --git a/web/core/components/project/project-feature-update.tsx b/apps/web/core/components/project/project-feature-update.tsx similarity index 100% rename from web/core/components/project/project-feature-update.tsx rename to apps/web/core/components/project/project-feature-update.tsx diff --git a/web/core/components/project/project-network-icon.tsx b/apps/web/core/components/project/project-network-icon.tsx similarity index 100% rename from web/core/components/project/project-network-icon.tsx rename to apps/web/core/components/project/project-network-icon.tsx diff --git a/web/core/components/project/project-settings-member-defaults.tsx b/apps/web/core/components/project/project-settings-member-defaults.tsx similarity index 100% rename from web/core/components/project/project-settings-member-defaults.tsx rename to apps/web/core/components/project/project-settings-member-defaults.tsx diff --git a/web/core/components/project/publish-project/index.ts b/apps/web/core/components/project/publish-project/index.ts similarity index 100% rename from web/core/components/project/publish-project/index.ts rename to apps/web/core/components/project/publish-project/index.ts diff --git a/web/core/components/project/publish-project/modal.tsx b/apps/web/core/components/project/publish-project/modal.tsx similarity index 100% rename from web/core/components/project/publish-project/modal.tsx rename to apps/web/core/components/project/publish-project/modal.tsx diff --git a/web/core/components/project/root.tsx b/apps/web/core/components/project/root.tsx similarity index 100% rename from web/core/components/project/root.tsx rename to apps/web/core/components/project/root.tsx diff --git a/web/core/components/project/search-projects.tsx b/apps/web/core/components/project/search-projects.tsx similarity index 100% rename from web/core/components/project/search-projects.tsx rename to apps/web/core/components/project/search-projects.tsx diff --git a/web/core/components/project/send-project-invitation-modal.tsx b/apps/web/core/components/project/send-project-invitation-modal.tsx similarity index 100% rename from web/core/components/project/send-project-invitation-modal.tsx rename to apps/web/core/components/project/send-project-invitation-modal.tsx diff --git a/web/core/components/project/settings/archive-project/archive-restore-modal.tsx b/apps/web/core/components/project/settings/archive-project/archive-restore-modal.tsx similarity index 100% rename from web/core/components/project/settings/archive-project/archive-restore-modal.tsx rename to apps/web/core/components/project/settings/archive-project/archive-restore-modal.tsx diff --git a/web/core/components/project/settings/archive-project/index.tsx b/apps/web/core/components/project/settings/archive-project/index.tsx similarity index 100% rename from web/core/components/project/settings/archive-project/index.tsx rename to apps/web/core/components/project/settings/archive-project/index.tsx diff --git a/web/core/components/project/settings/archive-project/selection.tsx b/apps/web/core/components/project/settings/archive-project/selection.tsx similarity index 100% rename from web/core/components/project/settings/archive-project/selection.tsx rename to apps/web/core/components/project/settings/archive-project/selection.tsx diff --git a/web/core/components/project/settings/delete-project-section.tsx b/apps/web/core/components/project/settings/delete-project-section.tsx similarity index 100% rename from web/core/components/project/settings/delete-project-section.tsx rename to apps/web/core/components/project/settings/delete-project-section.tsx diff --git a/web/core/components/project/settings/features-list.tsx b/apps/web/core/components/project/settings/features-list.tsx similarity index 100% rename from web/core/components/project/settings/features-list.tsx rename to apps/web/core/components/project/settings/features-list.tsx diff --git a/web/core/components/project/settings/index.ts b/apps/web/core/components/project/settings/index.ts similarity index 100% rename from web/core/components/project/settings/index.ts rename to apps/web/core/components/project/settings/index.ts diff --git a/web/core/components/project/settings/member-columns.tsx b/apps/web/core/components/project/settings/member-columns.tsx similarity index 100% rename from web/core/components/project/settings/member-columns.tsx rename to apps/web/core/components/project/settings/member-columns.tsx diff --git a/web/core/components/settings/content-wrapper.tsx b/apps/web/core/components/settings/content-wrapper.tsx similarity index 100% rename from web/core/components/settings/content-wrapper.tsx rename to apps/web/core/components/settings/content-wrapper.tsx diff --git a/web/core/components/settings/header.tsx b/apps/web/core/components/settings/header.tsx similarity index 100% rename from web/core/components/settings/header.tsx rename to apps/web/core/components/settings/header.tsx diff --git a/web/core/components/settings/heading.tsx b/apps/web/core/components/settings/heading.tsx similarity index 100% rename from web/core/components/settings/heading.tsx rename to apps/web/core/components/settings/heading.tsx diff --git a/web/core/components/settings/helper.ts b/apps/web/core/components/settings/helper.ts similarity index 100% rename from web/core/components/settings/helper.ts rename to apps/web/core/components/settings/helper.ts diff --git a/web/core/components/settings/index.ts b/apps/web/core/components/settings/index.ts similarity index 100% rename from web/core/components/settings/index.ts rename to apps/web/core/components/settings/index.ts diff --git a/web/core/components/settings/layout.tsx b/apps/web/core/components/settings/layout.tsx similarity index 100% rename from web/core/components/settings/layout.tsx rename to apps/web/core/components/settings/layout.tsx diff --git a/web/core/components/settings/mobile/index.ts b/apps/web/core/components/settings/mobile/index.ts similarity index 100% rename from web/core/components/settings/mobile/index.ts rename to apps/web/core/components/settings/mobile/index.ts diff --git a/web/core/components/settings/mobile/nav.tsx b/apps/web/core/components/settings/mobile/nav.tsx similarity index 100% rename from web/core/components/settings/mobile/nav.tsx rename to apps/web/core/components/settings/mobile/nav.tsx diff --git a/web/core/components/settings/project/sidebar/index.ts b/apps/web/core/components/settings/project/sidebar/index.ts similarity index 100% rename from web/core/components/settings/project/sidebar/index.ts rename to apps/web/core/components/settings/project/sidebar/index.ts diff --git a/web/core/components/settings/project/sidebar/nav-item-children.tsx b/apps/web/core/components/settings/project/sidebar/nav-item-children.tsx similarity index 100% rename from web/core/components/settings/project/sidebar/nav-item-children.tsx rename to apps/web/core/components/settings/project/sidebar/nav-item-children.tsx diff --git a/web/core/components/settings/project/sidebar/root.tsx b/apps/web/core/components/settings/project/sidebar/root.tsx similarity index 100% rename from web/core/components/settings/project/sidebar/root.tsx rename to apps/web/core/components/settings/project/sidebar/root.tsx diff --git a/web/core/components/settings/sidebar/header.tsx b/apps/web/core/components/settings/sidebar/header.tsx similarity index 100% rename from web/core/components/settings/sidebar/header.tsx rename to apps/web/core/components/settings/sidebar/header.tsx diff --git a/web/core/components/settings/sidebar/index.ts b/apps/web/core/components/settings/sidebar/index.ts similarity index 100% rename from web/core/components/settings/sidebar/index.ts rename to apps/web/core/components/settings/sidebar/index.ts diff --git a/web/core/components/settings/sidebar/nav-item.tsx b/apps/web/core/components/settings/sidebar/nav-item.tsx similarity index 100% rename from web/core/components/settings/sidebar/nav-item.tsx rename to apps/web/core/components/settings/sidebar/nav-item.tsx diff --git a/web/core/components/settings/sidebar/root.tsx b/apps/web/core/components/settings/sidebar/root.tsx similarity index 100% rename from web/core/components/settings/sidebar/root.tsx rename to apps/web/core/components/settings/sidebar/root.tsx diff --git a/web/core/components/settings/tabs.tsx b/apps/web/core/components/settings/tabs.tsx similarity index 100% rename from web/core/components/settings/tabs.tsx rename to apps/web/core/components/settings/tabs.tsx diff --git a/web/core/components/sidebar/index.ts b/apps/web/core/components/sidebar/index.ts similarity index 100% rename from web/core/components/sidebar/index.ts rename to apps/web/core/components/sidebar/index.ts diff --git a/web/core/components/sidebar/sidebar-navigation.tsx b/apps/web/core/components/sidebar/sidebar-navigation.tsx similarity index 100% rename from web/core/components/sidebar/sidebar-navigation.tsx rename to apps/web/core/components/sidebar/sidebar-navigation.tsx diff --git a/web/core/components/stickies/action-bar.tsx b/apps/web/core/components/stickies/action-bar.tsx similarity index 100% rename from web/core/components/stickies/action-bar.tsx rename to apps/web/core/components/stickies/action-bar.tsx diff --git a/web/core/components/stickies/delete-modal.tsx b/apps/web/core/components/stickies/delete-modal.tsx similarity index 100% rename from web/core/components/stickies/delete-modal.tsx rename to apps/web/core/components/stickies/delete-modal.tsx diff --git a/web/core/components/stickies/index.ts b/apps/web/core/components/stickies/index.ts similarity index 100% rename from web/core/components/stickies/index.ts rename to apps/web/core/components/stickies/index.ts diff --git a/web/core/components/stickies/layout/index.ts b/apps/web/core/components/stickies/layout/index.ts similarity index 100% rename from web/core/components/stickies/layout/index.ts rename to apps/web/core/components/stickies/layout/index.ts diff --git a/web/core/components/stickies/layout/stickies-infinite.tsx b/apps/web/core/components/stickies/layout/stickies-infinite.tsx similarity index 100% rename from web/core/components/stickies/layout/stickies-infinite.tsx rename to apps/web/core/components/stickies/layout/stickies-infinite.tsx diff --git a/web/core/components/stickies/layout/stickies-list.tsx b/apps/web/core/components/stickies/layout/stickies-list.tsx similarity index 100% rename from web/core/components/stickies/layout/stickies-list.tsx rename to apps/web/core/components/stickies/layout/stickies-list.tsx diff --git a/web/core/components/stickies/layout/stickies-loader.tsx b/apps/web/core/components/stickies/layout/stickies-loader.tsx similarity index 100% rename from web/core/components/stickies/layout/stickies-loader.tsx rename to apps/web/core/components/stickies/layout/stickies-loader.tsx diff --git a/web/core/components/stickies/layout/stickies-truncated.tsx b/apps/web/core/components/stickies/layout/stickies-truncated.tsx similarity index 100% rename from web/core/components/stickies/layout/stickies-truncated.tsx rename to apps/web/core/components/stickies/layout/stickies-truncated.tsx diff --git a/web/core/components/stickies/layout/sticky-dnd-wrapper.tsx b/apps/web/core/components/stickies/layout/sticky-dnd-wrapper.tsx similarity index 100% rename from web/core/components/stickies/layout/sticky-dnd-wrapper.tsx rename to apps/web/core/components/stickies/layout/sticky-dnd-wrapper.tsx diff --git a/web/core/components/stickies/layout/sticky.helpers.ts b/apps/web/core/components/stickies/layout/sticky.helpers.ts similarity index 100% rename from web/core/components/stickies/layout/sticky.helpers.ts rename to apps/web/core/components/stickies/layout/sticky.helpers.ts diff --git a/web/core/components/stickies/modal/index.tsx b/apps/web/core/components/stickies/modal/index.tsx similarity index 100% rename from web/core/components/stickies/modal/index.tsx rename to apps/web/core/components/stickies/modal/index.tsx diff --git a/web/core/components/stickies/modal/search.tsx b/apps/web/core/components/stickies/modal/search.tsx similarity index 100% rename from web/core/components/stickies/modal/search.tsx rename to apps/web/core/components/stickies/modal/search.tsx diff --git a/web/core/components/stickies/modal/stickies.tsx b/apps/web/core/components/stickies/modal/stickies.tsx similarity index 100% rename from web/core/components/stickies/modal/stickies.tsx rename to apps/web/core/components/stickies/modal/stickies.tsx diff --git a/web/core/components/stickies/sticky/index.ts b/apps/web/core/components/stickies/sticky/index.ts similarity index 100% rename from web/core/components/stickies/sticky/index.ts rename to apps/web/core/components/stickies/sticky/index.ts diff --git a/web/core/components/stickies/sticky/inputs.tsx b/apps/web/core/components/stickies/sticky/inputs.tsx similarity index 100% rename from web/core/components/stickies/sticky/inputs.tsx rename to apps/web/core/components/stickies/sticky/inputs.tsx diff --git a/web/core/components/stickies/sticky/root.tsx b/apps/web/core/components/stickies/sticky/root.tsx similarity index 100% rename from web/core/components/stickies/sticky/root.tsx rename to apps/web/core/components/stickies/sticky/root.tsx diff --git a/web/core/components/stickies/sticky/sticky-item-drag-handle.tsx b/apps/web/core/components/stickies/sticky/sticky-item-drag-handle.tsx similarity index 100% rename from web/core/components/stickies/sticky/sticky-item-drag-handle.tsx rename to apps/web/core/components/stickies/sticky/sticky-item-drag-handle.tsx diff --git a/web/core/components/stickies/sticky/use-operations.tsx b/apps/web/core/components/stickies/sticky/use-operations.tsx similarity index 100% rename from web/core/components/stickies/sticky/use-operations.tsx rename to apps/web/core/components/stickies/sticky/use-operations.tsx diff --git a/web/core/components/stickies/widget.tsx b/apps/web/core/components/stickies/widget.tsx similarity index 100% rename from web/core/components/stickies/widget.tsx rename to apps/web/core/components/stickies/widget.tsx diff --git a/web/core/components/ui/empty-space.tsx b/apps/web/core/components/ui/empty-space.tsx similarity index 100% rename from web/core/components/ui/empty-space.tsx rename to apps/web/core/components/ui/empty-space.tsx diff --git a/web/core/components/ui/index.ts b/apps/web/core/components/ui/index.ts similarity index 100% rename from web/core/components/ui/index.ts rename to apps/web/core/components/ui/index.ts diff --git a/web/core/components/ui/integration-and-import-export-banner.tsx b/apps/web/core/components/ui/integration-and-import-export-banner.tsx similarity index 100% rename from web/core/components/ui/integration-and-import-export-banner.tsx rename to apps/web/core/components/ui/integration-and-import-export-banner.tsx diff --git a/web/core/components/ui/labels-list.tsx b/apps/web/core/components/ui/labels-list.tsx similarity index 100% rename from web/core/components/ui/labels-list.tsx rename to apps/web/core/components/ui/labels-list.tsx diff --git a/web/core/components/ui/loader/cycle-module-board-loader.tsx b/apps/web/core/components/ui/loader/cycle-module-board-loader.tsx similarity index 100% rename from web/core/components/ui/loader/cycle-module-board-loader.tsx rename to apps/web/core/components/ui/loader/cycle-module-board-loader.tsx diff --git a/web/core/components/ui/loader/cycle-module-list-loader.tsx b/apps/web/core/components/ui/loader/cycle-module-list-loader.tsx similarity index 100% rename from web/core/components/ui/loader/cycle-module-list-loader.tsx rename to apps/web/core/components/ui/loader/cycle-module-list-loader.tsx diff --git a/web/core/components/ui/loader/index.ts b/apps/web/core/components/ui/loader/index.ts similarity index 100% rename from web/core/components/ui/loader/index.ts rename to apps/web/core/components/ui/loader/index.ts diff --git a/web/core/components/ui/loader/layouts/calendar-layout-loader.tsx b/apps/web/core/components/ui/loader/layouts/calendar-layout-loader.tsx similarity index 100% rename from web/core/components/ui/loader/layouts/calendar-layout-loader.tsx rename to apps/web/core/components/ui/loader/layouts/calendar-layout-loader.tsx diff --git a/web/core/components/ui/loader/layouts/gantt-layout-loader.tsx b/apps/web/core/components/ui/loader/layouts/gantt-layout-loader.tsx similarity index 100% rename from web/core/components/ui/loader/layouts/gantt-layout-loader.tsx rename to apps/web/core/components/ui/loader/layouts/gantt-layout-loader.tsx diff --git a/web/core/components/ui/loader/layouts/index.ts b/apps/web/core/components/ui/loader/layouts/index.ts similarity index 100% rename from web/core/components/ui/loader/layouts/index.ts rename to apps/web/core/components/ui/loader/layouts/index.ts diff --git a/web/core/components/ui/loader/layouts/kanban-layout-loader.tsx b/apps/web/core/components/ui/loader/layouts/kanban-layout-loader.tsx similarity index 100% rename from web/core/components/ui/loader/layouts/kanban-layout-loader.tsx rename to apps/web/core/components/ui/loader/layouts/kanban-layout-loader.tsx diff --git a/web/core/components/ui/loader/layouts/list-layout-loader.tsx b/apps/web/core/components/ui/loader/layouts/list-layout-loader.tsx similarity index 100% rename from web/core/components/ui/loader/layouts/list-layout-loader.tsx rename to apps/web/core/components/ui/loader/layouts/list-layout-loader.tsx diff --git a/web/core/components/ui/loader/layouts/members-layout-loader.tsx b/apps/web/core/components/ui/loader/layouts/members-layout-loader.tsx similarity index 100% rename from web/core/components/ui/loader/layouts/members-layout-loader.tsx rename to apps/web/core/components/ui/loader/layouts/members-layout-loader.tsx diff --git a/web/core/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx b/apps/web/core/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx similarity index 100% rename from web/core/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx rename to apps/web/core/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx diff --git a/web/core/components/ui/loader/layouts/project-inbox/inbox-sidebar-loader.tsx b/apps/web/core/components/ui/loader/layouts/project-inbox/inbox-sidebar-loader.tsx similarity index 100% rename from web/core/components/ui/loader/layouts/project-inbox/inbox-sidebar-loader.tsx rename to apps/web/core/components/ui/loader/layouts/project-inbox/inbox-sidebar-loader.tsx diff --git a/web/core/components/ui/loader/layouts/project-inbox/index.ts b/apps/web/core/components/ui/loader/layouts/project-inbox/index.ts similarity index 100% rename from web/core/components/ui/loader/layouts/project-inbox/index.ts rename to apps/web/core/components/ui/loader/layouts/project-inbox/index.ts diff --git a/web/core/components/ui/loader/layouts/spreadsheet-layout-loader.tsx b/apps/web/core/components/ui/loader/layouts/spreadsheet-layout-loader.tsx similarity index 100% rename from web/core/components/ui/loader/layouts/spreadsheet-layout-loader.tsx rename to apps/web/core/components/ui/loader/layouts/spreadsheet-layout-loader.tsx diff --git a/web/core/components/ui/loader/notification-loader.tsx b/apps/web/core/components/ui/loader/notification-loader.tsx similarity index 100% rename from web/core/components/ui/loader/notification-loader.tsx rename to apps/web/core/components/ui/loader/notification-loader.tsx diff --git a/web/core/components/ui/loader/pages-loader.tsx b/apps/web/core/components/ui/loader/pages-loader.tsx similarity index 100% rename from web/core/components/ui/loader/pages-loader.tsx rename to apps/web/core/components/ui/loader/pages-loader.tsx diff --git a/web/core/components/ui/loader/projects-loader.tsx b/apps/web/core/components/ui/loader/projects-loader.tsx similarity index 100% rename from web/core/components/ui/loader/projects-loader.tsx rename to apps/web/core/components/ui/loader/projects-loader.tsx diff --git a/web/core/components/ui/loader/settings/activity.tsx b/apps/web/core/components/ui/loader/settings/activity.tsx similarity index 100% rename from web/core/components/ui/loader/settings/activity.tsx rename to apps/web/core/components/ui/loader/settings/activity.tsx diff --git a/web/core/components/ui/loader/settings/api-token.tsx b/apps/web/core/components/ui/loader/settings/api-token.tsx similarity index 100% rename from web/core/components/ui/loader/settings/api-token.tsx rename to apps/web/core/components/ui/loader/settings/api-token.tsx diff --git a/web/core/components/ui/loader/settings/email.tsx b/apps/web/core/components/ui/loader/settings/email.tsx similarity index 100% rename from web/core/components/ui/loader/settings/email.tsx rename to apps/web/core/components/ui/loader/settings/email.tsx diff --git a/web/core/components/ui/loader/settings/import-and-export.tsx b/apps/web/core/components/ui/loader/settings/import-and-export.tsx similarity index 100% rename from web/core/components/ui/loader/settings/import-and-export.tsx rename to apps/web/core/components/ui/loader/settings/import-and-export.tsx diff --git a/web/core/components/ui/loader/settings/index.ts b/apps/web/core/components/ui/loader/settings/index.ts similarity index 100% rename from web/core/components/ui/loader/settings/index.ts rename to apps/web/core/components/ui/loader/settings/index.ts diff --git a/web/core/components/ui/loader/settings/integration.tsx b/apps/web/core/components/ui/loader/settings/integration.tsx similarity index 100% rename from web/core/components/ui/loader/settings/integration.tsx rename to apps/web/core/components/ui/loader/settings/integration.tsx diff --git a/web/core/components/ui/loader/settings/members.tsx b/apps/web/core/components/ui/loader/settings/members.tsx similarity index 100% rename from web/core/components/ui/loader/settings/members.tsx rename to apps/web/core/components/ui/loader/settings/members.tsx diff --git a/web/core/components/ui/loader/settings/web-hook.tsx b/apps/web/core/components/ui/loader/settings/web-hook.tsx similarity index 100% rename from web/core/components/ui/loader/settings/web-hook.tsx rename to apps/web/core/components/ui/loader/settings/web-hook.tsx diff --git a/web/core/components/ui/loader/utils.tsx b/apps/web/core/components/ui/loader/utils.tsx similarity index 100% rename from web/core/components/ui/loader/utils.tsx rename to apps/web/core/components/ui/loader/utils.tsx diff --git a/web/core/components/ui/loader/view-list-loader.tsx b/apps/web/core/components/ui/loader/view-list-loader.tsx similarity index 100% rename from web/core/components/ui/loader/view-list-loader.tsx rename to apps/web/core/components/ui/loader/view-list-loader.tsx diff --git a/web/core/components/ui/markdown-to-component.tsx b/apps/web/core/components/ui/markdown-to-component.tsx similarity index 100% rename from web/core/components/ui/markdown-to-component.tsx rename to apps/web/core/components/ui/markdown-to-component.tsx diff --git a/web/core/components/ui/profile-empty-state.tsx b/apps/web/core/components/ui/profile-empty-state.tsx similarity index 100% rename from web/core/components/ui/profile-empty-state.tsx rename to apps/web/core/components/ui/profile-empty-state.tsx diff --git a/web/core/components/user/index.ts b/apps/web/core/components/user/index.ts similarity index 100% rename from web/core/components/user/index.ts rename to apps/web/core/components/user/index.ts diff --git a/web/core/components/user/user-greetings.tsx b/apps/web/core/components/user/user-greetings.tsx similarity index 100% rename from web/core/components/user/user-greetings.tsx rename to apps/web/core/components/user/user-greetings.tsx diff --git a/web/core/components/views/applied-filters/access.tsx b/apps/web/core/components/views/applied-filters/access.tsx similarity index 100% rename from web/core/components/views/applied-filters/access.tsx rename to apps/web/core/components/views/applied-filters/access.tsx diff --git a/web/core/components/views/applied-filters/index.tsx b/apps/web/core/components/views/applied-filters/index.tsx similarity index 100% rename from web/core/components/views/applied-filters/index.tsx rename to apps/web/core/components/views/applied-filters/index.tsx diff --git a/web/core/components/views/applied-filters/root.tsx b/apps/web/core/components/views/applied-filters/root.tsx similarity index 100% rename from web/core/components/views/applied-filters/root.tsx rename to apps/web/core/components/views/applied-filters/root.tsx diff --git a/web/core/components/views/delete-view-modal.tsx b/apps/web/core/components/views/delete-view-modal.tsx similarity index 100% rename from web/core/components/views/delete-view-modal.tsx rename to apps/web/core/components/views/delete-view-modal.tsx diff --git a/web/core/components/views/filters/filter-selection.tsx b/apps/web/core/components/views/filters/filter-selection.tsx similarity index 100% rename from web/core/components/views/filters/filter-selection.tsx rename to apps/web/core/components/views/filters/filter-selection.tsx diff --git a/web/core/components/views/filters/order-by.tsx b/apps/web/core/components/views/filters/order-by.tsx similarity index 100% rename from web/core/components/views/filters/order-by.tsx rename to apps/web/core/components/views/filters/order-by.tsx diff --git a/web/core/components/views/form.tsx b/apps/web/core/components/views/form.tsx similarity index 100% rename from web/core/components/views/form.tsx rename to apps/web/core/components/views/form.tsx diff --git a/web/core/components/views/helper.tsx b/apps/web/core/components/views/helper.tsx similarity index 100% rename from web/core/components/views/helper.tsx rename to apps/web/core/components/views/helper.tsx diff --git a/web/core/components/views/index.ts b/apps/web/core/components/views/index.ts similarity index 100% rename from web/core/components/views/index.ts rename to apps/web/core/components/views/index.ts diff --git a/web/core/components/views/modal.tsx b/apps/web/core/components/views/modal.tsx similarity index 100% rename from web/core/components/views/modal.tsx rename to apps/web/core/components/views/modal.tsx diff --git a/web/core/components/views/quick-actions.tsx b/apps/web/core/components/views/quick-actions.tsx similarity index 100% rename from web/core/components/views/quick-actions.tsx rename to apps/web/core/components/views/quick-actions.tsx diff --git a/web/core/components/views/update-view-component.tsx b/apps/web/core/components/views/update-view-component.tsx similarity index 100% rename from web/core/components/views/update-view-component.tsx rename to apps/web/core/components/views/update-view-component.tsx diff --git a/web/core/components/views/view-list-header.tsx b/apps/web/core/components/views/view-list-header.tsx similarity index 100% rename from web/core/components/views/view-list-header.tsx rename to apps/web/core/components/views/view-list-header.tsx diff --git a/web/core/components/views/view-list-item-action.tsx b/apps/web/core/components/views/view-list-item-action.tsx similarity index 100% rename from web/core/components/views/view-list-item-action.tsx rename to apps/web/core/components/views/view-list-item-action.tsx diff --git a/web/core/components/views/view-list-item.tsx b/apps/web/core/components/views/view-list-item.tsx similarity index 100% rename from web/core/components/views/view-list-item.tsx rename to apps/web/core/components/views/view-list-item.tsx diff --git a/web/core/components/views/views-list.tsx b/apps/web/core/components/views/views-list.tsx similarity index 100% rename from web/core/components/views/views-list.tsx rename to apps/web/core/components/views/views-list.tsx diff --git a/web/core/components/web-hooks/create-webhook-modal.tsx b/apps/web/core/components/web-hooks/create-webhook-modal.tsx similarity index 100% rename from web/core/components/web-hooks/create-webhook-modal.tsx rename to apps/web/core/components/web-hooks/create-webhook-modal.tsx diff --git a/web/core/components/web-hooks/delete-webhook-modal.tsx b/apps/web/core/components/web-hooks/delete-webhook-modal.tsx similarity index 100% rename from web/core/components/web-hooks/delete-webhook-modal.tsx rename to apps/web/core/components/web-hooks/delete-webhook-modal.tsx diff --git a/web/core/components/web-hooks/empty-state.tsx b/apps/web/core/components/web-hooks/empty-state.tsx similarity index 100% rename from web/core/components/web-hooks/empty-state.tsx rename to apps/web/core/components/web-hooks/empty-state.tsx diff --git a/web/core/components/web-hooks/form/delete-section.tsx b/apps/web/core/components/web-hooks/form/delete-section.tsx similarity index 100% rename from web/core/components/web-hooks/form/delete-section.tsx rename to apps/web/core/components/web-hooks/form/delete-section.tsx diff --git a/web/core/components/web-hooks/form/event-types.tsx b/apps/web/core/components/web-hooks/form/event-types.tsx similarity index 100% rename from web/core/components/web-hooks/form/event-types.tsx rename to apps/web/core/components/web-hooks/form/event-types.tsx diff --git a/web/core/components/web-hooks/form/form.tsx b/apps/web/core/components/web-hooks/form/form.tsx similarity index 100% rename from web/core/components/web-hooks/form/form.tsx rename to apps/web/core/components/web-hooks/form/form.tsx diff --git a/web/core/components/web-hooks/form/index.ts b/apps/web/core/components/web-hooks/form/index.ts similarity index 100% rename from web/core/components/web-hooks/form/index.ts rename to apps/web/core/components/web-hooks/form/index.ts diff --git a/web/core/components/web-hooks/form/individual-event-options.tsx b/apps/web/core/components/web-hooks/form/individual-event-options.tsx similarity index 100% rename from web/core/components/web-hooks/form/individual-event-options.tsx rename to apps/web/core/components/web-hooks/form/individual-event-options.tsx diff --git a/web/core/components/web-hooks/form/input.tsx b/apps/web/core/components/web-hooks/form/input.tsx similarity index 100% rename from web/core/components/web-hooks/form/input.tsx rename to apps/web/core/components/web-hooks/form/input.tsx diff --git a/web/core/components/web-hooks/form/secret-key.tsx b/apps/web/core/components/web-hooks/form/secret-key.tsx similarity index 100% rename from web/core/components/web-hooks/form/secret-key.tsx rename to apps/web/core/components/web-hooks/form/secret-key.tsx diff --git a/web/core/components/web-hooks/form/toggle.tsx b/apps/web/core/components/web-hooks/form/toggle.tsx similarity index 100% rename from web/core/components/web-hooks/form/toggle.tsx rename to apps/web/core/components/web-hooks/form/toggle.tsx diff --git a/web/core/components/web-hooks/generated-hook-details.tsx b/apps/web/core/components/web-hooks/generated-hook-details.tsx similarity index 100% rename from web/core/components/web-hooks/generated-hook-details.tsx rename to apps/web/core/components/web-hooks/generated-hook-details.tsx diff --git a/web/core/components/web-hooks/index.ts b/apps/web/core/components/web-hooks/index.ts similarity index 100% rename from web/core/components/web-hooks/index.ts rename to apps/web/core/components/web-hooks/index.ts diff --git a/web/core/components/web-hooks/utils.ts b/apps/web/core/components/web-hooks/utils.ts similarity index 100% rename from web/core/components/web-hooks/utils.ts rename to apps/web/core/components/web-hooks/utils.ts diff --git a/web/core/components/web-hooks/webhooks-list-item.tsx b/apps/web/core/components/web-hooks/webhooks-list-item.tsx similarity index 100% rename from web/core/components/web-hooks/webhooks-list-item.tsx rename to apps/web/core/components/web-hooks/webhooks-list-item.tsx diff --git a/web/core/components/web-hooks/webhooks-list.tsx b/apps/web/core/components/web-hooks/webhooks-list.tsx similarity index 100% rename from web/core/components/web-hooks/webhooks-list.tsx rename to apps/web/core/components/web-hooks/webhooks-list.tsx diff --git a/web/core/components/workspace-notifications/index.ts b/apps/web/core/components/workspace-notifications/index.ts similarity index 100% rename from web/core/components/workspace-notifications/index.ts rename to apps/web/core/components/workspace-notifications/index.ts diff --git a/web/core/components/workspace-notifications/notification-app-sidebar-option.tsx b/apps/web/core/components/workspace-notifications/notification-app-sidebar-option.tsx similarity index 100% rename from web/core/components/workspace-notifications/notification-app-sidebar-option.tsx rename to apps/web/core/components/workspace-notifications/notification-app-sidebar-option.tsx diff --git a/web/core/components/workspace-notifications/root.tsx b/apps/web/core/components/workspace-notifications/root.tsx similarity index 100% rename from web/core/components/workspace-notifications/root.tsx rename to apps/web/core/components/workspace-notifications/root.tsx diff --git a/web/core/components/workspace-notifications/sidebar/empty-state.tsx b/apps/web/core/components/workspace-notifications/sidebar/empty-state.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/empty-state.tsx rename to apps/web/core/components/workspace-notifications/sidebar/empty-state.tsx diff --git a/web/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx b/apps/web/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx rename to apps/web/core/components/workspace-notifications/sidebar/filters/applied-filter.tsx diff --git a/web/core/components/workspace-notifications/sidebar/filters/index.ts b/apps/web/core/components/workspace-notifications/sidebar/filters/index.ts similarity index 100% rename from web/core/components/workspace-notifications/sidebar/filters/index.ts rename to apps/web/core/components/workspace-notifications/sidebar/filters/index.ts diff --git a/web/core/components/workspace-notifications/sidebar/filters/menu/index.ts b/apps/web/core/components/workspace-notifications/sidebar/filters/menu/index.ts similarity index 100% rename from web/core/components/workspace-notifications/sidebar/filters/menu/index.ts rename to apps/web/core/components/workspace-notifications/sidebar/filters/menu/index.ts diff --git a/web/core/components/workspace-notifications/sidebar/filters/menu/menu-option-item.tsx b/apps/web/core/components/workspace-notifications/sidebar/filters/menu/menu-option-item.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/filters/menu/menu-option-item.tsx rename to apps/web/core/components/workspace-notifications/sidebar/filters/menu/menu-option-item.tsx diff --git a/web/core/components/workspace-notifications/sidebar/filters/menu/root.tsx b/apps/web/core/components/workspace-notifications/sidebar/filters/menu/root.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/filters/menu/root.tsx rename to apps/web/core/components/workspace-notifications/sidebar/filters/menu/root.tsx diff --git a/web/core/components/workspace-notifications/sidebar/header/index.ts b/apps/web/core/components/workspace-notifications/sidebar/header/index.ts similarity index 100% rename from web/core/components/workspace-notifications/sidebar/header/index.ts rename to apps/web/core/components/workspace-notifications/sidebar/header/index.ts diff --git a/web/core/components/workspace-notifications/sidebar/header/options/index.ts b/apps/web/core/components/workspace-notifications/sidebar/header/options/index.ts similarity index 100% rename from web/core/components/workspace-notifications/sidebar/header/options/index.ts rename to apps/web/core/components/workspace-notifications/sidebar/header/options/index.ts diff --git a/web/core/components/workspace-notifications/sidebar/header/options/menu-option/index.ts b/apps/web/core/components/workspace-notifications/sidebar/header/options/menu-option/index.ts similarity index 100% rename from web/core/components/workspace-notifications/sidebar/header/options/menu-option/index.ts rename to apps/web/core/components/workspace-notifications/sidebar/header/options/menu-option/index.ts diff --git a/web/core/components/workspace-notifications/sidebar/header/options/menu-option/menu-item.tsx b/apps/web/core/components/workspace-notifications/sidebar/header/options/menu-option/menu-item.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/header/options/menu-option/menu-item.tsx rename to apps/web/core/components/workspace-notifications/sidebar/header/options/menu-option/menu-item.tsx diff --git a/web/core/components/workspace-notifications/sidebar/header/options/menu-option/root.tsx b/apps/web/core/components/workspace-notifications/sidebar/header/options/menu-option/root.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/header/options/menu-option/root.tsx rename to apps/web/core/components/workspace-notifications/sidebar/header/options/menu-option/root.tsx diff --git a/web/core/components/workspace-notifications/sidebar/header/options/root.tsx b/apps/web/core/components/workspace-notifications/sidebar/header/options/root.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/header/options/root.tsx rename to apps/web/core/components/workspace-notifications/sidebar/header/options/root.tsx diff --git a/web/core/components/workspace-notifications/sidebar/header/root.tsx b/apps/web/core/components/workspace-notifications/sidebar/header/root.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/header/root.tsx rename to apps/web/core/components/workspace-notifications/sidebar/header/root.tsx diff --git a/web/core/components/workspace-notifications/sidebar/index.ts b/apps/web/core/components/workspace-notifications/sidebar/index.ts similarity index 100% rename from web/core/components/workspace-notifications/sidebar/index.ts rename to apps/web/core/components/workspace-notifications/sidebar/index.ts diff --git a/web/core/components/workspace-notifications/sidebar/loader.tsx b/apps/web/core/components/workspace-notifications/sidebar/loader.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/loader.tsx rename to apps/web/core/components/workspace-notifications/sidebar/loader.tsx diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/content.tsx b/apps/web/core/components/workspace-notifications/sidebar/notification-card/content.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/notification-card/content.tsx rename to apps/web/core/components/workspace-notifications/sidebar/notification-card/content.tsx diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/index.ts b/apps/web/core/components/workspace-notifications/sidebar/notification-card/index.ts similarity index 100% rename from web/core/components/workspace-notifications/sidebar/notification-card/index.ts rename to apps/web/core/components/workspace-notifications/sidebar/notification-card/index.ts diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/item.tsx b/apps/web/core/components/workspace-notifications/sidebar/notification-card/item.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/notification-card/item.tsx rename to apps/web/core/components/workspace-notifications/sidebar/notification-card/item.tsx diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx b/apps/web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx rename to apps/web/core/components/workspace-notifications/sidebar/notification-card/options/archive.tsx diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/options/button.tsx b/apps/web/core/components/workspace-notifications/sidebar/notification-card/options/button.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/notification-card/options/button.tsx rename to apps/web/core/components/workspace-notifications/sidebar/notification-card/options/button.tsx diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/options/index.ts b/apps/web/core/components/workspace-notifications/sidebar/notification-card/options/index.ts similarity index 100% rename from web/core/components/workspace-notifications/sidebar/notification-card/options/index.ts rename to apps/web/core/components/workspace-notifications/sidebar/notification-card/options/index.ts diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/options/read.tsx b/apps/web/core/components/workspace-notifications/sidebar/notification-card/options/read.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/notification-card/options/read.tsx rename to apps/web/core/components/workspace-notifications/sidebar/notification-card/options/read.tsx diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/options/root.tsx b/apps/web/core/components/workspace-notifications/sidebar/notification-card/options/root.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/notification-card/options/root.tsx rename to apps/web/core/components/workspace-notifications/sidebar/notification-card/options/root.tsx diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/index.ts b/apps/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/index.ts similarity index 100% rename from web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/index.ts rename to apps/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/index.ts diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/modal.tsx b/apps/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/modal.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/modal.tsx rename to apps/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/modal.tsx diff --git a/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/root.tsx b/apps/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/root.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/root.tsx rename to apps/web/core/components/workspace-notifications/sidebar/notification-card/options/snooze/root.tsx diff --git a/web/core/components/workspace-notifications/sidebar/root.tsx b/apps/web/core/components/workspace-notifications/sidebar/root.tsx similarity index 100% rename from web/core/components/workspace-notifications/sidebar/root.tsx rename to apps/web/core/components/workspace-notifications/sidebar/root.tsx diff --git a/web/core/components/workspace/ConfirmWorkspaceMemberRemove.tsx b/apps/web/core/components/workspace/ConfirmWorkspaceMemberRemove.tsx similarity index 100% rename from web/core/components/workspace/ConfirmWorkspaceMemberRemove.tsx rename to apps/web/core/components/workspace/ConfirmWorkspaceMemberRemove.tsx diff --git a/web/core/components/workspace/billing/comparison/base.tsx b/apps/web/core/components/workspace/billing/comparison/base.tsx similarity index 100% rename from web/core/components/workspace/billing/comparison/base.tsx rename to apps/web/core/components/workspace/billing/comparison/base.tsx diff --git a/web/core/components/workspace/billing/comparison/feature-detail.tsx b/apps/web/core/components/workspace/billing/comparison/feature-detail.tsx similarity index 100% rename from web/core/components/workspace/billing/comparison/feature-detail.tsx rename to apps/web/core/components/workspace/billing/comparison/feature-detail.tsx diff --git a/web/core/components/workspace/billing/comparison/index.ts b/apps/web/core/components/workspace/billing/comparison/index.ts similarity index 100% rename from web/core/components/workspace/billing/comparison/index.ts rename to apps/web/core/components/workspace/billing/comparison/index.ts diff --git a/web/core/components/workspace/billing/index.ts b/apps/web/core/components/workspace/billing/index.ts similarity index 100% rename from web/core/components/workspace/billing/index.ts rename to apps/web/core/components/workspace/billing/index.ts diff --git a/web/core/components/workspace/billing/subscription.ts b/apps/web/core/components/workspace/billing/subscription.ts similarity index 100% rename from web/core/components/workspace/billing/subscription.ts rename to apps/web/core/components/workspace/billing/subscription.ts diff --git a/web/core/components/workspace/confirm-workspace-member-remove.tsx b/apps/web/core/components/workspace/confirm-workspace-member-remove.tsx similarity index 100% rename from web/core/components/workspace/confirm-workspace-member-remove.tsx rename to apps/web/core/components/workspace/confirm-workspace-member-remove.tsx diff --git a/web/core/components/workspace/create-workspace-form.tsx b/apps/web/core/components/workspace/create-workspace-form.tsx similarity index 100% rename from web/core/components/workspace/create-workspace-form.tsx rename to apps/web/core/components/workspace/create-workspace-form.tsx diff --git a/web/core/components/workspace/delete-workspace-form.tsx b/apps/web/core/components/workspace/delete-workspace-form.tsx similarity index 100% rename from web/core/components/workspace/delete-workspace-form.tsx rename to apps/web/core/components/workspace/delete-workspace-form.tsx diff --git a/web/core/components/workspace/index.ts b/apps/web/core/components/workspace/index.ts similarity index 100% rename from web/core/components/workspace/index.ts rename to apps/web/core/components/workspace/index.ts diff --git a/web/core/components/workspace/invite-modal/actions.tsx b/apps/web/core/components/workspace/invite-modal/actions.tsx similarity index 100% rename from web/core/components/workspace/invite-modal/actions.tsx rename to apps/web/core/components/workspace/invite-modal/actions.tsx diff --git a/web/core/components/workspace/invite-modal/fields.tsx b/apps/web/core/components/workspace/invite-modal/fields.tsx similarity index 100% rename from web/core/components/workspace/invite-modal/fields.tsx rename to apps/web/core/components/workspace/invite-modal/fields.tsx diff --git a/web/core/components/workspace/invite-modal/form.tsx b/apps/web/core/components/workspace/invite-modal/form.tsx similarity index 100% rename from web/core/components/workspace/invite-modal/form.tsx rename to apps/web/core/components/workspace/invite-modal/form.tsx diff --git a/web/core/components/workspace/invite-modal/index.ts b/apps/web/core/components/workspace/invite-modal/index.ts similarity index 100% rename from web/core/components/workspace/invite-modal/index.ts rename to apps/web/core/components/workspace/invite-modal/index.ts diff --git a/web/core/components/workspace/logo.tsx b/apps/web/core/components/workspace/logo.tsx similarity index 100% rename from web/core/components/workspace/logo.tsx rename to apps/web/core/components/workspace/logo.tsx diff --git a/web/core/components/workspace/settings/index.ts b/apps/web/core/components/workspace/settings/index.ts similarity index 100% rename from web/core/components/workspace/settings/index.ts rename to apps/web/core/components/workspace/settings/index.ts diff --git a/web/core/components/workspace/settings/invitations-list-item.tsx b/apps/web/core/components/workspace/settings/invitations-list-item.tsx similarity index 100% rename from web/core/components/workspace/settings/invitations-list-item.tsx rename to apps/web/core/components/workspace/settings/invitations-list-item.tsx diff --git a/web/core/components/workspace/settings/member-columns.tsx b/apps/web/core/components/workspace/settings/member-columns.tsx similarity index 100% rename from web/core/components/workspace/settings/member-columns.tsx rename to apps/web/core/components/workspace/settings/member-columns.tsx diff --git a/web/core/components/workspace/settings/members-list-item.tsx b/apps/web/core/components/workspace/settings/members-list-item.tsx similarity index 100% rename from web/core/components/workspace/settings/members-list-item.tsx rename to apps/web/core/components/workspace/settings/members-list-item.tsx diff --git a/web/core/components/workspace/settings/members-list.tsx b/apps/web/core/components/workspace/settings/members-list.tsx similarity index 100% rename from web/core/components/workspace/settings/members-list.tsx rename to apps/web/core/components/workspace/settings/members-list.tsx diff --git a/web/core/components/workspace/settings/workspace-details.tsx b/apps/web/core/components/workspace/settings/workspace-details.tsx similarity index 100% rename from web/core/components/workspace/settings/workspace-details.tsx rename to apps/web/core/components/workspace/settings/workspace-details.tsx diff --git a/web/core/components/workspace/sidebar/dropdown-item.tsx b/apps/web/core/components/workspace/sidebar/dropdown-item.tsx similarity index 100% rename from web/core/components/workspace/sidebar/dropdown-item.tsx rename to apps/web/core/components/workspace/sidebar/dropdown-item.tsx diff --git a/web/core/components/workspace/sidebar/dropdown.tsx b/apps/web/core/components/workspace/sidebar/dropdown.tsx similarity index 100% rename from web/core/components/workspace/sidebar/dropdown.tsx rename to apps/web/core/components/workspace/sidebar/dropdown.tsx diff --git a/web/core/components/workspace/sidebar/favorites/favorite-folder.tsx b/apps/web/core/components/workspace/sidebar/favorites/favorite-folder.tsx similarity index 100% rename from web/core/components/workspace/sidebar/favorites/favorite-folder.tsx rename to apps/web/core/components/workspace/sidebar/favorites/favorite-folder.tsx diff --git a/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-drag-handle.tsx b/apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-drag-handle.tsx similarity index 100% rename from web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-drag-handle.tsx rename to apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-drag-handle.tsx diff --git a/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-quick-action.tsx b/apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-quick-action.tsx similarity index 100% rename from web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-quick-action.tsx rename to apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-quick-action.tsx diff --git a/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-title.tsx b/apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-title.tsx similarity index 100% rename from web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-title.tsx rename to apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-title.tsx diff --git a/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-wrapper.tsx b/apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-wrapper.tsx similarity index 100% rename from web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-wrapper.tsx rename to apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-wrapper.tsx diff --git a/web/core/components/workspace/sidebar/favorites/favorite-items/common/helper.tsx b/apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/helper.tsx similarity index 100% rename from web/core/components/workspace/sidebar/favorites/favorite-items/common/helper.tsx rename to apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/helper.tsx diff --git a/web/core/components/workspace/sidebar/favorites/favorite-items/common/index.ts b/apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/index.ts similarity index 100% rename from web/core/components/workspace/sidebar/favorites/favorite-items/common/index.ts rename to apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/index.ts diff --git a/web/core/components/workspace/sidebar/favorites/favorite-items/index.ts b/apps/web/core/components/workspace/sidebar/favorites/favorite-items/index.ts similarity index 100% rename from web/core/components/workspace/sidebar/favorites/favorite-items/index.ts rename to apps/web/core/components/workspace/sidebar/favorites/favorite-items/index.ts diff --git a/web/core/components/workspace/sidebar/favorites/favorite-items/root.tsx b/apps/web/core/components/workspace/sidebar/favorites/favorite-items/root.tsx similarity index 100% rename from web/core/components/workspace/sidebar/favorites/favorite-items/root.tsx rename to apps/web/core/components/workspace/sidebar/favorites/favorite-items/root.tsx diff --git a/web/core/components/workspace/sidebar/favorites/favorites-menu.tsx b/apps/web/core/components/workspace/sidebar/favorites/favorites-menu.tsx similarity index 100% rename from web/core/components/workspace/sidebar/favorites/favorites-menu.tsx rename to apps/web/core/components/workspace/sidebar/favorites/favorites-menu.tsx diff --git a/web/core/components/workspace/sidebar/favorites/favorites.helpers.ts b/apps/web/core/components/workspace/sidebar/favorites/favorites.helpers.ts similarity index 100% rename from web/core/components/workspace/sidebar/favorites/favorites.helpers.ts rename to apps/web/core/components/workspace/sidebar/favorites/favorites.helpers.ts diff --git a/web/core/components/workspace/sidebar/favorites/index.ts b/apps/web/core/components/workspace/sidebar/favorites/index.ts similarity index 100% rename from web/core/components/workspace/sidebar/favorites/index.ts rename to apps/web/core/components/workspace/sidebar/favorites/index.ts diff --git a/web/core/components/workspace/sidebar/favorites/new-fav-folder.tsx b/apps/web/core/components/workspace/sidebar/favorites/new-fav-folder.tsx similarity index 100% rename from web/core/components/workspace/sidebar/favorites/new-fav-folder.tsx rename to apps/web/core/components/workspace/sidebar/favorites/new-fav-folder.tsx diff --git a/web/core/components/workspace/sidebar/help-section.tsx b/apps/web/core/components/workspace/sidebar/help-section.tsx similarity index 100% rename from web/core/components/workspace/sidebar/help-section.tsx rename to apps/web/core/components/workspace/sidebar/help-section.tsx diff --git a/web/core/components/workspace/sidebar/index.ts b/apps/web/core/components/workspace/sidebar/index.ts similarity index 100% rename from web/core/components/workspace/sidebar/index.ts rename to apps/web/core/components/workspace/sidebar/index.ts diff --git a/web/core/components/workspace/sidebar/project-navigation.tsx b/apps/web/core/components/workspace/sidebar/project-navigation.tsx similarity index 100% rename from web/core/components/workspace/sidebar/project-navigation.tsx rename to apps/web/core/components/workspace/sidebar/project-navigation.tsx diff --git a/web/core/components/workspace/sidebar/projects-list-item.tsx b/apps/web/core/components/workspace/sidebar/projects-list-item.tsx similarity index 100% rename from web/core/components/workspace/sidebar/projects-list-item.tsx rename to apps/web/core/components/workspace/sidebar/projects-list-item.tsx diff --git a/web/core/components/workspace/sidebar/projects-list.tsx b/apps/web/core/components/workspace/sidebar/projects-list.tsx similarity index 100% rename from web/core/components/workspace/sidebar/projects-list.tsx rename to apps/web/core/components/workspace/sidebar/projects-list.tsx diff --git a/web/core/components/workspace/sidebar/quick-actions.tsx b/apps/web/core/components/workspace/sidebar/quick-actions.tsx similarity index 100% rename from web/core/components/workspace/sidebar/quick-actions.tsx rename to apps/web/core/components/workspace/sidebar/quick-actions.tsx diff --git a/web/core/components/workspace/sidebar/sidebar-menu-items.tsx b/apps/web/core/components/workspace/sidebar/sidebar-menu-items.tsx similarity index 100% rename from web/core/components/workspace/sidebar/sidebar-menu-items.tsx rename to apps/web/core/components/workspace/sidebar/sidebar-menu-items.tsx diff --git a/web/core/components/workspace/sidebar/user-menu-item.tsx b/apps/web/core/components/workspace/sidebar/user-menu-item.tsx similarity index 100% rename from web/core/components/workspace/sidebar/user-menu-item.tsx rename to apps/web/core/components/workspace/sidebar/user-menu-item.tsx diff --git a/web/core/components/workspace/sidebar/user-menu.tsx b/apps/web/core/components/workspace/sidebar/user-menu.tsx similarity index 100% rename from web/core/components/workspace/sidebar/user-menu.tsx rename to apps/web/core/components/workspace/sidebar/user-menu.tsx diff --git a/web/core/components/workspace/sidebar/workspace-menu-header.tsx b/apps/web/core/components/workspace/sidebar/workspace-menu-header.tsx similarity index 100% rename from web/core/components/workspace/sidebar/workspace-menu-header.tsx rename to apps/web/core/components/workspace/sidebar/workspace-menu-header.tsx diff --git a/web/core/components/workspace/sidebar/workspace-menu-item.tsx b/apps/web/core/components/workspace/sidebar/workspace-menu-item.tsx similarity index 100% rename from web/core/components/workspace/sidebar/workspace-menu-item.tsx rename to apps/web/core/components/workspace/sidebar/workspace-menu-item.tsx diff --git a/web/core/components/workspace/sidebar/workspace-menu.tsx b/apps/web/core/components/workspace/sidebar/workspace-menu.tsx similarity index 100% rename from web/core/components/workspace/sidebar/workspace-menu.tsx rename to apps/web/core/components/workspace/sidebar/workspace-menu.tsx diff --git a/web/core/components/workspace/views/default-view-list-item.tsx b/apps/web/core/components/workspace/views/default-view-list-item.tsx similarity index 100% rename from web/core/components/workspace/views/default-view-list-item.tsx rename to apps/web/core/components/workspace/views/default-view-list-item.tsx diff --git a/web/core/components/workspace/views/default-view-quick-action.tsx b/apps/web/core/components/workspace/views/default-view-quick-action.tsx similarity index 100% rename from web/core/components/workspace/views/default-view-quick-action.tsx rename to apps/web/core/components/workspace/views/default-view-quick-action.tsx diff --git a/web/core/components/workspace/views/delete-view-modal.tsx b/apps/web/core/components/workspace/views/delete-view-modal.tsx similarity index 100% rename from web/core/components/workspace/views/delete-view-modal.tsx rename to apps/web/core/components/workspace/views/delete-view-modal.tsx diff --git a/web/core/components/workspace/views/form.tsx b/apps/web/core/components/workspace/views/form.tsx similarity index 100% rename from web/core/components/workspace/views/form.tsx rename to apps/web/core/components/workspace/views/form.tsx diff --git a/web/core/components/workspace/views/header.tsx b/apps/web/core/components/workspace/views/header.tsx similarity index 100% rename from web/core/components/workspace/views/header.tsx rename to apps/web/core/components/workspace/views/header.tsx diff --git a/web/core/components/workspace/views/index.ts b/apps/web/core/components/workspace/views/index.ts similarity index 100% rename from web/core/components/workspace/views/index.ts rename to apps/web/core/components/workspace/views/index.ts diff --git a/web/core/components/workspace/views/modal.tsx b/apps/web/core/components/workspace/views/modal.tsx similarity index 100% rename from web/core/components/workspace/views/modal.tsx rename to apps/web/core/components/workspace/views/modal.tsx diff --git a/web/core/components/workspace/views/quick-action.tsx b/apps/web/core/components/workspace/views/quick-action.tsx similarity index 100% rename from web/core/components/workspace/views/quick-action.tsx rename to apps/web/core/components/workspace/views/quick-action.tsx diff --git a/web/core/components/workspace/views/view-list-item.tsx b/apps/web/core/components/workspace/views/view-list-item.tsx similarity index 100% rename from web/core/components/workspace/views/view-list-item.tsx rename to apps/web/core/components/workspace/views/view-list-item.tsx diff --git a/web/core/components/workspace/views/views-list.tsx b/apps/web/core/components/workspace/views/views-list.tsx similarity index 100% rename from web/core/components/workspace/views/views-list.tsx rename to apps/web/core/components/workspace/views/views-list.tsx diff --git a/web/core/constants/calendar.ts b/apps/web/core/constants/calendar.ts similarity index 100% rename from web/core/constants/calendar.ts rename to apps/web/core/constants/calendar.ts diff --git a/web/core/constants/editor.ts b/apps/web/core/constants/editor.ts similarity index 100% rename from web/core/constants/editor.ts rename to apps/web/core/constants/editor.ts diff --git a/web/core/constants/fetch-keys.ts b/apps/web/core/constants/fetch-keys.ts similarity index 100% rename from web/core/constants/fetch-keys.ts rename to apps/web/core/constants/fetch-keys.ts diff --git a/web/core/constants/plans.tsx b/apps/web/core/constants/plans.tsx similarity index 100% rename from web/core/constants/plans.tsx rename to apps/web/core/constants/plans.tsx diff --git a/web/core/hooks/context/use-issue-modal.tsx b/apps/web/core/hooks/context/use-issue-modal.tsx similarity index 100% rename from web/core/hooks/context/use-issue-modal.tsx rename to apps/web/core/hooks/context/use-issue-modal.tsx diff --git a/web/core/hooks/editor/index.ts b/apps/web/core/hooks/editor/index.ts similarity index 100% rename from web/core/hooks/editor/index.ts rename to apps/web/core/hooks/editor/index.ts diff --git a/web/core/hooks/editor/use-editor-config.ts b/apps/web/core/hooks/editor/use-editor-config.ts similarity index 100% rename from web/core/hooks/editor/use-editor-config.ts rename to apps/web/core/hooks/editor/use-editor-config.ts diff --git a/web/core/hooks/editor/use-editor-mention.tsx b/apps/web/core/hooks/editor/use-editor-mention.tsx similarity index 100% rename from web/core/hooks/editor/use-editor-mention.tsx rename to apps/web/core/hooks/editor/use-editor-mention.tsx diff --git a/web/core/hooks/store/estimates/index.ts b/apps/web/core/hooks/store/estimates/index.ts similarity index 100% rename from web/core/hooks/store/estimates/index.ts rename to apps/web/core/hooks/store/estimates/index.ts diff --git a/web/core/hooks/store/estimates/use-estimate-point.ts b/apps/web/core/hooks/store/estimates/use-estimate-point.ts similarity index 100% rename from web/core/hooks/store/estimates/use-estimate-point.ts rename to apps/web/core/hooks/store/estimates/use-estimate-point.ts diff --git a/web/core/hooks/store/estimates/use-estimate.ts b/apps/web/core/hooks/store/estimates/use-estimate.ts similarity index 100% rename from web/core/hooks/store/estimates/use-estimate.ts rename to apps/web/core/hooks/store/estimates/use-estimate.ts diff --git a/web/core/hooks/store/estimates/use-project-estimate.ts b/apps/web/core/hooks/store/estimates/use-project-estimate.ts similarity index 100% rename from web/core/hooks/store/estimates/use-project-estimate.ts rename to apps/web/core/hooks/store/estimates/use-project-estimate.ts diff --git a/web/core/hooks/store/index.ts b/apps/web/core/hooks/store/index.ts similarity index 100% rename from web/core/hooks/store/index.ts rename to apps/web/core/hooks/store/index.ts diff --git a/web/core/hooks/store/notifications/index.ts b/apps/web/core/hooks/store/notifications/index.ts similarity index 100% rename from web/core/hooks/store/notifications/index.ts rename to apps/web/core/hooks/store/notifications/index.ts diff --git a/web/core/hooks/store/notifications/use-notification.ts b/apps/web/core/hooks/store/notifications/use-notification.ts similarity index 100% rename from web/core/hooks/store/notifications/use-notification.ts rename to apps/web/core/hooks/store/notifications/use-notification.ts diff --git a/web/core/hooks/store/notifications/use-workspace-notifications.ts b/apps/web/core/hooks/store/notifications/use-workspace-notifications.ts similarity index 100% rename from web/core/hooks/store/notifications/use-workspace-notifications.ts rename to apps/web/core/hooks/store/notifications/use-workspace-notifications.ts diff --git a/web/core/hooks/store/use-analytics.ts b/apps/web/core/hooks/store/use-analytics.ts similarity index 100% rename from web/core/hooks/store/use-analytics.ts rename to apps/web/core/hooks/store/use-analytics.ts diff --git a/web/core/hooks/store/use-app-theme.ts b/apps/web/core/hooks/store/use-app-theme.ts similarity index 100% rename from web/core/hooks/store/use-app-theme.ts rename to apps/web/core/hooks/store/use-app-theme.ts diff --git a/web/core/hooks/store/use-calendar-view.ts b/apps/web/core/hooks/store/use-calendar-view.ts similarity index 100% rename from web/core/hooks/store/use-calendar-view.ts rename to apps/web/core/hooks/store/use-calendar-view.ts diff --git a/web/core/hooks/store/use-command-palette.ts b/apps/web/core/hooks/store/use-command-palette.ts similarity index 100% rename from web/core/hooks/store/use-command-palette.ts rename to apps/web/core/hooks/store/use-command-palette.ts diff --git a/web/core/hooks/store/use-cycle-filter.ts b/apps/web/core/hooks/store/use-cycle-filter.ts similarity index 100% rename from web/core/hooks/store/use-cycle-filter.ts rename to apps/web/core/hooks/store/use-cycle-filter.ts diff --git a/web/core/hooks/store/use-cycle.ts b/apps/web/core/hooks/store/use-cycle.ts similarity index 100% rename from web/core/hooks/store/use-cycle.ts rename to apps/web/core/hooks/store/use-cycle.ts diff --git a/web/core/hooks/store/use-dashboard.ts b/apps/web/core/hooks/store/use-dashboard.ts similarity index 100% rename from web/core/hooks/store/use-dashboard.ts rename to apps/web/core/hooks/store/use-dashboard.ts diff --git a/web/core/hooks/store/use-editor-asset.ts b/apps/web/core/hooks/store/use-editor-asset.ts similarity index 100% rename from web/core/hooks/store/use-editor-asset.ts rename to apps/web/core/hooks/store/use-editor-asset.ts diff --git a/web/core/hooks/store/use-favorite.ts b/apps/web/core/hooks/store/use-favorite.ts similarity index 100% rename from web/core/hooks/store/use-favorite.ts rename to apps/web/core/hooks/store/use-favorite.ts diff --git a/web/core/hooks/store/use-global-view.ts b/apps/web/core/hooks/store/use-global-view.ts similarity index 100% rename from web/core/hooks/store/use-global-view.ts rename to apps/web/core/hooks/store/use-global-view.ts diff --git a/web/core/hooks/store/use-home.ts b/apps/web/core/hooks/store/use-home.ts similarity index 100% rename from web/core/hooks/store/use-home.ts rename to apps/web/core/hooks/store/use-home.ts diff --git a/web/core/hooks/store/use-inbox-issues.ts b/apps/web/core/hooks/store/use-inbox-issues.ts similarity index 100% rename from web/core/hooks/store/use-inbox-issues.ts rename to apps/web/core/hooks/store/use-inbox-issues.ts diff --git a/web/core/hooks/store/use-instance.ts b/apps/web/core/hooks/store/use-instance.ts similarity index 100% rename from web/core/hooks/store/use-instance.ts rename to apps/web/core/hooks/store/use-instance.ts diff --git a/web/core/hooks/store/use-issue-detail.ts b/apps/web/core/hooks/store/use-issue-detail.ts similarity index 100% rename from web/core/hooks/store/use-issue-detail.ts rename to apps/web/core/hooks/store/use-issue-detail.ts diff --git a/web/core/hooks/store/use-issues.ts b/apps/web/core/hooks/store/use-issues.ts similarity index 100% rename from web/core/hooks/store/use-issues.ts rename to apps/web/core/hooks/store/use-issues.ts diff --git a/web/core/hooks/store/use-kanban-view.ts b/apps/web/core/hooks/store/use-kanban-view.ts similarity index 100% rename from web/core/hooks/store/use-kanban-view.ts rename to apps/web/core/hooks/store/use-kanban-view.ts diff --git a/web/core/hooks/store/use-label.ts b/apps/web/core/hooks/store/use-label.ts similarity index 100% rename from web/core/hooks/store/use-label.ts rename to apps/web/core/hooks/store/use-label.ts diff --git a/web/core/hooks/store/use-member.ts b/apps/web/core/hooks/store/use-member.ts similarity index 100% rename from web/core/hooks/store/use-member.ts rename to apps/web/core/hooks/store/use-member.ts diff --git a/web/core/hooks/store/use-module-filter.ts b/apps/web/core/hooks/store/use-module-filter.ts similarity index 100% rename from web/core/hooks/store/use-module-filter.ts rename to apps/web/core/hooks/store/use-module-filter.ts diff --git a/web/core/hooks/store/use-module.ts b/apps/web/core/hooks/store/use-module.ts similarity index 100% rename from web/core/hooks/store/use-module.ts rename to apps/web/core/hooks/store/use-module.ts diff --git a/web/core/hooks/store/use-multiple-select-store.ts b/apps/web/core/hooks/store/use-multiple-select-store.ts similarity index 100% rename from web/core/hooks/store/use-multiple-select-store.ts rename to apps/web/core/hooks/store/use-multiple-select-store.ts diff --git a/web/core/hooks/store/use-project-filter.ts b/apps/web/core/hooks/store/use-project-filter.ts similarity index 100% rename from web/core/hooks/store/use-project-filter.ts rename to apps/web/core/hooks/store/use-project-filter.ts diff --git a/web/core/hooks/store/use-project-inbox.ts b/apps/web/core/hooks/store/use-project-inbox.ts similarity index 100% rename from web/core/hooks/store/use-project-inbox.ts rename to apps/web/core/hooks/store/use-project-inbox.ts diff --git a/web/core/hooks/store/use-project-publish.ts b/apps/web/core/hooks/store/use-project-publish.ts similarity index 100% rename from web/core/hooks/store/use-project-publish.ts rename to apps/web/core/hooks/store/use-project-publish.ts diff --git a/web/core/hooks/store/use-project-state.ts b/apps/web/core/hooks/store/use-project-state.ts similarity index 100% rename from web/core/hooks/store/use-project-state.ts rename to apps/web/core/hooks/store/use-project-state.ts diff --git a/web/core/hooks/store/use-project-view.ts b/apps/web/core/hooks/store/use-project-view.ts similarity index 100% rename from web/core/hooks/store/use-project-view.ts rename to apps/web/core/hooks/store/use-project-view.ts diff --git a/web/core/hooks/store/use-project.ts b/apps/web/core/hooks/store/use-project.ts similarity index 100% rename from web/core/hooks/store/use-project.ts rename to apps/web/core/hooks/store/use-project.ts diff --git a/web/core/hooks/store/use-router-params.ts b/apps/web/core/hooks/store/use-router-params.ts similarity index 100% rename from web/core/hooks/store/use-router-params.ts rename to apps/web/core/hooks/store/use-router-params.ts diff --git a/web/core/hooks/store/use-transient.ts b/apps/web/core/hooks/store/use-transient.ts similarity index 100% rename from web/core/hooks/store/use-transient.ts rename to apps/web/core/hooks/store/use-transient.ts diff --git a/web/core/hooks/store/use-webhook.ts b/apps/web/core/hooks/store/use-webhook.ts similarity index 100% rename from web/core/hooks/store/use-webhook.ts rename to apps/web/core/hooks/store/use-webhook.ts diff --git a/web/core/hooks/store/use-workspace.ts b/apps/web/core/hooks/store/use-workspace.ts similarity index 100% rename from web/core/hooks/store/use-workspace.ts rename to apps/web/core/hooks/store/use-workspace.ts diff --git a/web/core/hooks/store/user/index.ts b/apps/web/core/hooks/store/user/index.ts similarity index 100% rename from web/core/hooks/store/user/index.ts rename to apps/web/core/hooks/store/user/index.ts diff --git a/web/core/hooks/store/user/user-permissions.ts b/apps/web/core/hooks/store/user/user-permissions.ts similarity index 100% rename from web/core/hooks/store/user/user-permissions.ts rename to apps/web/core/hooks/store/user/user-permissions.ts diff --git a/web/core/hooks/store/user/user-user-profile.ts b/apps/web/core/hooks/store/user/user-user-profile.ts similarity index 100% rename from web/core/hooks/store/user/user-user-profile.ts rename to apps/web/core/hooks/store/user/user-user-profile.ts diff --git a/web/core/hooks/store/user/user-user-settings.ts b/apps/web/core/hooks/store/user/user-user-settings.ts similarity index 100% rename from web/core/hooks/store/user/user-user-settings.ts rename to apps/web/core/hooks/store/user/user-user-settings.ts diff --git a/web/core/hooks/store/user/user-user.ts b/apps/web/core/hooks/store/user/user-user.ts similarity index 100% rename from web/core/hooks/store/user/user-user.ts rename to apps/web/core/hooks/store/user/user-user.ts diff --git a/web/core/hooks/store/workspace-draft/index.ts b/apps/web/core/hooks/store/workspace-draft/index.ts similarity index 100% rename from web/core/hooks/store/workspace-draft/index.ts rename to apps/web/core/hooks/store/workspace-draft/index.ts diff --git a/web/core/hooks/store/workspace-draft/use-workspace-draft-issue-filters.ts b/apps/web/core/hooks/store/workspace-draft/use-workspace-draft-issue-filters.ts similarity index 100% rename from web/core/hooks/store/workspace-draft/use-workspace-draft-issue-filters.ts rename to apps/web/core/hooks/store/workspace-draft/use-workspace-draft-issue-filters.ts diff --git a/web/core/hooks/store/workspace-draft/use-workspace-draft-issue.ts b/apps/web/core/hooks/store/workspace-draft/use-workspace-draft-issue.ts similarity index 100% rename from web/core/hooks/store/workspace-draft/use-workspace-draft-issue.ts rename to apps/web/core/hooks/store/workspace-draft/use-workspace-draft-issue.ts diff --git a/web/core/hooks/use-app-router.tsx b/apps/web/core/hooks/use-app-router.tsx similarity index 100% rename from web/core/hooks/use-app-router.tsx rename to apps/web/core/hooks/use-app-router.tsx diff --git a/web/core/hooks/use-auto-save.tsx b/apps/web/core/hooks/use-auto-save.tsx similarity index 100% rename from web/core/hooks/use-auto-save.tsx rename to apps/web/core/hooks/use-auto-save.tsx diff --git a/web/core/hooks/use-auto-scroller.tsx b/apps/web/core/hooks/use-auto-scroller.tsx similarity index 100% rename from web/core/hooks/use-auto-scroller.tsx rename to apps/web/core/hooks/use-auto-scroller.tsx diff --git a/web/core/hooks/use-collaborative-page-actions.tsx b/apps/web/core/hooks/use-collaborative-page-actions.tsx similarity index 100% rename from web/core/hooks/use-collaborative-page-actions.tsx rename to apps/web/core/hooks/use-collaborative-page-actions.tsx diff --git a/web/core/hooks/use-current-time.tsx b/apps/web/core/hooks/use-current-time.tsx similarity index 100% rename from web/core/hooks/use-current-time.tsx rename to apps/web/core/hooks/use-current-time.tsx diff --git a/web/core/hooks/use-debounce.tsx b/apps/web/core/hooks/use-debounce.tsx similarity index 100% rename from web/core/hooks/use-debounce.tsx rename to apps/web/core/hooks/use-debounce.tsx diff --git a/web/core/hooks/use-dropdown-key-down.tsx b/apps/web/core/hooks/use-dropdown-key-down.tsx similarity index 100% rename from web/core/hooks/use-dropdown-key-down.tsx rename to apps/web/core/hooks/use-dropdown-key-down.tsx diff --git a/web/core/hooks/use-dropdown.ts b/apps/web/core/hooks/use-dropdown.ts similarity index 100% rename from web/core/hooks/use-dropdown.ts rename to apps/web/core/hooks/use-dropdown.ts diff --git a/web/core/hooks/use-extended-sidebar-overview-outside-click.tsx b/apps/web/core/hooks/use-extended-sidebar-overview-outside-click.tsx similarity index 100% rename from web/core/hooks/use-extended-sidebar-overview-outside-click.tsx rename to apps/web/core/hooks/use-extended-sidebar-overview-outside-click.tsx diff --git a/web/core/hooks/use-favorite-item-details.tsx b/apps/web/core/hooks/use-favorite-item-details.tsx similarity index 100% rename from web/core/hooks/use-favorite-item-details.tsx rename to apps/web/core/hooks/use-favorite-item-details.tsx diff --git a/web/core/hooks/use-group-dragndrop.ts b/apps/web/core/hooks/use-group-dragndrop.ts similarity index 100% rename from web/core/hooks/use-group-dragndrop.ts rename to apps/web/core/hooks/use-group-dragndrop.ts diff --git a/web/core/hooks/use-integration-popup.tsx b/apps/web/core/hooks/use-integration-popup.tsx similarity index 100% rename from web/core/hooks/use-integration-popup.tsx rename to apps/web/core/hooks/use-integration-popup.tsx diff --git a/web/core/hooks/use-intersection-observer.ts b/apps/web/core/hooks/use-intersection-observer.ts similarity index 100% rename from web/core/hooks/use-intersection-observer.ts rename to apps/web/core/hooks/use-intersection-observer.ts diff --git a/web/core/hooks/use-issue-layout-store.ts b/apps/web/core/hooks/use-issue-layout-store.ts similarity index 100% rename from web/core/hooks/use-issue-layout-store.ts rename to apps/web/core/hooks/use-issue-layout-store.ts diff --git a/web/core/hooks/use-issue-peek-overview-redirection.tsx b/apps/web/core/hooks/use-issue-peek-overview-redirection.tsx similarity index 100% rename from web/core/hooks/use-issue-peek-overview-redirection.tsx rename to apps/web/core/hooks/use-issue-peek-overview-redirection.tsx diff --git a/web/core/hooks/use-issues-actions.tsx b/apps/web/core/hooks/use-issues-actions.tsx similarity index 100% rename from web/core/hooks/use-issues-actions.tsx rename to apps/web/core/hooks/use-issues-actions.tsx diff --git a/web/core/hooks/use-keypress.tsx b/apps/web/core/hooks/use-keypress.tsx similarity index 100% rename from web/core/hooks/use-keypress.tsx rename to apps/web/core/hooks/use-keypress.tsx diff --git a/web/core/hooks/use-local-storage.tsx b/apps/web/core/hooks/use-local-storage.tsx similarity index 100% rename from web/core/hooks/use-local-storage.tsx rename to apps/web/core/hooks/use-local-storage.tsx diff --git a/web/core/hooks/use-multiple-select.ts b/apps/web/core/hooks/use-multiple-select.ts similarity index 100% rename from web/core/hooks/use-multiple-select.ts rename to apps/web/core/hooks/use-multiple-select.ts diff --git a/web/core/hooks/use-online-status.ts b/apps/web/core/hooks/use-online-status.ts similarity index 100% rename from web/core/hooks/use-online-status.ts rename to apps/web/core/hooks/use-online-status.ts diff --git a/web/core/hooks/use-page-fallback.ts b/apps/web/core/hooks/use-page-fallback.ts similarity index 100% rename from web/core/hooks/use-page-fallback.ts rename to apps/web/core/hooks/use-page-fallback.ts diff --git a/web/core/hooks/use-page-filters.ts b/apps/web/core/hooks/use-page-filters.ts similarity index 100% rename from web/core/hooks/use-page-filters.ts rename to apps/web/core/hooks/use-page-filters.ts diff --git a/web/core/hooks/use-page-operations.ts b/apps/web/core/hooks/use-page-operations.ts similarity index 100% rename from web/core/hooks/use-page-operations.ts rename to apps/web/core/hooks/use-page-operations.ts diff --git a/web/core/hooks/use-parse-editor-content.ts b/apps/web/core/hooks/use-parse-editor-content.ts similarity index 100% rename from web/core/hooks/use-parse-editor-content.ts rename to apps/web/core/hooks/use-parse-editor-content.ts diff --git a/web/core/hooks/use-peek-overview-outside-click.tsx b/apps/web/core/hooks/use-peek-overview-outside-click.tsx similarity index 100% rename from web/core/hooks/use-peek-overview-outside-click.tsx rename to apps/web/core/hooks/use-peek-overview-outside-click.tsx diff --git a/web/core/hooks/use-platform-os.tsx b/apps/web/core/hooks/use-platform-os.tsx similarity index 100% rename from web/core/hooks/use-platform-os.tsx rename to apps/web/core/hooks/use-platform-os.tsx diff --git a/web/core/hooks/use-project-issue-properties.ts b/apps/web/core/hooks/use-project-issue-properties.ts similarity index 100% rename from web/core/hooks/use-project-issue-properties.ts rename to apps/web/core/hooks/use-project-issue-properties.ts diff --git a/web/core/hooks/use-query-params.ts b/apps/web/core/hooks/use-query-params.ts similarity index 100% rename from web/core/hooks/use-query-params.ts rename to apps/web/core/hooks/use-query-params.ts diff --git a/web/core/hooks/use-reload-confirmation.tsx b/apps/web/core/hooks/use-reload-confirmation.tsx similarity index 100% rename from web/core/hooks/use-reload-confirmation.tsx rename to apps/web/core/hooks/use-reload-confirmation.tsx diff --git a/web/core/hooks/use-resolved-asset-path.tsx b/apps/web/core/hooks/use-resolved-asset-path.tsx similarity index 100% rename from web/core/hooks/use-resolved-asset-path.tsx rename to apps/web/core/hooks/use-resolved-asset-path.tsx diff --git a/web/core/hooks/use-stickies.tsx b/apps/web/core/hooks/use-stickies.tsx similarity index 100% rename from web/core/hooks/use-stickies.tsx rename to apps/web/core/hooks/use-stickies.tsx diff --git a/web/core/hooks/use-table-keyboard-navigation.tsx b/apps/web/core/hooks/use-table-keyboard-navigation.tsx similarity index 100% rename from web/core/hooks/use-table-keyboard-navigation.tsx rename to apps/web/core/hooks/use-table-keyboard-navigation.tsx diff --git a/web/core/hooks/use-timeline-chart.ts b/apps/web/core/hooks/use-timeline-chart.ts similarity index 100% rename from web/core/hooks/use-timeline-chart.ts rename to apps/web/core/hooks/use-timeline-chart.ts diff --git a/web/core/hooks/use-timer.tsx b/apps/web/core/hooks/use-timer.tsx similarity index 100% rename from web/core/hooks/use-timer.tsx rename to apps/web/core/hooks/use-timer.tsx diff --git a/web/core/hooks/use-timezone-converter.tsx b/apps/web/core/hooks/use-timezone-converter.tsx similarity index 100% rename from web/core/hooks/use-timezone-converter.tsx rename to apps/web/core/hooks/use-timezone-converter.tsx diff --git a/web/core/hooks/use-timezone.tsx b/apps/web/core/hooks/use-timezone.tsx similarity index 100% rename from web/core/hooks/use-timezone.tsx rename to apps/web/core/hooks/use-timezone.tsx diff --git a/web/core/hooks/use-window-size.tsx b/apps/web/core/hooks/use-window-size.tsx similarity index 100% rename from web/core/hooks/use-window-size.tsx rename to apps/web/core/hooks/use-window-size.tsx diff --git a/web/core/hooks/use-workspace-invitation.tsx b/apps/web/core/hooks/use-workspace-invitation.tsx similarity index 100% rename from web/core/hooks/use-workspace-invitation.tsx rename to apps/web/core/hooks/use-workspace-invitation.tsx diff --git a/web/core/hooks/use-workspace-issue-properties.ts b/apps/web/core/hooks/use-workspace-issue-properties.ts similarity index 100% rename from web/core/hooks/use-workspace-issue-properties.ts rename to apps/web/core/hooks/use-workspace-issue-properties.ts diff --git a/web/core/layouts/auth-layout/index.ts b/apps/web/core/layouts/auth-layout/index.ts similarity index 100% rename from web/core/layouts/auth-layout/index.ts rename to apps/web/core/layouts/auth-layout/index.ts diff --git a/web/core/layouts/auth-layout/project-wrapper.tsx b/apps/web/core/layouts/auth-layout/project-wrapper.tsx similarity index 100% rename from web/core/layouts/auth-layout/project-wrapper.tsx rename to apps/web/core/layouts/auth-layout/project-wrapper.tsx diff --git a/web/core/layouts/auth-layout/workspace-wrapper.tsx b/apps/web/core/layouts/auth-layout/workspace-wrapper.tsx similarity index 100% rename from web/core/layouts/auth-layout/workspace-wrapper.tsx rename to apps/web/core/layouts/auth-layout/workspace-wrapper.tsx diff --git a/web/core/layouts/default-layout/index.tsx b/apps/web/core/layouts/default-layout/index.tsx similarity index 100% rename from web/core/layouts/default-layout/index.tsx rename to apps/web/core/layouts/default-layout/index.tsx diff --git a/web/core/lib/intercom-provider.tsx b/apps/web/core/lib/intercom-provider.tsx similarity index 100% rename from web/core/lib/intercom-provider.tsx rename to apps/web/core/lib/intercom-provider.tsx diff --git a/web/core/lib/local-storage.ts b/apps/web/core/lib/local-storage.ts similarity index 100% rename from web/core/lib/local-storage.ts rename to apps/web/core/lib/local-storage.ts diff --git a/web/core/lib/n-progress/AppProgressBar.tsx b/apps/web/core/lib/n-progress/AppProgressBar.tsx similarity index 100% rename from web/core/lib/n-progress/AppProgressBar.tsx rename to apps/web/core/lib/n-progress/AppProgressBar.tsx diff --git a/web/core/lib/n-progress/index.tsx b/apps/web/core/lib/n-progress/index.tsx similarity index 100% rename from web/core/lib/n-progress/index.tsx rename to apps/web/core/lib/n-progress/index.tsx diff --git a/web/core/lib/n-progress/utils/getAnchorProperty.ts b/apps/web/core/lib/n-progress/utils/getAnchorProperty.ts similarity index 100% rename from web/core/lib/n-progress/utils/getAnchorProperty.ts rename to apps/web/core/lib/n-progress/utils/getAnchorProperty.ts diff --git a/web/core/lib/n-progress/utils/sameURL.ts b/apps/web/core/lib/n-progress/utils/sameURL.ts similarity index 100% rename from web/core/lib/n-progress/utils/sameURL.ts rename to apps/web/core/lib/n-progress/utils/sameURL.ts diff --git a/web/core/lib/n-progress/withSuspense.tsx b/apps/web/core/lib/n-progress/withSuspense.tsx similarity index 100% rename from web/core/lib/n-progress/withSuspense.tsx rename to apps/web/core/lib/n-progress/withSuspense.tsx diff --git a/web/core/lib/polyfills/index.ts b/apps/web/core/lib/polyfills/index.ts similarity index 100% rename from web/core/lib/polyfills/index.ts rename to apps/web/core/lib/polyfills/index.ts diff --git a/web/core/lib/polyfills/requestIdleCallback.ts b/apps/web/core/lib/polyfills/requestIdleCallback.ts similarity index 100% rename from web/core/lib/polyfills/requestIdleCallback.ts rename to apps/web/core/lib/polyfills/requestIdleCallback.ts diff --git a/web/core/lib/posthog-provider.tsx b/apps/web/core/lib/posthog-provider.tsx similarity index 100% rename from web/core/lib/posthog-provider.tsx rename to apps/web/core/lib/posthog-provider.tsx diff --git a/web/core/lib/posthog-view.tsx b/apps/web/core/lib/posthog-view.tsx similarity index 100% rename from web/core/lib/posthog-view.tsx rename to apps/web/core/lib/posthog-view.tsx diff --git a/web/core/lib/store-context.tsx b/apps/web/core/lib/store-context.tsx similarity index 100% rename from web/core/lib/store-context.tsx rename to apps/web/core/lib/store-context.tsx diff --git a/web/core/lib/wrappers/authentication-wrapper.tsx b/apps/web/core/lib/wrappers/authentication-wrapper.tsx similarity index 100% rename from web/core/lib/wrappers/authentication-wrapper.tsx rename to apps/web/core/lib/wrappers/authentication-wrapper.tsx diff --git a/web/core/lib/wrappers/index.ts b/apps/web/core/lib/wrappers/index.ts similarity index 100% rename from web/core/lib/wrappers/index.ts rename to apps/web/core/lib/wrappers/index.ts diff --git a/web/core/lib/wrappers/instance-wrapper.tsx b/apps/web/core/lib/wrappers/instance-wrapper.tsx similarity index 100% rename from web/core/lib/wrappers/instance-wrapper.tsx rename to apps/web/core/lib/wrappers/instance-wrapper.tsx diff --git a/web/core/lib/wrappers/store-wrapper.tsx b/apps/web/core/lib/wrappers/store-wrapper.tsx similarity index 100% rename from web/core/lib/wrappers/store-wrapper.tsx rename to apps/web/core/lib/wrappers/store-wrapper.tsx diff --git a/web/core/local-db/storage.sqlite.ts b/apps/web/core/local-db/storage.sqlite.ts similarity index 100% rename from web/core/local-db/storage.sqlite.ts rename to apps/web/core/local-db/storage.sqlite.ts diff --git a/web/core/local-db/utils/constants.ts b/apps/web/core/local-db/utils/constants.ts similarity index 100% rename from web/core/local-db/utils/constants.ts rename to apps/web/core/local-db/utils/constants.ts diff --git a/web/core/local-db/utils/data.utils.ts b/apps/web/core/local-db/utils/data.utils.ts similarity index 100% rename from web/core/local-db/utils/data.utils.ts rename to apps/web/core/local-db/utils/data.utils.ts diff --git a/web/core/local-db/utils/indexes.ts b/apps/web/core/local-db/utils/indexes.ts similarity index 100% rename from web/core/local-db/utils/indexes.ts rename to apps/web/core/local-db/utils/indexes.ts diff --git a/web/core/local-db/utils/load-issues.ts b/apps/web/core/local-db/utils/load-issues.ts similarity index 100% rename from web/core/local-db/utils/load-issues.ts rename to apps/web/core/local-db/utils/load-issues.ts diff --git a/web/core/local-db/utils/load-workspace.ts b/apps/web/core/local-db/utils/load-workspace.ts similarity index 100% rename from web/core/local-db/utils/load-workspace.ts rename to apps/web/core/local-db/utils/load-workspace.ts diff --git a/web/core/local-db/utils/query-constructor.ts b/apps/web/core/local-db/utils/query-constructor.ts similarity index 100% rename from web/core/local-db/utils/query-constructor.ts rename to apps/web/core/local-db/utils/query-constructor.ts diff --git a/web/core/local-db/utils/query-executor.ts b/apps/web/core/local-db/utils/query-executor.ts similarity index 100% rename from web/core/local-db/utils/query-executor.ts rename to apps/web/core/local-db/utils/query-executor.ts diff --git a/web/core/local-db/utils/query-sanitizer.ts.ts b/apps/web/core/local-db/utils/query-sanitizer.ts.ts similarity index 100% rename from web/core/local-db/utils/query-sanitizer.ts.ts rename to apps/web/core/local-db/utils/query-sanitizer.ts.ts diff --git a/web/core/local-db/utils/query.utils.ts b/apps/web/core/local-db/utils/query.utils.ts similarity index 100% rename from web/core/local-db/utils/query.utils.ts rename to apps/web/core/local-db/utils/query.utils.ts diff --git a/web/core/local-db/utils/schemas.ts b/apps/web/core/local-db/utils/schemas.ts similarity index 100% rename from web/core/local-db/utils/schemas.ts rename to apps/web/core/local-db/utils/schemas.ts diff --git a/web/core/local-db/utils/tables.ts b/apps/web/core/local-db/utils/tables.ts similarity index 100% rename from web/core/local-db/utils/tables.ts rename to apps/web/core/local-db/utils/tables.ts diff --git a/web/core/local-db/utils/utils.ts b/apps/web/core/local-db/utils/utils.ts similarity index 100% rename from web/core/local-db/utils/utils.ts rename to apps/web/core/local-db/utils/utils.ts diff --git a/web/core/local-db/worker/db.ts b/apps/web/core/local-db/worker/db.ts similarity index 100% rename from web/core/local-db/worker/db.ts rename to apps/web/core/local-db/worker/db.ts diff --git a/web/core/local-db/worker/wa-sqlite/src/FacadeVFS.js b/apps/web/core/local-db/worker/wa-sqlite/src/FacadeVFS.js similarity index 100% rename from web/core/local-db/worker/wa-sqlite/src/FacadeVFS.js rename to apps/web/core/local-db/worker/wa-sqlite/src/FacadeVFS.js diff --git a/web/core/local-db/worker/wa-sqlite/src/OPFSCoopSyncVFS.js b/apps/web/core/local-db/worker/wa-sqlite/src/OPFSCoopSyncVFS.js similarity index 100% rename from web/core/local-db/worker/wa-sqlite/src/OPFSCoopSyncVFS.js rename to apps/web/core/local-db/worker/wa-sqlite/src/OPFSCoopSyncVFS.js diff --git a/web/core/local-db/worker/wa-sqlite/src/VFS.js b/apps/web/core/local-db/worker/wa-sqlite/src/VFS.js similarity index 100% rename from web/core/local-db/worker/wa-sqlite/src/VFS.js rename to apps/web/core/local-db/worker/wa-sqlite/src/VFS.js diff --git a/web/core/local-db/worker/wa-sqlite/src/sqlite-api.js b/apps/web/core/local-db/worker/wa-sqlite/src/sqlite-api.js similarity index 100% rename from web/core/local-db/worker/wa-sqlite/src/sqlite-api.js rename to apps/web/core/local-db/worker/wa-sqlite/src/sqlite-api.js diff --git a/web/core/local-db/worker/wa-sqlite/src/sqlite-constants.js b/apps/web/core/local-db/worker/wa-sqlite/src/sqlite-constants.js similarity index 100% rename from web/core/local-db/worker/wa-sqlite/src/sqlite-constants.js rename to apps/web/core/local-db/worker/wa-sqlite/src/sqlite-constants.js diff --git a/web/core/local-db/worker/wa-sqlite/src/types/globals.d.ts b/apps/web/core/local-db/worker/wa-sqlite/src/types/globals.d.ts similarity index 100% rename from web/core/local-db/worker/wa-sqlite/src/types/globals.d.ts rename to apps/web/core/local-db/worker/wa-sqlite/src/types/globals.d.ts diff --git a/web/core/local-db/worker/wa-sqlite/src/types/index.d.ts b/apps/web/core/local-db/worker/wa-sqlite/src/types/index.d.ts similarity index 100% rename from web/core/local-db/worker/wa-sqlite/src/types/index.d.ts rename to apps/web/core/local-db/worker/wa-sqlite/src/types/index.d.ts diff --git a/web/core/local-db/worker/wa-sqlite/src/wa-sqlite.mjs b/apps/web/core/local-db/worker/wa-sqlite/src/wa-sqlite.mjs similarity index 100% rename from web/core/local-db/worker/wa-sqlite/src/wa-sqlite.mjs rename to apps/web/core/local-db/worker/wa-sqlite/src/wa-sqlite.mjs diff --git a/web/core/local-db/worker/wa-sqlite/src/wa-sqlite.wasm b/apps/web/core/local-db/worker/wa-sqlite/src/wa-sqlite.wasm similarity index 100% rename from web/core/local-db/worker/wa-sqlite/src/wa-sqlite.wasm rename to apps/web/core/local-db/worker/wa-sqlite/src/wa-sqlite.wasm diff --git a/web/core/services/ai.service.ts b/apps/web/core/services/ai.service.ts similarity index 100% rename from web/core/services/ai.service.ts rename to apps/web/core/services/ai.service.ts diff --git a/web/core/services/analytics.service.ts b/apps/web/core/services/analytics.service.ts similarity index 100% rename from web/core/services/analytics.service.ts rename to apps/web/core/services/analytics.service.ts diff --git a/web/core/services/api.service.ts b/apps/web/core/services/api.service.ts similarity index 100% rename from web/core/services/api.service.ts rename to apps/web/core/services/api.service.ts diff --git a/web/core/services/app_config.service.ts b/apps/web/core/services/app_config.service.ts similarity index 100% rename from web/core/services/app_config.service.ts rename to apps/web/core/services/app_config.service.ts diff --git a/web/core/services/app_installation.service.ts b/apps/web/core/services/app_installation.service.ts similarity index 100% rename from web/core/services/app_installation.service.ts rename to apps/web/core/services/app_installation.service.ts diff --git a/web/core/services/auth.service.ts b/apps/web/core/services/auth.service.ts similarity index 100% rename from web/core/services/auth.service.ts rename to apps/web/core/services/auth.service.ts diff --git a/web/core/services/cycle.service.ts b/apps/web/core/services/cycle.service.ts similarity index 100% rename from web/core/services/cycle.service.ts rename to apps/web/core/services/cycle.service.ts diff --git a/web/core/services/cycle_archive.service.ts b/apps/web/core/services/cycle_archive.service.ts similarity index 100% rename from web/core/services/cycle_archive.service.ts rename to apps/web/core/services/cycle_archive.service.ts diff --git a/web/core/services/dashboard.service.ts b/apps/web/core/services/dashboard.service.ts similarity index 100% rename from web/core/services/dashboard.service.ts rename to apps/web/core/services/dashboard.service.ts diff --git a/web/core/services/favorite/favorite.service.ts b/apps/web/core/services/favorite/favorite.service.ts similarity index 100% rename from web/core/services/favorite/favorite.service.ts rename to apps/web/core/services/favorite/favorite.service.ts diff --git a/web/core/services/favorite/index.ts b/apps/web/core/services/favorite/index.ts similarity index 100% rename from web/core/services/favorite/index.ts rename to apps/web/core/services/favorite/index.ts diff --git a/web/core/services/file-upload.service.ts b/apps/web/core/services/file-upload.service.ts similarity index 100% rename from web/core/services/file-upload.service.ts rename to apps/web/core/services/file-upload.service.ts diff --git a/web/core/services/file.service.ts b/apps/web/core/services/file.service.ts similarity index 100% rename from web/core/services/file.service.ts rename to apps/web/core/services/file.service.ts diff --git a/web/core/services/inbox/inbox-issue.service.ts b/apps/web/core/services/inbox/inbox-issue.service.ts similarity index 100% rename from web/core/services/inbox/inbox-issue.service.ts rename to apps/web/core/services/inbox/inbox-issue.service.ts diff --git a/web/core/services/inbox/index.ts b/apps/web/core/services/inbox/index.ts similarity index 100% rename from web/core/services/inbox/index.ts rename to apps/web/core/services/inbox/index.ts diff --git a/web/core/services/inbox/intake-work_item_version.service.ts b/apps/web/core/services/inbox/intake-work_item_version.service.ts similarity index 100% rename from web/core/services/inbox/intake-work_item_version.service.ts rename to apps/web/core/services/inbox/intake-work_item_version.service.ts diff --git a/web/core/services/instance.service.ts b/apps/web/core/services/instance.service.ts similarity index 100% rename from web/core/services/instance.service.ts rename to apps/web/core/services/instance.service.ts diff --git a/web/core/services/integrations/github.service.ts b/apps/web/core/services/integrations/github.service.ts similarity index 100% rename from web/core/services/integrations/github.service.ts rename to apps/web/core/services/integrations/github.service.ts diff --git a/web/core/services/integrations/index.ts b/apps/web/core/services/integrations/index.ts similarity index 100% rename from web/core/services/integrations/index.ts rename to apps/web/core/services/integrations/index.ts diff --git a/web/core/services/integrations/integration.service.ts b/apps/web/core/services/integrations/integration.service.ts similarity index 100% rename from web/core/services/integrations/integration.service.ts rename to apps/web/core/services/integrations/integration.service.ts diff --git a/web/core/services/integrations/jira.service.ts b/apps/web/core/services/integrations/jira.service.ts similarity index 100% rename from web/core/services/integrations/jira.service.ts rename to apps/web/core/services/integrations/jira.service.ts diff --git a/web/core/services/issue/index.ts b/apps/web/core/services/issue/index.ts similarity index 100% rename from web/core/services/issue/index.ts rename to apps/web/core/services/issue/index.ts diff --git a/web/core/services/issue/issue.service.ts b/apps/web/core/services/issue/issue.service.ts similarity index 100% rename from web/core/services/issue/issue.service.ts rename to apps/web/core/services/issue/issue.service.ts diff --git a/web/core/services/issue/issue_activity.service.ts b/apps/web/core/services/issue/issue_activity.service.ts similarity index 100% rename from web/core/services/issue/issue_activity.service.ts rename to apps/web/core/services/issue/issue_activity.service.ts diff --git a/web/core/services/issue/issue_archive.service.ts b/apps/web/core/services/issue/issue_archive.service.ts similarity index 100% rename from web/core/services/issue/issue_archive.service.ts rename to apps/web/core/services/issue/issue_archive.service.ts diff --git a/web/core/services/issue/issue_attachment.service.ts b/apps/web/core/services/issue/issue_attachment.service.ts similarity index 100% rename from web/core/services/issue/issue_attachment.service.ts rename to apps/web/core/services/issue/issue_attachment.service.ts diff --git a/web/core/services/issue/issue_comment.service.ts b/apps/web/core/services/issue/issue_comment.service.ts similarity index 100% rename from web/core/services/issue/issue_comment.service.ts rename to apps/web/core/services/issue/issue_comment.service.ts diff --git a/web/core/services/issue/issue_draft.service.ts b/apps/web/core/services/issue/issue_draft.service.ts similarity index 100% rename from web/core/services/issue/issue_draft.service.ts rename to apps/web/core/services/issue/issue_draft.service.ts diff --git a/web/core/services/issue/issue_label.service.ts b/apps/web/core/services/issue/issue_label.service.ts similarity index 100% rename from web/core/services/issue/issue_label.service.ts rename to apps/web/core/services/issue/issue_label.service.ts diff --git a/web/core/services/issue/issue_reaction.service.ts b/apps/web/core/services/issue/issue_reaction.service.ts similarity index 100% rename from web/core/services/issue/issue_reaction.service.ts rename to apps/web/core/services/issue/issue_reaction.service.ts diff --git a/web/core/services/issue/issue_relation.service.ts b/apps/web/core/services/issue/issue_relation.service.ts similarity index 100% rename from web/core/services/issue/issue_relation.service.ts rename to apps/web/core/services/issue/issue_relation.service.ts diff --git a/web/core/services/issue/work_item_version.service.ts b/apps/web/core/services/issue/work_item_version.service.ts similarity index 100% rename from web/core/services/issue/work_item_version.service.ts rename to apps/web/core/services/issue/work_item_version.service.ts diff --git a/web/core/services/issue/workspace_draft.service.ts b/apps/web/core/services/issue/workspace_draft.service.ts similarity index 100% rename from web/core/services/issue/workspace_draft.service.ts rename to apps/web/core/services/issue/workspace_draft.service.ts diff --git a/web/core/services/issue_filter.service.ts b/apps/web/core/services/issue_filter.service.ts similarity index 100% rename from web/core/services/issue_filter.service.ts rename to apps/web/core/services/issue_filter.service.ts diff --git a/web/core/services/module.service.ts b/apps/web/core/services/module.service.ts similarity index 100% rename from web/core/services/module.service.ts rename to apps/web/core/services/module.service.ts diff --git a/web/core/services/module_archive.service.ts b/apps/web/core/services/module_archive.service.ts similarity index 100% rename from web/core/services/module_archive.service.ts rename to apps/web/core/services/module_archive.service.ts diff --git a/web/core/services/page/index.ts b/apps/web/core/services/page/index.ts similarity index 100% rename from web/core/services/page/index.ts rename to apps/web/core/services/page/index.ts diff --git a/web/core/services/page/project-page-version.service.ts b/apps/web/core/services/page/project-page-version.service.ts similarity index 100% rename from web/core/services/page/project-page-version.service.ts rename to apps/web/core/services/page/project-page-version.service.ts diff --git a/web/core/services/page/project-page.service.ts b/apps/web/core/services/page/project-page.service.ts similarity index 100% rename from web/core/services/page/project-page.service.ts rename to apps/web/core/services/page/project-page.service.ts diff --git a/web/core/services/project/index.ts b/apps/web/core/services/project/index.ts similarity index 100% rename from web/core/services/project/index.ts rename to apps/web/core/services/project/index.ts diff --git a/web/core/services/project/project-archive.service.ts b/apps/web/core/services/project/project-archive.service.ts similarity index 100% rename from web/core/services/project/project-archive.service.ts rename to apps/web/core/services/project/project-archive.service.ts diff --git a/web/core/services/project/project-export.service.ts b/apps/web/core/services/project/project-export.service.ts similarity index 100% rename from web/core/services/project/project-export.service.ts rename to apps/web/core/services/project/project-export.service.ts diff --git a/web/core/services/project/project-member.service.ts b/apps/web/core/services/project/project-member.service.ts similarity index 100% rename from web/core/services/project/project-member.service.ts rename to apps/web/core/services/project/project-member.service.ts diff --git a/web/core/services/project/project-publish.service.ts b/apps/web/core/services/project/project-publish.service.ts similarity index 100% rename from web/core/services/project/project-publish.service.ts rename to apps/web/core/services/project/project-publish.service.ts diff --git a/web/core/services/project/project-state.service.ts b/apps/web/core/services/project/project-state.service.ts similarity index 100% rename from web/core/services/project/project-state.service.ts rename to apps/web/core/services/project/project-state.service.ts diff --git a/web/core/services/project/project.service.ts b/apps/web/core/services/project/project.service.ts similarity index 100% rename from web/core/services/project/project.service.ts rename to apps/web/core/services/project/project.service.ts diff --git a/web/core/services/sticky.service.ts b/apps/web/core/services/sticky.service.ts similarity index 100% rename from web/core/services/sticky.service.ts rename to apps/web/core/services/sticky.service.ts diff --git a/web/core/services/timezone.service.ts b/apps/web/core/services/timezone.service.ts similarity index 100% rename from web/core/services/timezone.service.ts rename to apps/web/core/services/timezone.service.ts diff --git a/web/core/services/user.service.ts b/apps/web/core/services/user.service.ts similarity index 100% rename from web/core/services/user.service.ts rename to apps/web/core/services/user.service.ts diff --git a/web/core/services/view.service.ts b/apps/web/core/services/view.service.ts similarity index 100% rename from web/core/services/view.service.ts rename to apps/web/core/services/view.service.ts diff --git a/web/core/services/webhook.service.ts b/apps/web/core/services/webhook.service.ts similarity index 100% rename from web/core/services/webhook.service.ts rename to apps/web/core/services/webhook.service.ts diff --git a/web/core/services/workspace-notification.service.ts b/apps/web/core/services/workspace-notification.service.ts similarity index 100% rename from web/core/services/workspace-notification.service.ts rename to apps/web/core/services/workspace-notification.service.ts diff --git a/web/core/services/workspace.service.ts b/apps/web/core/services/workspace.service.ts similarity index 100% rename from web/core/services/workspace.service.ts rename to apps/web/core/services/workspace.service.ts diff --git a/web/core/store/analytics.store.ts b/apps/web/core/store/analytics.store.ts similarity index 100% rename from web/core/store/analytics.store.ts rename to apps/web/core/store/analytics.store.ts diff --git a/web/core/store/base-command-palette.store.ts b/apps/web/core/store/base-command-palette.store.ts similarity index 100% rename from web/core/store/base-command-palette.store.ts rename to apps/web/core/store/base-command-palette.store.ts diff --git a/web/core/store/cycle.store.ts b/apps/web/core/store/cycle.store.ts similarity index 100% rename from web/core/store/cycle.store.ts rename to apps/web/core/store/cycle.store.ts diff --git a/web/core/store/cycle_filter.store.ts b/apps/web/core/store/cycle_filter.store.ts similarity index 100% rename from web/core/store/cycle_filter.store.ts rename to apps/web/core/store/cycle_filter.store.ts diff --git a/web/core/store/dashboard.store.ts b/apps/web/core/store/dashboard.store.ts similarity index 100% rename from web/core/store/dashboard.store.ts rename to apps/web/core/store/dashboard.store.ts diff --git a/web/core/store/editor/asset.store.ts b/apps/web/core/store/editor/asset.store.ts similarity index 100% rename from web/core/store/editor/asset.store.ts rename to apps/web/core/store/editor/asset.store.ts diff --git a/web/core/store/estimates/estimate-point.ts b/apps/web/core/store/estimates/estimate-point.ts similarity index 100% rename from web/core/store/estimates/estimate-point.ts rename to apps/web/core/store/estimates/estimate-point.ts diff --git a/web/core/store/estimates/project-estimate.store.ts b/apps/web/core/store/estimates/project-estimate.store.ts similarity index 100% rename from web/core/store/estimates/project-estimate.store.ts rename to apps/web/core/store/estimates/project-estimate.store.ts diff --git a/web/core/store/favorite.store.ts b/apps/web/core/store/favorite.store.ts similarity index 100% rename from web/core/store/favorite.store.ts rename to apps/web/core/store/favorite.store.ts diff --git a/web/core/store/global-view.store.ts b/apps/web/core/store/global-view.store.ts similarity index 100% rename from web/core/store/global-view.store.ts rename to apps/web/core/store/global-view.store.ts diff --git a/web/core/store/inbox/inbox-issue.store.ts b/apps/web/core/store/inbox/inbox-issue.store.ts similarity index 100% rename from web/core/store/inbox/inbox-issue.store.ts rename to apps/web/core/store/inbox/inbox-issue.store.ts diff --git a/web/core/store/inbox/project-inbox.store.ts b/apps/web/core/store/inbox/project-inbox.store.ts similarity index 100% rename from web/core/store/inbox/project-inbox.store.ts rename to apps/web/core/store/inbox/project-inbox.store.ts diff --git a/web/core/store/instance.store.ts b/apps/web/core/store/instance.store.ts similarity index 100% rename from web/core/store/instance.store.ts rename to apps/web/core/store/instance.store.ts diff --git a/web/core/store/issue/archived/filter.store.ts b/apps/web/core/store/issue/archived/filter.store.ts similarity index 100% rename from web/core/store/issue/archived/filter.store.ts rename to apps/web/core/store/issue/archived/filter.store.ts diff --git a/web/core/store/issue/archived/index.ts b/apps/web/core/store/issue/archived/index.ts similarity index 100% rename from web/core/store/issue/archived/index.ts rename to apps/web/core/store/issue/archived/index.ts diff --git a/web/core/store/issue/archived/issue.store.ts b/apps/web/core/store/issue/archived/issue.store.ts similarity index 100% rename from web/core/store/issue/archived/issue.store.ts rename to apps/web/core/store/issue/archived/issue.store.ts diff --git a/web/core/store/issue/cycle/filter.store.ts b/apps/web/core/store/issue/cycle/filter.store.ts similarity index 100% rename from web/core/store/issue/cycle/filter.store.ts rename to apps/web/core/store/issue/cycle/filter.store.ts diff --git a/web/core/store/issue/cycle/index.ts b/apps/web/core/store/issue/cycle/index.ts similarity index 100% rename from web/core/store/issue/cycle/index.ts rename to apps/web/core/store/issue/cycle/index.ts diff --git a/web/core/store/issue/cycle/issue.store.ts b/apps/web/core/store/issue/cycle/issue.store.ts similarity index 100% rename from web/core/store/issue/cycle/issue.store.ts rename to apps/web/core/store/issue/cycle/issue.store.ts diff --git a/web/core/store/issue/draft/filter.store.ts b/apps/web/core/store/issue/draft/filter.store.ts similarity index 100% rename from web/core/store/issue/draft/filter.store.ts rename to apps/web/core/store/issue/draft/filter.store.ts diff --git a/web/core/store/issue/draft/index.ts b/apps/web/core/store/issue/draft/index.ts similarity index 100% rename from web/core/store/issue/draft/index.ts rename to apps/web/core/store/issue/draft/index.ts diff --git a/web/core/store/issue/draft/issue.store.ts b/apps/web/core/store/issue/draft/issue.store.ts similarity index 100% rename from web/core/store/issue/draft/issue.store.ts rename to apps/web/core/store/issue/draft/issue.store.ts diff --git a/web/core/store/issue/helpers/base-issues-utils.ts b/apps/web/core/store/issue/helpers/base-issues-utils.ts similarity index 100% rename from web/core/store/issue/helpers/base-issues-utils.ts rename to apps/web/core/store/issue/helpers/base-issues-utils.ts diff --git a/web/core/store/issue/helpers/base-issues.store.ts b/apps/web/core/store/issue/helpers/base-issues.store.ts similarity index 100% rename from web/core/store/issue/helpers/base-issues.store.ts rename to apps/web/core/store/issue/helpers/base-issues.store.ts diff --git a/web/core/store/issue/helpers/issue-filter-helper.store.ts b/apps/web/core/store/issue/helpers/issue-filter-helper.store.ts similarity index 100% rename from web/core/store/issue/helpers/issue-filter-helper.store.ts rename to apps/web/core/store/issue/helpers/issue-filter-helper.store.ts diff --git a/web/core/store/issue/issue-details/attachment.store.ts b/apps/web/core/store/issue/issue-details/attachment.store.ts similarity index 100% rename from web/core/store/issue/issue-details/attachment.store.ts rename to apps/web/core/store/issue/issue-details/attachment.store.ts diff --git a/web/core/store/issue/issue-details/comment.store.ts b/apps/web/core/store/issue/issue-details/comment.store.ts similarity index 100% rename from web/core/store/issue/issue-details/comment.store.ts rename to apps/web/core/store/issue/issue-details/comment.store.ts diff --git a/web/core/store/issue/issue-details/comment_reaction.store.ts b/apps/web/core/store/issue/issue-details/comment_reaction.store.ts similarity index 100% rename from web/core/store/issue/issue-details/comment_reaction.store.ts rename to apps/web/core/store/issue/issue-details/comment_reaction.store.ts diff --git a/web/core/store/issue/issue-details/issue.store.ts b/apps/web/core/store/issue/issue-details/issue.store.ts similarity index 100% rename from web/core/store/issue/issue-details/issue.store.ts rename to apps/web/core/store/issue/issue-details/issue.store.ts diff --git a/web/core/store/issue/issue-details/link.store.ts b/apps/web/core/store/issue/issue-details/link.store.ts similarity index 100% rename from web/core/store/issue/issue-details/link.store.ts rename to apps/web/core/store/issue/issue-details/link.store.ts diff --git a/web/core/store/issue/issue-details/reaction.store.ts b/apps/web/core/store/issue/issue-details/reaction.store.ts similarity index 100% rename from web/core/store/issue/issue-details/reaction.store.ts rename to apps/web/core/store/issue/issue-details/reaction.store.ts diff --git a/web/core/store/issue/issue-details/relation.store.ts b/apps/web/core/store/issue/issue-details/relation.store.ts similarity index 100% rename from web/core/store/issue/issue-details/relation.store.ts rename to apps/web/core/store/issue/issue-details/relation.store.ts diff --git a/web/core/store/issue/issue-details/root.store.ts b/apps/web/core/store/issue/issue-details/root.store.ts similarity index 100% rename from web/core/store/issue/issue-details/root.store.ts rename to apps/web/core/store/issue/issue-details/root.store.ts diff --git a/web/core/store/issue/issue-details/sub_issues.store.ts b/apps/web/core/store/issue/issue-details/sub_issues.store.ts similarity index 100% rename from web/core/store/issue/issue-details/sub_issues.store.ts rename to apps/web/core/store/issue/issue-details/sub_issues.store.ts diff --git a/web/core/store/issue/issue-details/sub_issues_filter.store.ts b/apps/web/core/store/issue/issue-details/sub_issues_filter.store.ts similarity index 100% rename from web/core/store/issue/issue-details/sub_issues_filter.store.ts rename to apps/web/core/store/issue/issue-details/sub_issues_filter.store.ts diff --git a/web/core/store/issue/issue-details/subscription.store.ts b/apps/web/core/store/issue/issue-details/subscription.store.ts similarity index 100% rename from web/core/store/issue/issue-details/subscription.store.ts rename to apps/web/core/store/issue/issue-details/subscription.store.ts diff --git a/web/core/store/issue/issue.store.ts b/apps/web/core/store/issue/issue.store.ts similarity index 100% rename from web/core/store/issue/issue.store.ts rename to apps/web/core/store/issue/issue.store.ts diff --git a/web/core/store/issue/issue_calendar_view.store.ts b/apps/web/core/store/issue/issue_calendar_view.store.ts similarity index 100% rename from web/core/store/issue/issue_calendar_view.store.ts rename to apps/web/core/store/issue/issue_calendar_view.store.ts diff --git a/web/core/store/issue/issue_gantt_view.store.ts b/apps/web/core/store/issue/issue_gantt_view.store.ts similarity index 100% rename from web/core/store/issue/issue_gantt_view.store.ts rename to apps/web/core/store/issue/issue_gantt_view.store.ts diff --git a/web/core/store/issue/issue_kanban_view.store.ts b/apps/web/core/store/issue/issue_kanban_view.store.ts similarity index 100% rename from web/core/store/issue/issue_kanban_view.store.ts rename to apps/web/core/store/issue/issue_kanban_view.store.ts diff --git a/web/core/store/issue/module/filter.store.ts b/apps/web/core/store/issue/module/filter.store.ts similarity index 100% rename from web/core/store/issue/module/filter.store.ts rename to apps/web/core/store/issue/module/filter.store.ts diff --git a/web/core/store/issue/module/index.ts b/apps/web/core/store/issue/module/index.ts similarity index 100% rename from web/core/store/issue/module/index.ts rename to apps/web/core/store/issue/module/index.ts diff --git a/web/core/store/issue/module/issue.store.ts b/apps/web/core/store/issue/module/issue.store.ts similarity index 100% rename from web/core/store/issue/module/issue.store.ts rename to apps/web/core/store/issue/module/issue.store.ts diff --git a/web/core/store/issue/profile/filter.store.ts b/apps/web/core/store/issue/profile/filter.store.ts similarity index 100% rename from web/core/store/issue/profile/filter.store.ts rename to apps/web/core/store/issue/profile/filter.store.ts diff --git a/web/core/store/issue/profile/index.ts b/apps/web/core/store/issue/profile/index.ts similarity index 100% rename from web/core/store/issue/profile/index.ts rename to apps/web/core/store/issue/profile/index.ts diff --git a/web/core/store/issue/profile/issue.store.ts b/apps/web/core/store/issue/profile/issue.store.ts similarity index 100% rename from web/core/store/issue/profile/issue.store.ts rename to apps/web/core/store/issue/profile/issue.store.ts diff --git a/web/core/store/issue/project-views/filter.store.ts b/apps/web/core/store/issue/project-views/filter.store.ts similarity index 100% rename from web/core/store/issue/project-views/filter.store.ts rename to apps/web/core/store/issue/project-views/filter.store.ts diff --git a/web/core/store/issue/project-views/index.ts b/apps/web/core/store/issue/project-views/index.ts similarity index 100% rename from web/core/store/issue/project-views/index.ts rename to apps/web/core/store/issue/project-views/index.ts diff --git a/web/core/store/issue/project-views/issue.store.ts b/apps/web/core/store/issue/project-views/issue.store.ts similarity index 100% rename from web/core/store/issue/project-views/issue.store.ts rename to apps/web/core/store/issue/project-views/issue.store.ts diff --git a/web/core/store/issue/project/filter.store.ts b/apps/web/core/store/issue/project/filter.store.ts similarity index 100% rename from web/core/store/issue/project/filter.store.ts rename to apps/web/core/store/issue/project/filter.store.ts diff --git a/web/core/store/issue/project/index.ts b/apps/web/core/store/issue/project/index.ts similarity index 100% rename from web/core/store/issue/project/index.ts rename to apps/web/core/store/issue/project/index.ts diff --git a/web/core/store/issue/project/issue.store.ts b/apps/web/core/store/issue/project/issue.store.ts similarity index 100% rename from web/core/store/issue/project/issue.store.ts rename to apps/web/core/store/issue/project/issue.store.ts diff --git a/web/core/store/issue/root.store.ts b/apps/web/core/store/issue/root.store.ts similarity index 100% rename from web/core/store/issue/root.store.ts rename to apps/web/core/store/issue/root.store.ts diff --git a/web/core/store/issue/workspace-draft/filter.store.ts b/apps/web/core/store/issue/workspace-draft/filter.store.ts similarity index 100% rename from web/core/store/issue/workspace-draft/filter.store.ts rename to apps/web/core/store/issue/workspace-draft/filter.store.ts diff --git a/web/core/store/issue/workspace-draft/index.ts b/apps/web/core/store/issue/workspace-draft/index.ts similarity index 100% rename from web/core/store/issue/workspace-draft/index.ts rename to apps/web/core/store/issue/workspace-draft/index.ts diff --git a/web/core/store/issue/workspace-draft/issue.store.ts b/apps/web/core/store/issue/workspace-draft/issue.store.ts similarity index 100% rename from web/core/store/issue/workspace-draft/issue.store.ts rename to apps/web/core/store/issue/workspace-draft/issue.store.ts diff --git a/web/core/store/issue/workspace/filter.store.ts b/apps/web/core/store/issue/workspace/filter.store.ts similarity index 100% rename from web/core/store/issue/workspace/filter.store.ts rename to apps/web/core/store/issue/workspace/filter.store.ts diff --git a/web/core/store/issue/workspace/index.ts b/apps/web/core/store/issue/workspace/index.ts similarity index 100% rename from web/core/store/issue/workspace/index.ts rename to apps/web/core/store/issue/workspace/index.ts diff --git a/web/core/store/issue/workspace/issue.store.ts b/apps/web/core/store/issue/workspace/issue.store.ts similarity index 100% rename from web/core/store/issue/workspace/issue.store.ts rename to apps/web/core/store/issue/workspace/issue.store.ts diff --git a/web/core/store/label.store.ts b/apps/web/core/store/label.store.ts similarity index 100% rename from web/core/store/label.store.ts rename to apps/web/core/store/label.store.ts diff --git a/web/core/store/member/base-project-member.store.ts b/apps/web/core/store/member/base-project-member.store.ts similarity index 100% rename from web/core/store/member/base-project-member.store.ts rename to apps/web/core/store/member/base-project-member.store.ts diff --git a/web/core/store/member/index.ts b/apps/web/core/store/member/index.ts similarity index 100% rename from web/core/store/member/index.ts rename to apps/web/core/store/member/index.ts diff --git a/web/core/store/member/workspace-member.store.ts b/apps/web/core/store/member/workspace-member.store.ts similarity index 100% rename from web/core/store/member/workspace-member.store.ts rename to apps/web/core/store/member/workspace-member.store.ts diff --git a/web/core/store/module.store.ts b/apps/web/core/store/module.store.ts similarity index 100% rename from web/core/store/module.store.ts rename to apps/web/core/store/module.store.ts diff --git a/web/core/store/module_filter.store.ts b/apps/web/core/store/module_filter.store.ts similarity index 100% rename from web/core/store/module_filter.store.ts rename to apps/web/core/store/module_filter.store.ts diff --git a/web/core/store/multiple_select.store.ts b/apps/web/core/store/multiple_select.store.ts similarity index 100% rename from web/core/store/multiple_select.store.ts rename to apps/web/core/store/multiple_select.store.ts diff --git a/web/core/store/notifications/notification.ts b/apps/web/core/store/notifications/notification.ts similarity index 100% rename from web/core/store/notifications/notification.ts rename to apps/web/core/store/notifications/notification.ts diff --git a/web/core/store/notifications/workspace-notifications.store.ts b/apps/web/core/store/notifications/workspace-notifications.store.ts similarity index 100% rename from web/core/store/notifications/workspace-notifications.store.ts rename to apps/web/core/store/notifications/workspace-notifications.store.ts diff --git a/web/core/store/pages/base-page.ts b/apps/web/core/store/pages/base-page.ts similarity index 100% rename from web/core/store/pages/base-page.ts rename to apps/web/core/store/pages/base-page.ts diff --git a/web/core/store/pages/page-editor-info.ts b/apps/web/core/store/pages/page-editor-info.ts similarity index 100% rename from web/core/store/pages/page-editor-info.ts rename to apps/web/core/store/pages/page-editor-info.ts diff --git a/web/core/store/pages/project-page.store.ts b/apps/web/core/store/pages/project-page.store.ts similarity index 100% rename from web/core/store/pages/project-page.store.ts rename to apps/web/core/store/pages/project-page.store.ts diff --git a/web/core/store/pages/project-page.ts b/apps/web/core/store/pages/project-page.ts similarity index 100% rename from web/core/store/pages/project-page.ts rename to apps/web/core/store/pages/project-page.ts diff --git a/web/core/store/project-view.store.ts b/apps/web/core/store/project-view.store.ts similarity index 100% rename from web/core/store/project-view.store.ts rename to apps/web/core/store/project-view.store.ts diff --git a/web/core/store/project/index.ts b/apps/web/core/store/project/index.ts similarity index 100% rename from web/core/store/project/index.ts rename to apps/web/core/store/project/index.ts diff --git a/web/core/store/project/project-publish.store.ts b/apps/web/core/store/project/project-publish.store.ts similarity index 100% rename from web/core/store/project/project-publish.store.ts rename to apps/web/core/store/project/project-publish.store.ts diff --git a/web/core/store/project/project.store.ts b/apps/web/core/store/project/project.store.ts similarity index 100% rename from web/core/store/project/project.store.ts rename to apps/web/core/store/project/project.store.ts diff --git a/web/core/store/project/project_filter.store.ts b/apps/web/core/store/project/project_filter.store.ts similarity index 100% rename from web/core/store/project/project_filter.store.ts rename to apps/web/core/store/project/project_filter.store.ts diff --git a/web/core/store/root.store.ts b/apps/web/core/store/root.store.ts similarity index 100% rename from web/core/store/root.store.ts rename to apps/web/core/store/root.store.ts diff --git a/web/core/store/router.store.ts b/apps/web/core/store/router.store.ts similarity index 100% rename from web/core/store/router.store.ts rename to apps/web/core/store/router.store.ts diff --git a/web/core/store/state.store.ts b/apps/web/core/store/state.store.ts similarity index 100% rename from web/core/store/state.store.ts rename to apps/web/core/store/state.store.ts diff --git a/web/core/store/sticky/sticky.store.ts b/apps/web/core/store/sticky/sticky.store.ts similarity index 100% rename from web/core/store/sticky/sticky.store.ts rename to apps/web/core/store/sticky/sticky.store.ts diff --git a/web/core/store/theme.store.ts b/apps/web/core/store/theme.store.ts similarity index 100% rename from web/core/store/theme.store.ts rename to apps/web/core/store/theme.store.ts diff --git a/web/core/store/timeline/issues-timeline.store.ts b/apps/web/core/store/timeline/issues-timeline.store.ts similarity index 100% rename from web/core/store/timeline/issues-timeline.store.ts rename to apps/web/core/store/timeline/issues-timeline.store.ts diff --git a/web/core/store/timeline/modules-timeline.store.ts b/apps/web/core/store/timeline/modules-timeline.store.ts similarity index 100% rename from web/core/store/timeline/modules-timeline.store.ts rename to apps/web/core/store/timeline/modules-timeline.store.ts diff --git a/web/core/store/transient.store.ts b/apps/web/core/store/transient.store.ts similarity index 100% rename from web/core/store/transient.store.ts rename to apps/web/core/store/transient.store.ts diff --git a/web/core/store/user/account.store.ts b/apps/web/core/store/user/account.store.ts similarity index 100% rename from web/core/store/user/account.store.ts rename to apps/web/core/store/user/account.store.ts diff --git a/web/core/store/user/base-permissions.store.ts b/apps/web/core/store/user/base-permissions.store.ts similarity index 100% rename from web/core/store/user/base-permissions.store.ts rename to apps/web/core/store/user/base-permissions.store.ts diff --git a/web/core/store/user/index.ts b/apps/web/core/store/user/index.ts similarity index 100% rename from web/core/store/user/index.ts rename to apps/web/core/store/user/index.ts diff --git a/web/core/store/user/profile.store.ts b/apps/web/core/store/user/profile.store.ts similarity index 100% rename from web/core/store/user/profile.store.ts rename to apps/web/core/store/user/profile.store.ts diff --git a/web/core/store/user/settings.store.ts b/apps/web/core/store/user/settings.store.ts similarity index 100% rename from web/core/store/user/settings.store.ts rename to apps/web/core/store/user/settings.store.ts diff --git a/web/core/store/workspace/api-token.store.ts b/apps/web/core/store/workspace/api-token.store.ts similarity index 100% rename from web/core/store/workspace/api-token.store.ts rename to apps/web/core/store/workspace/api-token.store.ts diff --git a/web/core/store/workspace/home.ts b/apps/web/core/store/workspace/home.ts similarity index 100% rename from web/core/store/workspace/home.ts rename to apps/web/core/store/workspace/home.ts diff --git a/web/core/store/workspace/index.ts b/apps/web/core/store/workspace/index.ts similarity index 100% rename from web/core/store/workspace/index.ts rename to apps/web/core/store/workspace/index.ts diff --git a/web/core/store/workspace/link.store.ts b/apps/web/core/store/workspace/link.store.ts similarity index 100% rename from web/core/store/workspace/link.store.ts rename to apps/web/core/store/workspace/link.store.ts diff --git a/web/core/store/workspace/webhook.store.ts b/apps/web/core/store/workspace/webhook.store.ts similarity index 100% rename from web/core/store/workspace/webhook.store.ts rename to apps/web/core/store/workspace/webhook.store.ts diff --git a/web/ee/components/active-cycles/index.ts b/apps/web/ee/components/active-cycles/index.ts similarity index 100% rename from web/ee/components/active-cycles/index.ts rename to apps/web/ee/components/active-cycles/index.ts diff --git a/web/ee/components/active-cycles/root.tsx b/apps/web/ee/components/active-cycles/root.tsx similarity index 100% rename from web/ee/components/active-cycles/root.tsx rename to apps/web/ee/components/active-cycles/root.tsx diff --git a/web/ee/components/active-cycles/workspace-active-cycles-upgrade.tsx b/apps/web/ee/components/active-cycles/workspace-active-cycles-upgrade.tsx similarity index 100% rename from web/ee/components/active-cycles/workspace-active-cycles-upgrade.tsx rename to apps/web/ee/components/active-cycles/workspace-active-cycles-upgrade.tsx diff --git a/web/ee/components/breadcrumbs/index.ts b/apps/web/ee/components/breadcrumbs/index.ts similarity index 100% rename from web/ee/components/breadcrumbs/index.ts rename to apps/web/ee/components/breadcrumbs/index.ts diff --git a/web/ee/components/command-palette/modals/index.ts b/apps/web/ee/components/command-palette/modals/index.ts similarity index 100% rename from web/ee/components/command-palette/modals/index.ts rename to apps/web/ee/components/command-palette/modals/index.ts diff --git a/web/ee/components/comments/index.ts b/apps/web/ee/components/comments/index.ts similarity index 100% rename from web/ee/components/comments/index.ts rename to apps/web/ee/components/comments/index.ts diff --git a/web/ee/components/cycles/active-cycle/index.ts b/apps/web/ee/components/cycles/active-cycle/index.ts similarity index 100% rename from web/ee/components/cycles/active-cycle/index.ts rename to apps/web/ee/components/cycles/active-cycle/index.ts diff --git a/web/ee/components/cycles/analytics-sidebar/index.ts b/apps/web/ee/components/cycles/analytics-sidebar/index.ts similarity index 100% rename from web/ee/components/cycles/analytics-sidebar/index.ts rename to apps/web/ee/components/cycles/analytics-sidebar/index.ts diff --git a/web/ee/components/cycles/end-cycle/index.ts b/apps/web/ee/components/cycles/end-cycle/index.ts similarity index 100% rename from web/ee/components/cycles/end-cycle/index.ts rename to apps/web/ee/components/cycles/end-cycle/index.ts diff --git a/web/ee/components/cycles/index.ts b/apps/web/ee/components/cycles/index.ts similarity index 100% rename from web/ee/components/cycles/index.ts rename to apps/web/ee/components/cycles/index.ts diff --git a/web/ee/components/de-dupe/index.ts b/apps/web/ee/components/de-dupe/index.ts similarity index 100% rename from web/ee/components/de-dupe/index.ts rename to apps/web/ee/components/de-dupe/index.ts diff --git a/web/ee/components/editor/index.ts b/apps/web/ee/components/editor/index.ts similarity index 100% rename from web/ee/components/editor/index.ts rename to apps/web/ee/components/editor/index.ts diff --git a/web/ee/components/epics/index.ts b/apps/web/ee/components/epics/index.ts similarity index 100% rename from web/ee/components/epics/index.ts rename to apps/web/ee/components/epics/index.ts diff --git a/web/ee/components/estimates/estimate-list-item-buttons.tsx b/apps/web/ee/components/estimates/estimate-list-item-buttons.tsx similarity index 100% rename from web/ee/components/estimates/estimate-list-item-buttons.tsx rename to apps/web/ee/components/estimates/estimate-list-item-buttons.tsx diff --git a/web/ee/components/estimates/index.ts b/apps/web/ee/components/estimates/index.ts similarity index 100% rename from web/ee/components/estimates/index.ts rename to apps/web/ee/components/estimates/index.ts diff --git a/web/ee/components/estimates/points/delete.tsx b/apps/web/ee/components/estimates/points/delete.tsx similarity index 100% rename from web/ee/components/estimates/points/delete.tsx rename to apps/web/ee/components/estimates/points/delete.tsx diff --git a/web/ee/components/estimates/points/index.ts b/apps/web/ee/components/estimates/points/index.ts similarity index 100% rename from web/ee/components/estimates/points/index.ts rename to apps/web/ee/components/estimates/points/index.ts diff --git a/web/ee/components/estimates/update/index.ts b/apps/web/ee/components/estimates/update/index.ts similarity index 100% rename from web/ee/components/estimates/update/index.ts rename to apps/web/ee/components/estimates/update/index.ts diff --git a/web/ee/components/estimates/update/modal.tsx b/apps/web/ee/components/estimates/update/modal.tsx similarity index 100% rename from web/ee/components/estimates/update/modal.tsx rename to apps/web/ee/components/estimates/update/modal.tsx diff --git a/web/ee/components/gantt-chart/index.ts b/apps/web/ee/components/gantt-chart/index.ts similarity index 100% rename from web/ee/components/gantt-chart/index.ts rename to apps/web/ee/components/gantt-chart/index.ts diff --git a/web/ee/components/global/index.ts b/apps/web/ee/components/global/index.ts similarity index 100% rename from web/ee/components/global/index.ts rename to apps/web/ee/components/global/index.ts diff --git a/web/ee/components/home/header.tsx b/apps/web/ee/components/home/header.tsx similarity index 100% rename from web/ee/components/home/header.tsx rename to apps/web/ee/components/home/header.tsx diff --git a/web/ee/components/home/index.ts b/apps/web/ee/components/home/index.ts similarity index 100% rename from web/ee/components/home/index.ts rename to apps/web/ee/components/home/index.ts diff --git a/web/ee/components/inbox/source-pill.tsx b/apps/web/ee/components/inbox/source-pill.tsx similarity index 100% rename from web/ee/components/inbox/source-pill.tsx rename to apps/web/ee/components/inbox/source-pill.tsx diff --git a/web/ee/components/instance/index.ts b/apps/web/ee/components/instance/index.ts similarity index 100% rename from web/ee/components/instance/index.ts rename to apps/web/ee/components/instance/index.ts diff --git a/web/ee/components/instance/maintenance-message.tsx b/apps/web/ee/components/instance/maintenance-message.tsx similarity index 100% rename from web/ee/components/instance/maintenance-message.tsx rename to apps/web/ee/components/instance/maintenance-message.tsx diff --git a/web/ee/components/issues/bulk-operations/index.ts b/apps/web/ee/components/issues/bulk-operations/index.ts similarity index 100% rename from web/ee/components/issues/bulk-operations/index.ts rename to apps/web/ee/components/issues/bulk-operations/index.ts diff --git a/web/ee/components/issues/filters/applied-filters/index.ts b/apps/web/ee/components/issues/filters/applied-filters/index.ts similarity index 100% rename from web/ee/components/issues/filters/applied-filters/index.ts rename to apps/web/ee/components/issues/filters/applied-filters/index.ts diff --git a/web/ee/components/issues/filters/applied-filters/issue-types.tsx b/apps/web/ee/components/issues/filters/applied-filters/issue-types.tsx similarity index 100% rename from web/ee/components/issues/filters/applied-filters/issue-types.tsx rename to apps/web/ee/components/issues/filters/applied-filters/issue-types.tsx diff --git a/web/ee/components/issues/filters/index.ts b/apps/web/ee/components/issues/filters/index.ts similarity index 100% rename from web/ee/components/issues/filters/index.ts rename to apps/web/ee/components/issues/filters/index.ts diff --git a/web/ee/components/issues/filters/issue-types.tsx b/apps/web/ee/components/issues/filters/issue-types.tsx similarity index 100% rename from web/ee/components/issues/filters/issue-types.tsx rename to apps/web/ee/components/issues/filters/issue-types.tsx diff --git a/web/ee/components/issues/filters/team-project.tsx b/apps/web/ee/components/issues/filters/team-project.tsx similarity index 100% rename from web/ee/components/issues/filters/team-project.tsx rename to apps/web/ee/components/issues/filters/team-project.tsx diff --git a/web/ee/components/issues/header.tsx b/apps/web/ee/components/issues/header.tsx similarity index 100% rename from web/ee/components/issues/header.tsx rename to apps/web/ee/components/issues/header.tsx diff --git a/web/ee/components/issues/index.ts b/apps/web/ee/components/issues/index.ts similarity index 100% rename from web/ee/components/issues/index.ts rename to apps/web/ee/components/issues/index.ts diff --git a/web/ee/components/issues/issue-details/additional-activity-root.tsx b/apps/web/ee/components/issues/issue-details/additional-activity-root.tsx similarity index 100% rename from web/ee/components/issues/issue-details/additional-activity-root.tsx rename to apps/web/ee/components/issues/issue-details/additional-activity-root.tsx diff --git a/web/ee/components/issues/issue-details/additional-properties.tsx b/apps/web/ee/components/issues/issue-details/additional-properties.tsx similarity index 100% rename from web/ee/components/issues/issue-details/additional-properties.tsx rename to apps/web/ee/components/issues/issue-details/additional-properties.tsx diff --git a/web/ee/components/issues/issue-details/index.ts b/apps/web/ee/components/issues/issue-details/index.ts similarity index 100% rename from web/ee/components/issues/issue-details/index.ts rename to apps/web/ee/components/issues/issue-details/index.ts diff --git a/web/ee/components/issues/issue-details/issue-creator.tsx b/apps/web/ee/components/issues/issue-details/issue-creator.tsx similarity index 100% rename from web/ee/components/issues/issue-details/issue-creator.tsx rename to apps/web/ee/components/issues/issue-details/issue-creator.tsx diff --git a/web/ee/components/issues/issue-details/issue-identifier.tsx b/apps/web/ee/components/issues/issue-details/issue-identifier.tsx similarity index 100% rename from web/ee/components/issues/issue-details/issue-identifier.tsx rename to apps/web/ee/components/issues/issue-details/issue-identifier.tsx diff --git a/web/ee/components/issues/issue-details/issue-properties-activity/index.ts b/apps/web/ee/components/issues/issue-details/issue-properties-activity/index.ts similarity index 100% rename from web/ee/components/issues/issue-details/issue-properties-activity/index.ts rename to apps/web/ee/components/issues/issue-details/issue-properties-activity/index.ts diff --git a/web/ee/components/issues/issue-details/issue-properties-activity/root.tsx b/apps/web/ee/components/issues/issue-details/issue-properties-activity/root.tsx similarity index 100% rename from web/ee/components/issues/issue-details/issue-properties-activity/root.tsx rename to apps/web/ee/components/issues/issue-details/issue-properties-activity/root.tsx diff --git a/web/ee/components/issues/issue-details/issue-type-activity.tsx b/apps/web/ee/components/issues/issue-details/issue-type-activity.tsx similarity index 100% rename from web/ee/components/issues/issue-details/issue-type-activity.tsx rename to apps/web/ee/components/issues/issue-details/issue-type-activity.tsx diff --git a/web/ee/components/issues/issue-details/issue-type-switcher.tsx b/apps/web/ee/components/issues/issue-details/issue-type-switcher.tsx similarity index 100% rename from web/ee/components/issues/issue-details/issue-type-switcher.tsx rename to apps/web/ee/components/issues/issue-details/issue-type-switcher.tsx diff --git a/web/ee/components/issues/issue-details/parent-select-root.tsx b/apps/web/ee/components/issues/issue-details/parent-select-root.tsx similarity index 100% rename from web/ee/components/issues/issue-details/parent-select-root.tsx rename to apps/web/ee/components/issues/issue-details/parent-select-root.tsx diff --git a/web/ee/components/issues/issue-layouts/additional-properties.tsx b/apps/web/ee/components/issues/issue-layouts/additional-properties.tsx similarity index 100% rename from web/ee/components/issues/issue-layouts/additional-properties.tsx rename to apps/web/ee/components/issues/issue-layouts/additional-properties.tsx diff --git a/web/ee/components/issues/issue-layouts/empty-states/index.ts b/apps/web/ee/components/issues/issue-layouts/empty-states/index.ts similarity index 100% rename from web/ee/components/issues/issue-layouts/empty-states/index.ts rename to apps/web/ee/components/issues/issue-layouts/empty-states/index.ts diff --git a/web/ee/components/issues/issue-layouts/quick-action-dropdowns/index.ts b/apps/web/ee/components/issues/issue-layouts/quick-action-dropdowns/index.ts similarity index 100% rename from web/ee/components/issues/issue-layouts/quick-action-dropdowns/index.ts rename to apps/web/ee/components/issues/issue-layouts/quick-action-dropdowns/index.ts diff --git a/web/ee/components/issues/issue-layouts/utils.tsx b/apps/web/ee/components/issues/issue-layouts/utils.tsx similarity index 100% rename from web/ee/components/issues/issue-layouts/utils.tsx rename to apps/web/ee/components/issues/issue-layouts/utils.tsx diff --git a/web/ee/components/issues/issue-modal/additional-properties.tsx b/apps/web/ee/components/issues/issue-modal/additional-properties.tsx similarity index 100% rename from web/ee/components/issues/issue-modal/additional-properties.tsx rename to apps/web/ee/components/issues/issue-modal/additional-properties.tsx diff --git a/web/ee/components/issues/issue-modal/index.ts b/apps/web/ee/components/issues/issue-modal/index.ts similarity index 100% rename from web/ee/components/issues/issue-modal/index.ts rename to apps/web/ee/components/issues/issue-modal/index.ts diff --git a/web/ee/components/issues/issue-modal/issue-type-select.tsx b/apps/web/ee/components/issues/issue-modal/issue-type-select.tsx similarity index 100% rename from web/ee/components/issues/issue-modal/issue-type-select.tsx rename to apps/web/ee/components/issues/issue-modal/issue-type-select.tsx diff --git a/web/ee/components/issues/issue-modal/provider.tsx b/apps/web/ee/components/issues/issue-modal/provider.tsx similarity index 100% rename from web/ee/components/issues/issue-modal/provider.tsx rename to apps/web/ee/components/issues/issue-modal/provider.tsx diff --git a/web/ee/components/issues/quick-add/index.ts b/apps/web/ee/components/issues/quick-add/index.ts similarity index 100% rename from web/ee/components/issues/quick-add/index.ts rename to apps/web/ee/components/issues/quick-add/index.ts diff --git a/web/ee/components/issues/quick-add/root.tsx b/apps/web/ee/components/issues/quick-add/root.tsx similarity index 100% rename from web/ee/components/issues/quick-add/root.tsx rename to apps/web/ee/components/issues/quick-add/root.tsx diff --git a/web/ee/components/issues/worklog/activity/filter-root.tsx b/apps/web/ee/components/issues/worklog/activity/filter-root.tsx similarity index 100% rename from web/ee/components/issues/worklog/activity/filter-root.tsx rename to apps/web/ee/components/issues/worklog/activity/filter-root.tsx diff --git a/web/ee/components/issues/worklog/activity/index.ts b/apps/web/ee/components/issues/worklog/activity/index.ts similarity index 100% rename from web/ee/components/issues/worklog/activity/index.ts rename to apps/web/ee/components/issues/worklog/activity/index.ts diff --git a/web/ee/components/issues/worklog/activity/root.tsx b/apps/web/ee/components/issues/worklog/activity/root.tsx similarity index 100% rename from web/ee/components/issues/worklog/activity/root.tsx rename to apps/web/ee/components/issues/worklog/activity/root.tsx diff --git a/web/ee/components/issues/worklog/activity/worklog-create-button.tsx b/apps/web/ee/components/issues/worklog/activity/worklog-create-button.tsx similarity index 100% rename from web/ee/components/issues/worklog/activity/worklog-create-button.tsx rename to apps/web/ee/components/issues/worklog/activity/worklog-create-button.tsx diff --git a/web/ee/components/issues/worklog/index.ts b/apps/web/ee/components/issues/worklog/index.ts similarity index 100% rename from web/ee/components/issues/worklog/index.ts rename to apps/web/ee/components/issues/worklog/index.ts diff --git a/web/ee/components/issues/worklog/property/index.ts b/apps/web/ee/components/issues/worklog/property/index.ts similarity index 100% rename from web/ee/components/issues/worklog/property/index.ts rename to apps/web/ee/components/issues/worklog/property/index.ts diff --git a/web/ee/components/issues/worklog/property/root.tsx b/apps/web/ee/components/issues/worklog/property/root.tsx similarity index 100% rename from web/ee/components/issues/worklog/property/root.tsx rename to apps/web/ee/components/issues/worklog/property/root.tsx diff --git a/web/ee/components/pages/index.ts b/apps/web/ee/components/pages/index.ts similarity index 100% rename from web/ee/components/pages/index.ts rename to apps/web/ee/components/pages/index.ts diff --git a/web/ee/components/projects/create/attributes.tsx b/apps/web/ee/components/projects/create/attributes.tsx similarity index 100% rename from web/ee/components/projects/create/attributes.tsx rename to apps/web/ee/components/projects/create/attributes.tsx diff --git a/web/ee/components/projects/create/root.tsx b/apps/web/ee/components/projects/create/root.tsx similarity index 100% rename from web/ee/components/projects/create/root.tsx rename to apps/web/ee/components/projects/create/root.tsx diff --git a/web/ee/components/projects/header.tsx b/apps/web/ee/components/projects/header.tsx similarity index 100% rename from web/ee/components/projects/header.tsx rename to apps/web/ee/components/projects/header.tsx diff --git a/web/ee/components/projects/mobile-header.tsx b/apps/web/ee/components/projects/mobile-header.tsx similarity index 100% rename from web/ee/components/projects/mobile-header.tsx rename to apps/web/ee/components/projects/mobile-header.tsx diff --git a/web/ee/components/projects/page.tsx b/apps/web/ee/components/projects/page.tsx similarity index 100% rename from web/ee/components/projects/page.tsx rename to apps/web/ee/components/projects/page.tsx diff --git a/web/ee/components/projects/settings/intake/index.ts b/apps/web/ee/components/projects/settings/intake/index.ts similarity index 100% rename from web/ee/components/projects/settings/intake/index.ts rename to apps/web/ee/components/projects/settings/intake/index.ts diff --git a/web/ee/components/projects/settings/useProjectColumns.tsx b/apps/web/ee/components/projects/settings/useProjectColumns.tsx similarity index 100% rename from web/ee/components/projects/settings/useProjectColumns.tsx rename to apps/web/ee/components/projects/settings/useProjectColumns.tsx diff --git a/web/ee/components/relations/index.tsx b/apps/web/ee/components/relations/index.tsx similarity index 100% rename from web/ee/components/relations/index.tsx rename to apps/web/ee/components/relations/index.tsx diff --git a/web/ee/components/sidebar/index.ts b/apps/web/ee/components/sidebar/index.ts similarity index 100% rename from web/ee/components/sidebar/index.ts rename to apps/web/ee/components/sidebar/index.ts diff --git a/web/ee/components/views/access-controller.tsx b/apps/web/ee/components/views/access-controller.tsx similarity index 100% rename from web/ee/components/views/access-controller.tsx rename to apps/web/ee/components/views/access-controller.tsx diff --git a/web/ee/components/views/filters/access-filter.tsx b/apps/web/ee/components/views/filters/access-filter.tsx similarity index 100% rename from web/ee/components/views/filters/access-filter.tsx rename to apps/web/ee/components/views/filters/access-filter.tsx diff --git a/web/ee/components/views/publish/index.ts b/apps/web/ee/components/views/publish/index.ts similarity index 100% rename from web/ee/components/views/publish/index.ts rename to apps/web/ee/components/views/publish/index.ts diff --git a/web/ee/components/workflow/index.ts b/apps/web/ee/components/workflow/index.ts similarity index 100% rename from web/ee/components/workflow/index.ts rename to apps/web/ee/components/workflow/index.ts diff --git a/web/ee/components/workspace-notifications/index.ts b/apps/web/ee/components/workspace-notifications/index.ts similarity index 100% rename from web/ee/components/workspace-notifications/index.ts rename to apps/web/ee/components/workspace-notifications/index.ts diff --git a/web/ee/components/workspace/billing/index.ts b/apps/web/ee/components/workspace/billing/index.ts similarity index 100% rename from web/ee/components/workspace/billing/index.ts rename to apps/web/ee/components/workspace/billing/index.ts diff --git a/web/ee/components/workspace/billing/root.tsx b/apps/web/ee/components/workspace/billing/root.tsx similarity index 100% rename from web/ee/components/workspace/billing/root.tsx rename to apps/web/ee/components/workspace/billing/root.tsx diff --git a/web/ee/components/workspace/delete-workspace-modal.tsx b/apps/web/ee/components/workspace/delete-workspace-modal.tsx similarity index 100% rename from web/ee/components/workspace/delete-workspace-modal.tsx rename to apps/web/ee/components/workspace/delete-workspace-modal.tsx diff --git a/web/ee/components/workspace/delete-workspace-section.tsx b/apps/web/ee/components/workspace/delete-workspace-section.tsx similarity index 100% rename from web/ee/components/workspace/delete-workspace-section.tsx rename to apps/web/ee/components/workspace/delete-workspace-section.tsx diff --git a/web/ee/components/workspace/edition-badge.tsx b/apps/web/ee/components/workspace/edition-badge.tsx similarity index 100% rename from web/ee/components/workspace/edition-badge.tsx rename to apps/web/ee/components/workspace/edition-badge.tsx diff --git a/web/ee/components/workspace/index.ts b/apps/web/ee/components/workspace/index.ts similarity index 100% rename from web/ee/components/workspace/index.ts rename to apps/web/ee/components/workspace/index.ts diff --git a/web/ee/components/workspace/settings/useMemberColumns.tsx b/apps/web/ee/components/workspace/settings/useMemberColumns.tsx similarity index 100% rename from web/ee/components/workspace/settings/useMemberColumns.tsx rename to apps/web/ee/components/workspace/settings/useMemberColumns.tsx diff --git a/web/ee/components/workspace/sidebar/index.ts b/apps/web/ee/components/workspace/sidebar/index.ts similarity index 100% rename from web/ee/components/workspace/sidebar/index.ts rename to apps/web/ee/components/workspace/sidebar/index.ts diff --git a/web/ee/components/workspace/sidebar/teams-sidebar-list.tsx b/apps/web/ee/components/workspace/sidebar/teams-sidebar-list.tsx similarity index 100% rename from web/ee/components/workspace/sidebar/teams-sidebar-list.tsx rename to apps/web/ee/components/workspace/sidebar/teams-sidebar-list.tsx diff --git a/web/ee/components/workspace/upgrade-badge.tsx b/apps/web/ee/components/workspace/upgrade-badge.tsx similarity index 100% rename from web/ee/components/workspace/upgrade-badge.tsx rename to apps/web/ee/components/workspace/upgrade-badge.tsx diff --git a/web/ee/constants/editor.ts b/apps/web/ee/constants/editor.ts similarity index 100% rename from web/ee/constants/editor.ts rename to apps/web/ee/constants/editor.ts diff --git a/web/ee/constants/index.ts b/apps/web/ee/constants/index.ts similarity index 100% rename from web/ee/constants/index.ts rename to apps/web/ee/constants/index.ts diff --git a/web/ee/constants/project/index.ts b/apps/web/ee/constants/project/index.ts similarity index 100% rename from web/ee/constants/project/index.ts rename to apps/web/ee/constants/project/index.ts diff --git a/web/ee/constants/project/settings/features.tsx b/apps/web/ee/constants/project/settings/features.tsx similarity index 100% rename from web/ee/constants/project/settings/features.tsx rename to apps/web/ee/constants/project/settings/features.tsx diff --git a/web/ee/constants/project/settings/index.ts b/apps/web/ee/constants/project/settings/index.ts similarity index 100% rename from web/ee/constants/project/settings/index.ts rename to apps/web/ee/constants/project/settings/index.ts diff --git a/web/ee/constants/project/settings/tabs.ts b/apps/web/ee/constants/project/settings/tabs.ts similarity index 100% rename from web/ee/constants/project/settings/tabs.ts rename to apps/web/ee/constants/project/settings/tabs.ts diff --git a/web/ee/constants/sidebar-favorites.ts b/apps/web/ee/constants/sidebar-favorites.ts similarity index 100% rename from web/ee/constants/sidebar-favorites.ts rename to apps/web/ee/constants/sidebar-favorites.ts diff --git a/web/ee/helpers/command-palette.ts b/apps/web/ee/helpers/command-palette.ts similarity index 100% rename from web/ee/helpers/command-palette.ts rename to apps/web/ee/helpers/command-palette.ts diff --git a/web/ee/helpers/epic-analytics.ts b/apps/web/ee/helpers/epic-analytics.ts similarity index 100% rename from web/ee/helpers/epic-analytics.ts rename to apps/web/ee/helpers/epic-analytics.ts diff --git a/web/ee/helpers/instance.helper.ts b/apps/web/ee/helpers/instance.helper.ts similarity index 100% rename from web/ee/helpers/instance.helper.ts rename to apps/web/ee/helpers/instance.helper.ts diff --git a/web/ee/helpers/issue-action-helper.ts b/apps/web/ee/helpers/issue-action-helper.ts similarity index 100% rename from web/ee/helpers/issue-action-helper.ts rename to apps/web/ee/helpers/issue-action-helper.ts diff --git a/web/ee/helpers/issue-filter.helper.ts b/apps/web/ee/helpers/issue-filter.helper.ts similarity index 100% rename from web/ee/helpers/issue-filter.helper.ts rename to apps/web/ee/helpers/issue-filter.helper.ts diff --git a/web/ee/helpers/project-settings.ts b/apps/web/ee/helpers/project-settings.ts similarity index 100% rename from web/ee/helpers/project-settings.ts rename to apps/web/ee/helpers/project-settings.ts diff --git a/web/ee/helpers/workspace.helper.ts b/apps/web/ee/helpers/workspace.helper.ts similarity index 100% rename from web/ee/helpers/workspace.helper.ts rename to apps/web/ee/helpers/workspace.helper.ts diff --git a/web/ee/hooks/store/index.ts b/apps/web/ee/hooks/store/index.ts similarity index 100% rename from web/ee/hooks/store/index.ts rename to apps/web/ee/hooks/store/index.ts diff --git a/web/ee/hooks/use-additional-editor-mention.tsx b/apps/web/ee/hooks/use-additional-editor-mention.tsx similarity index 100% rename from web/ee/hooks/use-additional-editor-mention.tsx rename to apps/web/ee/hooks/use-additional-editor-mention.tsx diff --git a/web/ee/hooks/use-additional-favorite-item-details.ts b/apps/web/ee/hooks/use-additional-favorite-item-details.ts similarity index 100% rename from web/ee/hooks/use-additional-favorite-item-details.ts rename to apps/web/ee/hooks/use-additional-favorite-item-details.ts diff --git a/web/ee/hooks/use-editor-flagging.ts b/apps/web/ee/hooks/use-editor-flagging.ts similarity index 100% rename from web/ee/hooks/use-editor-flagging.ts rename to apps/web/ee/hooks/use-editor-flagging.ts diff --git a/web/ee/hooks/use-file-size.ts b/apps/web/ee/hooks/use-file-size.ts similarity index 100% rename from web/ee/hooks/use-file-size.ts rename to apps/web/ee/hooks/use-file-size.ts diff --git a/web/ee/hooks/use-issue-embed.tsx b/apps/web/ee/hooks/use-issue-embed.tsx similarity index 100% rename from web/ee/hooks/use-issue-embed.tsx rename to apps/web/ee/hooks/use-issue-embed.tsx diff --git a/web/ee/hooks/use-issue-properties.tsx b/apps/web/ee/hooks/use-issue-properties.tsx similarity index 100% rename from web/ee/hooks/use-issue-properties.tsx rename to apps/web/ee/hooks/use-issue-properties.tsx diff --git a/web/ee/hooks/use-page-flag.ts b/apps/web/ee/hooks/use-page-flag.ts similarity index 100% rename from web/ee/hooks/use-page-flag.ts rename to apps/web/ee/hooks/use-page-flag.ts diff --git a/web/ee/layouts/project-wrapper.tsx b/apps/web/ee/layouts/project-wrapper.tsx similarity index 100% rename from web/ee/layouts/project-wrapper.tsx rename to apps/web/ee/layouts/project-wrapper.tsx diff --git a/web/ee/layouts/workspace-wrapper.tsx b/apps/web/ee/layouts/workspace-wrapper.tsx similarity index 100% rename from web/ee/layouts/workspace-wrapper.tsx rename to apps/web/ee/layouts/workspace-wrapper.tsx diff --git a/web/ee/services/index.ts b/apps/web/ee/services/index.ts similarity index 100% rename from web/ee/services/index.ts rename to apps/web/ee/services/index.ts diff --git a/web/ee/services/project/estimate.service.ts b/apps/web/ee/services/project/estimate.service.ts similarity index 100% rename from web/ee/services/project/estimate.service.ts rename to apps/web/ee/services/project/estimate.service.ts diff --git a/web/ee/services/project/index.ts b/apps/web/ee/services/project/index.ts similarity index 100% rename from web/ee/services/project/index.ts rename to apps/web/ee/services/project/index.ts diff --git a/web/ee/services/project/project-state.service.ts b/apps/web/ee/services/project/project-state.service.ts similarity index 100% rename from web/ee/services/project/project-state.service.ts rename to apps/web/ee/services/project/project-state.service.ts diff --git a/web/ee/store/analytics.store.ts b/apps/web/ee/store/analytics.store.ts similarity index 100% rename from web/ee/store/analytics.store.ts rename to apps/web/ee/store/analytics.store.ts diff --git a/web/ee/store/command-palette.store.ts b/apps/web/ee/store/command-palette.store.ts similarity index 100% rename from web/ee/store/command-palette.store.ts rename to apps/web/ee/store/command-palette.store.ts diff --git a/web/ee/store/cycle/index.ts b/apps/web/ee/store/cycle/index.ts similarity index 100% rename from web/ee/store/cycle/index.ts rename to apps/web/ee/store/cycle/index.ts diff --git a/web/ee/store/estimates/estimate.ts b/apps/web/ee/store/estimates/estimate.ts similarity index 100% rename from web/ee/store/estimates/estimate.ts rename to apps/web/ee/store/estimates/estimate.ts diff --git a/web/ee/store/issue/helpers/base-issue.store.ts b/apps/web/ee/store/issue/helpers/base-issue.store.ts similarity index 100% rename from web/ee/store/issue/helpers/base-issue.store.ts rename to apps/web/ee/store/issue/helpers/base-issue.store.ts diff --git a/web/ee/store/issue/issue-details/activity.store.ts b/apps/web/ee/store/issue/issue-details/activity.store.ts similarity index 100% rename from web/ee/store/issue/issue-details/activity.store.ts rename to apps/web/ee/store/issue/issue-details/activity.store.ts diff --git a/web/ee/store/issue/issue-details/root.store.ts b/apps/web/ee/store/issue/issue-details/root.store.ts similarity index 100% rename from web/ee/store/issue/issue-details/root.store.ts rename to apps/web/ee/store/issue/issue-details/root.store.ts diff --git a/web/ee/store/issue/team-views/index.ts b/apps/web/ee/store/issue/team-views/index.ts similarity index 100% rename from web/ee/store/issue/team-views/index.ts rename to apps/web/ee/store/issue/team-views/index.ts diff --git a/web/ee/store/issue/team/index.ts b/apps/web/ee/store/issue/team/index.ts similarity index 100% rename from web/ee/store/issue/team/index.ts rename to apps/web/ee/store/issue/team/index.ts diff --git a/web/ee/store/member/project-member.store.ts b/apps/web/ee/store/member/project-member.store.ts similarity index 100% rename from web/ee/store/member/project-member.store.ts rename to apps/web/ee/store/member/project-member.store.ts diff --git a/web/ee/store/project-inbox.store.ts b/apps/web/ee/store/project-inbox.store.ts similarity index 100% rename from web/ee/store/project-inbox.store.ts rename to apps/web/ee/store/project-inbox.store.ts diff --git a/web/ee/store/root.store.ts b/apps/web/ee/store/root.store.ts similarity index 100% rename from web/ee/store/root.store.ts rename to apps/web/ee/store/root.store.ts diff --git a/web/ee/store/state.store.ts b/apps/web/ee/store/state.store.ts similarity index 100% rename from web/ee/store/state.store.ts rename to apps/web/ee/store/state.store.ts diff --git a/web/ee/store/timeline/base-timeline.store.ts b/apps/web/ee/store/timeline/base-timeline.store.ts similarity index 100% rename from web/ee/store/timeline/base-timeline.store.ts rename to apps/web/ee/store/timeline/base-timeline.store.ts diff --git a/web/ee/store/user/permission.store.ts b/apps/web/ee/store/user/permission.store.ts similarity index 100% rename from web/ee/store/user/permission.store.ts rename to apps/web/ee/store/user/permission.store.ts diff --git a/web/ee/types/index.ts b/apps/web/ee/types/index.ts similarity index 100% rename from web/ee/types/index.ts rename to apps/web/ee/types/index.ts diff --git a/web/ee/types/issue-types/index.ts b/apps/web/ee/types/issue-types/index.ts similarity index 100% rename from web/ee/types/issue-types/index.ts rename to apps/web/ee/types/issue-types/index.ts diff --git a/web/ee/types/issue-types/issue-property-values.d.ts b/apps/web/ee/types/issue-types/issue-property-values.d.ts similarity index 100% rename from web/ee/types/issue-types/issue-property-values.d.ts rename to apps/web/ee/types/issue-types/issue-property-values.d.ts diff --git a/web/ee/types/projects/index.ts b/apps/web/ee/types/projects/index.ts similarity index 100% rename from web/ee/types/projects/index.ts rename to apps/web/ee/types/projects/index.ts diff --git a/web/ee/types/projects/projects.ts b/apps/web/ee/types/projects/projects.ts similarity index 100% rename from web/ee/types/projects/projects.ts rename to apps/web/ee/types/projects/projects.ts diff --git a/web/google.d.ts b/apps/web/google.d.ts similarity index 100% rename from web/google.d.ts rename to apps/web/google.d.ts diff --git a/web/helpers/authentication.helper.tsx b/apps/web/helpers/authentication.helper.tsx similarity index 100% rename from web/helpers/authentication.helper.tsx rename to apps/web/helpers/authentication.helper.tsx diff --git a/web/helpers/dashboard.helper.ts b/apps/web/helpers/dashboard.helper.ts similarity index 100% rename from web/helpers/dashboard.helper.ts rename to apps/web/helpers/dashboard.helper.ts diff --git a/web/helpers/emoji.helper.tsx b/apps/web/helpers/emoji.helper.tsx similarity index 100% rename from web/helpers/emoji.helper.tsx rename to apps/web/helpers/emoji.helper.tsx diff --git a/web/helpers/event-tracker.helper.ts b/apps/web/helpers/event-tracker.helper.ts similarity index 100% rename from web/helpers/event-tracker.helper.ts rename to apps/web/helpers/event-tracker.helper.ts diff --git a/web/helpers/graph.helper.ts b/apps/web/helpers/graph.helper.ts similarity index 100% rename from web/helpers/graph.helper.ts rename to apps/web/helpers/graph.helper.ts diff --git a/web/helpers/views.helper.ts b/apps/web/helpers/views.helper.ts similarity index 100% rename from web/helpers/views.helper.ts rename to apps/web/helpers/views.helper.ts diff --git a/web/manifest.json b/apps/web/manifest.json similarity index 100% rename from web/manifest.json rename to apps/web/manifest.json diff --git a/web/next-env.d.ts b/apps/web/next-env.d.ts similarity index 100% rename from web/next-env.d.ts rename to apps/web/next-env.d.ts diff --git a/web/next.config.js b/apps/web/next.config.js similarity index 100% rename from web/next.config.js rename to apps/web/next.config.js diff --git a/web/package.json b/apps/web/package.json similarity index 100% rename from web/package.json rename to apps/web/package.json diff --git a/web/postcss.config.js b/apps/web/postcss.config.js similarity index 100% rename from web/postcss.config.js rename to apps/web/postcss.config.js diff --git a/web/public/404.svg b/apps/web/public/404.svg similarity index 100% rename from web/public/404.svg rename to apps/web/public/404.svg diff --git a/web/public/animated-icons/uploading.json b/apps/web/public/animated-icons/uploading.json similarity index 100% rename from web/public/animated-icons/uploading.json rename to apps/web/public/animated-icons/uploading.json diff --git a/web/public/attachment/audio-icon.png b/apps/web/public/attachment/audio-icon.png similarity index 100% rename from web/public/attachment/audio-icon.png rename to apps/web/public/attachment/audio-icon.png diff --git a/web/public/attachment/css-icon.png b/apps/web/public/attachment/css-icon.png similarity index 100% rename from web/public/attachment/css-icon.png rename to apps/web/public/attachment/css-icon.png diff --git a/web/public/attachment/csv-icon.png b/apps/web/public/attachment/csv-icon.png similarity index 100% rename from web/public/attachment/csv-icon.png rename to apps/web/public/attachment/csv-icon.png diff --git a/web/public/attachment/default-icon.png b/apps/web/public/attachment/default-icon.png similarity index 100% rename from web/public/attachment/default-icon.png rename to apps/web/public/attachment/default-icon.png diff --git a/web/public/attachment/doc-icon.png b/apps/web/public/attachment/doc-icon.png similarity index 100% rename from web/public/attachment/doc-icon.png rename to apps/web/public/attachment/doc-icon.png diff --git a/web/public/attachment/excel-icon.png b/apps/web/public/attachment/excel-icon.png similarity index 100% rename from web/public/attachment/excel-icon.png rename to apps/web/public/attachment/excel-icon.png diff --git a/web/public/attachment/figma-icon.png b/apps/web/public/attachment/figma-icon.png similarity index 100% rename from web/public/attachment/figma-icon.png rename to apps/web/public/attachment/figma-icon.png diff --git a/web/public/attachment/html-icon.png b/apps/web/public/attachment/html-icon.png similarity index 100% rename from web/public/attachment/html-icon.png rename to apps/web/public/attachment/html-icon.png diff --git a/web/public/attachment/img-icon.png b/apps/web/public/attachment/img-icon.png similarity index 100% rename from web/public/attachment/img-icon.png rename to apps/web/public/attachment/img-icon.png diff --git a/web/public/attachment/jpg-icon.png b/apps/web/public/attachment/jpg-icon.png similarity index 100% rename from web/public/attachment/jpg-icon.png rename to apps/web/public/attachment/jpg-icon.png diff --git a/web/public/attachment/js-icon.png b/apps/web/public/attachment/js-icon.png similarity index 100% rename from web/public/attachment/js-icon.png rename to apps/web/public/attachment/js-icon.png diff --git a/web/public/attachment/pdf-icon.png b/apps/web/public/attachment/pdf-icon.png similarity index 100% rename from web/public/attachment/pdf-icon.png rename to apps/web/public/attachment/pdf-icon.png diff --git a/web/public/attachment/png-icon.png b/apps/web/public/attachment/png-icon.png similarity index 100% rename from web/public/attachment/png-icon.png rename to apps/web/public/attachment/png-icon.png diff --git a/web/public/attachment/rar-icon.png b/apps/web/public/attachment/rar-icon.png similarity index 100% rename from web/public/attachment/rar-icon.png rename to apps/web/public/attachment/rar-icon.png diff --git a/web/public/attachment/svg-icon.png b/apps/web/public/attachment/svg-icon.png similarity index 100% rename from web/public/attachment/svg-icon.png rename to apps/web/public/attachment/svg-icon.png diff --git a/web/public/attachment/txt-icon.png b/apps/web/public/attachment/txt-icon.png similarity index 100% rename from web/public/attachment/txt-icon.png rename to apps/web/public/attachment/txt-icon.png diff --git a/web/public/attachment/video-icon.png b/apps/web/public/attachment/video-icon.png similarity index 100% rename from web/public/attachment/video-icon.png rename to apps/web/public/attachment/video-icon.png diff --git a/web/public/attachment/zip-icon.png b/apps/web/public/attachment/zip-icon.png similarity index 100% rename from web/public/attachment/zip-icon.png rename to apps/web/public/attachment/zip-icon.png diff --git a/web/public/auth/access-denied.svg b/apps/web/public/auth/access-denied.svg similarity index 100% rename from web/public/auth/access-denied.svg rename to apps/web/public/auth/access-denied.svg diff --git a/web/public/auth/background-pattern-dark.svg b/apps/web/public/auth/background-pattern-dark.svg similarity index 100% rename from web/public/auth/background-pattern-dark.svg rename to apps/web/public/auth/background-pattern-dark.svg diff --git a/web/public/auth/background-pattern.svg b/apps/web/public/auth/background-pattern.svg similarity index 100% rename from web/public/auth/background-pattern.svg rename to apps/web/public/auth/background-pattern.svg diff --git a/web/public/auth/project-not-authorized.svg b/apps/web/public/auth/project-not-authorized.svg similarity index 100% rename from web/public/auth/project-not-authorized.svg rename to apps/web/public/auth/project-not-authorized.svg diff --git a/web/public/auth/unauthorized.svg b/apps/web/public/auth/unauthorized.svg similarity index 100% rename from web/public/auth/unauthorized.svg rename to apps/web/public/auth/unauthorized.svg diff --git a/web/public/auth/workspace-not-authorized.svg b/apps/web/public/auth/workspace-not-authorized.svg similarity index 100% rename from web/public/auth/workspace-not-authorized.svg rename to apps/web/public/auth/workspace-not-authorized.svg diff --git a/web/public/emoji/project-emoji.svg b/apps/web/public/emoji/project-emoji.svg similarity index 100% rename from web/public/emoji/project-emoji.svg rename to apps/web/public/emoji/project-emoji.svg diff --git a/web/public/empty-state/active-cycle/assignee-dark.webp b/apps/web/public/empty-state/active-cycle/assignee-dark.webp similarity index 100% rename from web/public/empty-state/active-cycle/assignee-dark.webp rename to apps/web/public/empty-state/active-cycle/assignee-dark.webp diff --git a/web/public/empty-state/active-cycle/assignee-light.webp b/apps/web/public/empty-state/active-cycle/assignee-light.webp similarity index 100% rename from web/public/empty-state/active-cycle/assignee-light.webp rename to apps/web/public/empty-state/active-cycle/assignee-light.webp diff --git a/web/public/empty-state/active-cycle/chart-dark.webp b/apps/web/public/empty-state/active-cycle/chart-dark.webp similarity index 100% rename from web/public/empty-state/active-cycle/chart-dark.webp rename to apps/web/public/empty-state/active-cycle/chart-dark.webp diff --git a/web/public/empty-state/active-cycle/chart-light.webp b/apps/web/public/empty-state/active-cycle/chart-light.webp similarity index 100% rename from web/public/empty-state/active-cycle/chart-light.webp rename to apps/web/public/empty-state/active-cycle/chart-light.webp diff --git a/web/public/empty-state/active-cycle/cycle-dark.webp b/apps/web/public/empty-state/active-cycle/cycle-dark.webp similarity index 100% rename from web/public/empty-state/active-cycle/cycle-dark.webp rename to apps/web/public/empty-state/active-cycle/cycle-dark.webp diff --git a/web/public/empty-state/active-cycle/cycle-light.webp b/apps/web/public/empty-state/active-cycle/cycle-light.webp similarity index 100% rename from web/public/empty-state/active-cycle/cycle-light.webp rename to apps/web/public/empty-state/active-cycle/cycle-light.webp diff --git a/web/public/empty-state/active-cycle/label-dark.webp b/apps/web/public/empty-state/active-cycle/label-dark.webp similarity index 100% rename from web/public/empty-state/active-cycle/label-dark.webp rename to apps/web/public/empty-state/active-cycle/label-dark.webp diff --git a/web/public/empty-state/active-cycle/label-light.webp b/apps/web/public/empty-state/active-cycle/label-light.webp similarity index 100% rename from web/public/empty-state/active-cycle/label-light.webp rename to apps/web/public/empty-state/active-cycle/label-light.webp diff --git a/web/public/empty-state/active-cycle/priority-dark.webp b/apps/web/public/empty-state/active-cycle/priority-dark.webp similarity index 100% rename from web/public/empty-state/active-cycle/priority-dark.webp rename to apps/web/public/empty-state/active-cycle/priority-dark.webp diff --git a/web/public/empty-state/active-cycle/priority-light.webp b/apps/web/public/empty-state/active-cycle/priority-light.webp similarity index 100% rename from web/public/empty-state/active-cycle/priority-light.webp rename to apps/web/public/empty-state/active-cycle/priority-light.webp diff --git a/web/public/empty-state/active-cycle/progress-dark.webp b/apps/web/public/empty-state/active-cycle/progress-dark.webp similarity index 100% rename from web/public/empty-state/active-cycle/progress-dark.webp rename to apps/web/public/empty-state/active-cycle/progress-dark.webp diff --git a/web/public/empty-state/active-cycle/progress-light.webp b/apps/web/public/empty-state/active-cycle/progress-light.webp similarity index 100% rename from web/public/empty-state/active-cycle/progress-light.webp rename to apps/web/public/empty-state/active-cycle/progress-light.webp diff --git a/web/public/empty-state/all-issues/all-issues-dark.webp b/apps/web/public/empty-state/all-issues/all-issues-dark.webp similarity index 100% rename from web/public/empty-state/all-issues/all-issues-dark.webp rename to apps/web/public/empty-state/all-issues/all-issues-dark.webp diff --git a/web/public/empty-state/all-issues/all-issues-light.webp b/apps/web/public/empty-state/all-issues/all-issues-light.webp similarity index 100% rename from web/public/empty-state/all-issues/all-issues-light.webp rename to apps/web/public/empty-state/all-issues/all-issues-light.webp diff --git a/web/public/empty-state/all-issues/assigned-dark.webp b/apps/web/public/empty-state/all-issues/assigned-dark.webp similarity index 100% rename from web/public/empty-state/all-issues/assigned-dark.webp rename to apps/web/public/empty-state/all-issues/assigned-dark.webp diff --git a/web/public/empty-state/all-issues/assigned-light.webp b/apps/web/public/empty-state/all-issues/assigned-light.webp similarity index 100% rename from web/public/empty-state/all-issues/assigned-light.webp rename to apps/web/public/empty-state/all-issues/assigned-light.webp diff --git a/web/public/empty-state/all-issues/created-dark.webp b/apps/web/public/empty-state/all-issues/created-dark.webp similarity index 100% rename from web/public/empty-state/all-issues/created-dark.webp rename to apps/web/public/empty-state/all-issues/created-dark.webp diff --git a/web/public/empty-state/all-issues/created-light.webp b/apps/web/public/empty-state/all-issues/created-light.webp similarity index 100% rename from web/public/empty-state/all-issues/created-light.webp rename to apps/web/public/empty-state/all-issues/created-light.webp diff --git a/web/public/empty-state/all-issues/custom-view-dark.webp b/apps/web/public/empty-state/all-issues/custom-view-dark.webp similarity index 100% rename from web/public/empty-state/all-issues/custom-view-dark.webp rename to apps/web/public/empty-state/all-issues/custom-view-dark.webp diff --git a/web/public/empty-state/all-issues/custom-view-light.webp b/apps/web/public/empty-state/all-issues/custom-view-light.webp similarity index 100% rename from web/public/empty-state/all-issues/custom-view-light.webp rename to apps/web/public/empty-state/all-issues/custom-view-light.webp diff --git a/web/public/empty-state/all-issues/no-project-dark.webp b/apps/web/public/empty-state/all-issues/no-project-dark.webp similarity index 100% rename from web/public/empty-state/all-issues/no-project-dark.webp rename to apps/web/public/empty-state/all-issues/no-project-dark.webp diff --git a/web/public/empty-state/all-issues/no-project-light.webp b/apps/web/public/empty-state/all-issues/no-project-light.webp similarity index 100% rename from web/public/empty-state/all-issues/no-project-light.webp rename to apps/web/public/empty-state/all-issues/no-project-light.webp diff --git a/web/public/empty-state/all-issues/subscribed-dark.webp b/apps/web/public/empty-state/all-issues/subscribed-dark.webp similarity index 100% rename from web/public/empty-state/all-issues/subscribed-dark.webp rename to apps/web/public/empty-state/all-issues/subscribed-dark.webp diff --git a/web/public/empty-state/all-issues/subscribed-light.webp b/apps/web/public/empty-state/all-issues/subscribed-light.webp similarity index 100% rename from web/public/empty-state/all-issues/subscribed-light.webp rename to apps/web/public/empty-state/all-issues/subscribed-light.webp diff --git a/web/public/empty-state/analytics/empty-chart-area-dark.webp b/apps/web/public/empty-state/analytics/empty-chart-area-dark.webp similarity index 100% rename from web/public/empty-state/analytics/empty-chart-area-dark.webp rename to apps/web/public/empty-state/analytics/empty-chart-area-dark.webp diff --git a/web/public/empty-state/analytics/empty-chart-area-light.webp b/apps/web/public/empty-state/analytics/empty-chart-area-light.webp similarity index 100% rename from web/public/empty-state/analytics/empty-chart-area-light.webp rename to apps/web/public/empty-state/analytics/empty-chart-area-light.webp diff --git a/web/public/empty-state/analytics/empty-chart-bar-dark.webp b/apps/web/public/empty-state/analytics/empty-chart-bar-dark.webp similarity index 100% rename from web/public/empty-state/analytics/empty-chart-bar-dark.webp rename to apps/web/public/empty-state/analytics/empty-chart-bar-dark.webp diff --git a/web/public/empty-state/analytics/empty-chart-bar-light.webp b/apps/web/public/empty-state/analytics/empty-chart-bar-light.webp similarity index 100% rename from web/public/empty-state/analytics/empty-chart-bar-light.webp rename to apps/web/public/empty-state/analytics/empty-chart-bar-light.webp diff --git a/web/public/empty-state/analytics/empty-chart-radar-dark.webp b/apps/web/public/empty-state/analytics/empty-chart-radar-dark.webp similarity index 100% rename from web/public/empty-state/analytics/empty-chart-radar-dark.webp rename to apps/web/public/empty-state/analytics/empty-chart-radar-dark.webp diff --git a/web/public/empty-state/analytics/empty-chart-radar-light.webp b/apps/web/public/empty-state/analytics/empty-chart-radar-light.webp similarity index 100% rename from web/public/empty-state/analytics/empty-chart-radar-light.webp rename to apps/web/public/empty-state/analytics/empty-chart-radar-light.webp diff --git a/web/public/empty-state/analytics/empty-grid-background-dark.webp b/apps/web/public/empty-state/analytics/empty-grid-background-dark.webp similarity index 100% rename from web/public/empty-state/analytics/empty-grid-background-dark.webp rename to apps/web/public/empty-state/analytics/empty-grid-background-dark.webp diff --git a/web/public/empty-state/analytics/empty-grid-background-light.webp b/apps/web/public/empty-state/analytics/empty-grid-background-light.webp similarity index 100% rename from web/public/empty-state/analytics/empty-grid-background-light.webp rename to apps/web/public/empty-state/analytics/empty-grid-background-light.webp diff --git a/web/public/empty-state/analytics/empty-table-dark.webp b/apps/web/public/empty-state/analytics/empty-table-dark.webp similarity index 100% rename from web/public/empty-state/analytics/empty-table-dark.webp rename to apps/web/public/empty-state/analytics/empty-table-dark.webp diff --git a/web/public/empty-state/analytics/empty-table-light.webp b/apps/web/public/empty-state/analytics/empty-table-light.webp similarity index 100% rename from web/public/empty-state/analytics/empty-table-light.webp rename to apps/web/public/empty-state/analytics/empty-table-light.webp diff --git a/web/public/empty-state/api-token.svg b/apps/web/public/empty-state/api-token.svg similarity index 100% rename from web/public/empty-state/api-token.svg rename to apps/web/public/empty-state/api-token.svg diff --git a/web/public/empty-state/archived/empty-cycles-dark.webp b/apps/web/public/empty-state/archived/empty-cycles-dark.webp similarity index 100% rename from web/public/empty-state/archived/empty-cycles-dark.webp rename to apps/web/public/empty-state/archived/empty-cycles-dark.webp diff --git a/web/public/empty-state/archived/empty-cycles-light.webp b/apps/web/public/empty-state/archived/empty-cycles-light.webp similarity index 100% rename from web/public/empty-state/archived/empty-cycles-light.webp rename to apps/web/public/empty-state/archived/empty-cycles-light.webp diff --git a/web/public/empty-state/archived/empty-issues-dark.webp b/apps/web/public/empty-state/archived/empty-issues-dark.webp similarity index 100% rename from web/public/empty-state/archived/empty-issues-dark.webp rename to apps/web/public/empty-state/archived/empty-issues-dark.webp diff --git a/web/public/empty-state/archived/empty-issues-light.webp b/apps/web/public/empty-state/archived/empty-issues-light.webp similarity index 100% rename from web/public/empty-state/archived/empty-issues-light.webp rename to apps/web/public/empty-state/archived/empty-issues-light.webp diff --git a/web/public/empty-state/archived/empty-modules-dark.webp b/apps/web/public/empty-state/archived/empty-modules-dark.webp similarity index 100% rename from web/public/empty-state/archived/empty-modules-dark.webp rename to apps/web/public/empty-state/archived/empty-modules-dark.webp diff --git a/web/public/empty-state/archived/empty-modules-light.webp b/apps/web/public/empty-state/archived/empty-modules-light.webp similarity index 100% rename from web/public/empty-state/archived/empty-modules-light.webp rename to apps/web/public/empty-state/archived/empty-modules-light.webp diff --git a/web/public/empty-state/cycle-issues/calendar-dark-resp.webp b/apps/web/public/empty-state/cycle-issues/calendar-dark-resp.webp similarity index 100% rename from web/public/empty-state/cycle-issues/calendar-dark-resp.webp rename to apps/web/public/empty-state/cycle-issues/calendar-dark-resp.webp diff --git a/web/public/empty-state/cycle-issues/calendar-dark.webp b/apps/web/public/empty-state/cycle-issues/calendar-dark.webp similarity index 100% rename from web/public/empty-state/cycle-issues/calendar-dark.webp rename to apps/web/public/empty-state/cycle-issues/calendar-dark.webp diff --git a/web/public/empty-state/cycle-issues/calendar-light-resp.webp b/apps/web/public/empty-state/cycle-issues/calendar-light-resp.webp similarity index 100% rename from web/public/empty-state/cycle-issues/calendar-light-resp.webp rename to apps/web/public/empty-state/cycle-issues/calendar-light-resp.webp diff --git a/web/public/empty-state/cycle-issues/calendar-light.webp b/apps/web/public/empty-state/cycle-issues/calendar-light.webp similarity index 100% rename from web/public/empty-state/cycle-issues/calendar-light.webp rename to apps/web/public/empty-state/cycle-issues/calendar-light.webp diff --git a/web/public/empty-state/cycle-issues/gantt_chart-dark-resp.webp b/apps/web/public/empty-state/cycle-issues/gantt_chart-dark-resp.webp similarity index 100% rename from web/public/empty-state/cycle-issues/gantt_chart-dark-resp.webp rename to apps/web/public/empty-state/cycle-issues/gantt_chart-dark-resp.webp diff --git a/web/public/empty-state/cycle-issues/gantt_chart-dark.webp b/apps/web/public/empty-state/cycle-issues/gantt_chart-dark.webp similarity index 100% rename from web/public/empty-state/cycle-issues/gantt_chart-dark.webp rename to apps/web/public/empty-state/cycle-issues/gantt_chart-dark.webp diff --git a/web/public/empty-state/cycle-issues/gantt_chart-light-resp.webp b/apps/web/public/empty-state/cycle-issues/gantt_chart-light-resp.webp similarity index 100% rename from web/public/empty-state/cycle-issues/gantt_chart-light-resp.webp rename to apps/web/public/empty-state/cycle-issues/gantt_chart-light-resp.webp diff --git a/web/public/empty-state/cycle-issues/gantt_chart-light.webp b/apps/web/public/empty-state/cycle-issues/gantt_chart-light.webp similarity index 100% rename from web/public/empty-state/cycle-issues/gantt_chart-light.webp rename to apps/web/public/empty-state/cycle-issues/gantt_chart-light.webp diff --git a/web/public/empty-state/cycle-issues/kanban-dark-resp.webp b/apps/web/public/empty-state/cycle-issues/kanban-dark-resp.webp similarity index 100% rename from web/public/empty-state/cycle-issues/kanban-dark-resp.webp rename to apps/web/public/empty-state/cycle-issues/kanban-dark-resp.webp diff --git a/web/public/empty-state/cycle-issues/kanban-dark.webp b/apps/web/public/empty-state/cycle-issues/kanban-dark.webp similarity index 100% rename from web/public/empty-state/cycle-issues/kanban-dark.webp rename to apps/web/public/empty-state/cycle-issues/kanban-dark.webp diff --git a/web/public/empty-state/cycle-issues/kanban-light-resp.webp b/apps/web/public/empty-state/cycle-issues/kanban-light-resp.webp similarity index 100% rename from web/public/empty-state/cycle-issues/kanban-light-resp.webp rename to apps/web/public/empty-state/cycle-issues/kanban-light-resp.webp diff --git a/web/public/empty-state/cycle-issues/kanban-light.webp b/apps/web/public/empty-state/cycle-issues/kanban-light.webp similarity index 100% rename from web/public/empty-state/cycle-issues/kanban-light.webp rename to apps/web/public/empty-state/cycle-issues/kanban-light.webp diff --git a/web/public/empty-state/cycle-issues/list-dark-resp.webp b/apps/web/public/empty-state/cycle-issues/list-dark-resp.webp similarity index 100% rename from web/public/empty-state/cycle-issues/list-dark-resp.webp rename to apps/web/public/empty-state/cycle-issues/list-dark-resp.webp diff --git a/web/public/empty-state/cycle-issues/list-dark.webp b/apps/web/public/empty-state/cycle-issues/list-dark.webp similarity index 100% rename from web/public/empty-state/cycle-issues/list-dark.webp rename to apps/web/public/empty-state/cycle-issues/list-dark.webp diff --git a/web/public/empty-state/cycle-issues/list-light-resp.webp b/apps/web/public/empty-state/cycle-issues/list-light-resp.webp similarity index 100% rename from web/public/empty-state/cycle-issues/list-light-resp.webp rename to apps/web/public/empty-state/cycle-issues/list-light-resp.webp diff --git a/web/public/empty-state/cycle-issues/list-light.webp b/apps/web/public/empty-state/cycle-issues/list-light.webp similarity index 100% rename from web/public/empty-state/cycle-issues/list-light.webp rename to apps/web/public/empty-state/cycle-issues/list-light.webp diff --git a/web/public/empty-state/cycle-issues/spreadsheet-dark-resp.webp b/apps/web/public/empty-state/cycle-issues/spreadsheet-dark-resp.webp similarity index 100% rename from web/public/empty-state/cycle-issues/spreadsheet-dark-resp.webp rename to apps/web/public/empty-state/cycle-issues/spreadsheet-dark-resp.webp diff --git a/web/public/empty-state/cycle-issues/spreadsheet-dark.webp b/apps/web/public/empty-state/cycle-issues/spreadsheet-dark.webp similarity index 100% rename from web/public/empty-state/cycle-issues/spreadsheet-dark.webp rename to apps/web/public/empty-state/cycle-issues/spreadsheet-dark.webp diff --git a/web/public/empty-state/cycle-issues/spreadsheet-light-resp.webp b/apps/web/public/empty-state/cycle-issues/spreadsheet-light-resp.webp similarity index 100% rename from web/public/empty-state/cycle-issues/spreadsheet-light-resp.webp rename to apps/web/public/empty-state/cycle-issues/spreadsheet-light-resp.webp diff --git a/web/public/empty-state/cycle-issues/spreadsheet-light.webp b/apps/web/public/empty-state/cycle-issues/spreadsheet-light.webp similarity index 100% rename from web/public/empty-state/cycle-issues/spreadsheet-light.webp rename to apps/web/public/empty-state/cycle-issues/spreadsheet-light.webp diff --git a/web/public/empty-state/cycle.svg b/apps/web/public/empty-state/cycle.svg similarity index 100% rename from web/public/empty-state/cycle.svg rename to apps/web/public/empty-state/cycle.svg diff --git a/web/public/empty-state/cycle/active-dark.webp b/apps/web/public/empty-state/cycle/active-dark.webp similarity index 100% rename from web/public/empty-state/cycle/active-dark.webp rename to apps/web/public/empty-state/cycle/active-dark.webp diff --git a/web/public/empty-state/cycle/active-light.webp b/apps/web/public/empty-state/cycle/active-light.webp similarity index 100% rename from web/public/empty-state/cycle/active-light.webp rename to apps/web/public/empty-state/cycle/active-light.webp diff --git a/web/public/empty-state/cycle/all-filters.svg b/apps/web/public/empty-state/cycle/all-filters.svg similarity index 100% rename from web/public/empty-state/cycle/all-filters.svg rename to apps/web/public/empty-state/cycle/all-filters.svg diff --git a/web/public/empty-state/cycle/completed-dark.webp b/apps/web/public/empty-state/cycle/completed-dark.webp similarity index 100% rename from web/public/empty-state/cycle/completed-dark.webp rename to apps/web/public/empty-state/cycle/completed-dark.webp diff --git a/web/public/empty-state/cycle/completed-light.webp b/apps/web/public/empty-state/cycle/completed-light.webp similarity index 100% rename from web/public/empty-state/cycle/completed-light.webp rename to apps/web/public/empty-state/cycle/completed-light.webp diff --git a/web/public/empty-state/cycle/completed-no-issues-dark.webp b/apps/web/public/empty-state/cycle/completed-no-issues-dark.webp similarity index 100% rename from web/public/empty-state/cycle/completed-no-issues-dark.webp rename to apps/web/public/empty-state/cycle/completed-no-issues-dark.webp diff --git a/web/public/empty-state/cycle/completed-no-issues-light.webp b/apps/web/public/empty-state/cycle/completed-no-issues-light.webp similarity index 100% rename from web/public/empty-state/cycle/completed-no-issues-light.webp rename to apps/web/public/empty-state/cycle/completed-no-issues-light.webp diff --git a/web/public/empty-state/cycle/draft-dark.webp b/apps/web/public/empty-state/cycle/draft-dark.webp similarity index 100% rename from web/public/empty-state/cycle/draft-dark.webp rename to apps/web/public/empty-state/cycle/draft-dark.webp diff --git a/web/public/empty-state/cycle/draft-light.webp b/apps/web/public/empty-state/cycle/draft-light.webp similarity index 100% rename from web/public/empty-state/cycle/draft-light.webp rename to apps/web/public/empty-state/cycle/draft-light.webp diff --git a/web/public/empty-state/cycle/name-filter.svg b/apps/web/public/empty-state/cycle/name-filter.svg similarity index 100% rename from web/public/empty-state/cycle/name-filter.svg rename to apps/web/public/empty-state/cycle/name-filter.svg diff --git a/web/public/empty-state/cycle/upcoming-dark.webp b/apps/web/public/empty-state/cycle/upcoming-dark.webp similarity index 100% rename from web/public/empty-state/cycle/upcoming-dark.webp rename to apps/web/public/empty-state/cycle/upcoming-dark.webp diff --git a/web/public/empty-state/cycle/upcoming-light.webp b/apps/web/public/empty-state/cycle/upcoming-light.webp similarity index 100% rename from web/public/empty-state/cycle/upcoming-light.webp rename to apps/web/public/empty-state/cycle/upcoming-light.webp diff --git a/web/public/empty-state/dashboard/dark/completed-issues.svg b/apps/web/public/empty-state/dashboard/dark/completed-issues.svg similarity index 100% rename from web/public/empty-state/dashboard/dark/completed-issues.svg rename to apps/web/public/empty-state/dashboard/dark/completed-issues.svg diff --git a/web/public/empty-state/dashboard/dark/issues-by-priority.svg b/apps/web/public/empty-state/dashboard/dark/issues-by-priority.svg similarity index 100% rename from web/public/empty-state/dashboard/dark/issues-by-priority.svg rename to apps/web/public/empty-state/dashboard/dark/issues-by-priority.svg diff --git a/web/public/empty-state/dashboard/dark/issues-by-state-group.svg b/apps/web/public/empty-state/dashboard/dark/issues-by-state-group.svg similarity index 100% rename from web/public/empty-state/dashboard/dark/issues-by-state-group.svg rename to apps/web/public/empty-state/dashboard/dark/issues-by-state-group.svg diff --git a/web/public/empty-state/dashboard/dark/overdue-issues.svg b/apps/web/public/empty-state/dashboard/dark/overdue-issues.svg similarity index 100% rename from web/public/empty-state/dashboard/dark/overdue-issues.svg rename to apps/web/public/empty-state/dashboard/dark/overdue-issues.svg diff --git a/web/public/empty-state/dashboard/dark/recent-activity.svg b/apps/web/public/empty-state/dashboard/dark/recent-activity.svg similarity index 100% rename from web/public/empty-state/dashboard/dark/recent-activity.svg rename to apps/web/public/empty-state/dashboard/dark/recent-activity.svg diff --git a/web/public/empty-state/dashboard/dark/recent-collaborators-1.svg b/apps/web/public/empty-state/dashboard/dark/recent-collaborators-1.svg similarity index 100% rename from web/public/empty-state/dashboard/dark/recent-collaborators-1.svg rename to apps/web/public/empty-state/dashboard/dark/recent-collaborators-1.svg diff --git a/web/public/empty-state/dashboard/dark/recent-collaborators-2.svg b/apps/web/public/empty-state/dashboard/dark/recent-collaborators-2.svg similarity index 100% rename from web/public/empty-state/dashboard/dark/recent-collaborators-2.svg rename to apps/web/public/empty-state/dashboard/dark/recent-collaborators-2.svg diff --git a/web/public/empty-state/dashboard/dark/recent-collaborators-3.svg b/apps/web/public/empty-state/dashboard/dark/recent-collaborators-3.svg similarity index 100% rename from web/public/empty-state/dashboard/dark/recent-collaborators-3.svg rename to apps/web/public/empty-state/dashboard/dark/recent-collaborators-3.svg diff --git a/web/public/empty-state/dashboard/dark/upcoming-issues.svg b/apps/web/public/empty-state/dashboard/dark/upcoming-issues.svg similarity index 100% rename from web/public/empty-state/dashboard/dark/upcoming-issues.svg rename to apps/web/public/empty-state/dashboard/dark/upcoming-issues.svg diff --git a/web/public/empty-state/dashboard/light/completed-issues.svg b/apps/web/public/empty-state/dashboard/light/completed-issues.svg similarity index 100% rename from web/public/empty-state/dashboard/light/completed-issues.svg rename to apps/web/public/empty-state/dashboard/light/completed-issues.svg diff --git a/web/public/empty-state/dashboard/light/issues-by-priority.svg b/apps/web/public/empty-state/dashboard/light/issues-by-priority.svg similarity index 100% rename from web/public/empty-state/dashboard/light/issues-by-priority.svg rename to apps/web/public/empty-state/dashboard/light/issues-by-priority.svg diff --git a/web/public/empty-state/dashboard/light/issues-by-state-group.svg b/apps/web/public/empty-state/dashboard/light/issues-by-state-group.svg similarity index 100% rename from web/public/empty-state/dashboard/light/issues-by-state-group.svg rename to apps/web/public/empty-state/dashboard/light/issues-by-state-group.svg diff --git a/web/public/empty-state/dashboard/light/overdue-issues.svg b/apps/web/public/empty-state/dashboard/light/overdue-issues.svg similarity index 100% rename from web/public/empty-state/dashboard/light/overdue-issues.svg rename to apps/web/public/empty-state/dashboard/light/overdue-issues.svg diff --git a/web/public/empty-state/dashboard/light/recent-activity.svg b/apps/web/public/empty-state/dashboard/light/recent-activity.svg similarity index 100% rename from web/public/empty-state/dashboard/light/recent-activity.svg rename to apps/web/public/empty-state/dashboard/light/recent-activity.svg diff --git a/web/public/empty-state/dashboard/light/recent-collaborators-1.svg b/apps/web/public/empty-state/dashboard/light/recent-collaborators-1.svg similarity index 100% rename from web/public/empty-state/dashboard/light/recent-collaborators-1.svg rename to apps/web/public/empty-state/dashboard/light/recent-collaborators-1.svg diff --git a/web/public/empty-state/dashboard/light/recent-collaborators-2.svg b/apps/web/public/empty-state/dashboard/light/recent-collaborators-2.svg similarity index 100% rename from web/public/empty-state/dashboard/light/recent-collaborators-2.svg rename to apps/web/public/empty-state/dashboard/light/recent-collaborators-2.svg diff --git a/web/public/empty-state/dashboard/light/recent-collaborators-3.svg b/apps/web/public/empty-state/dashboard/light/recent-collaborators-3.svg similarity index 100% rename from web/public/empty-state/dashboard/light/recent-collaborators-3.svg rename to apps/web/public/empty-state/dashboard/light/recent-collaborators-3.svg diff --git a/web/public/empty-state/dashboard/light/upcoming-issues.svg b/apps/web/public/empty-state/dashboard/light/upcoming-issues.svg similarity index 100% rename from web/public/empty-state/dashboard/light/upcoming-issues.svg rename to apps/web/public/empty-state/dashboard/light/upcoming-issues.svg diff --git a/web/public/empty-state/dashboard/widgets-dark.webp b/apps/web/public/empty-state/dashboard/widgets-dark.webp similarity index 100% rename from web/public/empty-state/dashboard/widgets-dark.webp rename to apps/web/public/empty-state/dashboard/widgets-dark.webp diff --git a/web/public/empty-state/dashboard/widgets-light.webp b/apps/web/public/empty-state/dashboard/widgets-light.webp similarity index 100% rename from web/public/empty-state/dashboard/widgets-light.webp rename to apps/web/public/empty-state/dashboard/widgets-light.webp diff --git a/web/public/empty-state/dashboard_empty_project.webp b/apps/web/public/empty-state/dashboard_empty_project.webp similarity index 100% rename from web/public/empty-state/dashboard_empty_project.webp rename to apps/web/public/empty-state/dashboard_empty_project.webp diff --git a/web/public/empty-state/disabled-feature/cycles-dark.webp b/apps/web/public/empty-state/disabled-feature/cycles-dark.webp similarity index 100% rename from web/public/empty-state/disabled-feature/cycles-dark.webp rename to apps/web/public/empty-state/disabled-feature/cycles-dark.webp diff --git a/web/public/empty-state/disabled-feature/cycles-light.webp b/apps/web/public/empty-state/disabled-feature/cycles-light.webp similarity index 100% rename from web/public/empty-state/disabled-feature/cycles-light.webp rename to apps/web/public/empty-state/disabled-feature/cycles-light.webp diff --git a/web/public/empty-state/disabled-feature/intake-dark.webp b/apps/web/public/empty-state/disabled-feature/intake-dark.webp similarity index 100% rename from web/public/empty-state/disabled-feature/intake-dark.webp rename to apps/web/public/empty-state/disabled-feature/intake-dark.webp diff --git a/web/public/empty-state/disabled-feature/intake-light.webp b/apps/web/public/empty-state/disabled-feature/intake-light.webp similarity index 100% rename from web/public/empty-state/disabled-feature/intake-light.webp rename to apps/web/public/empty-state/disabled-feature/intake-light.webp diff --git a/web/public/empty-state/disabled-feature/modules-dark.webp b/apps/web/public/empty-state/disabled-feature/modules-dark.webp similarity index 100% rename from web/public/empty-state/disabled-feature/modules-dark.webp rename to apps/web/public/empty-state/disabled-feature/modules-dark.webp diff --git a/web/public/empty-state/disabled-feature/modules-light.webp b/apps/web/public/empty-state/disabled-feature/modules-light.webp similarity index 100% rename from web/public/empty-state/disabled-feature/modules-light.webp rename to apps/web/public/empty-state/disabled-feature/modules-light.webp diff --git a/web/public/empty-state/disabled-feature/pages-dark.webp b/apps/web/public/empty-state/disabled-feature/pages-dark.webp similarity index 100% rename from web/public/empty-state/disabled-feature/pages-dark.webp rename to apps/web/public/empty-state/disabled-feature/pages-dark.webp diff --git a/web/public/empty-state/disabled-feature/pages-light.webp b/apps/web/public/empty-state/disabled-feature/pages-light.webp similarity index 100% rename from web/public/empty-state/disabled-feature/pages-light.webp rename to apps/web/public/empty-state/disabled-feature/pages-light.webp diff --git a/web/public/empty-state/disabled-feature/views-dark.webp b/apps/web/public/empty-state/disabled-feature/views-dark.webp similarity index 100% rename from web/public/empty-state/disabled-feature/views-dark.webp rename to apps/web/public/empty-state/disabled-feature/views-dark.webp diff --git a/web/public/empty-state/disabled-feature/views-light.webp b/apps/web/public/empty-state/disabled-feature/views-light.webp similarity index 100% rename from web/public/empty-state/disabled-feature/views-light.webp rename to apps/web/public/empty-state/disabled-feature/views-light.webp diff --git a/web/public/empty-state/draft/draft-issues-empty-dark.webp b/apps/web/public/empty-state/draft/draft-issues-empty-dark.webp similarity index 100% rename from web/public/empty-state/draft/draft-issues-empty-dark.webp rename to apps/web/public/empty-state/draft/draft-issues-empty-dark.webp diff --git a/web/public/empty-state/draft/draft-issues-empty-light.webp b/apps/web/public/empty-state/draft/draft-issues-empty-light.webp similarity index 100% rename from web/public/empty-state/draft/draft-issues-empty-light.webp rename to apps/web/public/empty-state/draft/draft-issues-empty-light.webp diff --git a/web/public/empty-state/empty-filters/calendar-dark.webp b/apps/web/public/empty-state/empty-filters/calendar-dark.webp similarity index 100% rename from web/public/empty-state/empty-filters/calendar-dark.webp rename to apps/web/public/empty-state/empty-filters/calendar-dark.webp diff --git a/web/public/empty-state/empty-filters/calendar-light.webp b/apps/web/public/empty-state/empty-filters/calendar-light.webp similarity index 100% rename from web/public/empty-state/empty-filters/calendar-light.webp rename to apps/web/public/empty-state/empty-filters/calendar-light.webp diff --git a/web/public/empty-state/empty-filters/gantt_chart-dark.webp b/apps/web/public/empty-state/empty-filters/gantt_chart-dark.webp similarity index 100% rename from web/public/empty-state/empty-filters/gantt_chart-dark.webp rename to apps/web/public/empty-state/empty-filters/gantt_chart-dark.webp diff --git a/web/public/empty-state/empty-filters/gantt_chart-light.webp b/apps/web/public/empty-state/empty-filters/gantt_chart-light.webp similarity index 100% rename from web/public/empty-state/empty-filters/gantt_chart-light.webp rename to apps/web/public/empty-state/empty-filters/gantt_chart-light.webp diff --git a/web/public/empty-state/empty-filters/kanban-dark.webp b/apps/web/public/empty-state/empty-filters/kanban-dark.webp similarity index 100% rename from web/public/empty-state/empty-filters/kanban-dark.webp rename to apps/web/public/empty-state/empty-filters/kanban-dark.webp diff --git a/web/public/empty-state/empty-filters/kanban-light.webp b/apps/web/public/empty-state/empty-filters/kanban-light.webp similarity index 100% rename from web/public/empty-state/empty-filters/kanban-light.webp rename to apps/web/public/empty-state/empty-filters/kanban-light.webp diff --git a/web/public/empty-state/empty-filters/list-dark.webp b/apps/web/public/empty-state/empty-filters/list-dark.webp similarity index 100% rename from web/public/empty-state/empty-filters/list-dark.webp rename to apps/web/public/empty-state/empty-filters/list-dark.webp diff --git a/web/public/empty-state/empty-filters/list-light.webp b/apps/web/public/empty-state/empty-filters/list-light.webp similarity index 100% rename from web/public/empty-state/empty-filters/list-light.webp rename to apps/web/public/empty-state/empty-filters/list-light.webp diff --git a/web/public/empty-state/empty-filters/spreadsheet-dark.webp b/apps/web/public/empty-state/empty-filters/spreadsheet-dark.webp similarity index 100% rename from web/public/empty-state/empty-filters/spreadsheet-dark.webp rename to apps/web/public/empty-state/empty-filters/spreadsheet-dark.webp diff --git a/web/public/empty-state/empty-filters/spreadsheet-light.webp b/apps/web/public/empty-state/empty-filters/spreadsheet-light.webp similarity index 100% rename from web/public/empty-state/empty-filters/spreadsheet-light.webp rename to apps/web/public/empty-state/empty-filters/spreadsheet-light.webp diff --git a/web/public/empty-state/empty_analytics.webp b/apps/web/public/empty-state/empty_analytics.webp similarity index 100% rename from web/public/empty-state/empty_analytics.webp rename to apps/web/public/empty-state/empty_analytics.webp diff --git a/web/public/empty-state/empty_bar_graph.svg b/apps/web/public/empty-state/empty_bar_graph.svg similarity index 100% rename from web/public/empty-state/empty_bar_graph.svg rename to apps/web/public/empty-state/empty_bar_graph.svg diff --git a/web/public/empty-state/empty_cycles.webp b/apps/web/public/empty-state/empty_cycles.webp similarity index 100% rename from web/public/empty-state/empty_cycles.webp rename to apps/web/public/empty-state/empty_cycles.webp diff --git a/web/public/empty-state/empty_graph.svg b/apps/web/public/empty-state/empty_graph.svg similarity index 100% rename from web/public/empty-state/empty_graph.svg rename to apps/web/public/empty-state/empty_graph.svg diff --git a/web/public/empty-state/empty_issues.webp b/apps/web/public/empty-state/empty_issues.webp similarity index 100% rename from web/public/empty-state/empty_issues.webp rename to apps/web/public/empty-state/empty_issues.webp diff --git a/web/public/empty-state/empty_label.svg b/apps/web/public/empty-state/empty_label.svg similarity index 100% rename from web/public/empty-state/empty_label.svg rename to apps/web/public/empty-state/empty_label.svg diff --git a/web/public/empty-state/empty_members.svg b/apps/web/public/empty-state/empty_members.svg similarity index 100% rename from web/public/empty-state/empty_members.svg rename to apps/web/public/empty-state/empty_members.svg diff --git a/web/public/empty-state/empty_modules.webp b/apps/web/public/empty-state/empty_modules.webp similarity index 100% rename from web/public/empty-state/empty_modules.webp rename to apps/web/public/empty-state/empty_modules.webp diff --git a/web/public/empty-state/empty_page.png b/apps/web/public/empty-state/empty_page.png similarity index 100% rename from web/public/empty-state/empty_page.png rename to apps/web/public/empty-state/empty_page.png diff --git a/web/public/empty-state/empty_project.webp b/apps/web/public/empty-state/empty_project.webp similarity index 100% rename from web/public/empty-state/empty_project.webp rename to apps/web/public/empty-state/empty_project.webp diff --git a/web/public/empty-state/empty_users.svg b/apps/web/public/empty-state/empty_users.svg similarity index 100% rename from web/public/empty-state/empty_users.svg rename to apps/web/public/empty-state/empty_users.svg diff --git a/web/public/empty-state/empty_view.webp b/apps/web/public/empty-state/empty_view.webp similarity index 100% rename from web/public/empty-state/empty_view.webp rename to apps/web/public/empty-state/empty_view.webp diff --git a/web/public/empty-state/epics/epics-dark.webp b/apps/web/public/empty-state/epics/epics-dark.webp similarity index 100% rename from web/public/empty-state/epics/epics-dark.webp rename to apps/web/public/empty-state/epics/epics-dark.webp diff --git a/web/public/empty-state/epics/epics-light.webp b/apps/web/public/empty-state/epics/epics-light.webp similarity index 100% rename from web/public/empty-state/epics/epics-light.webp rename to apps/web/public/empty-state/epics/epics-light.webp diff --git a/web/public/empty-state/estimates/dark.svg b/apps/web/public/empty-state/estimates/dark.svg similarity index 100% rename from web/public/empty-state/estimates/dark.svg rename to apps/web/public/empty-state/estimates/dark.svg diff --git a/web/public/empty-state/estimates/light.svg b/apps/web/public/empty-state/estimates/light.svg similarity index 100% rename from web/public/empty-state/estimates/light.svg rename to apps/web/public/empty-state/estimates/light.svg diff --git a/web/public/empty-state/intake/filter-issue-dark.webp b/apps/web/public/empty-state/intake/filter-issue-dark.webp similarity index 100% rename from web/public/empty-state/intake/filter-issue-dark.webp rename to apps/web/public/empty-state/intake/filter-issue-dark.webp diff --git a/web/public/empty-state/intake/filter-issue-light.webp b/apps/web/public/empty-state/intake/filter-issue-light.webp similarity index 100% rename from web/public/empty-state/intake/filter-issue-light.webp rename to apps/web/public/empty-state/intake/filter-issue-light.webp diff --git a/web/public/empty-state/intake/intake-dark-resp.webp b/apps/web/public/empty-state/intake/intake-dark-resp.webp similarity index 100% rename from web/public/empty-state/intake/intake-dark-resp.webp rename to apps/web/public/empty-state/intake/intake-dark-resp.webp diff --git a/web/public/empty-state/intake/intake-dark.webp b/apps/web/public/empty-state/intake/intake-dark.webp similarity index 100% rename from web/public/empty-state/intake/intake-dark.webp rename to apps/web/public/empty-state/intake/intake-dark.webp diff --git a/web/public/empty-state/intake/intake-issue-dark.webp b/apps/web/public/empty-state/intake/intake-issue-dark.webp similarity index 100% rename from web/public/empty-state/intake/intake-issue-dark.webp rename to apps/web/public/empty-state/intake/intake-issue-dark.webp diff --git a/web/public/empty-state/intake/intake-issue-light.webp b/apps/web/public/empty-state/intake/intake-issue-light.webp similarity index 100% rename from web/public/empty-state/intake/intake-issue-light.webp rename to apps/web/public/empty-state/intake/intake-issue-light.webp diff --git a/web/public/empty-state/intake/intake-light-resp.webp b/apps/web/public/empty-state/intake/intake-light-resp.webp similarity index 100% rename from web/public/empty-state/intake/intake-light-resp.webp rename to apps/web/public/empty-state/intake/intake-light-resp.webp diff --git a/web/public/empty-state/intake/intake-light.webp b/apps/web/public/empty-state/intake/intake-light.webp similarity index 100% rename from web/public/empty-state/intake/intake-light.webp rename to apps/web/public/empty-state/intake/intake-light.webp diff --git a/web/public/empty-state/intake/issue-detail-dark.webp b/apps/web/public/empty-state/intake/issue-detail-dark.webp similarity index 100% rename from web/public/empty-state/intake/issue-detail-dark.webp rename to apps/web/public/empty-state/intake/issue-detail-dark.webp diff --git a/web/public/empty-state/intake/issue-detail-light.webp b/apps/web/public/empty-state/intake/issue-detail-light.webp similarity index 100% rename from web/public/empty-state/intake/issue-detail-light.webp rename to apps/web/public/empty-state/intake/issue-detail-light.webp diff --git a/web/public/empty-state/invitation.svg b/apps/web/public/empty-state/invitation.svg similarity index 100% rename from web/public/empty-state/invitation.svg rename to apps/web/public/empty-state/invitation.svg diff --git a/web/public/empty-state/issue.svg b/apps/web/public/empty-state/issue.svg similarity index 100% rename from web/public/empty-state/issue.svg rename to apps/web/public/empty-state/issue.svg diff --git a/web/public/empty-state/label.svg b/apps/web/public/empty-state/label.svg similarity index 100% rename from web/public/empty-state/label.svg rename to apps/web/public/empty-state/label.svg diff --git a/web/public/empty-state/module-issues/calendar-dark-resp.webp b/apps/web/public/empty-state/module-issues/calendar-dark-resp.webp similarity index 100% rename from web/public/empty-state/module-issues/calendar-dark-resp.webp rename to apps/web/public/empty-state/module-issues/calendar-dark-resp.webp diff --git a/web/public/empty-state/module-issues/calendar-dark.webp b/apps/web/public/empty-state/module-issues/calendar-dark.webp similarity index 100% rename from web/public/empty-state/module-issues/calendar-dark.webp rename to apps/web/public/empty-state/module-issues/calendar-dark.webp diff --git a/web/public/empty-state/module-issues/calendar-light-resp.webp b/apps/web/public/empty-state/module-issues/calendar-light-resp.webp similarity index 100% rename from web/public/empty-state/module-issues/calendar-light-resp.webp rename to apps/web/public/empty-state/module-issues/calendar-light-resp.webp diff --git a/web/public/empty-state/module-issues/calendar-light.webp b/apps/web/public/empty-state/module-issues/calendar-light.webp similarity index 100% rename from web/public/empty-state/module-issues/calendar-light.webp rename to apps/web/public/empty-state/module-issues/calendar-light.webp diff --git a/web/public/empty-state/module-issues/gantt_chart-dark-resp.webp b/apps/web/public/empty-state/module-issues/gantt_chart-dark-resp.webp similarity index 100% rename from web/public/empty-state/module-issues/gantt_chart-dark-resp.webp rename to apps/web/public/empty-state/module-issues/gantt_chart-dark-resp.webp diff --git a/web/public/empty-state/module-issues/gantt_chart-dark.webp b/apps/web/public/empty-state/module-issues/gantt_chart-dark.webp similarity index 100% rename from web/public/empty-state/module-issues/gantt_chart-dark.webp rename to apps/web/public/empty-state/module-issues/gantt_chart-dark.webp diff --git a/web/public/empty-state/module-issues/gantt_chart-light-resp.webp b/apps/web/public/empty-state/module-issues/gantt_chart-light-resp.webp similarity index 100% rename from web/public/empty-state/module-issues/gantt_chart-light-resp.webp rename to apps/web/public/empty-state/module-issues/gantt_chart-light-resp.webp diff --git a/web/public/empty-state/module-issues/gantt_chart-light.webp b/apps/web/public/empty-state/module-issues/gantt_chart-light.webp similarity index 100% rename from web/public/empty-state/module-issues/gantt_chart-light.webp rename to apps/web/public/empty-state/module-issues/gantt_chart-light.webp diff --git a/web/public/empty-state/module-issues/kanban-dark-resp.webp b/apps/web/public/empty-state/module-issues/kanban-dark-resp.webp similarity index 100% rename from web/public/empty-state/module-issues/kanban-dark-resp.webp rename to apps/web/public/empty-state/module-issues/kanban-dark-resp.webp diff --git a/web/public/empty-state/module-issues/kanban-dark.webp b/apps/web/public/empty-state/module-issues/kanban-dark.webp similarity index 100% rename from web/public/empty-state/module-issues/kanban-dark.webp rename to apps/web/public/empty-state/module-issues/kanban-dark.webp diff --git a/web/public/empty-state/module-issues/kanban-light-resp.webp b/apps/web/public/empty-state/module-issues/kanban-light-resp.webp similarity index 100% rename from web/public/empty-state/module-issues/kanban-light-resp.webp rename to apps/web/public/empty-state/module-issues/kanban-light-resp.webp diff --git a/web/public/empty-state/module-issues/kanban-light.webp b/apps/web/public/empty-state/module-issues/kanban-light.webp similarity index 100% rename from web/public/empty-state/module-issues/kanban-light.webp rename to apps/web/public/empty-state/module-issues/kanban-light.webp diff --git a/web/public/empty-state/module-issues/list-dark-resp.webp b/apps/web/public/empty-state/module-issues/list-dark-resp.webp similarity index 100% rename from web/public/empty-state/module-issues/list-dark-resp.webp rename to apps/web/public/empty-state/module-issues/list-dark-resp.webp diff --git a/web/public/empty-state/module-issues/list-dark.webp b/apps/web/public/empty-state/module-issues/list-dark.webp similarity index 100% rename from web/public/empty-state/module-issues/list-dark.webp rename to apps/web/public/empty-state/module-issues/list-dark.webp diff --git a/web/public/empty-state/module-issues/list-light-resp.webp b/apps/web/public/empty-state/module-issues/list-light-resp.webp similarity index 100% rename from web/public/empty-state/module-issues/list-light-resp.webp rename to apps/web/public/empty-state/module-issues/list-light-resp.webp diff --git a/web/public/empty-state/module-issues/list-light.webp b/apps/web/public/empty-state/module-issues/list-light.webp similarity index 100% rename from web/public/empty-state/module-issues/list-light.webp rename to apps/web/public/empty-state/module-issues/list-light.webp diff --git a/web/public/empty-state/module-issues/spreadsheet-dark-resp.webp b/apps/web/public/empty-state/module-issues/spreadsheet-dark-resp.webp similarity index 100% rename from web/public/empty-state/module-issues/spreadsheet-dark-resp.webp rename to apps/web/public/empty-state/module-issues/spreadsheet-dark-resp.webp diff --git a/web/public/empty-state/module-issues/spreadsheet-dark.webp b/apps/web/public/empty-state/module-issues/spreadsheet-dark.webp similarity index 100% rename from web/public/empty-state/module-issues/spreadsheet-dark.webp rename to apps/web/public/empty-state/module-issues/spreadsheet-dark.webp diff --git a/web/public/empty-state/module-issues/spreadsheet-light-resp.webp b/apps/web/public/empty-state/module-issues/spreadsheet-light-resp.webp similarity index 100% rename from web/public/empty-state/module-issues/spreadsheet-light-resp.webp rename to apps/web/public/empty-state/module-issues/spreadsheet-light-resp.webp diff --git a/web/public/empty-state/module-issues/spreadsheet-light.webp b/apps/web/public/empty-state/module-issues/spreadsheet-light.webp similarity index 100% rename from web/public/empty-state/module-issues/spreadsheet-light.webp rename to apps/web/public/empty-state/module-issues/spreadsheet-light.webp diff --git a/web/public/empty-state/module.svg b/apps/web/public/empty-state/module.svg similarity index 100% rename from web/public/empty-state/module.svg rename to apps/web/public/empty-state/module.svg diff --git a/web/public/empty-state/module/all-filters.svg b/apps/web/public/empty-state/module/all-filters.svg similarity index 100% rename from web/public/empty-state/module/all-filters.svg rename to apps/web/public/empty-state/module/all-filters.svg diff --git a/web/public/empty-state/module/name-filter.svg b/apps/web/public/empty-state/module/name-filter.svg similarity index 100% rename from web/public/empty-state/module/name-filter.svg rename to apps/web/public/empty-state/module/name-filter.svg diff --git a/web/public/empty-state/notification.svg b/apps/web/public/empty-state/notification.svg similarity index 100% rename from web/public/empty-state/notification.svg rename to apps/web/public/empty-state/notification.svg diff --git a/web/public/empty-state/onboarding/analytics-dark.webp b/apps/web/public/empty-state/onboarding/analytics-dark.webp similarity index 100% rename from web/public/empty-state/onboarding/analytics-dark.webp rename to apps/web/public/empty-state/onboarding/analytics-dark.webp diff --git a/web/public/empty-state/onboarding/analytics-light.webp b/apps/web/public/empty-state/onboarding/analytics-light.webp similarity index 100% rename from web/public/empty-state/onboarding/analytics-light.webp rename to apps/web/public/empty-state/onboarding/analytics-light.webp diff --git a/web/public/empty-state/onboarding/archive-dark.png b/apps/web/public/empty-state/onboarding/archive-dark.png similarity index 100% rename from web/public/empty-state/onboarding/archive-dark.png rename to apps/web/public/empty-state/onboarding/archive-dark.png diff --git a/web/public/empty-state/onboarding/archive-light.png b/apps/web/public/empty-state/onboarding/archive-light.png similarity index 100% rename from web/public/empty-state/onboarding/archive-light.png rename to apps/web/public/empty-state/onboarding/archive-light.png diff --git a/web/public/empty-state/onboarding/cycles-dark.webp b/apps/web/public/empty-state/onboarding/cycles-dark.webp similarity index 100% rename from web/public/empty-state/onboarding/cycles-dark.webp rename to apps/web/public/empty-state/onboarding/cycles-dark.webp diff --git a/web/public/empty-state/onboarding/cycles-light.webp b/apps/web/public/empty-state/onboarding/cycles-light.webp similarity index 100% rename from web/public/empty-state/onboarding/cycles-light.webp rename to apps/web/public/empty-state/onboarding/cycles-light.webp diff --git a/web/public/empty-state/onboarding/dashboard-dark.webp b/apps/web/public/empty-state/onboarding/dashboard-dark.webp similarity index 100% rename from web/public/empty-state/onboarding/dashboard-dark.webp rename to apps/web/public/empty-state/onboarding/dashboard-dark.webp diff --git a/web/public/empty-state/onboarding/dashboard-light.webp b/apps/web/public/empty-state/onboarding/dashboard-light.webp similarity index 100% rename from web/public/empty-state/onboarding/dashboard-light.webp rename to apps/web/public/empty-state/onboarding/dashboard-light.webp diff --git a/web/public/empty-state/onboarding/graph-dark.png b/apps/web/public/empty-state/onboarding/graph-dark.png similarity index 100% rename from web/public/empty-state/onboarding/graph-dark.png rename to apps/web/public/empty-state/onboarding/graph-dark.png diff --git a/web/public/empty-state/onboarding/graph-light.png b/apps/web/public/empty-state/onboarding/graph-light.png similarity index 100% rename from web/public/empty-state/onboarding/graph-light.png rename to apps/web/public/empty-state/onboarding/graph-light.png diff --git a/web/public/empty-state/onboarding/issues-closed-dark.png b/apps/web/public/empty-state/onboarding/issues-closed-dark.png similarity index 100% rename from web/public/empty-state/onboarding/issues-closed-dark.png rename to apps/web/public/empty-state/onboarding/issues-closed-dark.png diff --git a/web/public/empty-state/onboarding/issues-closed-light.png b/apps/web/public/empty-state/onboarding/issues-closed-light.png similarity index 100% rename from web/public/empty-state/onboarding/issues-closed-light.png rename to apps/web/public/empty-state/onboarding/issues-closed-light.png diff --git a/web/public/empty-state/onboarding/issues-dark.webp b/apps/web/public/empty-state/onboarding/issues-dark.webp similarity index 100% rename from web/public/empty-state/onboarding/issues-dark.webp rename to apps/web/public/empty-state/onboarding/issues-dark.webp diff --git a/web/public/empty-state/onboarding/issues-light.webp b/apps/web/public/empty-state/onboarding/issues-light.webp similarity index 100% rename from web/public/empty-state/onboarding/issues-light.webp rename to apps/web/public/empty-state/onboarding/issues-light.webp diff --git a/web/public/empty-state/onboarding/members-dark.png b/apps/web/public/empty-state/onboarding/members-dark.png similarity index 100% rename from web/public/empty-state/onboarding/members-dark.png rename to apps/web/public/empty-state/onboarding/members-dark.png diff --git a/web/public/empty-state/onboarding/members-light.png b/apps/web/public/empty-state/onboarding/members-light.png similarity index 100% rename from web/public/empty-state/onboarding/members-light.png rename to apps/web/public/empty-state/onboarding/members-light.png diff --git a/web/public/empty-state/onboarding/modules-dark.webp b/apps/web/public/empty-state/onboarding/modules-dark.webp similarity index 100% rename from web/public/empty-state/onboarding/modules-dark.webp rename to apps/web/public/empty-state/onboarding/modules-dark.webp diff --git a/web/public/empty-state/onboarding/modules-light.webp b/apps/web/public/empty-state/onboarding/modules-light.webp similarity index 100% rename from web/public/empty-state/onboarding/modules-light.webp rename to apps/web/public/empty-state/onboarding/modules-light.webp diff --git a/web/public/empty-state/onboarding/notification-dark.png b/apps/web/public/empty-state/onboarding/notification-dark.png similarity index 100% rename from web/public/empty-state/onboarding/notification-dark.png rename to apps/web/public/empty-state/onboarding/notification-dark.png diff --git a/web/public/empty-state/onboarding/notification-light.png b/apps/web/public/empty-state/onboarding/notification-light.png similarity index 100% rename from web/public/empty-state/onboarding/notification-light.png rename to apps/web/public/empty-state/onboarding/notification-light.png diff --git a/web/public/empty-state/onboarding/pages-dark.webp b/apps/web/public/empty-state/onboarding/pages-dark.webp similarity index 100% rename from web/public/empty-state/onboarding/pages-dark.webp rename to apps/web/public/empty-state/onboarding/pages-dark.webp diff --git a/web/public/empty-state/onboarding/pages-light.webp b/apps/web/public/empty-state/onboarding/pages-light.webp similarity index 100% rename from web/public/empty-state/onboarding/pages-light.webp rename to apps/web/public/empty-state/onboarding/pages-light.webp diff --git a/web/public/empty-state/onboarding/projects-dark.webp b/apps/web/public/empty-state/onboarding/projects-dark.webp similarity index 100% rename from web/public/empty-state/onboarding/projects-dark.webp rename to apps/web/public/empty-state/onboarding/projects-dark.webp diff --git a/web/public/empty-state/onboarding/projects-light.webp b/apps/web/public/empty-state/onboarding/projects-light.webp similarity index 100% rename from web/public/empty-state/onboarding/projects-light.webp rename to apps/web/public/empty-state/onboarding/projects-light.webp diff --git a/web/public/empty-state/onboarding/search-dark.png b/apps/web/public/empty-state/onboarding/search-dark.png similarity index 100% rename from web/public/empty-state/onboarding/search-dark.png rename to apps/web/public/empty-state/onboarding/search-dark.png diff --git a/web/public/empty-state/onboarding/search-light.png b/apps/web/public/empty-state/onboarding/search-light.png similarity index 100% rename from web/public/empty-state/onboarding/search-light.png rename to apps/web/public/empty-state/onboarding/search-light.png diff --git a/web/public/empty-state/onboarding/snooze-light.png b/apps/web/public/empty-state/onboarding/snooze-light.png similarity index 100% rename from web/public/empty-state/onboarding/snooze-light.png rename to apps/web/public/empty-state/onboarding/snooze-light.png diff --git a/web/public/empty-state/onboarding/snoozed-dark.png b/apps/web/public/empty-state/onboarding/snoozed-dark.png similarity index 100% rename from web/public/empty-state/onboarding/snoozed-dark.png rename to apps/web/public/empty-state/onboarding/snoozed-dark.png diff --git a/web/public/empty-state/onboarding/views-dark.webp b/apps/web/public/empty-state/onboarding/views-dark.webp similarity index 100% rename from web/public/empty-state/onboarding/views-dark.webp rename to apps/web/public/empty-state/onboarding/views-dark.webp diff --git a/web/public/empty-state/onboarding/views-light.webp b/apps/web/public/empty-state/onboarding/views-light.webp similarity index 100% rename from web/public/empty-state/onboarding/views-light.webp rename to apps/web/public/empty-state/onboarding/views-light.webp diff --git a/web/public/empty-state/onboarding/workspace-invites-dark.webp b/apps/web/public/empty-state/onboarding/workspace-invites-dark.webp similarity index 100% rename from web/public/empty-state/onboarding/workspace-invites-dark.webp rename to apps/web/public/empty-state/onboarding/workspace-invites-dark.webp diff --git a/web/public/empty-state/onboarding/workspace-invites-light.webp b/apps/web/public/empty-state/onboarding/workspace-invites-light.webp similarity index 100% rename from web/public/empty-state/onboarding/workspace-invites-light.webp rename to apps/web/public/empty-state/onboarding/workspace-invites-light.webp diff --git a/web/public/empty-state/pages/all-dark.webp b/apps/web/public/empty-state/pages/all-dark.webp similarity index 100% rename from web/public/empty-state/pages/all-dark.webp rename to apps/web/public/empty-state/pages/all-dark.webp diff --git a/web/public/empty-state/pages/all-filters.svg b/apps/web/public/empty-state/pages/all-filters.svg similarity index 100% rename from web/public/empty-state/pages/all-filters.svg rename to apps/web/public/empty-state/pages/all-filters.svg diff --git a/web/public/empty-state/pages/all-light.webp b/apps/web/public/empty-state/pages/all-light.webp similarity index 100% rename from web/public/empty-state/pages/all-light.webp rename to apps/web/public/empty-state/pages/all-light.webp diff --git a/web/public/empty-state/pages/archived-dark.webp b/apps/web/public/empty-state/pages/archived-dark.webp similarity index 100% rename from web/public/empty-state/pages/archived-dark.webp rename to apps/web/public/empty-state/pages/archived-dark.webp diff --git a/web/public/empty-state/pages/archived-light.webp b/apps/web/public/empty-state/pages/archived-light.webp similarity index 100% rename from web/public/empty-state/pages/archived-light.webp rename to apps/web/public/empty-state/pages/archived-light.webp diff --git a/web/public/empty-state/pages/name-filter.svg b/apps/web/public/empty-state/pages/name-filter.svg similarity index 100% rename from web/public/empty-state/pages/name-filter.svg rename to apps/web/public/empty-state/pages/name-filter.svg diff --git a/web/public/empty-state/pages/navigation-pane/assets-dark.webp b/apps/web/public/empty-state/pages/navigation-pane/assets-dark.webp similarity index 100% rename from web/public/empty-state/pages/navigation-pane/assets-dark.webp rename to apps/web/public/empty-state/pages/navigation-pane/assets-dark.webp diff --git a/web/public/empty-state/pages/navigation-pane/assets-light.webp b/apps/web/public/empty-state/pages/navigation-pane/assets-light.webp similarity index 100% rename from web/public/empty-state/pages/navigation-pane/assets-light.webp rename to apps/web/public/empty-state/pages/navigation-pane/assets-light.webp diff --git a/web/public/empty-state/pages/navigation-pane/outline-dark.webp b/apps/web/public/empty-state/pages/navigation-pane/outline-dark.webp similarity index 100% rename from web/public/empty-state/pages/navigation-pane/outline-dark.webp rename to apps/web/public/empty-state/pages/navigation-pane/outline-dark.webp diff --git a/web/public/empty-state/pages/navigation-pane/outline-light.webp b/apps/web/public/empty-state/pages/navigation-pane/outline-light.webp similarity index 100% rename from web/public/empty-state/pages/navigation-pane/outline-light.webp rename to apps/web/public/empty-state/pages/navigation-pane/outline-light.webp diff --git a/web/public/empty-state/pages/private-dark.webp b/apps/web/public/empty-state/pages/private-dark.webp similarity index 100% rename from web/public/empty-state/pages/private-dark.webp rename to apps/web/public/empty-state/pages/private-dark.webp diff --git a/web/public/empty-state/pages/private-light.webp b/apps/web/public/empty-state/pages/private-light.webp similarity index 100% rename from web/public/empty-state/pages/private-light.webp rename to apps/web/public/empty-state/pages/private-light.webp diff --git a/web/public/empty-state/pages/public-dark.webp b/apps/web/public/empty-state/pages/public-dark.webp similarity index 100% rename from web/public/empty-state/pages/public-dark.webp rename to apps/web/public/empty-state/pages/public-dark.webp diff --git a/web/public/empty-state/pages/public-light.webp b/apps/web/public/empty-state/pages/public-light.webp similarity index 100% rename from web/public/empty-state/pages/public-light.webp rename to apps/web/public/empty-state/pages/public-light.webp diff --git a/web/public/empty-state/profile/activities-dark.webp b/apps/web/public/empty-state/profile/activities-dark.webp similarity index 100% rename from web/public/empty-state/profile/activities-dark.webp rename to apps/web/public/empty-state/profile/activities-dark.webp diff --git a/web/public/empty-state/profile/activities-light.webp b/apps/web/public/empty-state/profile/activities-light.webp similarity index 100% rename from web/public/empty-state/profile/activities-light.webp rename to apps/web/public/empty-state/profile/activities-light.webp diff --git a/web/public/empty-state/profile/activity-dark.webp b/apps/web/public/empty-state/profile/activity-dark.webp similarity index 100% rename from web/public/empty-state/profile/activity-dark.webp rename to apps/web/public/empty-state/profile/activity-dark.webp diff --git a/web/public/empty-state/profile/activity-light.webp b/apps/web/public/empty-state/profile/activity-light.webp similarity index 100% rename from web/public/empty-state/profile/activity-light.webp rename to apps/web/public/empty-state/profile/activity-light.webp diff --git a/web/public/empty-state/profile/assigned-dark.webp b/apps/web/public/empty-state/profile/assigned-dark.webp similarity index 100% rename from web/public/empty-state/profile/assigned-dark.webp rename to apps/web/public/empty-state/profile/assigned-dark.webp diff --git a/web/public/empty-state/profile/assigned-light.webp b/apps/web/public/empty-state/profile/assigned-light.webp similarity index 100% rename from web/public/empty-state/profile/assigned-light.webp rename to apps/web/public/empty-state/profile/assigned-light.webp diff --git a/web/public/empty-state/profile/created-dark.webp b/apps/web/public/empty-state/profile/created-dark.webp similarity index 100% rename from web/public/empty-state/profile/created-dark.webp rename to apps/web/public/empty-state/profile/created-dark.webp diff --git a/web/public/empty-state/profile/created-light.webp b/apps/web/public/empty-state/profile/created-light.webp similarity index 100% rename from web/public/empty-state/profile/created-light.webp rename to apps/web/public/empty-state/profile/created-light.webp diff --git a/web/public/empty-state/profile/issues-by-priority-dark.webp b/apps/web/public/empty-state/profile/issues-by-priority-dark.webp similarity index 100% rename from web/public/empty-state/profile/issues-by-priority-dark.webp rename to apps/web/public/empty-state/profile/issues-by-priority-dark.webp diff --git a/web/public/empty-state/profile/issues-by-priority-light.webp b/apps/web/public/empty-state/profile/issues-by-priority-light.webp similarity index 100% rename from web/public/empty-state/profile/issues-by-priority-light.webp rename to apps/web/public/empty-state/profile/issues-by-priority-light.webp diff --git a/web/public/empty-state/profile/issues-by-state-dark.webp b/apps/web/public/empty-state/profile/issues-by-state-dark.webp similarity index 100% rename from web/public/empty-state/profile/issues-by-state-dark.webp rename to apps/web/public/empty-state/profile/issues-by-state-dark.webp diff --git a/web/public/empty-state/profile/issues-by-state-light.webp b/apps/web/public/empty-state/profile/issues-by-state-light.webp similarity index 100% rename from web/public/empty-state/profile/issues-by-state-light.webp rename to apps/web/public/empty-state/profile/issues-by-state-light.webp diff --git a/web/public/empty-state/profile/subscribed-dark.webp b/apps/web/public/empty-state/profile/subscribed-dark.webp similarity index 100% rename from web/public/empty-state/profile/subscribed-dark.webp rename to apps/web/public/empty-state/profile/subscribed-dark.webp diff --git a/web/public/empty-state/profile/subscribed-light.webp b/apps/web/public/empty-state/profile/subscribed-light.webp similarity index 100% rename from web/public/empty-state/profile/subscribed-light.webp rename to apps/web/public/empty-state/profile/subscribed-light.webp diff --git a/web/public/empty-state/project-settings/estimates-dark-resp.webp b/apps/web/public/empty-state/project-settings/estimates-dark-resp.webp similarity index 100% rename from web/public/empty-state/project-settings/estimates-dark-resp.webp rename to apps/web/public/empty-state/project-settings/estimates-dark-resp.webp diff --git a/web/public/empty-state/project-settings/estimates-dark.png b/apps/web/public/empty-state/project-settings/estimates-dark.png similarity index 100% rename from web/public/empty-state/project-settings/estimates-dark.png rename to apps/web/public/empty-state/project-settings/estimates-dark.png diff --git a/web/public/empty-state/project-settings/estimates-dark.webp b/apps/web/public/empty-state/project-settings/estimates-dark.webp similarity index 100% rename from web/public/empty-state/project-settings/estimates-dark.webp rename to apps/web/public/empty-state/project-settings/estimates-dark.webp diff --git a/web/public/empty-state/project-settings/estimates-light-resp.webp b/apps/web/public/empty-state/project-settings/estimates-light-resp.webp similarity index 100% rename from web/public/empty-state/project-settings/estimates-light-resp.webp rename to apps/web/public/empty-state/project-settings/estimates-light-resp.webp diff --git a/web/public/empty-state/project-settings/estimates-light.png b/apps/web/public/empty-state/project-settings/estimates-light.png similarity index 100% rename from web/public/empty-state/project-settings/estimates-light.png rename to apps/web/public/empty-state/project-settings/estimates-light.png diff --git a/web/public/empty-state/project-settings/estimates-light.webp b/apps/web/public/empty-state/project-settings/estimates-light.webp similarity index 100% rename from web/public/empty-state/project-settings/estimates-light.webp rename to apps/web/public/empty-state/project-settings/estimates-light.webp diff --git a/web/public/empty-state/project-settings/integrations-dark-resp.webp b/apps/web/public/empty-state/project-settings/integrations-dark-resp.webp similarity index 100% rename from web/public/empty-state/project-settings/integrations-dark-resp.webp rename to apps/web/public/empty-state/project-settings/integrations-dark-resp.webp diff --git a/web/public/empty-state/project-settings/integrations-dark.webp b/apps/web/public/empty-state/project-settings/integrations-dark.webp similarity index 100% rename from web/public/empty-state/project-settings/integrations-dark.webp rename to apps/web/public/empty-state/project-settings/integrations-dark.webp diff --git a/web/public/empty-state/project-settings/integrations-light-resp.webp b/apps/web/public/empty-state/project-settings/integrations-light-resp.webp similarity index 100% rename from web/public/empty-state/project-settings/integrations-light-resp.webp rename to apps/web/public/empty-state/project-settings/integrations-light-resp.webp diff --git a/web/public/empty-state/project-settings/integrations-light.webp b/apps/web/public/empty-state/project-settings/integrations-light.webp similarity index 100% rename from web/public/empty-state/project-settings/integrations-light.webp rename to apps/web/public/empty-state/project-settings/integrations-light.webp diff --git a/web/public/empty-state/project-settings/labels-dark-resp.webp b/apps/web/public/empty-state/project-settings/labels-dark-resp.webp similarity index 100% rename from web/public/empty-state/project-settings/labels-dark-resp.webp rename to apps/web/public/empty-state/project-settings/labels-dark-resp.webp diff --git a/web/public/empty-state/project-settings/labels-dark.webp b/apps/web/public/empty-state/project-settings/labels-dark.webp similarity index 100% rename from web/public/empty-state/project-settings/labels-dark.webp rename to apps/web/public/empty-state/project-settings/labels-dark.webp diff --git a/web/public/empty-state/project-settings/labels-light-resp.webp b/apps/web/public/empty-state/project-settings/labels-light-resp.webp similarity index 100% rename from web/public/empty-state/project-settings/labels-light-resp.webp rename to apps/web/public/empty-state/project-settings/labels-light-resp.webp diff --git a/web/public/empty-state/project-settings/labels-light.webp b/apps/web/public/empty-state/project-settings/labels-light.webp similarity index 100% rename from web/public/empty-state/project-settings/labels-light.webp rename to apps/web/public/empty-state/project-settings/labels-light.webp diff --git a/web/public/empty-state/project-settings/no-projects-dark.png b/apps/web/public/empty-state/project-settings/no-projects-dark.png similarity index 100% rename from web/public/empty-state/project-settings/no-projects-dark.png rename to apps/web/public/empty-state/project-settings/no-projects-dark.png diff --git a/web/public/empty-state/project-settings/no-projects-light.png b/apps/web/public/empty-state/project-settings/no-projects-light.png similarity index 100% rename from web/public/empty-state/project-settings/no-projects-light.png rename to apps/web/public/empty-state/project-settings/no-projects-light.png diff --git a/web/public/empty-state/project.svg b/apps/web/public/empty-state/project.svg similarity index 100% rename from web/public/empty-state/project.svg rename to apps/web/public/empty-state/project.svg diff --git a/web/public/empty-state/project/all-filters.svg b/apps/web/public/empty-state/project/all-filters.svg similarity index 100% rename from web/public/empty-state/project/all-filters.svg rename to apps/web/public/empty-state/project/all-filters.svg diff --git a/web/public/empty-state/project/name-filter.svg b/apps/web/public/empty-state/project/name-filter.svg similarity index 100% rename from web/public/empty-state/project/name-filter.svg rename to apps/web/public/empty-state/project/name-filter.svg diff --git a/web/public/empty-state/recent_activity.svg b/apps/web/public/empty-state/recent_activity.svg similarity index 100% rename from web/public/empty-state/recent_activity.svg rename to apps/web/public/empty-state/recent_activity.svg diff --git a/web/public/empty-state/search/all-issue-view-dark.webp b/apps/web/public/empty-state/search/all-issue-view-dark.webp similarity index 100% rename from web/public/empty-state/search/all-issue-view-dark.webp rename to apps/web/public/empty-state/search/all-issue-view-dark.webp diff --git a/web/public/empty-state/search/all-issues-view-light.webp b/apps/web/public/empty-state/search/all-issues-view-light.webp similarity index 100% rename from web/public/empty-state/search/all-issues-view-light.webp rename to apps/web/public/empty-state/search/all-issues-view-light.webp diff --git a/web/public/empty-state/search/archive-dark.webp b/apps/web/public/empty-state/search/archive-dark.webp similarity index 100% rename from web/public/empty-state/search/archive-dark.webp rename to apps/web/public/empty-state/search/archive-dark.webp diff --git a/web/public/empty-state/search/archive-light.webp b/apps/web/public/empty-state/search/archive-light.webp similarity index 100% rename from web/public/empty-state/search/archive-light.webp rename to apps/web/public/empty-state/search/archive-light.webp diff --git a/web/public/empty-state/search/comments-dark.webp b/apps/web/public/empty-state/search/comments-dark.webp similarity index 100% rename from web/public/empty-state/search/comments-dark.webp rename to apps/web/public/empty-state/search/comments-dark.webp diff --git a/web/public/empty-state/search/comments-light.webp b/apps/web/public/empty-state/search/comments-light.webp similarity index 100% rename from web/public/empty-state/search/comments-light.webp rename to apps/web/public/empty-state/search/comments-light.webp diff --git a/web/public/empty-state/search/issues-dark.webp b/apps/web/public/empty-state/search/issues-dark.webp similarity index 100% rename from web/public/empty-state/search/issues-dark.webp rename to apps/web/public/empty-state/search/issues-dark.webp diff --git a/web/public/empty-state/search/issues-light.webp b/apps/web/public/empty-state/search/issues-light.webp similarity index 100% rename from web/public/empty-state/search/issues-light.webp rename to apps/web/public/empty-state/search/issues-light.webp diff --git a/web/public/empty-state/search/member-dark.webp b/apps/web/public/empty-state/search/member-dark.webp similarity index 100% rename from web/public/empty-state/search/member-dark.webp rename to apps/web/public/empty-state/search/member-dark.webp diff --git a/web/public/empty-state/search/member-light.webp b/apps/web/public/empty-state/search/member-light.webp similarity index 100% rename from web/public/empty-state/search/member-light.webp rename to apps/web/public/empty-state/search/member-light.webp diff --git a/web/public/empty-state/search/notification-dark.webp b/apps/web/public/empty-state/search/notification-dark.webp similarity index 100% rename from web/public/empty-state/search/notification-dark.webp rename to apps/web/public/empty-state/search/notification-dark.webp diff --git a/web/public/empty-state/search/notification-light.webp b/apps/web/public/empty-state/search/notification-light.webp similarity index 100% rename from web/public/empty-state/search/notification-light.webp rename to apps/web/public/empty-state/search/notification-light.webp diff --git a/web/public/empty-state/search/project-dark.webp b/apps/web/public/empty-state/search/project-dark.webp similarity index 100% rename from web/public/empty-state/search/project-dark.webp rename to apps/web/public/empty-state/search/project-dark.webp diff --git a/web/public/empty-state/search/project-light.webp b/apps/web/public/empty-state/search/project-light.webp similarity index 100% rename from web/public/empty-state/search/project-light.webp rename to apps/web/public/empty-state/search/project-light.webp diff --git a/web/public/empty-state/search/search-dark.webp b/apps/web/public/empty-state/search/search-dark.webp similarity index 100% rename from web/public/empty-state/search/search-dark.webp rename to apps/web/public/empty-state/search/search-dark.webp diff --git a/web/public/empty-state/search/search-light.webp b/apps/web/public/empty-state/search/search-light.webp similarity index 100% rename from web/public/empty-state/search/search-light.webp rename to apps/web/public/empty-state/search/search-light.webp diff --git a/web/public/empty-state/search/snooze-dark.webp b/apps/web/public/empty-state/search/snooze-dark.webp similarity index 100% rename from web/public/empty-state/search/snooze-dark.webp rename to apps/web/public/empty-state/search/snooze-dark.webp diff --git a/web/public/empty-state/search/snooze-light.webp b/apps/web/public/empty-state/search/snooze-light.webp similarity index 100% rename from web/public/empty-state/search/snooze-light.webp rename to apps/web/public/empty-state/search/snooze-light.webp diff --git a/web/public/empty-state/search/views-dark.webp b/apps/web/public/empty-state/search/views-dark.webp similarity index 100% rename from web/public/empty-state/search/views-dark.webp rename to apps/web/public/empty-state/search/views-dark.webp diff --git a/web/public/empty-state/search/views-light.webp b/apps/web/public/empty-state/search/views-light.webp similarity index 100% rename from web/public/empty-state/search/views-light.webp rename to apps/web/public/empty-state/search/views-light.webp diff --git a/web/public/empty-state/state_graph.svg b/apps/web/public/empty-state/state_graph.svg similarity index 100% rename from web/public/empty-state/state_graph.svg rename to apps/web/public/empty-state/state_graph.svg diff --git a/web/public/empty-state/stickies/stickies-dark.webp b/apps/web/public/empty-state/stickies/stickies-dark.webp similarity index 100% rename from web/public/empty-state/stickies/stickies-dark.webp rename to apps/web/public/empty-state/stickies/stickies-dark.webp diff --git a/web/public/empty-state/stickies/stickies-light.webp b/apps/web/public/empty-state/stickies/stickies-light.webp similarity index 100% rename from web/public/empty-state/stickies/stickies-light.webp rename to apps/web/public/empty-state/stickies/stickies-light.webp diff --git a/web/public/empty-state/stickies/stickies-search-dark.webp b/apps/web/public/empty-state/stickies/stickies-search-dark.webp similarity index 100% rename from web/public/empty-state/stickies/stickies-search-dark.webp rename to apps/web/public/empty-state/stickies/stickies-search-dark.webp diff --git a/web/public/empty-state/stickies/stickies-search-light.webp b/apps/web/public/empty-state/stickies/stickies-search-light.webp similarity index 100% rename from web/public/empty-state/stickies/stickies-search-light.webp rename to apps/web/public/empty-state/stickies/stickies-search-light.webp diff --git a/web/public/empty-state/view.svg b/apps/web/public/empty-state/view.svg similarity index 100% rename from web/public/empty-state/view.svg rename to apps/web/public/empty-state/view.svg diff --git a/web/public/empty-state/web-hook.svg b/apps/web/public/empty-state/web-hook.svg similarity index 100% rename from web/public/empty-state/web-hook.svg rename to apps/web/public/empty-state/web-hook.svg diff --git a/web/public/empty-state/workspace-draft/issue-dark.webp b/apps/web/public/empty-state/workspace-draft/issue-dark.webp similarity index 100% rename from web/public/empty-state/workspace-draft/issue-dark.webp rename to apps/web/public/empty-state/workspace-draft/issue-dark.webp diff --git a/web/public/empty-state/workspace-draft/issue-light.webp b/apps/web/public/empty-state/workspace-draft/issue-light.webp similarity index 100% rename from web/public/empty-state/workspace-draft/issue-light.webp rename to apps/web/public/empty-state/workspace-draft/issue-light.webp diff --git a/web/public/empty-state/workspace-settings/api-tokens-dark-resp.webp b/apps/web/public/empty-state/workspace-settings/api-tokens-dark-resp.webp similarity index 100% rename from web/public/empty-state/workspace-settings/api-tokens-dark-resp.webp rename to apps/web/public/empty-state/workspace-settings/api-tokens-dark-resp.webp diff --git a/web/public/empty-state/workspace-settings/api-tokens-dark.webp b/apps/web/public/empty-state/workspace-settings/api-tokens-dark.webp similarity index 100% rename from web/public/empty-state/workspace-settings/api-tokens-dark.webp rename to apps/web/public/empty-state/workspace-settings/api-tokens-dark.webp diff --git a/web/public/empty-state/workspace-settings/api-tokens-light-resp.webp b/apps/web/public/empty-state/workspace-settings/api-tokens-light-resp.webp similarity index 100% rename from web/public/empty-state/workspace-settings/api-tokens-light-resp.webp rename to apps/web/public/empty-state/workspace-settings/api-tokens-light-resp.webp diff --git a/web/public/empty-state/workspace-settings/api-tokens-light.webp b/apps/web/public/empty-state/workspace-settings/api-tokens-light.webp similarity index 100% rename from web/public/empty-state/workspace-settings/api-tokens-light.webp rename to apps/web/public/empty-state/workspace-settings/api-tokens-light.webp diff --git a/web/public/empty-state/workspace-settings/exports-dark-resp.webp b/apps/web/public/empty-state/workspace-settings/exports-dark-resp.webp similarity index 100% rename from web/public/empty-state/workspace-settings/exports-dark-resp.webp rename to apps/web/public/empty-state/workspace-settings/exports-dark-resp.webp diff --git a/web/public/empty-state/workspace-settings/exports-dark.webp b/apps/web/public/empty-state/workspace-settings/exports-dark.webp similarity index 100% rename from web/public/empty-state/workspace-settings/exports-dark.webp rename to apps/web/public/empty-state/workspace-settings/exports-dark.webp diff --git a/web/public/empty-state/workspace-settings/exports-light-resp.webp b/apps/web/public/empty-state/workspace-settings/exports-light-resp.webp similarity index 100% rename from web/public/empty-state/workspace-settings/exports-light-resp.webp rename to apps/web/public/empty-state/workspace-settings/exports-light-resp.webp diff --git a/web/public/empty-state/workspace-settings/exports-light.webp b/apps/web/public/empty-state/workspace-settings/exports-light.webp similarity index 100% rename from web/public/empty-state/workspace-settings/exports-light.webp rename to apps/web/public/empty-state/workspace-settings/exports-light.webp diff --git a/web/public/empty-state/workspace-settings/imports-dark-resp.webp b/apps/web/public/empty-state/workspace-settings/imports-dark-resp.webp similarity index 100% rename from web/public/empty-state/workspace-settings/imports-dark-resp.webp rename to apps/web/public/empty-state/workspace-settings/imports-dark-resp.webp diff --git a/web/public/empty-state/workspace-settings/imports-dark.webp b/apps/web/public/empty-state/workspace-settings/imports-dark.webp similarity index 100% rename from web/public/empty-state/workspace-settings/imports-dark.webp rename to apps/web/public/empty-state/workspace-settings/imports-dark.webp diff --git a/web/public/empty-state/workspace-settings/imports-light-resp.webp b/apps/web/public/empty-state/workspace-settings/imports-light-resp.webp similarity index 100% rename from web/public/empty-state/workspace-settings/imports-light-resp.webp rename to apps/web/public/empty-state/workspace-settings/imports-light-resp.webp diff --git a/web/public/empty-state/workspace-settings/imports-light.webp b/apps/web/public/empty-state/workspace-settings/imports-light.webp similarity index 100% rename from web/public/empty-state/workspace-settings/imports-light.webp rename to apps/web/public/empty-state/workspace-settings/imports-light.webp diff --git a/web/public/empty-state/workspace-settings/integrations-dark-resp.webp b/apps/web/public/empty-state/workspace-settings/integrations-dark-resp.webp similarity index 100% rename from web/public/empty-state/workspace-settings/integrations-dark-resp.webp rename to apps/web/public/empty-state/workspace-settings/integrations-dark-resp.webp diff --git a/web/public/empty-state/workspace-settings/integrations-dark.webp b/apps/web/public/empty-state/workspace-settings/integrations-dark.webp similarity index 100% rename from web/public/empty-state/workspace-settings/integrations-dark.webp rename to apps/web/public/empty-state/workspace-settings/integrations-dark.webp diff --git a/web/public/empty-state/workspace-settings/integrations-light-resp.webp b/apps/web/public/empty-state/workspace-settings/integrations-light-resp.webp similarity index 100% rename from web/public/empty-state/workspace-settings/integrations-light-resp.webp rename to apps/web/public/empty-state/workspace-settings/integrations-light-resp.webp diff --git a/web/public/empty-state/workspace-settings/integrations-light.webp b/apps/web/public/empty-state/workspace-settings/integrations-light.webp similarity index 100% rename from web/public/empty-state/workspace-settings/integrations-light.webp rename to apps/web/public/empty-state/workspace-settings/integrations-light.webp diff --git a/web/public/empty-state/workspace-settings/webhooks-dark-resp.webp b/apps/web/public/empty-state/workspace-settings/webhooks-dark-resp.webp similarity index 100% rename from web/public/empty-state/workspace-settings/webhooks-dark-resp.webp rename to apps/web/public/empty-state/workspace-settings/webhooks-dark-resp.webp diff --git a/web/public/empty-state/workspace-settings/webhooks-dark.webp b/apps/web/public/empty-state/workspace-settings/webhooks-dark.webp similarity index 100% rename from web/public/empty-state/workspace-settings/webhooks-dark.webp rename to apps/web/public/empty-state/workspace-settings/webhooks-dark.webp diff --git a/web/public/empty-state/workspace-settings/webhooks-light-resp.webp b/apps/web/public/empty-state/workspace-settings/webhooks-light-resp.webp similarity index 100% rename from web/public/empty-state/workspace-settings/webhooks-light-resp.webp rename to apps/web/public/empty-state/workspace-settings/webhooks-light-resp.webp diff --git a/web/public/empty-state/workspace-settings/webhooks-light.webp b/apps/web/public/empty-state/workspace-settings/webhooks-light.webp similarity index 100% rename from web/public/empty-state/workspace-settings/webhooks-light.webp rename to apps/web/public/empty-state/workspace-settings/webhooks-light.webp diff --git a/web/public/favicon/android-chrome-192x192.png b/apps/web/public/favicon/android-chrome-192x192.png similarity index 100% rename from web/public/favicon/android-chrome-192x192.png rename to apps/web/public/favicon/android-chrome-192x192.png diff --git a/web/public/favicon/android-chrome-512x512.png b/apps/web/public/favicon/android-chrome-512x512.png similarity index 100% rename from web/public/favicon/android-chrome-512x512.png rename to apps/web/public/favicon/android-chrome-512x512.png diff --git a/web/public/favicon/apple-touch-icon.png b/apps/web/public/favicon/apple-touch-icon.png similarity index 100% rename from web/public/favicon/apple-touch-icon.png rename to apps/web/public/favicon/apple-touch-icon.png diff --git a/web/public/favicon/favicon-16x16.png b/apps/web/public/favicon/favicon-16x16.png similarity index 100% rename from web/public/favicon/favicon-16x16.png rename to apps/web/public/favicon/favicon-16x16.png diff --git a/web/public/favicon/favicon-32x32.png b/apps/web/public/favicon/favicon-32x32.png similarity index 100% rename from web/public/favicon/favicon-32x32.png rename to apps/web/public/favicon/favicon-32x32.png diff --git a/web/public/favicon/favicon.ico b/apps/web/public/favicon/favicon.ico similarity index 100% rename from web/public/favicon/favicon.ico rename to apps/web/public/favicon/favicon.ico diff --git a/web/public/favicon/site.webmanifest b/apps/web/public/favicon/site.webmanifest similarity index 100% rename from web/public/favicon/site.webmanifest rename to apps/web/public/favicon/site.webmanifest diff --git a/web/public/fonts/inter/bold-italic.ttf b/apps/web/public/fonts/inter/bold-italic.ttf similarity index 100% rename from web/public/fonts/inter/bold-italic.ttf rename to apps/web/public/fonts/inter/bold-italic.ttf diff --git a/web/public/fonts/inter/bold.ttf b/apps/web/public/fonts/inter/bold.ttf similarity index 100% rename from web/public/fonts/inter/bold.ttf rename to apps/web/public/fonts/inter/bold.ttf diff --git a/web/public/fonts/inter/heavy-italic.ttf b/apps/web/public/fonts/inter/heavy-italic.ttf similarity index 100% rename from web/public/fonts/inter/heavy-italic.ttf rename to apps/web/public/fonts/inter/heavy-italic.ttf diff --git a/web/public/fonts/inter/heavy.ttf b/apps/web/public/fonts/inter/heavy.ttf similarity index 100% rename from web/public/fonts/inter/heavy.ttf rename to apps/web/public/fonts/inter/heavy.ttf diff --git a/web/public/fonts/inter/light-italic.ttf b/apps/web/public/fonts/inter/light-italic.ttf similarity index 100% rename from web/public/fonts/inter/light-italic.ttf rename to apps/web/public/fonts/inter/light-italic.ttf diff --git a/web/public/fonts/inter/light.ttf b/apps/web/public/fonts/inter/light.ttf similarity index 100% rename from web/public/fonts/inter/light.ttf rename to apps/web/public/fonts/inter/light.ttf diff --git a/web/public/fonts/inter/medium-italic.ttf b/apps/web/public/fonts/inter/medium-italic.ttf similarity index 100% rename from web/public/fonts/inter/medium-italic.ttf rename to apps/web/public/fonts/inter/medium-italic.ttf diff --git a/web/public/fonts/inter/medium.ttf b/apps/web/public/fonts/inter/medium.ttf similarity index 100% rename from web/public/fonts/inter/medium.ttf rename to apps/web/public/fonts/inter/medium.ttf diff --git a/web/public/fonts/inter/regular-italic.ttf b/apps/web/public/fonts/inter/regular-italic.ttf similarity index 100% rename from web/public/fonts/inter/regular-italic.ttf rename to apps/web/public/fonts/inter/regular-italic.ttf diff --git a/web/public/fonts/inter/regular.ttf b/apps/web/public/fonts/inter/regular.ttf similarity index 100% rename from web/public/fonts/inter/regular.ttf rename to apps/web/public/fonts/inter/regular.ttf diff --git a/web/public/fonts/inter/semibold-italic.ttf b/apps/web/public/fonts/inter/semibold-italic.ttf similarity index 100% rename from web/public/fonts/inter/semibold-italic.ttf rename to apps/web/public/fonts/inter/semibold-italic.ttf diff --git a/web/public/fonts/inter/semibold.ttf b/apps/web/public/fonts/inter/semibold.ttf similarity index 100% rename from web/public/fonts/inter/semibold.ttf rename to apps/web/public/fonts/inter/semibold.ttf diff --git a/web/public/fonts/inter/thin-italic.ttf b/apps/web/public/fonts/inter/thin-italic.ttf similarity index 100% rename from web/public/fonts/inter/thin-italic.ttf rename to apps/web/public/fonts/inter/thin-italic.ttf diff --git a/web/public/fonts/inter/thin.ttf b/apps/web/public/fonts/inter/thin.ttf similarity index 100% rename from web/public/fonts/inter/thin.ttf rename to apps/web/public/fonts/inter/thin.ttf diff --git a/web/public/fonts/inter/ultrabold-italic.ttf b/apps/web/public/fonts/inter/ultrabold-italic.ttf similarity index 100% rename from web/public/fonts/inter/ultrabold-italic.ttf rename to apps/web/public/fonts/inter/ultrabold-italic.ttf diff --git a/web/public/fonts/inter/ultrabold.ttf b/apps/web/public/fonts/inter/ultrabold.ttf similarity index 100% rename from web/public/fonts/inter/ultrabold.ttf rename to apps/web/public/fonts/inter/ultrabold.ttf diff --git a/web/public/fonts/inter/ultralight-italic.ttf b/apps/web/public/fonts/inter/ultralight-italic.ttf similarity index 100% rename from web/public/fonts/inter/ultralight-italic.ttf rename to apps/web/public/fonts/inter/ultralight-italic.ttf diff --git a/web/public/fonts/inter/ultralight.ttf b/apps/web/public/fonts/inter/ultralight.ttf similarity index 100% rename from web/public/fonts/inter/ultralight.ttf rename to apps/web/public/fonts/inter/ultralight.ttf diff --git a/web/public/icons/icon-128x128.png b/apps/web/public/icons/icon-128x128.png similarity index 100% rename from web/public/icons/icon-128x128.png rename to apps/web/public/icons/icon-128x128.png diff --git a/web/public/icons/icon-180x180.png b/apps/web/public/icons/icon-180x180.png similarity index 100% rename from web/public/icons/icon-180x180.png rename to apps/web/public/icons/icon-180x180.png diff --git a/web/public/icons/icon-192x192.png b/apps/web/public/icons/icon-192x192.png similarity index 100% rename from web/public/icons/icon-192x192.png rename to apps/web/public/icons/icon-192x192.png diff --git a/web/public/icons/icon-348x348.png b/apps/web/public/icons/icon-348x348.png similarity index 100% rename from web/public/icons/icon-348x348.png rename to apps/web/public/icons/icon-348x348.png diff --git a/web/public/icons/icon-512x512.png b/apps/web/public/icons/icon-512x512.png similarity index 100% rename from web/public/icons/icon-512x512.png rename to apps/web/public/icons/icon-512x512.png diff --git a/web/public/images/logo-spinner-dark.gif b/apps/web/public/images/logo-spinner-dark.gif similarity index 100% rename from web/public/images/logo-spinner-dark.gif rename to apps/web/public/images/logo-spinner-dark.gif diff --git a/web/public/images/logo-spinner-light.gif b/apps/web/public/images/logo-spinner-light.gif similarity index 100% rename from web/public/images/logo-spinner-light.gif rename to apps/web/public/images/logo-spinner-light.gif diff --git a/web/public/instance-not-ready.webp b/apps/web/public/instance-not-ready.webp similarity index 100% rename from web/public/instance-not-ready.webp rename to apps/web/public/instance-not-ready.webp diff --git a/web/public/instance-setup-done.webp b/apps/web/public/instance-setup-done.webp similarity index 100% rename from web/public/instance-setup-done.webp rename to apps/web/public/instance-setup-done.webp diff --git a/web/public/logos/github-black.png b/apps/web/public/logos/github-black.png similarity index 100% rename from web/public/logos/github-black.png rename to apps/web/public/logos/github-black.png diff --git a/web/public/logos/github-dark.svg b/apps/web/public/logos/github-dark.svg similarity index 100% rename from web/public/logos/github-dark.svg rename to apps/web/public/logos/github-dark.svg diff --git a/web/public/logos/github-square.png b/apps/web/public/logos/github-square.png similarity index 100% rename from web/public/logos/github-square.png rename to apps/web/public/logos/github-square.png diff --git a/web/public/logos/github-white.png b/apps/web/public/logos/github-white.png similarity index 100% rename from web/public/logos/github-white.png rename to apps/web/public/logos/github-white.png diff --git a/web/public/logos/gitlab-logo.svg b/apps/web/public/logos/gitlab-logo.svg similarity index 100% rename from web/public/logos/gitlab-logo.svg rename to apps/web/public/logos/gitlab-logo.svg diff --git a/web/public/logos/google-logo.svg b/apps/web/public/logos/google-logo.svg similarity index 100% rename from web/public/logos/google-logo.svg rename to apps/web/public/logos/google-logo.svg diff --git a/web/public/mac-command.svg b/apps/web/public/mac-command.svg similarity index 100% rename from web/public/mac-command.svg rename to apps/web/public/mac-command.svg diff --git a/web/public/maintenance-mode.webp b/apps/web/public/maintenance-mode.webp similarity index 100% rename from web/public/maintenance-mode.webp rename to apps/web/public/maintenance-mode.webp diff --git a/web/public/manifest.json b/apps/web/public/manifest.json similarity index 100% rename from web/public/manifest.json rename to apps/web/public/manifest.json diff --git a/web/public/og-image.png b/apps/web/public/og-image.png similarity index 100% rename from web/public/og-image.png rename to apps/web/public/og-image.png diff --git a/web/public/onboarding/create-join-workspace-dark.webp b/apps/web/public/onboarding/create-join-workspace-dark.webp similarity index 100% rename from web/public/onboarding/create-join-workspace-dark.webp rename to apps/web/public/onboarding/create-join-workspace-dark.webp diff --git a/web/public/onboarding/create-join-workspace-light.webp b/apps/web/public/onboarding/create-join-workspace-light.webp similarity index 100% rename from web/public/onboarding/create-join-workspace-light.webp rename to apps/web/public/onboarding/create-join-workspace-light.webp diff --git a/web/public/onboarding/cycles.webp b/apps/web/public/onboarding/cycles.webp similarity index 100% rename from web/public/onboarding/cycles.webp rename to apps/web/public/onboarding/cycles.webp diff --git a/web/public/onboarding/invite-members-dark.webp b/apps/web/public/onboarding/invite-members-dark.webp similarity index 100% rename from web/public/onboarding/invite-members-dark.webp rename to apps/web/public/onboarding/invite-members-dark.webp diff --git a/web/public/onboarding/invite-members-light.webp b/apps/web/public/onboarding/invite-members-light.webp similarity index 100% rename from web/public/onboarding/invite-members-light.webp rename to apps/web/public/onboarding/invite-members-light.webp diff --git a/web/public/onboarding/issues.webp b/apps/web/public/onboarding/issues.webp similarity index 100% rename from web/public/onboarding/issues.webp rename to apps/web/public/onboarding/issues.webp diff --git a/web/public/onboarding/modules.webp b/apps/web/public/onboarding/modules.webp similarity index 100% rename from web/public/onboarding/modules.webp rename to apps/web/public/onboarding/modules.webp diff --git a/web/public/onboarding/onboarding-pages.webp b/apps/web/public/onboarding/onboarding-pages.webp similarity index 100% rename from web/public/onboarding/onboarding-pages.webp rename to apps/web/public/onboarding/onboarding-pages.webp diff --git a/web/public/onboarding/pages.webp b/apps/web/public/onboarding/pages.webp similarity index 100% rename from web/public/onboarding/pages.webp rename to apps/web/public/onboarding/pages.webp diff --git a/web/public/onboarding/profile-setup-dark.webp b/apps/web/public/onboarding/profile-setup-dark.webp similarity index 100% rename from web/public/onboarding/profile-setup-dark.webp rename to apps/web/public/onboarding/profile-setup-dark.webp diff --git a/web/public/onboarding/profile-setup-light.webp b/apps/web/public/onboarding/profile-setup-light.webp similarity index 100% rename from web/public/onboarding/profile-setup-light.webp rename to apps/web/public/onboarding/profile-setup-light.webp diff --git a/web/public/onboarding/user-personalization-dark.webp b/apps/web/public/onboarding/user-personalization-dark.webp similarity index 100% rename from web/public/onboarding/user-personalization-dark.webp rename to apps/web/public/onboarding/user-personalization-dark.webp diff --git a/web/public/onboarding/user-personalization-light.webp b/apps/web/public/onboarding/user-personalization-light.webp similarity index 100% rename from web/public/onboarding/user-personalization-light.webp rename to apps/web/public/onboarding/user-personalization-light.webp diff --git a/web/public/onboarding/views.webp b/apps/web/public/onboarding/views.webp similarity index 100% rename from web/public/onboarding/views.webp rename to apps/web/public/onboarding/views.webp diff --git a/web/public/plane-logos/black-horizontal-with-blue-logo.png b/apps/web/public/plane-logos/black-horizontal-with-blue-logo.png similarity index 100% rename from web/public/plane-logos/black-horizontal-with-blue-logo.png rename to apps/web/public/plane-logos/black-horizontal-with-blue-logo.png diff --git a/web/public/plane-logos/blue-without-text.png b/apps/web/public/plane-logos/blue-without-text.png similarity index 100% rename from web/public/plane-logos/blue-without-text.png rename to apps/web/public/plane-logos/blue-without-text.png diff --git a/web/public/plane-logos/plane-mobile-pwa.png b/apps/web/public/plane-logos/plane-mobile-pwa.png similarity index 100% rename from web/public/plane-logos/plane-mobile-pwa.png rename to apps/web/public/plane-logos/plane-mobile-pwa.png diff --git a/web/public/plane-logos/white-horizontal-with-blue-logo.png b/apps/web/public/plane-logos/white-horizontal-with-blue-logo.png similarity index 100% rename from web/public/plane-logos/white-horizontal-with-blue-logo.png rename to apps/web/public/plane-logos/white-horizontal-with-blue-logo.png diff --git a/web/public/plane-logos/white-horizontal.svg b/apps/web/public/plane-logos/white-horizontal.svg similarity index 100% rename from web/public/plane-logos/white-horizontal.svg rename to apps/web/public/plane-logos/white-horizontal.svg diff --git a/web/public/plane-takeoff.png b/apps/web/public/plane-takeoff.png similarity index 100% rename from web/public/plane-takeoff.png rename to apps/web/public/plane-takeoff.png diff --git a/web/public/services/csv.svg b/apps/web/public/services/csv.svg similarity index 100% rename from web/public/services/csv.svg rename to apps/web/public/services/csv.svg diff --git a/web/public/services/excel.svg b/apps/web/public/services/excel.svg similarity index 100% rename from web/public/services/excel.svg rename to apps/web/public/services/excel.svg diff --git a/web/public/services/github.png b/apps/web/public/services/github.png similarity index 100% rename from web/public/services/github.png rename to apps/web/public/services/github.png diff --git a/web/public/services/jira.svg b/apps/web/public/services/jira.svg similarity index 100% rename from web/public/services/jira.svg rename to apps/web/public/services/jira.svg diff --git a/web/public/services/json.svg b/apps/web/public/services/json.svg similarity index 100% rename from web/public/services/json.svg rename to apps/web/public/services/json.svg diff --git a/web/public/services/slack.png b/apps/web/public/services/slack.png similarity index 100% rename from web/public/services/slack.png rename to apps/web/public/services/slack.png diff --git a/web/public/site.webmanifest.json b/apps/web/public/site.webmanifest.json similarity index 100% rename from web/public/site.webmanifest.json rename to apps/web/public/site.webmanifest.json diff --git a/web/public/sw.js b/apps/web/public/sw.js similarity index 100% rename from web/public/sw.js rename to apps/web/public/sw.js diff --git a/web/public/sw.js.map b/apps/web/public/sw.js.map similarity index 100% rename from web/public/sw.js.map rename to apps/web/public/sw.js.map diff --git a/web/public/user.png b/apps/web/public/user.png similarity index 100% rename from web/public/user.png rename to apps/web/public/user.png diff --git a/web/public/users/user-1.png b/apps/web/public/users/user-1.png similarity index 100% rename from web/public/users/user-1.png rename to apps/web/public/users/user-1.png diff --git a/web/public/users/user-2.png b/apps/web/public/users/user-2.png similarity index 100% rename from web/public/users/user-2.png rename to apps/web/public/users/user-2.png diff --git a/web/public/users/user-profile-cover-default-img.png b/apps/web/public/users/user-profile-cover-default-img.png similarity index 100% rename from web/public/users/user-profile-cover-default-img.png rename to apps/web/public/users/user-profile-cover-default-img.png diff --git a/web/public/workbox-9f2f79cf.js b/apps/web/public/workbox-9f2f79cf.js similarity index 100% rename from web/public/workbox-9f2f79cf.js rename to apps/web/public/workbox-9f2f79cf.js diff --git a/web/public/workbox-9f2f79cf.js.map b/apps/web/public/workbox-9f2f79cf.js.map similarity index 100% rename from web/public/workbox-9f2f79cf.js.map rename to apps/web/public/workbox-9f2f79cf.js.map diff --git a/web/public/workspace-active-cycles/cta-l-1-dark.webp b/apps/web/public/workspace-active-cycles/cta-l-1-dark.webp similarity index 100% rename from web/public/workspace-active-cycles/cta-l-1-dark.webp rename to apps/web/public/workspace-active-cycles/cta-l-1-dark.webp diff --git a/web/public/workspace-active-cycles/cta-l-1-light.webp b/apps/web/public/workspace-active-cycles/cta-l-1-light.webp similarity index 100% rename from web/public/workspace-active-cycles/cta-l-1-light.webp rename to apps/web/public/workspace-active-cycles/cta-l-1-light.webp diff --git a/web/public/workspace-active-cycles/cta-r-1-dark.webp b/apps/web/public/workspace-active-cycles/cta-r-1-dark.webp similarity index 100% rename from web/public/workspace-active-cycles/cta-r-1-dark.webp rename to apps/web/public/workspace-active-cycles/cta-r-1-dark.webp diff --git a/web/public/workspace-active-cycles/cta-r-1-light.webp b/apps/web/public/workspace-active-cycles/cta-r-1-light.webp similarity index 100% rename from web/public/workspace-active-cycles/cta-r-1-light.webp rename to apps/web/public/workspace-active-cycles/cta-r-1-light.webp diff --git a/web/public/workspace-active-cycles/cta-r-2-dark.webp b/apps/web/public/workspace-active-cycles/cta-r-2-dark.webp similarity index 100% rename from web/public/workspace-active-cycles/cta-r-2-dark.webp rename to apps/web/public/workspace-active-cycles/cta-r-2-dark.webp diff --git a/web/public/workspace-active-cycles/cta-r-2-light.webp b/apps/web/public/workspace-active-cycles/cta-r-2-light.webp similarity index 100% rename from web/public/workspace-active-cycles/cta-r-2-light.webp rename to apps/web/public/workspace-active-cycles/cta-r-2-light.webp diff --git a/web/public/workspace/workspace-creation-disabled.png b/apps/web/public/workspace/workspace-creation-disabled.png similarity index 100% rename from web/public/workspace/workspace-creation-disabled.png rename to apps/web/public/workspace/workspace-creation-disabled.png diff --git a/web/public/workspace/workspace-not-available.png b/apps/web/public/workspace/workspace-not-available.png similarity index 100% rename from web/public/workspace/workspace-not-available.png rename to apps/web/public/workspace/workspace-not-available.png diff --git a/web/styles/command-pallette.css b/apps/web/styles/command-pallette.css similarity index 100% rename from web/styles/command-pallette.css rename to apps/web/styles/command-pallette.css diff --git a/web/styles/emoji.css b/apps/web/styles/emoji.css similarity index 100% rename from web/styles/emoji.css rename to apps/web/styles/emoji.css diff --git a/web/styles/globals.css b/apps/web/styles/globals.css similarity index 100% rename from web/styles/globals.css rename to apps/web/styles/globals.css diff --git a/web/styles/nprogress.css b/apps/web/styles/nprogress.css similarity index 100% rename from web/styles/nprogress.css rename to apps/web/styles/nprogress.css diff --git a/web/styles/react-day-picker.css b/apps/web/styles/react-day-picker.css similarity index 100% rename from web/styles/react-day-picker.css rename to apps/web/styles/react-day-picker.css diff --git a/web/tailwind.config.js b/apps/web/tailwind.config.js similarity index 100% rename from web/tailwind.config.js rename to apps/web/tailwind.config.js diff --git a/web/tsconfig.json b/apps/web/tsconfig.json similarity index 100% rename from web/tsconfig.json rename to apps/web/tsconfig.json diff --git a/web/use-font-face-observer.d.ts b/apps/web/use-font-face-observer.d.ts similarity index 100% rename from web/use-font-face-observer.d.ts rename to apps/web/use-font-face-observer.d.ts diff --git a/package.json b/package.json index 73c8697a144..6faf02651da 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,7 @@ "license": "AGPL-3.0", "private": true, "workspaces": [ - "web", - "space", - "admin", - "live", + "apps/*", "packages/*" ], "scripts": { From 021b6eebdd52eab05fe193771f5e071ad9a9264f Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Thu, 3 Jul 2025 01:08:49 +0530 Subject: [PATCH 019/130] fix: admin and space docker paths (#7322) --- apps/admin/Dockerfile.admin | 24 ++++++++++++++---------- apps/space/Dockerfile.space | 25 ++++++++++++++++--------- apps/web/Dockerfile.web | 24 +++++++++++++----------- 3 files changed, 43 insertions(+), 30 deletions(-) diff --git a/apps/admin/Dockerfile.admin b/apps/admin/Dockerfile.admin index 8046bf32943..606d19aec86 100644 --- a/apps/admin/Dockerfile.admin +++ b/apps/admin/Dockerfile.admin @@ -1,4 +1,4 @@ -FROM node:20-alpine as base +FROM node:20-alpine AS base # ***************************************************************************** # STAGE 1: Build the project @@ -46,8 +46,8 @@ ENV NEXT_PUBLIC_SPACE_BASE_PATH=$NEXT_PUBLIC_SPACE_BASE_PATH ARG NEXT_PUBLIC_WEB_BASE_URL="" ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL -ENV NEXT_TELEMETRY_DISABLED 1 -ENV TURBO_TELEMETRY_DISABLED 1 +ENV NEXT_TELEMETRY_DISABLED=1 +ENV TURBO_TELEMETRY_DISABLED=1 RUN yarn turbo run build --filter=admin @@ -57,12 +57,16 @@ RUN yarn turbo run build --filter=admin FROM base AS runner WORKDIR /app -COPY --from=installer /app/admin/next.config.js . -COPY --from=installer /app/admin/package.json . +# Don't run production as root +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs +USER nextjs -COPY --from=installer /app/admin/.next/standalone ./ -COPY --from=installer /app/admin/.next/static ./admin/.next/static -COPY --from=installer /app/admin/public ./admin/public +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=installer /app/apps/admin/.next/standalone ./ +COPY --from=installer /app/apps/admin/.next/static ./apps/admin/.next/static +COPY --from=installer /app/apps/admin/public ./apps/admin/public ARG NEXT_PUBLIC_API_BASE_URL="" ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL @@ -82,7 +86,7 @@ ENV NEXT_PUBLIC_SPACE_BASE_PATH=$NEXT_PUBLIC_SPACE_BASE_PATH ARG NEXT_PUBLIC_WEB_BASE_URL="" ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL -ENV NEXT_TELEMETRY_DISABLED 1 -ENV TURBO_TELEMETRY_DISABLED 1 +ENV NEXT_TELEMETRY_DISABLED=1 +ENV TURBO_TELEMETRY_DISABLED=1 EXPOSE 3000 \ No newline at end of file diff --git a/apps/space/Dockerfile.space b/apps/space/Dockerfile.space index 03a2b317f92..a7633445465 100644 --- a/apps/space/Dockerfile.space +++ b/apps/space/Dockerfile.space @@ -1,4 +1,5 @@ -FROM node:20-alpine as base +FROM node:20-alpine AS base + # ***************************************************************************** # STAGE 1: Build the project # ***************************************************************************** @@ -45,6 +46,9 @@ ENV NEXT_PUBLIC_SPACE_BASE_PATH=$NEXT_PUBLIC_SPACE_BASE_PATH ARG NEXT_PUBLIC_WEB_BASE_URL="" ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL +ENV NEXT_TELEMETRY_DISABLED=1 +ENV TURBO_TELEMETRY_DISABLED=1 + RUN yarn turbo run build --filter=space # ***************************************************************************** @@ -53,13 +57,16 @@ RUN yarn turbo run build --filter=space FROM base AS runner WORKDIR /app -COPY --from=installer /app/space/next.config.js . -COPY --from=installer /app/space/package.json . - -COPY --from=installer /app/space/.next/standalone ./ +# Don't run production as root +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs +USER nextjs -COPY --from=installer /app/space/.next/static ./space/.next/static -COPY --from=installer /app/space/public ./space/public +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=installer /app/apps/space/.next/standalone ./ +COPY --from=installer /app/apps/space/.next/static ./apps/space/.next/static +COPY --from=installer /app/apps/space/public ./apps/space/public ARG NEXT_PUBLIC_API_BASE_URL="" ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL @@ -79,7 +86,7 @@ ENV NEXT_PUBLIC_SPACE_BASE_PATH=$NEXT_PUBLIC_SPACE_BASE_PATH ARG NEXT_PUBLIC_WEB_BASE_URL="" ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL -ENV NEXT_TELEMETRY_DISABLED 1 -ENV TURBO_TELEMETRY_DISABLED 1 +ENV NEXT_TELEMETRY_DISABLED=1 +ENV TURBO_TELEMETRY_DISABLED=1 EXPOSE 3000 \ No newline at end of file diff --git a/apps/web/Dockerfile.web b/apps/web/Dockerfile.web index 037f552c8ed..40b9bb597da 100644 --- a/apps/web/Dockerfile.web +++ b/apps/web/Dockerfile.web @@ -1,4 +1,4 @@ -FROM node:20-alpine as base +FROM node:20-alpine AS base # ***************************************************************************** # STAGE 1: Build the project @@ -56,8 +56,8 @@ ENV NEXT_PUBLIC_SPACE_BASE_PATH=$NEXT_PUBLIC_SPACE_BASE_PATH ARG NEXT_PUBLIC_WEB_BASE_URL="" ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL -ENV NEXT_TELEMETRY_DISABLED 1 -ENV TURBO_TELEMETRY_DISABLED 1 +ENV NEXT_TELEMETRY_DISABLED=1 +ENV TURBO_TELEMETRY_DISABLED=1 RUN yarn turbo run build --filter=web @@ -67,15 +67,17 @@ RUN yarn turbo run build --filter=web FROM base AS runner WORKDIR /app -COPY --from=installer /app/web/next.config.js . -COPY --from=installer /app/web/package.json . +# Don't run production as root +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs +USER nextjs + # Automatically leverage output traces to reduce image size # https://nextjs.org/docs/advanced-features/output-file-tracing -COPY --from=installer /app/web/.next/standalone ./ - -COPY --from=installer /app/web/.next/static ./web/.next/static -COPY --from=installer /app/web/public ./web/public +COPY --from=installer /app/apps/web/.next/standalone ./ +COPY --from=installer /app/apps/web/.next/static ./apps/web/.next/static +COPY --from=installer /app/apps/web/public ./apps/web/public ARG NEXT_PUBLIC_API_BASE_URL="" ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL @@ -101,7 +103,7 @@ ENV NEXT_PUBLIC_SPACE_BASE_PATH=$NEXT_PUBLIC_SPACE_BASE_PATH ARG NEXT_PUBLIC_WEB_BASE_URL="" ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL -ENV NEXT_TELEMETRY_DISABLED 1 -ENV TURBO_TELEMETRY_DISABLED 1 +ENV NEXT_TELEMETRY_DISABLED=1 +ENV TURBO_TELEMETRY_DISABLED=1 EXPOSE 3000 \ No newline at end of file From 7d417c54578f5a52585c5bfba162900b005d1096 Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Thu, 3 Jul 2025 01:26:40 +0530 Subject: [PATCH 020/130] fix: update docker file paths and context in branch build workflow #7323 --- .github/workflows/build-branch.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-branch.yml b/.github/workflows/build-branch.yml index 6c75af134ab..9ce5ceed8f8 100644 --- a/.github/workflows/build-branch.yml +++ b/.github/workflows/build-branch.yml @@ -133,7 +133,7 @@ jobs: docker-image-owner: makeplane docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_admin }} build-context: . - dockerfile-path: ./admin/Dockerfile.admin + dockerfile-path: ./apps/admin/Dockerfile.admin buildx-driver: ${{ needs.branch_build_setup.outputs.gh_buildx_driver }} buildx-version: ${{ needs.branch_build_setup.outputs.gh_buildx_version }} buildx-platforms: ${{ needs.branch_build_setup.outputs.gh_buildx_platforms }} @@ -155,7 +155,7 @@ jobs: docker-image-owner: makeplane docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_web }} build-context: . - dockerfile-path: ./web/Dockerfile.web + dockerfile-path: ./apps/web/Dockerfile.web buildx-driver: ${{ needs.branch_build_setup.outputs.gh_buildx_driver }} buildx-version: ${{ needs.branch_build_setup.outputs.gh_buildx_version }} buildx-platforms: ${{ needs.branch_build_setup.outputs.gh_buildx_platforms }} @@ -177,7 +177,7 @@ jobs: docker-image-owner: makeplane docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_space }} build-context: . - dockerfile-path: ./space/Dockerfile.space + dockerfile-path: ./apps/space/Dockerfile.space buildx-driver: ${{ needs.branch_build_setup.outputs.gh_buildx_driver }} buildx-version: ${{ needs.branch_build_setup.outputs.gh_buildx_version }} buildx-platforms: ${{ needs.branch_build_setup.outputs.gh_buildx_platforms }} @@ -199,7 +199,7 @@ jobs: docker-image-owner: makeplane docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_live }} build-context: . - dockerfile-path: ./live/Dockerfile.live + dockerfile-path: ./apps/live/Dockerfile.live buildx-driver: ${{ needs.branch_build_setup.outputs.gh_buildx_driver }} buildx-version: ${{ needs.branch_build_setup.outputs.gh_buildx_version }} buildx-platforms: ${{ needs.branch_build_setup.outputs.gh_buildx_platforms }} @@ -220,8 +220,8 @@ jobs: dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }} docker-image-owner: makeplane docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_backend }} - build-context: ./apiserver - dockerfile-path: ./apiserver/Dockerfile.api + build-context: ./apps/server + dockerfile-path: ./apps/server/Dockerfile.api buildx-driver: ${{ needs.branch_build_setup.outputs.gh_buildx_driver }} buildx-version: ${{ needs.branch_build_setup.outputs.gh_buildx_version }} buildx-platforms: ${{ needs.branch_build_setup.outputs.gh_buildx_platforms }} From 71012d24ab10767f8361fa6fae9f11d4b02dba8a Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com> Date: Thu, 3 Jul 2025 14:12:17 +0530 Subject: [PATCH 021/130] [WEB-4436] fix: tailwind config #7329 --- packages/tailwind-config/tailwind.config.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/tailwind-config/tailwind.config.js b/packages/tailwind-config/tailwind.config.js index 168c54e621e..a1ab06c892b 100644 --- a/packages/tailwind-config/tailwind.config.js +++ b/packages/tailwind-config/tailwind.config.js @@ -18,10 +18,10 @@ module.exports = { "./pages/**/*.tsx", "./app/**/*.tsx", "./ui/**/*.tsx", - "../packages/ui/src/**/*.{js,ts,jsx,tsx}", - "../packages/propel/src/**/*.{js,ts,jsx,tsx}", - "../packages/editor/src/**/*.{js,ts,jsx,tsx}", - "!../packages/ui/**/*.stories{js,ts,jsx,tsx}", + "../../packages/ui/src/**/*.{js,ts,jsx,tsx}", + "../../packages/propel/src/**/*.{js,ts,jsx,tsx}", + "../../packages/editor/src/**/*.{js,ts,jsx,tsx}", + "!../../packages/ui/**/*.stories{js,ts,jsx,tsx}", ], }, theme: { From 7d141f26ad4b15f67477a8b3e437d46fb45117bb Mon Sep 17 00:00:00 2001 From: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com> Date: Thu, 3 Jul 2025 14:12:51 +0530 Subject: [PATCH 022/130] [WEB-4432] fix: workspace analytics translation #7330 --- packages/i18n/src/locales/cs/translations.json | 11 +++++++++++ packages/i18n/src/locales/de/translations.json | 11 +++++++++++ packages/i18n/src/locales/en/translations.json | 11 +++++++++++ packages/i18n/src/locales/es/translations.json | 11 +++++++++++ packages/i18n/src/locales/fr/translations.json | 11 +++++++++++ packages/i18n/src/locales/id/translations.json | 11 +++++++++++ packages/i18n/src/locales/it/translations.json | 11 +++++++++++ packages/i18n/src/locales/ja/translations.json | 11 +++++++++++ packages/i18n/src/locales/ko/translations.json | 11 +++++++++++ packages/i18n/src/locales/pl/translations.json | 11 +++++++++++ packages/i18n/src/locales/pt-BR/translations.json | 11 +++++++++++ packages/i18n/src/locales/ro/translations.json | 11 +++++++++++ packages/i18n/src/locales/ru/translations.json | 11 +++++++++++ packages/i18n/src/locales/sk/translations.json | 11 +++++++++++ packages/i18n/src/locales/tr-TR/translations.json | 11 +++++++++++ packages/i18n/src/locales/ua/translations.json | 11 +++++++++++ packages/i18n/src/locales/vi-VN/translations.json | 11 +++++++++++ packages/i18n/src/locales/zh-CN/translations.json | 11 +++++++++++ packages/i18n/src/locales/zh-TW/translations.json | 11 +++++++++++ 19 files changed, 209 insertions(+) diff --git a/packages/i18n/src/locales/cs/translations.json b/packages/i18n/src/locales/cs/translations.json index b392788a0dd..e378e220d5a 100644 --- a/packages/i18n/src/locales/cs/translations.json +++ b/packages/i18n/src/locales/cs/translations.json @@ -1343,6 +1343,17 @@ "project_insights": { "title": "Zatím žádná data", "description": "Pracovní položky přiřazené vám, rozdělené podle stavu, se zde zobrazí." + }, + "general": { + "title": "Sledujte pokrok, pracovní zátěž a alokace. Odhalte trendy, odstraňte překážky a zrychlete práci", + "description": "Porovnávejte rozsah s poptávkou, odhady a rozšiřování rozsahu. Získejte výkonnost podle členů týmu a týmů a zajistěte, aby váš projekt běžel včas.", + "primary_button": { + "text": "Začněte svůj první projekt", + "comic": { + "title": "Analytika funguje nejlépe s Cykly + Moduly", + "description": "Nejprve časově ohraničte své problémy do Cyklů a pokud můžete, seskupte problémy, které trvají déle než jeden cyklus, do Modulů. Podívejte se na obojí v levé navigaci." + } + } } }, "created_vs_resolved": "Vytvořeno vs Vyřešeno", diff --git a/packages/i18n/src/locales/de/translations.json b/packages/i18n/src/locales/de/translations.json index a6c73e845ee..2ab869005de 100644 --- a/packages/i18n/src/locales/de/translations.json +++ b/packages/i18n/src/locales/de/translations.json @@ -1343,6 +1343,17 @@ "project_insights": { "title": "Noch keine Daten", "description": "Ihnen zugewiesene Arbeitselemente, aufgeschlüsselt nach Status, werden hier angezeigt." + }, + "general": { + "title": "Verfolgen Sie Fortschritt, Arbeitsbelastung und Zuweisungen. Erkennen Sie Trends, beseitigen Sie Hindernisse und arbeiten Sie schneller", + "description": "Sehen Sie Umfang vs. Nachfrage, Schätzungen und Scope Creep. Messen Sie die Leistung von Teammitgliedern und Teams und stellen Sie sicher, dass Ihr Projekt rechtzeitig abgeschlossen wird.", + "primary_button": { + "text": "Erstes Projekt starten", + "comic": { + "title": "Analytics funktioniert am besten mit Zyklen + Modulen", + "description": "Begrenzen Sie zunächst Ihre Arbeitselemente zeitlich in Zyklen und gruppieren Sie, wenn möglich, Arbeitselemente, die mehr als einen Zyklus umfassen, in Module. Schauen Sie sich beide in der linken Navigation an." + } + } } }, "created_vs_resolved": "Erstellt vs Gelöst", diff --git a/packages/i18n/src/locales/en/translations.json b/packages/i18n/src/locales/en/translations.json index da650cbbe45..176eae7583f 100644 --- a/packages/i18n/src/locales/en/translations.json +++ b/packages/i18n/src/locales/en/translations.json @@ -1198,6 +1198,17 @@ "customized_insights": { "title": "No data yet", "description": "Work items assigned to you, broken down by state, will show up here." + }, + "general": { + "title": "Track progress, workloads, and allocations. Spot trends, remove blockers, and move work faster", + "description": "See scope versus demand, estimates, and scope creep. Get performance by team members and teams, and make sure your project runs on time.", + "primary_button": { + "text": "Start your first project", + "comic": { + "title": "Analytics works best with Cycles + Modules", + "description": "First, timebox your issues into Cycles and, if you can, group issues that span more than a cycle into Modules. Check out both on the left nav." + } + } } } }, diff --git a/packages/i18n/src/locales/es/translations.json b/packages/i18n/src/locales/es/translations.json index d8a350ce30e..44d4e7328d5 100644 --- a/packages/i18n/src/locales/es/translations.json +++ b/packages/i18n/src/locales/es/translations.json @@ -1346,6 +1346,17 @@ "project_insights": { "title": "Aún no hay datos", "description": "Los elementos de trabajo asignados a ti, desglosados por estado, aparecerán aquí." + }, + "general": { + "title": "Rastrea el progreso, las cargas de trabajo y las asignaciones. Identifica tendencias, elimina bloqueos y trabaja más rápido", + "description": "Ve alcance versus demanda, estimaciones y crecimiento del alcance. Obtén rendimiento por miembros del equipo y equipos, y asegúrate de que tu proyecto se ejecute a tiempo.", + "primary_button": { + "text": "Inicia tu primer proyecto", + "comic": { + "title": "Analytics funciona mejor con Ciclos + Módulos", + "description": "Primero, encuadra tus elementos de trabajo en Ciclos y, si puedes, agrupa elementos que abarcan más de un ciclo en Módulos. Revisa ambos en la navegación izquierda." + } + } } }, "created_vs_resolved": "Creado vs Resuelto", diff --git a/packages/i18n/src/locales/fr/translations.json b/packages/i18n/src/locales/fr/translations.json index a1f4c3cec35..0e230167a33 100644 --- a/packages/i18n/src/locales/fr/translations.json +++ b/packages/i18n/src/locales/fr/translations.json @@ -1344,6 +1344,17 @@ "project_insights": { "title": "Pas encore de données", "description": "Les éléments de travail qui vous sont assignés, répartis par état, s'afficheront ici." + }, + "general": { + "title": "Suivez les progrès, les charges de travail et les allocations. Identifiez les tendances, supprimez les blocages et travaillez plus rapidement", + "description": "Voyez la portée par rapport à la demande, les estimations et l'évolution du périmètre. Obtenez les performances par les membres de l'équipe et les équipes, et assurez-vous que votre projet se déroule dans les temps.", + "primary_button": { + "text": "Commencez votre premier projet", + "comic": { + "title": "L'analytics fonctionne mieux avec les Cycles + Modules", + "description": "D'abord, encadrez vos éléments de travail dans des Cycles et, si possible, regroupez les éléments qui s'étendent sur plus d'un cycle dans des Modules. Consultez les deux dans la navigation de gauche." + } + } } }, "created_vs_resolved": "Créé vs Résolu", diff --git a/packages/i18n/src/locales/id/translations.json b/packages/i18n/src/locales/id/translations.json index 0f388db3949..fa1734a3041 100644 --- a/packages/i18n/src/locales/id/translations.json +++ b/packages/i18n/src/locales/id/translations.json @@ -1343,6 +1343,17 @@ "project_insights": { "title": "Belum ada data", "description": "Item pekerjaan yang ditugaskan kepada Anda, dipecah berdasarkan status, akan muncul di sini." + }, + "general": { + "title": "Lacak kemajuan, beban kerja, dan alokasi. Temukan tren, hapus hambatan, dan percepat pekerjaan", + "description": "Lihat lingkup versus permintaan, perkiraan, dan perluasan lingkup. Dapatkan kinerja berdasarkan anggota tim dan tim, dan pastikan proyek Anda berjalan tepat waktu.", + "primary_button": { + "text": "Mulai proyek pertama Anda", + "comic": { + "title": "Analitik bekerja paling baik dengan Siklus + Modul", + "description": "Pertama, batasi waktu masalah Anda ke dalam Siklus dan, jika Anda bisa, kelompokkan masalah yang lebih dari satu siklus ke dalam Modul. Lihat keduanya di navigasi kiri." + } + } } }, "created_vs_resolved": "Dibuat vs Diselesaikan", diff --git a/packages/i18n/src/locales/it/translations.json b/packages/i18n/src/locales/it/translations.json index a6275f53d70..5d7629bc59e 100644 --- a/packages/i18n/src/locales/it/translations.json +++ b/packages/i18n/src/locales/it/translations.json @@ -1342,6 +1342,17 @@ "project_insights": { "title": "Nessun dato disponibile", "description": "Gli elementi di lavoro assegnati a te, suddivisi per stato, verranno visualizzati qui." + }, + "general": { + "title": "Traccia progressi, carichi di lavoro e allocazioni. Individua tendenze, rimuovi blocchi e lavora più velocemente", + "description": "Visualizza ambito vs domanda, stime e scope creep. Ottieni prestazioni per membri del team e squadre, assicurandoti che il tuo progetto si svolga nei tempi previsti.", + "primary_button": { + "text": "Inizia il tuo primo progetto", + "comic": { + "title": "Analytics funziona meglio con Cicli + Moduli", + "description": "Prima, incornicia i tuoi elementi di lavoro in Cicli e, se possibile, raggruppa gli elementi che si estendono oltre un ciclo in Moduli. Controlla entrambi nella navigazione sinistra." + } + } } }, "created_vs_resolved": "Creato vs Risolto", diff --git a/packages/i18n/src/locales/ja/translations.json b/packages/i18n/src/locales/ja/translations.json index 8147451c759..60a76c57db3 100644 --- a/packages/i18n/src/locales/ja/translations.json +++ b/packages/i18n/src/locales/ja/translations.json @@ -1344,6 +1344,17 @@ "project_insights": { "title": "まだデータがありません", "description": "あなたに割り当てられた作業項目は、ステータスごとに分類されてここに表示されます。" + }, + "general": { + "title": "進捗、ワークロード、割り当てを追跡する。傾向を発見し、障害を除去し、作業をより迅速に進める", + "description": "範囲と需要、見積もり、スコープクリープを確認する。チームメンバーとチームのパフォーマンスを把握し、プロジェクトが時間通りに実行されることを確実にする。", + "primary_button": { + "text": "最初のプロジェクトを開始", + "comic": { + "title": "アナリティクスはサイクル + モジュールで最もよく機能します", + "description": "まず、作業項目をサイクルに時間枠を設定し、可能であれば、複数のサイクルにまたがる作業項目をモジュールにグループ化してください。左側のナビゲーションで両方をチェックしてください。" + } + } } }, "created_vs_resolved": "作成 vs 解決", diff --git a/packages/i18n/src/locales/ko/translations.json b/packages/i18n/src/locales/ko/translations.json index 4a984b4c3e6..e500de0100f 100644 --- a/packages/i18n/src/locales/ko/translations.json +++ b/packages/i18n/src/locales/ko/translations.json @@ -1345,6 +1345,17 @@ "project_insights": { "title": "아직 데이터가 없습니다", "description": "귀하에게 할당된 작업 항목이 상태별로 나누어 여기에 표시됩니다." + }, + "general": { + "title": "진행 상황, 워크로드 및 할당을 추적하세요. 트렌드를 파악하고 장애물을 제거하며 더 빠르게 작업하세요", + "description": "범위 대 수요, 추정치 및 범위 크리프를 확인하세요. 팀 구성원과 팀의 성과를 파악하고 프로젝트가 제시간에 실행되도록 하세요.", + "primary_button": { + "text": "첫 번째 프로젝트 시작", + "comic": { + "title": "분석은 사이클 + 모듈과 함께 가장 잘 작동합니다", + "description": "먼저 작업 항목을 사이클로 시간 제한을 두고, 가능하다면 한 사이클 이상 걸리는 작업 항목을 모듈로 그룹화하세요. 왼쪽 탐색에서 둘 다 확인하세요." + } + } } }, "created_vs_resolved": "생성됨 vs 해결됨", diff --git a/packages/i18n/src/locales/pl/translations.json b/packages/i18n/src/locales/pl/translations.json index 38a564e3e53..49cf5b1a07c 100644 --- a/packages/i18n/src/locales/pl/translations.json +++ b/packages/i18n/src/locales/pl/translations.json @@ -1345,6 +1345,17 @@ "project_insights": { "title": "Brak danych", "description": "Przypisane do Ciebie elementy pracy, podzielone według stanu, pojawią się tutaj." + }, + "general": { + "title": "Śledź postęp, obciążenie pracą i alokacje. Wykrywaj trendy, usuwaj blokady i pracuj szybciej", + "description": "Zobacz zakres vs zapotrzebowanie, oszacowania i rozrost zakresu. Uzyskaj wydajność członków zespołu i zespołów, upewniając się, że projekt jest realizowany na czas.", + "primary_button": { + "text": "Rozpocznij swój pierwszy projekt", + "comic": { + "title": "Analityka działa najlepiej z Cyklami + Modułami", + "description": "Najpierw umieść swoje elementy pracy w Cyklach, a jeśli można, pogrupuj elementy obejmujące więcej niż jeden cykl w Moduły. Sprawdź oba w lewej nawigacji." + } + } } }, "created_vs_resolved": "Utworzone vs Rozwiązane", diff --git a/packages/i18n/src/locales/pt-BR/translations.json b/packages/i18n/src/locales/pt-BR/translations.json index e8fd5ee283e..ace7e923b57 100644 --- a/packages/i18n/src/locales/pt-BR/translations.json +++ b/packages/i18n/src/locales/pt-BR/translations.json @@ -1345,6 +1345,17 @@ "project_insights": { "title": "Ainda não há dados", "description": "Os itens de trabalho atribuídos a você, divididos por estado, aparecerão aqui." + }, + "general": { + "title": "Acompanhe progresso, cargas de trabalho e alocações. Identifique tendências, remova bloqueios e trabalhe mais rápido", + "description": "Veja escopo versus demanda, estimativas e expansão de escopo. Obtenha desempenho por membros da equipe e equipes, garantindo que seu projeto seja executado no prazo.", + "primary_button": { + "text": "Comece seu primeiro projeto", + "comic": { + "title": "Analytics funciona melhor com Ciclos + Módulos", + "description": "Primeiro, defina um tempo limite para seus itens de trabalho em Ciclos e, se possível, agrupe itens que abrangem mais de um ciclo em Módulos. Confira ambos na navegação esquerda." + } + } } }, "created_vs_resolved": "Criado vs Resolvido", diff --git a/packages/i18n/src/locales/ro/translations.json b/packages/i18n/src/locales/ro/translations.json index 55b4ae2c52a..9b66d0e4bd0 100644 --- a/packages/i18n/src/locales/ro/translations.json +++ b/packages/i18n/src/locales/ro/translations.json @@ -1343,6 +1343,17 @@ "project_insights": { "title": "Nu există date încă", "description": "Elementele de lucru atribuite ție, împărțite pe stări, vor apărea aici." + }, + "general": { + "title": "Urmărește progresul, sarcinile și alocările. Identifică tendințele, elimină blocajele și accelerează munca", + "description": "Vezi domeniul versus cererea, estimările și extinderea domeniului. Obține performanțe pe membrii echipei și echipe, și asigură-te că proiectul tău rulează la timp.", + "primary_button": { + "text": "Începe primul tău proiect", + "comic": { + "title": "Analitica funcționează cel mai bine cu Cicluri + Module", + "description": "Întâi, limitează-ți problemele în Cicluri și, dacă poți, grupează problemele care durează mai mult de un ciclu în Module. Verifică ambele în navigarea din stânga." + } + } } }, "created_vs_resolved": "Creat vs Rezolvat", diff --git a/packages/i18n/src/locales/ru/translations.json b/packages/i18n/src/locales/ru/translations.json index bbe979e8973..413c0989ef1 100644 --- a/packages/i18n/src/locales/ru/translations.json +++ b/packages/i18n/src/locales/ru/translations.json @@ -1345,6 +1345,17 @@ "project_insights": { "title": "Данных пока нет", "description": "Назначенные вам рабочие элементы, разбитые по статусам, появятся здесь." + }, + "general": { + "title": "Отслеживайте прогресс, рабочие нагрузки и распределения. Выявляйте тренды, устраняйте блокировки и ускоряйте работу", + "description": "Смотрите объём versus спрос, оценки и расширение объёма. Получайте производительность по членам команды и командам, и убеждайтесь, что ваш проект выполняется в срок.", + "primary_button": { + "text": "Начать ваш первый проект", + "comic": { + "title": "Аналитика работает лучше всего с Циклами + Модулями", + "description": "Сначала ограничьте по времени ваши задачи в Циклах и, если можете, сгруппируйте задачи, которые длятся больше одного цикла, в Модули. Проверьте оба в левой навигации." + } + } } }, "created_vs_resolved": "Создано vs Решено", diff --git a/packages/i18n/src/locales/sk/translations.json b/packages/i18n/src/locales/sk/translations.json index 5cc3e360fff..1e01d86af35 100644 --- a/packages/i18n/src/locales/sk/translations.json +++ b/packages/i18n/src/locales/sk/translations.json @@ -1345,6 +1345,17 @@ "project_insights": { "title": "Zatiaľ žiadne údaje", "description": "Pracovné položky priradené vám, rozdelené podľa stavu, sa zobrazia tu." + }, + "general": { + "title": "Sledujte pokrok, pracovné zaťaženie a alokácie. Identifikujte trendy, odstráňte prekážky a urýchlite prácu", + "description": "Porovnávajte rozsah s dopytom, odhady a rozširovanie rozsahu. Získajte výkonnosť podľa členov tímu a tímov, a uistite sa, že váš projekt beží načas.", + "primary_button": { + "text": "Začnite svoj prvý projekt", + "comic": { + "title": "Analytika funguje najlepšie s Cyklami + Modulmi", + "description": "Najprv časovo ohraničte svoje problémy do Cyklov a, ak môžete, zoskupte problémy, ktoré trvajú viac ako jeden cyklus, do Modulov. Pozrite si oboje v ľavej navigácii." + } + } } }, "created_vs_resolved": "Vytvorené vs Vyriešené", diff --git a/packages/i18n/src/locales/tr-TR/translations.json b/packages/i18n/src/locales/tr-TR/translations.json index d088aa835a6..fabaad1f0bd 100644 --- a/packages/i18n/src/locales/tr-TR/translations.json +++ b/packages/i18n/src/locales/tr-TR/translations.json @@ -1346,6 +1346,17 @@ "project_insights": { "title": "Henüz veri yok", "description": "Size atanan iş öğeleri, duruma göre ayrılarak burada gösterilecektir." + }, + "general": { + "title": "İlerlemeyi, iş yüklerini ve tahsisleri takip edin. Eğilimleri tespit edin, engelleri kaldırın ve işi hızlandırın", + "description": "Kapsam ile talep, tahminler ve kapsam genişlemesini görün. Takım üyeleri ve takımlar bazında performans alın ve projenizin zamanında çalıştığından emin olun.", + "primary_button": { + "text": "İlk projenizi başlatın", + "comic": { + "title": "Analitik en iyi Döngüler + Modüller ile çalışır", + "description": "İlk olarak, sorunlarınızı Döngülere sınırlandırın ve eğer mümkünse, bir döngüden fazla süren sorunları Modüllere gruplandırın. Sol navigasyonda ikisini de kontrol edin." + } + } } }, "created_vs_resolved": "Oluşturulan vs Çözülen", diff --git a/packages/i18n/src/locales/ua/translations.json b/packages/i18n/src/locales/ua/translations.json index 04695f9b1d2..fcfe7c17233 100644 --- a/packages/i18n/src/locales/ua/translations.json +++ b/packages/i18n/src/locales/ua/translations.json @@ -1345,6 +1345,17 @@ "project_insights": { "title": "Ще немає даних", "description": "Призначені вам робочі елементи, розбиті за станом, з’являться тут." + }, + "general": { + "title": "Відстежуйте прогрес, робочу навантаженні та розподіл. Виявляйте тенденції, усувайте перешкоди та прискорюйте роботу", + "description": "Перегляньте обсяг проти попиту, оцінки та розповсюдження обсягу. Отримайте продуктивність членів команди та команд, щоб переконатися, що ваш проєкт виконується вчасно.", + "primary_button": { + "text": "Розпочніть свій перший проєкт", + "comic": { + "title": "Аналітика найкраще працює з циклами + модулями", + "description": "Спочатку обмежте свої робочі елементи часом у циклах та, якщо можливо, згрупуйте робочі елементи, які перевищують один цикл, у модулі. Перегляньте обидва в навігації зліва." + } + } } }, "created_vs_resolved": "Створено vs Вирішено", diff --git a/packages/i18n/src/locales/vi-VN/translations.json b/packages/i18n/src/locales/vi-VN/translations.json index 37ceaeda83c..abfc703d1db 100644 --- a/packages/i18n/src/locales/vi-VN/translations.json +++ b/packages/i18n/src/locales/vi-VN/translations.json @@ -1344,6 +1344,17 @@ "project_insights": { "title": "Chưa có dữ liệu", "description": "Các hạng mục công việc được giao cho bạn, phân loại theo trạng thái, sẽ hiển thị tại đây." + }, + "general": { + "title": "Theo dõi tiến độ, khối lượng công việc và phân bổ. Phát hiện xu hướng, loại bỏ rào cản và tăng tốc công việc", + "description": "Xem phạm vi so với nhu cầu, ước tính và mở rộng phạm vi. Theo dõi hiệu suất của các thành viên trong nhóm và đội nhóm, đảm bảo dự án của bạn hoạt động đúng tiến độ.", + "primary_button": { + "text": "Bắt đầu dự án đầu tiên của bạn", + "comic": { + "title": "Phân tích hoạt động tốt nhất với Chu kỳ + Mô-đun", + "description": "Đầu tiên, giới hạn thời gian các vấn đề của bạn trong Chu kỳ và, nếu có thể, nhóm các vấn đề kéo dài hơn một chu kỳ vào Mô-đun. Kiểm tra cả hai trong điều hướng bên trái." + } + } } }, "created_vs_resolved": "Đã tạo vs Đã giải quyết", diff --git a/packages/i18n/src/locales/zh-CN/translations.json b/packages/i18n/src/locales/zh-CN/translations.json index 3f08eec17cc..1d0791c0b2b 100644 --- a/packages/i18n/src/locales/zh-CN/translations.json +++ b/packages/i18n/src/locales/zh-CN/translations.json @@ -1344,6 +1344,17 @@ "project_insights": { "title": "暂无数据", "description": "分配给您的工作项将按状态分类显示在此处。" + }, + "general": { + "title": "跟踪进度、工作量和分配。发现趋势,消除障碍,加速工作进展", + "description": "查看范围与需求、估算和范围蔓延。获取团队成员和团队的性能,确保您的项目按时运行。", + "primary_button": { + "text": "开始您的第一个项目", + "comic": { + "title": "分析功能在周期 + 模块中效果最佳", + "description": "首先,将您的问题在周期中进行时间限制,如果可能的话,将跨越多个周期的问题分组到模块中。在左侧导航中查看这两个功能。" + } + } } }, "created_vs_resolved": "已创建 vs 已解决", diff --git a/packages/i18n/src/locales/zh-TW/translations.json b/packages/i18n/src/locales/zh-TW/translations.json index df2a4ba4a7b..d53667df0e7 100644 --- a/packages/i18n/src/locales/zh-TW/translations.json +++ b/packages/i18n/src/locales/zh-TW/translations.json @@ -1345,6 +1345,17 @@ "project_insights": { "title": "尚無資料", "description": "指派給您的工作項目將依狀態分類顯示在此處。" + }, + "general": { + "title": "追蹤進度、工作量和分配。發現趨勢,消除障礙,加速工作進展", + "description": "查看範圍與需求、估算和範圍蔓延。獲取團隊成員和團隊的績效,確保您的專案按時運行。", + "primary_button": { + "text": "開始您的第一個專案", + "comic": { + "title": "分析功能在週期 + 模組中效果最佳", + "description": "首先,將您的問題在週期中進行時間限制,如果可能的話,將跨越多個週期的問題分組到模組中。在左側導覽中查看這兩個功能。" + } + } } }, "created_vs_resolved": "已建立 vs 已解決", From 6f27ec031d3ce481d1587ab0fd35ff5caeeb48c7 Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com> Date: Thu, 3 Jul 2025 14:16:17 +0530 Subject: [PATCH 023/130] [WIKI-466] refactor: remove rich text read only editor (#7241) * refactor: remove rich text read only editor * fix: type imports --- apps/space/core/components/editor/index.ts | 2 +- .../components/editor/rich-text-editor.tsx | 25 ++-- .../editor/rich-text-read-only-editor.tsx | 48 -------- .../issues/peek-overview/issue-details.tsx | 5 +- .../pages/editor/ai/ask-pi-menu.tsx | 5 +- .../ce/components/pages/editor/ai/menu.tsx | 5 +- .../core/description-versions/modal.tsx | 9 +- .../core/modals/gpt-assistant-popover.tsx | 17 +-- .../editor/rich-text-editor/index.ts | 1 - .../rich-text-editor/rich-text-editor.tsx | 30 +++-- .../rich-text-read-only-editor.tsx | 59 --------- .../modals/create-modal/issue-description.tsx | 1 + .../components/issues/description-input.tsx | 113 ++++++++---------- .../components/description-editor.tsx | 7 +- .../profile/activity/activity-list.tsx | 5 +- .../activity/profile-activity-list.tsx | 7 +- .../components/editors/editor-wrapper.tsx | 4 +- .../components/editors/lite-text/editor.tsx | 2 +- .../components/editors/rich-text/index.ts | 1 - .../editors/rich-text/read-only-editor.tsx | 33 ----- packages/editor/src/core/types/editor.ts | 8 +- packages/editor/src/index.ts | 1 - 22 files changed, 126 insertions(+), 262 deletions(-) delete mode 100644 apps/space/core/components/editor/rich-text-read-only-editor.tsx delete mode 100644 apps/web/core/components/editor/rich-text-editor/rich-text-read-only-editor.tsx delete mode 100644 packages/editor/src/core/components/editors/rich-text/read-only-editor.tsx diff --git a/apps/space/core/components/editor/index.ts b/apps/space/core/components/editor/index.ts index 894daf22411..de164c8376d 100644 --- a/apps/space/core/components/editor/index.ts +++ b/apps/space/core/components/editor/index.ts @@ -1,5 +1,5 @@ export * from "./embeds"; export * from "./lite-text-editor"; export * from "./lite-text-read-only-editor"; -export * from "./rich-text-read-only-editor"; +export * from "./rich-text-editor"; export * from "./toolbar"; diff --git a/apps/space/core/components/editor/rich-text-editor.tsx b/apps/space/core/components/editor/rich-text-editor.tsx index 63320cd2c79..7a9178f65b6 100644 --- a/apps/space/core/components/editor/rich-text-editor.tsx +++ b/apps/space/core/components/editor/rich-text-editor.tsx @@ -9,18 +9,24 @@ import { getEditorFileHandlers } from "@/helpers/editor.helper"; // store hooks import { useMember } from "@/hooks/store"; -interface RichTextEditorWrapperProps - extends MakeOptional< - Omit, - "disabledExtensions" | "flaggedExtensions" - > { +type RichTextEditorWrapperProps = MakeOptional< + Omit, + "disabledExtensions" | "flaggedExtensions" +> & { anchor: string; - uploadFile: TFileHandler["upload"]; workspaceId: string; -} +} & ( + | { + editable: false; + } + | { + editable: true; + uploadFile: TFileHandler["upload"]; + } + ); export const RichTextEditor = forwardRef((props, ref) => { - const { anchor, containerClassName, uploadFile, workspaceId, disabledExtensions, flaggedExtensions, ...rest } = props; + const { anchor, containerClassName, editable, workspaceId, disabledExtensions, flaggedExtensions, ...rest } = props; const { getMemberById } = useMember(); return ( "", workspaceId, })} flaggedExtensions={flaggedExtensions ?? []} diff --git a/apps/space/core/components/editor/rich-text-read-only-editor.tsx b/apps/space/core/components/editor/rich-text-read-only-editor.tsx deleted file mode 100644 index dd9d371901c..00000000000 --- a/apps/space/core/components/editor/rich-text-read-only-editor.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from "react"; -// plane imports -import { EditorReadOnlyRefApi, IRichTextReadOnlyEditorProps, RichTextReadOnlyEditorWithRef } from "@plane/editor"; -import { MakeOptional } from "@plane/types"; -import { cn } from "@plane/utils"; -// components -import { EditorMentionsRoot } from "@/components/editor"; -// helpers -import { getReadOnlyEditorFileHandlers } from "@/helpers/editor.helper"; -// store hooks -import { useMember } from "@/hooks/store"; - -type RichTextReadOnlyEditorWrapperProps = MakeOptional< - Omit, - "disabledExtensions" | "flaggedExtensions" -> & { - anchor: string; - workspaceId: string; -}; - -export const RichTextReadOnlyEditor = React.forwardRef( - ({ anchor, workspaceId, disabledExtensions, flaggedExtensions, ...props }, ref) => { - const { getMemberById } = useMember(); - - return ( - , - getMentionedEntityDetails: (id: string) => ({ - display_name: getMemberById(id)?.member__display_name ?? "", - }), - }} - {...props} - // overriding the customClassName to add relative class passed - containerClassName={cn("relative p-0 border-none", props.containerClassName)} - /> - ); - } -); - -RichTextReadOnlyEditor.displayName = "RichTextReadOnlyEditor"; diff --git a/apps/space/core/components/issues/peek-overview/issue-details.tsx b/apps/space/core/components/issues/peek-overview/issue-details.tsx index 32bcbc9bdd1..ad79dfde6e2 100644 --- a/apps/space/core/components/issues/peek-overview/issue-details.tsx +++ b/apps/space/core/components/issues/peek-overview/issue-details.tsx @@ -1,6 +1,6 @@ import { observer } from "mobx-react"; // components -import { RichTextReadOnlyEditor } from "@/components/editor"; +import { RichTextEditor } from "@/components/editor"; import { IssueReactions } from "@/components/issues/peek-overview"; import { usePublish } from "@/hooks/store"; // types @@ -25,7 +25,8 @@ export const PeekOverviewIssueDetails: React.FC = observer((props) => {

    {issueDetails.name}

    {description !== "" && description !== "

    " && ( - = (props) => { {response ? (
    - = (props) => { {response ? (
    - = observer((props) => { workspaceSlug, } = props; // refs - const editorRef = useRef(null); + const editorRef = useRef(null); // store hooks const { getUserDetails } = useMember(); const { getWorkspaceBySlug } = useWorkspace(); @@ -131,7 +131,8 @@ export const DescriptionVersionsModal: React.FC = observer((props) => { {/* Version description */}
    {activeVersionDescription ? ( - = (props) => { const [referenceElement, setReferenceElement] = useState(null); const [popperElement, setPopperElement] = useState(null); // refs - const editorRef = useRef(null); - const responseRef = useRef(null); + const editorRef = useRef(null); + const responseRef = useRef(null); // popper const { styles, attributes } = usePopper(referenceElement, popperElement, { placement: placement ?? "auto", @@ -217,7 +216,8 @@ export const GptAssistantPopover: React.FC = (props) => { {prompt && (
    Content: - = (props) => { {response !== "" && (
    Response: - ${response}

    `} ref={responseRef} diff --git a/apps/web/core/components/editor/rich-text-editor/index.ts b/apps/web/core/components/editor/rich-text-editor/index.ts index f185d0054e8..49fdb69dd1c 100644 --- a/apps/web/core/components/editor/rich-text-editor/index.ts +++ b/apps/web/core/components/editor/rich-text-editor/index.ts @@ -1,2 +1 @@ export * from "./rich-text-editor"; -export * from "./rich-text-read-only-editor"; diff --git a/apps/web/core/components/editor/rich-text-editor/rich-text-editor.tsx b/apps/web/core/components/editor/rich-text-editor/rich-text-editor.tsx index fdb5a3bfd5c..7349bfe48db 100644 --- a/apps/web/core/components/editor/rich-text-editor/rich-text-editor.tsx +++ b/apps/web/core/components/editor/rich-text-editor/rich-text-editor.tsx @@ -13,26 +13,31 @@ import { useMember } from "@/hooks/store"; // plane web hooks import { useEditorFlagging } from "@/plane-web/hooks/use-editor-flagging"; -interface RichTextEditorWrapperProps - extends MakeOptional< - Omit, - "disabledExtensions" | "flaggedExtensions" - > { - searchMentionCallback: (payload: TSearchEntityRequestPayload) => Promise; +type RichTextEditorWrapperProps = MakeOptional< + Omit, + "disabledExtensions" | "editable" | "flaggedExtensions" +> & { workspaceSlug: string; workspaceId: string; projectId?: string; - uploadFile: TFileHandler["upload"]; -} +} & ( + | { + editable: false; + } + | { + editable: true; + searchMentionCallback: (payload: TSearchEntityRequestPayload) => Promise; + uploadFile: TFileHandler["upload"]; + } + ); export const RichTextEditor = forwardRef((props, ref) => { const { containerClassName, + editable, workspaceSlug, workspaceId, projectId, - searchMentionCallback, - uploadFile, disabledExtensions: additionalDisabledExtensions, ...rest } = props; @@ -42,7 +47,7 @@ export const RichTextEditor = forwardRef await searchMentionCallback(payload), + searchEntity: editable ? async (payload) => await props.searchMentionCallback(payload) : async () => ({}), }); // editor config const { getEditorFileHandlers } = useEditorConfig(); @@ -51,10 +56,11 @@ export const RichTextEditor = forwardRef "", workspaceId, workspaceSlug, })} diff --git a/apps/web/core/components/editor/rich-text-editor/rich-text-read-only-editor.tsx b/apps/web/core/components/editor/rich-text-editor/rich-text-read-only-editor.tsx deleted file mode 100644 index b89804e015f..00000000000 --- a/apps/web/core/components/editor/rich-text-editor/rich-text-read-only-editor.tsx +++ /dev/null @@ -1,59 +0,0 @@ -"use client"; - -import React from "react"; -// plane imports -import { EditorReadOnlyRefApi, IRichTextReadOnlyEditorProps, RichTextReadOnlyEditorWithRef } from "@plane/editor"; -import { MakeOptional } from "@plane/types"; -// components -import { cn } from "@plane/utils"; -import { EditorMentionsRoot } from "@/components/editor"; -// helpers -// hooks -import { useEditorConfig } from "@/hooks/editor"; -// store hooks -import { useMember } from "@/hooks/store"; -// plane web hooks -import { useEditorFlagging } from "@/plane-web/hooks/use-editor-flagging"; - -type RichTextReadOnlyEditorWrapperProps = MakeOptional< - Omit, - "disabledExtensions" | "flaggedExtensions" -> & { - workspaceId: string; - workspaceSlug: string; - projectId?: string; -}; - -export const RichTextReadOnlyEditor = React.forwardRef( - ({ workspaceId, workspaceSlug, projectId, disabledExtensions: additionalDisabledExtensions, ...props }, ref) => { - // store hooks - const { getUserDetails } = useMember(); - - // editor flaggings - const { richText: richTextEditorExtensions } = useEditorFlagging(workspaceSlug?.toString()); - // editor config - const { getReadOnlyEditorFileHandlers } = useEditorConfig(); - - return ( - , - getMentionedEntityDetails: (id: string) => ({ display_name: getUserDetails(id)?.display_name ?? "" }), - }} - {...props} - // overriding the containerClassName to add relative class passed - containerClassName={cn(props.containerClassName, "relative pl-3")} - /> - ); - } -); - -RichTextReadOnlyEditor.displayName = "RichTextReadOnlyEditor"; diff --git a/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx b/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx index c116d0cef20..907f48e700f 100644 --- a/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx +++ b/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx @@ -62,6 +62,7 @@ export const InboxIssueDescription: FC = observer((props return (

    " : data?.description_html} ref={editorRef} diff --git a/apps/web/core/components/issues/description-input.tsx b/apps/web/core/components/issues/description-input.tsx index b8f7b00e977..10d0dfac8ba 100644 --- a/apps/web/core/components/issues/description-input.tsx +++ b/apps/web/core/components/issues/description-input.tsx @@ -5,13 +5,13 @@ import debounce from "lodash/debounce"; import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; // plane imports -import { EditorReadOnlyRefApi, EditorRefApi } from "@plane/editor"; +import type { EditorRefApi } from "@plane/editor"; import { useTranslation } from "@plane/i18n"; import { EFileAssetType, TIssue, TNameDescriptionLoader } from "@plane/types"; import { Loader } from "@plane/ui"; // components import { getDescriptionPlaceholderI18n } from "@plane/utils"; -import { RichTextEditor, RichTextReadOnlyEditor } from "@/components/editor"; +import { RichTextEditor } from "@/components/editor"; import { TIssueOperations } from "@/components/issues/issue-detail"; // helpers // hooks @@ -22,7 +22,6 @@ const workspaceService = new WorkspaceService(); export type IssueDescriptionInputProps = { containerClassName?: string; - editorReadOnlyRef?: React.RefObject; editorRef?: React.RefObject; workspaceSlug: string; projectId: string; @@ -38,7 +37,6 @@ export type IssueDescriptionInputProps = { export const IssueDescriptionInput: FC = observer((props) => { const { containerClassName, - editorReadOnlyRef, editorRef, workspaceSlug, projectId, @@ -109,66 +107,55 @@ export const IssueDescriptionInput: FC = observer((p - !disabled ? ( -

    "} - value={swrIssueDescription ?? null} - workspaceSlug={workspaceSlug} - workspaceId={workspaceId} - projectId={projectId} - dragDropEnabled - onChange={(_description: object, description_html: string) => { - setIsSubmitting("submitting"); - onChange(description_html); - debouncedFormSave(); - }} - placeholder={ - placeholder - ? placeholder - : (isFocused, value) => t(`${getDescriptionPlaceholderI18n(isFocused, value)}`) + render={({ field: { onChange } }) => ( +

    "} + value={swrIssueDescription ?? null} + workspaceSlug={workspaceSlug} + workspaceId={workspaceId} + projectId={projectId} + dragDropEnabled + onChange={(_description: object, description_html: string) => { + setIsSubmitting("submitting"); + onChange(description_html); + debouncedFormSave(); + }} + placeholder={ + placeholder + ? placeholder + : (isFocused, value) => t(`${getDescriptionPlaceholderI18n(isFocused, value)}`) + } + searchMentionCallback={async (payload) => + await workspaceService.searchEntity(workspaceSlug?.toString() ?? "", { + ...payload, + project_id: projectId?.toString() ?? "", + issue_id: issueId?.toString(), + }) + } + containerClassName={containerClassName} + uploadFile={async (blockId, file) => { + try { + const { asset_id } = await uploadEditorAsset({ + blockId, + data: { + entity_identifier: issueId, + entity_type: EFileAssetType.ISSUE_DESCRIPTION, + }, + file, + projectId, + workspaceSlug, + }); + return asset_id; + } catch (error) { + console.log("Error in uploading work item asset:", error); + throw new Error("Asset upload failed. Please try again later."); } - searchMentionCallback={async (payload) => - await workspaceService.searchEntity(workspaceSlug?.toString() ?? "", { - ...payload, - project_id: projectId?.toString() ?? "", - issue_id: issueId?.toString(), - }) - } - containerClassName={containerClassName} - uploadFile={async (blockId, file) => { - try { - const { asset_id } = await uploadEditorAsset({ - blockId, - data: { - entity_identifier: issueId, - entity_type: EFileAssetType.ISSUE_DESCRIPTION, - }, - file, - projectId, - workspaceSlug, - }); - return asset_id; - } catch (error) { - console.log("Error in uploading work item asset:", error); - throw new Error("Asset upload failed. Please try again later."); - } - }} - ref={editorRef} - /> - ) : ( - - ) - } + }} + ref={editorRef} + /> + )} /> ) : ( diff --git a/apps/web/core/components/issues/issue-modal/components/description-editor.tsx b/apps/web/core/components/issues/issue-modal/components/description-editor.tsx index 2540756a87d..8e0bc68f531 100644 --- a/apps/web/core/components/issues/issue-modal/components/description-editor.tsx +++ b/apps/web/core/components/issues/issue-modal/components/description-editor.tsx @@ -6,13 +6,9 @@ import { Control, Controller } from "react-hook-form"; import { Sparkle } from "lucide-react"; // plane imports import { ETabIndices } from "@plane/constants"; -// editor -import { EditorRefApi } from "@plane/editor"; -// i18n +import type { EditorRefApi } from "@plane/editor"; import { useTranslation } from "@plane/i18n"; -// types import { EFileAssetType, TIssue } from "@plane/types"; -// ui import { Loader, setToast, TOAST_TYPE } from "@plane/ui"; import { getDescriptionPlaceholderI18n, getTabIndex } from "@plane/utils"; // components @@ -177,6 +173,7 @@ export const IssueDescriptionEditor: React.FC = ob control={control} render={({ field: { value, onChange } }) => ( = observer((props) => {

    - = observer((props) => {

    - React.ReactNode; + editable: boolean; extensions: Extensions; }; @@ -21,6 +22,7 @@ export const EditorWrapper: React.FC = (props) => { containerClassName, disabledExtensions, displayConfig = DEFAULT_DISPLAY_CONFIG, + editable, editorClassName = "", extensions, id, @@ -39,7 +41,7 @@ export const EditorWrapper: React.FC = (props) => { } = props; const editor = useEditor({ - editable: true, + editable, disabledExtensions, editorClassName, enableHistory: true, diff --git a/packages/editor/src/core/components/editors/lite-text/editor.tsx b/packages/editor/src/core/components/editors/lite-text/editor.tsx index df89521ae68..66913057b8b 100644 --- a/packages/editor/src/core/components/editors/lite-text/editor.tsx +++ b/packages/editor/src/core/components/editors/lite-text/editor.tsx @@ -19,7 +19,7 @@ const LiteTextEditor: React.FC = (props) => { return resolvedExtensions; }, [externalExtensions, disabledExtensions, onEnterKeyPress]); - return ; + return ; }; const LiteTextEditorWithRef = forwardRef((props, ref) => ( diff --git a/packages/editor/src/core/components/editors/rich-text/index.ts b/packages/editor/src/core/components/editors/rich-text/index.ts index b2ba8682a3c..8b1fd904bb0 100644 --- a/packages/editor/src/core/components/editors/rich-text/index.ts +++ b/packages/editor/src/core/components/editors/rich-text/index.ts @@ -1,2 +1 @@ export * from "./editor"; -export * from "./read-only-editor"; diff --git a/packages/editor/src/core/components/editors/rich-text/read-only-editor.tsx b/packages/editor/src/core/components/editors/rich-text/read-only-editor.tsx deleted file mode 100644 index efad3d6ac1b..00000000000 --- a/packages/editor/src/core/components/editors/rich-text/read-only-editor.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { forwardRef, useCallback } from "react"; -// plane editor extensions -import { RichTextReadOnlyEditorAdditionalExtensions } from "@/plane-editor/extensions/rich-text/read-only-extensions"; -// types -import { EditorReadOnlyRefApi, IRichTextReadOnlyEditorProps } from "@/types"; -// local imports -import { ReadOnlyEditorWrapper } from "../read-only-editor-wrapper"; - -const RichTextReadOnlyEditorWithRef = forwardRef((props, ref) => { - const { disabledExtensions, fileHandler, flaggedExtensions } = props; - - const getExtensions = useCallback(() => { - const extensions = RichTextReadOnlyEditorAdditionalExtensions({ - disabledExtensions, - fileHandler, - flaggedExtensions, - }); - - return extensions; - }, [disabledExtensions, fileHandler, flaggedExtensions]); - - return ( - } - /> - ); -}); - -RichTextReadOnlyEditorWithRef.displayName = "RichReadOnlyEditorWithRef"; - -export { RichTextReadOnlyEditorWithRef }; diff --git a/packages/editor/src/core/types/editor.ts b/packages/editor/src/core/types/editor.ts index 129e8cd0b14..d4d572502fe 100644 --- a/packages/editor/src/core/types/editor.ts +++ b/packages/editor/src/core/types/editor.ts @@ -143,9 +143,11 @@ export interface IEditorProps { } export type ILiteTextEditorProps = IEditorProps; -export interface IRichTextEditorProps extends IEditorProps { + +export type IRichTextEditorProps = IEditorProps & { dragDropEnabled?: boolean; -} + editable: boolean; +}; export interface ICollaborativeDocumentEditorProps extends Omit { @@ -178,8 +180,6 @@ export interface IReadOnlyEditorProps export type ILiteTextReadOnlyEditorProps = IReadOnlyEditorProps; -export type IRichTextReadOnlyEditorProps = IReadOnlyEditorProps; - export interface IDocumentReadOnlyEditorProps extends IReadOnlyEditorProps { embedHandler: TEmbedConfig; } diff --git a/packages/editor/src/index.ts b/packages/editor/src/index.ts index 43b295647a1..5484d0affaf 100644 --- a/packages/editor/src/index.ts +++ b/packages/editor/src/index.ts @@ -13,7 +13,6 @@ export { LiteTextEditorWithRef, LiteTextReadOnlyEditorWithRef, RichTextEditorWithRef, - RichTextReadOnlyEditorWithRef, } from "@/components/editors"; export { isCellSelection } from "@/extensions/table/table/utilities/is-cell-selection"; From 75235f2ad5aa908c02d03cdb8edb032881131015 Mon Sep 17 00:00:00 2001 From: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com> Date: Thu, 3 Jul 2025 15:05:13 +0530 Subject: [PATCH 024/130] [WEB-4432] fix: webhooks translation #7332 --- apps/web/core/components/web-hooks/form/secret-key.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/apps/web/core/components/web-hooks/form/secret-key.tsx b/apps/web/core/components/web-hooks/form/secret-key.tsx index 0853595c4b1..e6197507860 100644 --- a/apps/web/core/components/web-hooks/form/secret-key.tsx +++ b/apps/web/core/components/web-hooks/form/secret-key.tsx @@ -96,12 +96,10 @@ export const WebhookSecretKey: FC = observer((props) => { {(data || webhookSecretKey) && (
    {webhookId && ( -
    - {t("workspace_settings.settings.webhooks.modal.secret_key.title")} -
    +
    {t("workspace_settings.settings.webhooks.secret_key.title")}
    )}
    - {t("workspace_settings.settings.webhooks.modal.secret_key.message")} + {t("workspace_settings.settings.webhooks.secret_key.message")}
    From 59919d3874b8f9abf64b3fc3988d9f3a1677b2c2 Mon Sep 17 00:00:00 2001 From: Bavisetti Narayan <72156168+NarayanBavisetti@users.noreply.github.com> Date: Thu, 3 Jul 2025 15:06:11 +0530 Subject: [PATCH 025/130] [WEB-4435] bug: trigger event for work item comment #7331 --- apps/server/plane/api/views/issue.py | 20 +++++++++++++++++++ apps/server/plane/app/views/issue/comment.py | 21 ++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/apps/server/plane/api/views/issue.py b/apps/server/plane/api/views/issue.py index 9e8579526f7..7ba8cb2537b 100644 --- a/apps/server/plane/api/views/issue.py +++ b/apps/server/plane/api/views/issue.py @@ -857,6 +857,16 @@ def post(self, request, slug, project_id, issue_id): current_instance=None, epoch=int(timezone.now().timestamp()), ) + # Send the model activity + model_activity.delay( + model_name="issue_comment", + model_id=str(serializer.data["id"]), + requested_data=request.data, + current_instance=None, + actor_id=request.user.id, + slug=slug, + origin=base_host(request=request, is_app=True), + ) return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @@ -904,6 +914,16 @@ def patch(self, request, slug, project_id, issue_id, pk): current_instance=current_instance, epoch=int(timezone.now().timestamp()), ) + # Send the model activity + model_activity.delay( + model_name="issue_comment", + model_id=str(pk), + requested_data=request.data, + current_instance=current_instance, + actor_id=request.user.id, + slug=slug, + origin=base_host(request=request, is_app=True), + ) return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) diff --git a/apps/server/plane/app/views/issue/comment.py b/apps/server/plane/app/views/issue/comment.py index c848b6fcf94..3dbe55eb606 100644 --- a/apps/server/plane/app/views/issue/comment.py +++ b/apps/server/plane/app/views/issue/comment.py @@ -18,6 +18,7 @@ from plane.db.models import IssueComment, ProjectMember, CommentReaction, Project, Issue from plane.bgtasks.issue_activities_task import issue_activity from plane.utils.host import base_host +from plane.bgtasks.webhook_task import model_activity class IssueCommentViewSet(BaseViewSet): @@ -90,6 +91,16 @@ def create(self, request, slug, project_id, issue_id): notification=True, origin=base_host(request=request, is_app=True), ) + # Send the model activity + model_activity.delay( + model_name="issue_comment", + model_id=str(serializer.data["id"]), + requested_data=request.data, + current_instance=None, + actor_id=request.user.id, + slug=slug, + origin=base_host(request=request, is_app=True), + ) return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @@ -124,6 +135,16 @@ def partial_update(self, request, slug, project_id, issue_id, pk): notification=True, origin=base_host(request=request, is_app=True), ) + # Send the model activity + model_activity.delay( + model_name="issue_comment", + model_id=str(pk), + requested_data=request.data, + current_instance=current_instance, + actor_id=request.user.id, + slug=slug, + origin=base_host(request=request, is_app=True), + ) return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) From 1de95ef0d021e33685d6fb13a5452e78fa8962fe Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Thu, 3 Jul 2025 18:38:15 +0530 Subject: [PATCH 026/130] feat: optimize docker builds for live server (#7334) * feat: optimize docker builds for live server * chore: removed package.json from dockerfile --- apps/live/Dockerfile.live | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/apps/live/Dockerfile.live b/apps/live/Dockerfile.live index ae9eba9d14e..5bec2624cc9 100644 --- a/apps/live/Dockerfile.live +++ b/apps/live/Dockerfile.live @@ -2,6 +2,9 @@ FROM node:20-alpine AS base # The web Dockerfile is copy-pasted into our main docs at /docs/handbook/deploying-with-docker. # Make sure you update this Dockerfile, the Dockerfile in the web workspace and copy that over to Dockerfile in the docs. +# ***************************************************************************** +# STAGE 1: Prune the project +# ***************************************************************************** FROM base AS builder # Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. RUN apk update @@ -12,6 +15,9 @@ RUN yarn global add turbo COPY . . RUN turbo prune live --docker +# ***************************************************************************** +# STAGE 2: Install dependencies & build the project +# ***************************************************************************** # Add lockfile and package.json's of isolated subworkspace FROM base AS installer RUN apk update @@ -28,16 +34,21 @@ RUN yarn install COPY --from=builder /app/out/full/ . COPY turbo.json turbo.json -ENV TURBO_TELEMETRY_DISABLED 1 +ENV TURBO_TELEMETRY_DISABLED=1 RUN yarn turbo build --filter=live +# ***************************************************************************** +# STAGE 3: Run the project +# ***************************************************************************** + FROM base AS runner WORKDIR /app -COPY --from=installer /app . -# COPY --from=installer /app/live/node_modules ./node_modules +COPY --from=installer /app/packages ./packages +COPY --from=installer /app/apps/live/dist ./live +COPY --from=installer /app/node_modules ./node_modules -ENV TURBO_TELEMETRY_DISABLED 1 +ENV TURBO_TELEMETRY_DISABLED=1 EXPOSE 3000 From 805cfed1a3e3b5afbecfbc4ce97602974856384e Mon Sep 17 00:00:00 2001 From: Nikhil <118773738+pablohashescobar@users.noreply.github.com> Date: Thu, 3 Jul 2025 18:42:14 +0530 Subject: [PATCH 027/130] refactor: update paths and structure for server services in Docker and documentation (#7333) - Changed references from 'apiserver' to 'apps/server' in Docker configurations and environment setup. - Updated contributing documentation to reflect the new service structure. - Adjusted setup script to accommodate the new directory layout. - Removed obsolete files related to the previous structure. --- .github/workflows/build-test-pull-request.yml | 10 +-- CONTRIBUTING.md | 87 +++++++++++-------- ENV_SETUP.md | 22 ++--- aio/Dockerfile-app | 12 +-- apps/server/Procfile | 3 - apps/server/runtime.txt | 1 - deploy/selfhost/build.yml | 2 +- docker-compose-local.yml | 24 ++--- docker-compose.yml | 16 ++-- heroku.yml | 3 - setup.sh | 19 ++-- 11 files changed, 105 insertions(+), 94 deletions(-) delete mode 100644 apps/server/Procfile delete mode 100644 apps/server/runtime.txt delete mode 100644 heroku.yml diff --git a/.github/workflows/build-test-pull-request.yml b/.github/workflows/build-test-pull-request.yml index 227425c8f14..acbd9d26eb2 100644 --- a/.github/workflows/build-test-pull-request.yml +++ b/.github/workflows/build-test-pull-request.yml @@ -6,7 +6,7 @@ on: types: ["opened", "synchronize", "ready_for_review"] jobs: - lint-apiserver: + lint-server: if: github.event.pull_request.draft == false runs-on: ubuntu-latest steps: @@ -17,10 +17,10 @@ jobs: python-version: "3.x" # Specify the Python version you need - name: Install Pylint run: python -m pip install ruff - - name: Install Apiserver Dependencies - run: cd apiserver && pip install -r requirements.txt - - name: Lint apiserver - run: ruff check --fix apiserver + - name: Install Server Dependencies + run: cd apps/server && pip install -r requirements.txt + - name: Lint apps/server + run: ruff check --fix apps/server lint-admin: if: github.event.pull_request.draft == false diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4a156752086..01a4ff5ad58 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,6 +25,7 @@ When opening a new issue, please use a clear and concise title that follows this - For documentation: `📘 Docs: [short description]` **Examples:** + - `🐛 Bug: API token expiry time not saving correctly` - `📘 Docs: Clarify RAM requirement for local setup` - `🚀 Feature: Allow custom time selection for token expiration` @@ -47,7 +48,7 @@ This helps us triage and manage issues more efficiently. The project is a monorepo, with backend api and frontend in a single repo. -The backend is a django project which is kept inside apiserver +The backend is a django project which is kept inside apps/server 1. Clone the repo @@ -105,11 +106,13 @@ To ensure consistency throughout the source code, please keep these rules in min - **Improve documentation** - fix incomplete or missing [docs](https://docs.plane.so/), bad wording, examples or explanations. ## Contributing to language support + This guide is designed to help contributors understand how to add or update translations in the application. ### Understanding translation structure #### File organization + Translations are organized by language in the locales directory. Each language has its own folder containing JSON files for translations. Here's how it looks: ``` @@ -122,7 +125,9 @@ packages/i18n/src/locales/ └── [language]/ └── translations.json ``` + #### Nested structure + To keep translations organized, we use a nested structure for keys. This makes it easier to manage and locate specific translations. For example: ```json @@ -137,32 +142,37 @@ To keep translations organized, we use a nested structure for keys. This makes i ``` ### Translation formatting guide + We use [IntlMessageFormat](https://formatjs.github.io/docs/intl-messageformat/) to handle dynamic content, such as variables and pluralization. Here's how to format your translations: #### Examples + - **Simple variables** - ```json - { + + ```json + { "greeting": "Hello, {name}!" - } - ``` + } + ``` - **Pluralization** - ```json - { + ```json + { "items": "{count, plural, one {Work item} other {Work items}}" - } - ``` + } + ``` ### Contributing guidelines #### Updating existing translations + 1. Locate the key in `locales//translations.json`. 2. Update the value while ensuring the key structure remains intact. 3. Preserve any existing ICU formats (e.g., variables, pluralization). #### Adding new translation keys + 1. When introducing a new key, ensure it is added to **all** language files, even if translations are not immediately available. Use English as a placeholder if needed. 2. Keep the nesting structure consistent across all languages. @@ -170,48 +180,50 @@ We use [IntlMessageFormat](https://formatjs.github.io/docs/intl-messageformat/) 3. If the new key requires dynamic content (e.g., variables or pluralization), ensure the ICU format is applied uniformly across all languages. ### Adding new languages + Adding a new language involves several steps to ensure it integrates seamlessly with the project. Follow these instructions carefully: -1. **Update type definitions** -Add the new language to the TLanguage type in the language definitions file: +1. **Update type definitions** + Add the new language to the TLanguage type in the language definitions file: - ```typescript - // types/language.ts - export type TLanguage = "en" | "fr" | "your-lang"; - ``` + ```typescript + // types/language.ts + export type TLanguage = "en" | "fr" | "your-lang"; + ``` -2. **Add language configuration** -Include the new language in the list of supported languages: +2. **Add language configuration** + Include the new language in the list of supported languages: - ```typescript - // constants/language.ts - export const SUPPORTED_LANGUAGES: ILanguageOption[] = [ - { label: "English", value: "en" }, - { label: "Your Language", value: "your-lang" } - ]; - ``` + ```typescript + // constants/language.ts + export const SUPPORTED_LANGUAGES: ILanguageOption[] = [ + { label: "English", value: "en" }, + { label: "Your Language", value: "your-lang" } + ]; + ``` -3. **Create translation files** - 1. Create a new folder for your language under locales (e.g., `locales/your-lang/`). +3. **Create translation files** + 1. Create a new folder for your language under locales (e.g., `locales/your-lang/`). 2. Add a `translations.json` file inside the folder. 3. Copy the structure from an existing translation file and translate all keys. -4. **Update import logic** -Modify the language import logic to include your new language: +4. **Update import logic** + Modify the language import logic to include your new language: - ```typescript - private importLanguageFile(language: TLanguage): Promise { - switch (language) { - case "your-lang": - return import("../locales/your-lang/translations.json"); - // ... - } - } - ``` + ```typescript + private importLanguageFile(language: TLanguage): Promise { + switch (language) { + case "your-lang": + return import("../locales/your-lang/translations.json"); + // ... + } + } + ``` ### Quality checklist + Before submitting your contribution, please ensure the following: - All translation keys exist in every language file. @@ -222,6 +234,7 @@ Before submitting your contribution, please ensure the following: - There are no missing or untranslated keys. #### Pro tips + - When in doubt, refer to the English translations for context. - Verify pluralization works with different numbers. - Ensure dynamic values (e.g., `{name}`) are correctly interpolated. diff --git a/ENV_SETUP.md b/ENV_SETUP.md index 775d6a55f4e..54e0415a5f0 100644 --- a/ENV_SETUP.md +++ b/ENV_SETUP.md @@ -36,7 +36,7 @@ USE_MINIO=1 NGINX_PORT=80 ``` -## {PROJECT_FOLDER}/apiserver/.env +## {PROJECT_FOLDER}/apps/server/.env ``` # Backend @@ -63,8 +63,6 @@ AWS_S3_ENDPOINT_URL="http://plane-minio:9000" AWS_S3_BUCKET_NAME="uploads" # Maximum file upload limit FILE_SIZE_LIMIT=5242880 -# Settings related to Docker -DOCKERIZED=1 # deprecated # set to 1 If using the pre-configured minio setup USE_MINIO=1 # Nginx Configuration @@ -78,11 +76,15 @@ ADMIN_BASE_URL= SPACE_BASE_URL= APP_BASE_URL= SECRET_KEY="gxoytl7dmnc1y37zahah820z5iq3iozu38cnfjtu3yaau9cd9z" +# RabbitMQ Settings +RABBITMQ_HOST="plane-mq" +RABBITMQ_PORT="5672" +RABBITMQ_USER="plane" +RABBITMQ_PASSWORD="plane" +RABBITMQ_VHOST="plane" +AMQP_URL="" +# Authentication Settings +ENABLE_SIGNUP=1 +ENABLE_EMAIL_PASSWORD=1 +ENABLE_MAGIC_LINK_LOGIN=0 ``` - -## Updates​ - -- The naming convention for containers and images has been updated. -- The plane-worker image will no longer be maintained, as it has been merged with plane-backend. -- The Tiptap pro-extension dependency has been removed, eliminating the need for Tiptap API keys. -- The image name for Plane deployment has been changed to plane-space. diff --git a/aio/Dockerfile-app b/aio/Dockerfile-app index 7ffe3f803bc..b209ce70e4c 100644 --- a/aio/Dockerfile-app +++ b/aio/Dockerfile-app @@ -70,18 +70,18 @@ ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV PIP_DISABLE_PIP_VERSION_CHECK=1 -COPY apiserver/requirements.txt ./api/ -COPY apiserver/requirements ./api/requirements +COPY apps/server/requirements.txt ./api/ +COPY apps/server/requirements ./api/requirements RUN pip install -r ./api/requirements.txt --compile --no-cache-dir # Add in Django deps and generate Django's static files -COPY apiserver/manage.py ./api/manage.py -COPY apiserver/plane ./api/plane/ -COPY apiserver/templates ./api/templates/ +COPY apps/server/manage.py ./api/manage.py +COPY apps/server/plane ./api/plane/ +COPY apps/server/templates ./api/templates/ COPY package.json ./api/package.json -COPY apiserver/bin ./api/bin/ +COPY apps/server/bin ./api/bin/ RUN chmod +x ./api/bin/* RUN chmod -R 777 ./api/ diff --git a/apps/server/Procfile b/apps/server/Procfile deleted file mode 100644 index 63736e8e8a8..00000000000 --- a/apps/server/Procfile +++ /dev/null @@ -1,3 +0,0 @@ -web: gunicorn -w 4 -k uvicorn.workers.UvicornWorker plane.asgi:application --bind 0.0.0.0:$PORT --max-requests 10000 --max-requests-jitter 1000 --access-logfile - -worker: celery -A plane worker -l info -beat: celery -A plane beat -l INFO \ No newline at end of file diff --git a/apps/server/runtime.txt b/apps/server/runtime.txt deleted file mode 100644 index 4937ae149ab..00000000000 --- a/apps/server/runtime.txt +++ /dev/null @@ -1 +0,0 @@ -python-3.12.6 \ No newline at end of file diff --git a/deploy/selfhost/build.yml b/deploy/selfhost/build.yml index b65d297e9fd..aa5306fb464 100644 --- a/deploy/selfhost/build.yml +++ b/deploy/selfhost/build.yml @@ -20,7 +20,7 @@ services: api: image: ${DOCKERHUB_USER:-local}/plane-backend:${APP_RELEASE:-latest} build: - context: ./apiserver + context: ./apps/server dockerfile: ./Dockerfile.api proxy: diff --git a/docker-compose-local.yml b/docker-compose-local.yml index 86457615a9c..257780143ad 100644 --- a/docker-compose-local.yml +++ b/docker-compose-local.yml @@ -122,7 +122,7 @@ services: api: build: - context: ./apiserver + context: ./apps/server dockerfile: Dockerfile.dev args: DOCKER_BUILDKIT: 1 @@ -130,10 +130,10 @@ services: networks: - dev_env volumes: - - ./apiserver:/code + - ./apps/server:/code command: ./bin/docker-entrypoint-api-local.sh env_file: - - ./apiserver/.env + - ./apps/server/.env depends_on: - plane-db - plane-redis @@ -143,7 +143,7 @@ services: worker: build: - context: ./apiserver + context: ./apps/server dockerfile: Dockerfile.dev args: DOCKER_BUILDKIT: 1 @@ -151,10 +151,10 @@ services: networks: - dev_env volumes: - - ./apiserver:/code + - ./apps/server:/code command: ./bin/docker-entrypoint-worker.sh env_file: - - ./apiserver/.env + - ./apps/server/.env depends_on: - api - plane-db @@ -162,7 +162,7 @@ services: beat-worker: build: - context: ./apiserver + context: ./apps/server dockerfile: Dockerfile.dev args: DOCKER_BUILDKIT: 1 @@ -170,10 +170,10 @@ services: networks: - dev_env volumes: - - ./apiserver:/code + - ./apps/server:/code command: ./bin/docker-entrypoint-beat.sh env_file: - - ./apiserver/.env + - ./apps/server/.env depends_on: - api - plane-db @@ -181,7 +181,7 @@ services: migrator: build: - context: ./apiserver + context: ./apps/server dockerfile: Dockerfile.dev args: DOCKER_BUILDKIT: 1 @@ -189,10 +189,10 @@ services: networks: - dev_env volumes: - - ./apiserver:/code + - ./apps/server:/code command: ./bin/docker-entrypoint-migrator.sh --settings=plane.settings.local env_file: - - ./apiserver/.env + - .env depends_on: - plane-db - plane-redis diff --git a/docker-compose.yml b/docker-compose.yml index 861fa9dd89f..184b514c10b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -40,14 +40,14 @@ services: api: container_name: api build: - context: ./apiserver + context: ./apps/server dockerfile: Dockerfile.api args: DOCKER_BUILDKIT: 1 restart: always command: ./bin/docker-entrypoint-api.sh env_file: - - ./apiserver/.env + - ./apps/server/.env depends_on: - plane-db - plane-redis @@ -55,14 +55,14 @@ services: worker: container_name: bgworker build: - context: ./apiserver + context: ./apps/server dockerfile: Dockerfile.api args: DOCKER_BUILDKIT: 1 restart: always command: ./bin/docker-entrypoint-worker.sh env_file: - - ./apiserver/.env + - ./apps/server/.env depends_on: - api - plane-db @@ -71,14 +71,14 @@ services: beat-worker: container_name: beatworker build: - context: ./apiserver + context: ./apps/server dockerfile: Dockerfile.api args: DOCKER_BUILDKIT: 1 restart: always command: ./bin/docker-entrypoint-beat.sh env_file: - - ./apiserver/.env + - ./apps/server/.env depends_on: - api - plane-db @@ -87,14 +87,14 @@ services: migrator: container_name: plane-migrator build: - context: ./apiserver + context: ./apps/server dockerfile: Dockerfile.api args: DOCKER_BUILDKIT: 1 restart: no command: ./bin/docker-entrypoint-migrator.sh env_file: - - ./apiserver/.env + - ./apps/server/.env depends_on: - plane-db - plane-redis diff --git a/heroku.yml b/heroku.yml deleted file mode 100644 index e9d2ac0337c..00000000000 --- a/heroku.yml +++ /dev/null @@ -1,3 +0,0 @@ -build: - docker: - web: deploy/heroku/Dockerfile \ No newline at end of file diff --git a/setup.sh b/setup.sh index c19a29abf96..5d87c844678 100755 --- a/setup.sh +++ b/setup.sh @@ -44,20 +44,23 @@ export LC_CTYPE=C echo -e "${YELLOW}Setting up environment files...${NC}" # Copy all environment example files -services=("" "web" "apiserver" "space" "admin" "live") +services=("" "web" "server" "space" "admin" "live") success=true for service in "${services[@]}"; do - prefix="./" - if [ "$service" != "" ]; then - prefix="./$service/" + if [ "$service" == "" ]; then + # Handle root .env file + prefix="./" + else + # Handle service .env files in apps folder + prefix="./apps/$service/" fi copy_env_file "${prefix}.env.example" "${prefix}.env" || success=false done # Generate SECRET_KEY for Django -if [ -f "./apiserver/.env" ]; then +if [ -f "./apps/server/.env" ]; then echo -e "\n${YELLOW}Generating Django SECRET_KEY...${NC}" SECRET_KEY=$(tr -dc 'a-z0-9' < /dev/urandom | head -c50) @@ -66,11 +69,11 @@ if [ -f "./apiserver/.env" ]; then echo -e "${RED}Ensure 'tr' and 'head' commands are available on your system.${NC}" success=false else - echo -e "SECRET_KEY=\"$SECRET_KEY\"" >> ./apiserver/.env - echo -e "${GREEN}✓${NC} Added SECRET_KEY to apiserver/.env" + echo -e "SECRET_KEY=\"$SECRET_KEY\"" >> ./apps/server/.env + echo -e "${GREEN}✓${NC} Added SECRET_KEY to apps/server/.env" fi else - echo -e "${RED}✗${NC} apiserver/.env not found. SECRET_KEY not added." + echo -e "${RED}✗${NC} apps/server/.env not found. SECRET_KEY not added." success=false fi From f2a87e8f15333e0332be15183a9b556e331ce911 Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Fri, 4 Jul 2025 13:59:14 +0530 Subject: [PATCH 028/130] feat: Adding Docker CMD in all Dockerfiles (#7339) * fix: adding cmd to dockerfiles * fix: adding cmd to live docker file --- apps/admin/Dockerfile.admin | 4 +++- apps/live/Dockerfile.live | 2 ++ apps/server/Dockerfile.api | 2 +- apps/space/Dockerfile.space | 4 +++- apps/web/Dockerfile.web | 4 +++- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/apps/admin/Dockerfile.admin b/apps/admin/Dockerfile.admin index 606d19aec86..07da8088a1c 100644 --- a/apps/admin/Dockerfile.admin +++ b/apps/admin/Dockerfile.admin @@ -89,4 +89,6 @@ ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL ENV NEXT_TELEMETRY_DISABLED=1 ENV TURBO_TELEMETRY_DISABLED=1 -EXPOSE 3000 \ No newline at end of file +EXPOSE 3000 + +CMD ["node", "apps/admin/server.js"] \ No newline at end of file diff --git a/apps/live/Dockerfile.live b/apps/live/Dockerfile.live index 5bec2624cc9..1a22ca18ac4 100644 --- a/apps/live/Dockerfile.live +++ b/apps/live/Dockerfile.live @@ -52,3 +52,5 @@ COPY --from=installer /app/node_modules ./node_modules ENV TURBO_TELEMETRY_DISABLED=1 EXPOSE 3000 + +CMD ["node", "live/server.js"] \ No newline at end of file diff --git a/apps/server/Dockerfile.api b/apps/server/Dockerfile.api index b0fa447885a..9c95f17b1a7 100644 --- a/apps/server/Dockerfile.api +++ b/apps/server/Dockerfile.api @@ -49,4 +49,4 @@ RUN chmod -R 777 /code # Expose container port and run entry point script EXPOSE 8000 - +CMD ["./bin/docker-entrypoint-api.sh"] \ No newline at end of file diff --git a/apps/space/Dockerfile.space b/apps/space/Dockerfile.space index a7633445465..ae7afc2c0d8 100644 --- a/apps/space/Dockerfile.space +++ b/apps/space/Dockerfile.space @@ -89,4 +89,6 @@ ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL ENV NEXT_TELEMETRY_DISABLED=1 ENV TURBO_TELEMETRY_DISABLED=1 -EXPOSE 3000 \ No newline at end of file +EXPOSE 3000 + +CMD ["node", "apps/space/server.js"] \ No newline at end of file diff --git a/apps/web/Dockerfile.web b/apps/web/Dockerfile.web index 40b9bb597da..a09aa640447 100644 --- a/apps/web/Dockerfile.web +++ b/apps/web/Dockerfile.web @@ -106,4 +106,6 @@ ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL ENV NEXT_TELEMETRY_DISABLED=1 ENV TURBO_TELEMETRY_DISABLED=1 -EXPOSE 3000 \ No newline at end of file +EXPOSE 3000 + +CMD ["node", "apps/web/server.js"] \ No newline at end of file From ba884d1e4dccf709d9f88e945a099dcf8b8d7638 Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Fri, 4 Jul 2025 14:23:18 +0530 Subject: [PATCH 029/130] feat: adding standard scripts for lint and format check (#7326) * feat: adding standard scripts for lint and format check * fix: update packages scripts * fix: adding tsup config to utils package * chore: updated build scripts in logger pacakge --- apps/admin/package.json | 9 +++++--- apps/live/package.json | 2 +- apps/space/package.json | 9 +++++--- apps/web/package.json | 12 +++++----- package.json | 5 ++--- packages/constants/package.json | 2 +- packages/decorators/package.json | 8 +++++-- packages/editor/package.json | 10 +++++---- packages/hooks/.eslintrc.js | 3 --- packages/hooks/package.json | 11 +++++++--- packages/hooks/tsup.config.ts | 9 ++++++++ packages/i18n/package.json | 8 +++++-- packages/logger/package.json | 13 ++++++----- packages/propel/package.json | 8 +++++-- packages/services/package.json | 8 +++++-- packages/shared-state/package.json | 8 +++++-- packages/types/package.json | 9 ++++---- packages/ui/package.json | 9 +++++--- packages/utils/.eslintrc.js | 3 --- packages/utils/package.json | 11 +++++++--- packages/utils/tsup.config.ts | 8 +++++++ turbo.json | 35 +++++++++++++++++++++--------- 22 files changed, 135 insertions(+), 65 deletions(-) create mode 100644 packages/hooks/tsup.config.ts create mode 100644 packages/utils/tsup.config.ts diff --git a/apps/admin/package.json b/apps/admin/package.json index 6aa37876fef..e01c0ef26d8 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -10,9 +10,12 @@ "build": "next build", "preview": "next build && next start", "start": "next start", - "format": "prettier --write .", - "lint": "eslint . --ext .ts,.tsx", - "lint:errors": "eslint . --ext .ts,.tsx --quiet" + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist", + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"" }, "dependencies": { "@headlessui/react": "^1.7.19", diff --git a/apps/live/package.json b/apps/live/package.json index b9de661bb43..df581600d12 100644 --- a/apps/live/package.json +++ b/apps/live/package.json @@ -15,7 +15,7 @@ "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", "fix:lint": "eslint . --fix", "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", - "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist" + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "keywords": [], "author": "", diff --git a/apps/space/package.json b/apps/space/package.json index 13356047e2f..8f5794bc8e6 100644 --- a/apps/space/package.json +++ b/apps/space/package.json @@ -8,9 +8,12 @@ "develop": "next dev -p 3002", "build": "next build", "start": "next start", - "lint": "eslint . --ext .ts,.tsx", - "lint:errors": "eslint . --ext .ts,.tsx --quiet", - "export": "next export" + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist", + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"" }, "dependencies": { "@blueprintjs/core": "^4.16.3", diff --git a/apps/web/package.json b/apps/web/package.json index 74ab1dde244..244206ec325 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -8,12 +8,12 @@ "develop": "next dev --port 3000", "build": "next build", "start": "next start", - "lint": "eslint . --ext .ts,.tsx", - "lint:errors": "eslint . --ext .ts,.tsx --quiet", - "export": "next export", - "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist", - "dev:trace": "NEXT_TURBOPACK_TRACING=1 NEXT_CPU_PROF=1 next dev", - "view-trace": "next internal turbo-trace-server ./.next/trace" + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist", + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"" }, "dependencies": { "@atlaskit/pragmatic-drag-and-drop": "^1.1.3", diff --git a/package.json b/package.json index c29c323a2d5..9d47cde3597 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,9 @@ "build": "turbo run build", "dev": "turbo run dev --concurrency=13", "start": "turbo run start", - "lint": "turbo run lint", - "lint:errors": "turbo run lint:errors", "clean": "turbo run clean", - "format": "prettier --write \"**/*.{ts,tsx,md}\"" + "fix": "turbo run fix", + "check": "turbo run check" }, "devDependencies": { "prettier": "latest", diff --git a/packages/constants/package.json b/packages/constants/package.json index f3e176772d2..c7ba4eb3ac6 100644 --- a/packages/constants/package.json +++ b/packages/constants/package.json @@ -25,7 +25,7 @@ "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", "fix:lint": "eslint . --fix", "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", - "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist" + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "dependencies": { "@plane/types": "*" diff --git a/packages/decorators/package.json b/packages/decorators/package.json index 566e3482789..eee96784706 100644 --- a/packages/decorators/package.json +++ b/packages/decorators/package.json @@ -13,8 +13,12 @@ "scripts": { "build": "tsup src/index.ts --format esm,cjs --dts --external express,ws", "dev": "tsup src/index.ts --format esm,cjs --watch --dts --external express,ws", - "lint": "eslint src --ext .ts,.tsx", - "lint:errors": "eslint src --ext .ts,.tsx --quiet" + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "dependencies": { "express": "^4.21.2", diff --git a/packages/editor/package.json b/packages/editor/package.json index ed1794c5c79..4b326e0199b 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -24,10 +24,12 @@ "scripts": { "build": "tsup --minify", "dev": "tsup --watch", - "check-types": "tsc --noEmit", - "lint": "eslint src --ext .ts,.tsx", - "lint:errors": "eslint src --ext .ts,.tsx --quiet", - "format": "prettier --write \"**/*.{ts,tsx,md}\"" + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "peerDependencies": { "react": "^18.3.1", diff --git a/packages/hooks/.eslintrc.js b/packages/hooks/.eslintrc.js index 558b8f76ed4..b11b7bb6d65 100644 --- a/packages/hooks/.eslintrc.js +++ b/packages/hooks/.eslintrc.js @@ -3,7 +3,4 @@ module.exports = { root: true, extends: ["@plane/eslint-config/library.js"], parser: "@typescript-eslint/parser", - parserOptions: { - project: true, - }, }; diff --git a/packages/hooks/package.json b/packages/hooks/package.json index 52b57de7e39..89f24ac38db 100644 --- a/packages/hooks/package.json +++ b/packages/hooks/package.json @@ -11,9 +11,14 @@ "dist/**" ], "scripts": { - "build": "tsup ./src/index.ts --format esm,cjs --dts --external react --minify", - "lint": "eslint src --ext .ts,.tsx", - "lint:errors": "eslint src --ext .ts,.tsx --quiet" + "build": "tsup --minify", + "dev": "tsup --watch", + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "dependencies": { "react": "^18.3.1" diff --git a/packages/hooks/tsup.config.ts b/packages/hooks/tsup.config.ts new file mode 100644 index 00000000000..c69daf15886 --- /dev/null +++ b/packages/hooks/tsup.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["esm", "cjs"], + dts: true, + clean: true, + external: ["react"], +}); diff --git a/packages/i18n/package.json b/packages/i18n/package.json index ce07c6c86e3..51d1ad71fa3 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -7,8 +7,12 @@ "main": "./src/index.ts", "types": "./src/index.ts", "scripts": { - "lint": "eslint src --ext .ts,.tsx", - "lint:errors": "eslint src --ext .ts,.tsx --quiet" + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "dependencies": { "@plane/utils": "*", diff --git a/packages/logger/package.json b/packages/logger/package.json index 24dc3c789f8..05715d2deac 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -11,11 +11,14 @@ "dist/**" ], "scripts": { - "build": "tsc", - "dev": "tsc --watch", - "lint": "eslint src --ext .ts,.tsx", - "lint:errors": "eslint src --ext .ts,.tsx --quiet", - "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist" + "build": "tsup --minify", + "dev": "tsup --watch", + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "dependencies": { "@types/express": "^4.17.21", diff --git a/packages/propel/package.json b/packages/propel/package.json index 2a683a1e517..3cb12405c7b 100644 --- a/packages/propel/package.json +++ b/packages/propel/package.json @@ -4,8 +4,12 @@ "private": true, "license": "AGPL-3.0", "scripts": { - "lint": "eslint src --ext .ts,.tsx", - "lint:errors": "eslint src --ext .ts,.tsx --quiet" + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "exports": { "./ui/*": "./src/ui/*.tsx", diff --git a/packages/services/package.json b/packages/services/package.json index 43c44dc95af..d3eacd9cee5 100644 --- a/packages/services/package.json +++ b/packages/services/package.json @@ -5,8 +5,12 @@ "private": true, "main": "./src/index.ts", "scripts": { - "lint": "eslint src --ext .ts,.tsx", - "lint:errors": "eslint src --ext .ts,.tsx --quiet" + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "dependencies": { "@plane/constants": "*", diff --git a/packages/shared-state/package.json b/packages/shared-state/package.json index a68adb40302..b9096eb6cc7 100644 --- a/packages/shared-state/package.json +++ b/packages/shared-state/package.json @@ -7,8 +7,12 @@ "main": "./src/index.ts", "types": "./src/index.ts", "scripts": { - "lint": "eslint src --ext .ts,.tsx", - "lint:errors": "eslint src --ext .ts,.tsx --quiet" + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "dependencies": { "zod": "^3.22.2" diff --git a/packages/types/package.json b/packages/types/package.json index 5fc4316921c..0c6b0185d7b 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -20,11 +20,12 @@ "scripts": { "dev": "tsup --watch", "build": "tsc --noEmit && tsup", + "check:lint": "eslint . --max-warnings 0", "check:types": "tsc --noEmit", - "check:lint": "eslint src --ext .ts,.tsx", - "check:format": "prettier --check \"**/*.{ts,tsx,md}\"", - "fix:lint": "eslint src --ext .ts,.tsx --fix", - "fix:format": "prettier --write \"**/*.{ts,tsx,md}\"" + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "devDependencies": { "@plane/eslint-config": "*", diff --git a/packages/ui/package.json b/packages/ui/package.json index 720b9e0aac8..df13b6dc999 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -14,12 +14,15 @@ "scripts": { "build": "tsup src/index.ts --format esm,cjs --dts --external react --minify", "dev": "tsup src/index.ts --format esm,cjs --watch --dts --external react", - "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build", "postcss": "postcss styles/globals.css -o styles/output.css --watch", - "lint": "eslint src --ext .ts,.tsx", - "lint:errors": "eslint src --ext .ts,.tsx --quiet" + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist" }, "peerDependencies": { "react": "^18.3.1", diff --git a/packages/utils/.eslintrc.js b/packages/utils/.eslintrc.js index 558b8f76ed4..b11b7bb6d65 100644 --- a/packages/utils/.eslintrc.js +++ b/packages/utils/.eslintrc.js @@ -3,7 +3,4 @@ module.exports = { root: true, extends: ["@plane/eslint-config/library.js"], parser: "@typescript-eslint/parser", - parserOptions: { - project: true, - }, }; diff --git a/packages/utils/package.json b/packages/utils/package.json index f4d3294942c..86ce63428bb 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -11,9 +11,14 @@ "dist/**" ], "scripts": { - "build": "tsup ./src/index.ts --format esm,cjs --dts --external react --minify", - "lint": "eslint src --ext .ts,.tsx", - "lint:errors": "eslint src --ext .ts,.tsx --quiet" + "build": "tsc --noEmit && tsup --minify", + "dev": "tsup --watch", + "check:lint": "eslint . --max-warnings 0", + "check:types": "tsc --noEmit", + "check:format": "prettier --check \"**/*.{ts,tsx,md,json,css,scss}\"", + "fix:lint": "eslint . --fix", + "fix:format": "prettier --write \"**/*.{ts,tsx,md,json,css,scss}\"", + "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist" }, "dependencies": { "@plane/constants": "*", diff --git a/packages/utils/tsup.config.ts b/packages/utils/tsup.config.ts new file mode 100644 index 00000000000..b8d2a4b6e67 --- /dev/null +++ b/packages/utils/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["esm", "cjs"], + dts: true, + external: ["react"], +}); diff --git a/turbo.json b/turbo.json index 36e95edbd4c..308d3d5b321 100644 --- a/turbo.json +++ b/turbo.json @@ -24,21 +24,36 @@ "dependsOn": ["^build"], "outputs": [".next/**", "dist/**"] }, - "develop": { - "cache": false, - "persistent": true, - "dependsOn": ["^build"] - }, "dev": { "cache": false, - "persistent": true, - "dependsOn": ["^build"] + "persistent": true }, - "test": { + "check:types": { "dependsOn": ["^build"], - "outputs": [] + "cache": false }, - "lint": { + "check:lint": { + "cache": false + }, + "check:format": { + "cache": false + }, + "check": { + "dependsOn": ["check:format", "check:lint", "check:types"], + "cache": false + }, + "fix:lint": { + "cache": false + }, + "fix:format": { + "cache": false + }, + "fix": { + "dependsOn": ["fix:format", "fix:lint"], + "cache": false + }, + "test": { + "dependsOn": ["^build"], "outputs": [] }, "start": { From 6bee97eb2686079a614468c336c5ae65137fcfda Mon Sep 17 00:00:00 2001 From: sriramveeraghanta Date: Fri, 4 Jul 2025 15:08:25 +0530 Subject: [PATCH 030/130] chore: remove unused files --- ENV_SETUP.md | 90 -------------- app.json | 73 ----------- apps/server/back_migration.py | 224 ---------------------------------- start.sh | 5 - 4 files changed, 392 deletions(-) delete mode 100644 ENV_SETUP.md delete mode 100644 app.json delete mode 100644 apps/server/back_migration.py delete mode 100644 start.sh diff --git a/ENV_SETUP.md b/ENV_SETUP.md deleted file mode 100644 index 54e0415a5f0..00000000000 --- a/ENV_SETUP.md +++ /dev/null @@ -1,90 +0,0 @@ -# Environment Variables - -Environment variables are distributed in various files. Please refer them carefully. - -## {PROJECT_FOLDER}/.env - -File is available in the project root folder​ - -``` -# Database Settings -POSTGRES_USER="plane" -POSTGRES_PASSWORD="plane" -POSTGRES_DB="plane" -PGDATA="/var/lib/postgresql/data" -# Redis Settings -REDIS_HOST="plane-redis" -REDIS_PORT="6379" -# AWS Settings -AWS_REGION="" -AWS_ACCESS_KEY_ID="access-key" -AWS_SECRET_ACCESS_KEY="secret-key" -AWS_S3_ENDPOINT_URL="http://plane-minio:9000" -# Changing this requires change in the nginx.conf for uploads if using minio setup -AWS_S3_BUCKET_NAME="uploads" -# Maximum file upload limit -FILE_SIZE_LIMIT=5242880 -# GPT settings -OPENAI_API_BASE="https://api.openai.com/v1" # deprecated -OPENAI_API_KEY="sk-" # deprecated -GPT_ENGINE="gpt-3.5-turbo" # deprecated -# Settings related to Docker -DOCKERIZED=1 # deprecated -# set to 1 If using the pre-configured minio setup -USE_MINIO=1 -# Nginx Configuration -NGINX_PORT=80 -``` - -## {PROJECT_FOLDER}/apps/server/.env - -``` -# Backend -# Debug value for api server use it as 0 for production use -DEBUG=0 -CORS_ALLOWED_ORIGINS="http://localhost" -# Database Settings -POSTGRES_USER="plane" -POSTGRES_PASSWORD="plane" -POSTGRES_HOST="plane-db" -POSTGRES_DB="plane" -POSTGRES_PORT=5432 -DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} -# Redis Settings -REDIS_HOST="plane-redis" -REDIS_PORT="6379" -REDIS_URL="redis://${REDIS_HOST}:6379/" -# AWS Settings -AWS_REGION="" -AWS_ACCESS_KEY_ID="access-key" -AWS_SECRET_ACCESS_KEY="secret-key" -AWS_S3_ENDPOINT_URL="http://plane-minio:9000" -# Changing this requires change in the nginx.conf for uploads if using minio setup -AWS_S3_BUCKET_NAME="uploads" -# Maximum file upload limit -FILE_SIZE_LIMIT=5242880 -# set to 1 If using the pre-configured minio setup -USE_MINIO=1 -# Nginx Configuration -NGINX_PORT=80 -# Email redirections and minio domain settings -WEB_URL="http://localhost" -# Gunicorn Workers -GUNICORN_WORKERS=2 -# Base URLs -ADMIN_BASE_URL= -SPACE_BASE_URL= -APP_BASE_URL= -SECRET_KEY="gxoytl7dmnc1y37zahah820z5iq3iozu38cnfjtu3yaau9cd9z" -# RabbitMQ Settings -RABBITMQ_HOST="plane-mq" -RABBITMQ_PORT="5672" -RABBITMQ_USER="plane" -RABBITMQ_PASSWORD="plane" -RABBITMQ_VHOST="plane" -AMQP_URL="" -# Authentication Settings -ENABLE_SIGNUP=1 -ENABLE_EMAIL_PASSWORD=1 -ENABLE_MAGIC_LINK_LOGIN=0 -``` diff --git a/app.json b/app.json deleted file mode 100644 index 6b1ab752889..00000000000 --- a/app.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "Plane", - "description": "Plane helps you track your issues, epics, and product roadmaps.", - "repository": "http://github.com/makeplane/plane", - "logo": "https://avatars.githubusercontent.com/u/115727700?s=200&v=4", - "website": "https://plane.so/", - "success_url": "/", - "stack": "heroku-22", - "keywords": ["plane", "project management", "django", "next"], - "addons": ["heroku-postgresql:mini", "heroku-redis:mini"], - "buildpacks": [ - { - "url": "https://github.com/heroku/heroku-buildpack-python.git" - }, - { - "url": "https://github.com/heroku/heroku-buildpack-nodejs#v176" - } - ], - "env": { - "EMAIL_HOST": { - "description": "Email host to send emails from", - "value": "" - }, - "EMAIL_HOST_USER": { - "description": "Email host to send emails from", - "value": "" - }, - "EMAIL_HOST_PASSWORD": { - "description": "Email host to send emails from", - "value": "" - }, - "EMAIL_FROM": { - "description": "Email Sender", - "value": "" - }, - "EMAIL_PORT": { - "description": "The default Email PORT to use", - "value": "587" - }, - "AWS_REGION": { - "description": "AWS Region to use for S3", - "value": "false" - }, - "AWS_ACCESS_KEY_ID": { - "description": "AWS Access Key ID to use for S3", - "value": "" - }, - "AWS_SECRET_ACCESS_KEY": { - "description": "AWS Secret Access Key to use for S3", - "value": "" - }, - "AWS_S3_BUCKET_NAME": { - "description": "AWS Bucket Name to use for S3", - "value": "" - }, - "WEB_URL": { - "description": "Web URL for Plane this will be used for redirections in the emails", - "value": "" - }, - "GITHUB_CLIENT_SECRET": { - "description": "GitHub Client Secret", - "value": "" - }, - "NEXT_PUBLIC_API_BASE_URL": { - "description": "Next Public API Base URL", - "value": "" - }, - "SECRET_KEY": { - "description": "Django Secret Key", - "value": "" - } - } -} diff --git a/apps/server/back_migration.py b/apps/server/back_migration.py deleted file mode 100644 index 69eb2f1df6a..00000000000 --- a/apps/server/back_migration.py +++ /dev/null @@ -1,224 +0,0 @@ -# All the python scripts that are used for back migrations -import uuid -import random -from django.contrib.auth.hashers import make_password -from plane.db.models import ProjectIdentifier -from plane.db.models import ( - Issue, - IssueComment, - User, - Project, - ProjectMember, - Label, - Integration, -) - - -# Update description and description html values for old descriptions -def update_description(): - try: - issues = Issue.objects.all() - updated_issues = [] - - for issue in issues: - issue.description_html = f"

    {issue.description}

    " - issue.description_stripped = issue.description - updated_issues.append(issue) - - Issue.objects.bulk_update( - updated_issues, ["description_html", "description_stripped"], batch_size=100 - ) - print("Success") - except Exception as e: - print(e) - print("Failed") - - -def update_comments(): - try: - issue_comments = IssueComment.objects.all() - updated_issue_comments = [] - - for issue_comment in issue_comments: - issue_comment.comment_html = f"

    {issue_comment.comment_stripped}

    " - updated_issue_comments.append(issue_comment) - - IssueComment.objects.bulk_update( - updated_issue_comments, ["comment_html"], batch_size=100 - ) - print("Success") - except Exception as e: - print(e) - print("Failed") - - -def update_project_identifiers(): - try: - project_identifiers = ProjectIdentifier.objects.filter( - workspace_id=None - ).select_related("project", "project__workspace") - updated_identifiers = [] - - for identifier in project_identifiers: - identifier.workspace_id = identifier.project.workspace_id - updated_identifiers.append(identifier) - - ProjectIdentifier.objects.bulk_update( - updated_identifiers, ["workspace_id"], batch_size=50 - ) - print("Success") - except Exception as e: - print(e) - print("Failed") - - -def update_user_empty_password(): - try: - users = User.objects.filter(password="") - updated_users = [] - - for user in users: - user.password = make_password(uuid.uuid4().hex) - user.is_password_autoset = True - updated_users.append(user) - - User.objects.bulk_update(updated_users, ["password"], batch_size=50) - print("Success") - - except Exception as e: - print(e) - print("Failed") - - -def updated_issue_sort_order(): - try: - issues = Issue.objects.all() - updated_issues = [] - - for issue in issues: - issue.sort_order = issue.sequence_id * random.randint(100, 500) - updated_issues.append(issue) - - Issue.objects.bulk_update(updated_issues, ["sort_order"], batch_size=100) - print("Success") - except Exception as e: - print(e) - print("Failed") - - -def update_project_cover_images(): - try: - project_cover_images = [ - "https://images.unsplash.com/photo-1677432658720-3d84f9d657b4?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80", - "https://images.unsplash.com/photo-1661107564401-57497d8fe86f?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1332&q=80", - "https://images.unsplash.com/photo-1677352241429-dc90cfc7a623?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1332&q=80", - "https://images.unsplash.com/photo-1677196728306-eeafea692454?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1331&q=80", - "https://images.unsplash.com/photo-1660902179734-c94c944f7830?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1255&q=80", - "https://images.unsplash.com/photo-1672243775941-10d763d9adef?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80", - "https://images.unsplash.com/photo-1677040628614-53936ff66632?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80", - "https://images.unsplash.com/photo-1676920410907-8d5f8dd4b5ba?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1332&q=80", - "https://images.unsplash.com/photo-1676846328604-ce831c481346?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1155&q=80", - "https://images.unsplash.com/photo-1676744843212-09b7e64c3a05?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80", - "https://images.unsplash.com/photo-1676798531090-1608bedeac7b?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80", - "https://images.unsplash.com/photo-1597088758740-56fd7ec8a3f0?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1169&q=80", - "https://images.unsplash.com/photo-1676638392418-80aad7c87b96?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=774&q=80", - "https://images.unsplash.com/photo-1649639194967-2fec0b4ea7bc?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80", - "https://images.unsplash.com/photo-1675883086902-b453b3f8146e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=774&q=80", - "https://images.unsplash.com/photo-1675887057159-40fca28fdc5d?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1173&q=80", - "https://images.unsplash.com/photo-1675373980203-f84c5a672aa5?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80", - "https://images.unsplash.com/photo-1675191475318-d2bf6bad1200?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1332&q=80", - "https://images.unsplash.com/photo-1675456230532-2194d0c4bcc0?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80", - "https://images.unsplash.com/photo-1675371788315-60fa0ef48267?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1332&q=80", - ] - - projects = Project.objects.all() - updated_projects = [] - for project in projects: - project.cover_image = project_cover_images[random.randint(0, 19)] - updated_projects.append(project) - - Project.objects.bulk_update(updated_projects, ["cover_image"], batch_size=100) - print("Success") - except Exception as e: - print(e) - print("Failed") - - -def update_user_view_property(): - try: - project_members = ProjectMember.objects.all() - updated_project_members = [] - for project_member in project_members: - project_member.default_props = { - "filters": {"type": None}, - "orderBy": "-created_at", - "collapsed": True, - "issueView": "list", - "filterIssue": None, - "groupByProperty": None, - "showEmptyGroups": True, - } - updated_project_members.append(project_member) - - ProjectMember.objects.bulk_update( - updated_project_members, ["default_props"], batch_size=100 - ) - print("Success") - except Exception as e: - print(e) - print("Failed") - - -def update_label_color(): - try: - labels = Label.objects.filter(color="") - updated_labels = [] - for label in labels: - label.color = f"#{random.randint(0, 0xFFFFFF+1):06X}" - updated_labels.append(label) - - Label.objects.bulk_update(updated_labels, ["color"], batch_size=100) - print("Success") - except Exception as e: - print(e) - print("Failed") - - -def create_slack_integration(): - try: - _ = Integration.objects.create(provider="slack", network=2, title="Slack") - print("Success") - except Exception as e: - print(e) - print("Failed") - - -def update_integration_verified(): - try: - integrations = Integration.objects.all() - updated_integrations = [] - for integration in integrations: - integration.verified = True - updated_integrations.append(integration) - - Integration.objects.bulk_update( - updated_integrations, ["verified"], batch_size=10 - ) - print("Success") - except Exception as e: - print(e) - print("Failed") - - -def update_start_date(): - try: - issues = Issue.objects.filter(state__group__in=["started", "completed"]) - updated_issues = [] - for issue in issues: - issue.start_date = issue.created_at.date() - updated_issues.append(issue) - Issue.objects.bulk_update(updated_issues, ["start_date"], batch_size=500) - print("Success") - except Exception as e: - print(e) - print("Failed") diff --git a/start.sh b/start.sh deleted file mode 100644 index 2685c38265b..00000000000 --- a/start.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -set -x - -echo "Starting Plane Frontend.." -node $1 From fdbe4c2ca6f2e70014f887f737d58f2b46ca85c5 Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Fri, 4 Jul 2025 15:32:21 +0530 Subject: [PATCH 031/130] chore: rename server to api (#7342) --- .github/workflows/build-branch.yml | 8 +++--- CONTRIBUTING.md | 2 +- aio/Dockerfile-app | 12 ++++---- apps/{server => api}/.coveragerc | 0 apps/{server => api}/.env.example | 0 apps/{server => api}/Dockerfile.api | 0 apps/{server => api}/Dockerfile.dev | 0 .../bin/docker-entrypoint-api-local.sh | 0 .../bin/docker-entrypoint-api.sh | 0 .../bin/docker-entrypoint-beat.sh | 0 .../bin/docker-entrypoint-migrator.sh | 0 .../bin/docker-entrypoint-worker.sh | 0 apps/{server => api}/manage.py | 0 apps/{server => api}/package.json | 0 apps/{server => api}/plane/__init__.py | 0 .../plane/analytics/__init__.py | 0 apps/{server => api}/plane/analytics/apps.py | 0 apps/{server => api}/plane/api/__init__.py | 0 apps/{server => api}/plane/api/apps.py | 0 .../plane/api/middleware/__init__.py | 0 .../api/middleware/api_authentication.py | 0 apps/{server => api}/plane/api/rate_limit.py | 0 .../plane/api/serializers/__init__.py | 0 .../plane/api/serializers/base.py | 0 .../plane/api/serializers/cycle.py | 0 .../plane/api/serializers/estimate.py | 0 .../plane/api/serializers/intake.py | 0 .../plane/api/serializers/issue.py | 0 .../plane/api/serializers/module.py | 0 .../plane/api/serializers/project.py | 0 .../plane/api/serializers/state.py | 0 .../plane/api/serializers/user.py | 0 .../plane/api/serializers/workspace.py | 0 .../plane/api/urls/__init__.py | 0 apps/{server => api}/plane/api/urls/cycle.py | 0 apps/{server => api}/plane/api/urls/intake.py | 0 apps/{server => api}/plane/api/urls/issue.py | 0 apps/{server => api}/plane/api/urls/member.py | 0 apps/{server => api}/plane/api/urls/module.py | 0 .../{server => api}/plane/api/urls/project.py | 0 apps/{server => api}/plane/api/urls/state.py | 0 .../plane/api/views/__init__.py | 0 apps/{server => api}/plane/api/views/base.py | 0 apps/{server => api}/plane/api/views/cycle.py | 0 .../{server => api}/plane/api/views/intake.py | 0 apps/{server => api}/plane/api/views/issue.py | 0 .../{server => api}/plane/api/views/member.py | 0 .../{server => api}/plane/api/views/module.py | 0 .../plane/api/views/project.py | 0 apps/{server => api}/plane/api/views/state.py | 0 apps/{server => api}/plane/app/__init__.py | 0 apps/{server => api}/plane/app/apps.py | 0 .../plane/app/middleware/__init__.py | 0 .../app/middleware/api_authentication.py | 0 .../plane/app/permissions/__init__.py | 0 .../plane/app/permissions/base.py | 0 .../plane/app/permissions/project.py | 0 .../plane/app/permissions/workspace.py | 0 .../plane/app/serializers/__init__.py | 0 .../plane/app/serializers/analytic.py | 0 .../plane/app/serializers/api.py | 0 .../plane/app/serializers/asset.py | 0 .../plane/app/serializers/base.py | 0 .../plane/app/serializers/cycle.py | 0 .../plane/app/serializers/draft.py | 0 .../plane/app/serializers/estimate.py | 0 .../plane/app/serializers/exporter.py | 0 .../plane/app/serializers/favorite.py | 0 .../plane/app/serializers/importer.py | 0 .../plane/app/serializers/intake.py | 0 .../plane/app/serializers/issue.py | 0 .../plane/app/serializers/module.py | 0 .../plane/app/serializers/notification.py | 0 .../plane/app/serializers/page.py | 0 .../plane/app/serializers/project.py | 0 .../plane/app/serializers/state.py | 0 .../plane/app/serializers/user.py | 0 .../plane/app/serializers/view.py | 0 .../plane/app/serializers/webhook.py | 0 .../plane/app/serializers/workspace.py | 0 .../plane/app/urls/__init__.py | 0 .../plane/app/urls/analytic.py | 0 apps/{server => api}/plane/app/urls/api.py | 0 apps/{server => api}/plane/app/urls/asset.py | 0 apps/{server => api}/plane/app/urls/cycle.py | 0 .../plane/app/urls/estimate.py | 0 .../plane/app/urls/external.py | 0 apps/{server => api}/plane/app/urls/intake.py | 0 apps/{server => api}/plane/app/urls/issue.py | 0 apps/{server => api}/plane/app/urls/module.py | 0 .../plane/app/urls/notification.py | 0 apps/{server => api}/plane/app/urls/page.py | 0 .../{server => api}/plane/app/urls/project.py | 0 apps/{server => api}/plane/app/urls/search.py | 0 apps/{server => api}/plane/app/urls/state.py | 0 .../plane/app/urls/timezone.py | 0 apps/{server => api}/plane/app/urls/user.py | 0 apps/{server => api}/plane/app/urls/views.py | 0 .../{server => api}/plane/app/urls/webhook.py | 0 .../plane/app/urls/workspace.py | 0 .../plane/app/views/__init__.py | 0 .../plane/app/views/analytic/advance.py | 0 .../plane/app/views/analytic/base.py | 0 .../app/views/analytic/project_analytics.py | 0 apps/{server => api}/plane/app/views/api.py | 0 .../plane/app/views/asset/base.py | 0 .../plane/app/views/asset/v2.py | 0 apps/{server => api}/plane/app/views/base.py | 0 .../plane/app/views/cycle/archive.py | 0 .../plane/app/views/cycle/base.py | 0 .../plane/app/views/cycle/issue.py | 0 .../plane/app/views/error_404.py | 0 .../plane/app/views/estimate/base.py | 0 .../plane/app/views/exporter/base.py | 0 .../plane/app/views/external/base.py | 0 .../plane/app/views/intake/base.py | 0 .../plane/app/views/issue/activity.py | 0 .../plane/app/views/issue/archive.py | 0 .../plane/app/views/issue/attachment.py | 0 .../plane/app/views/issue/base.py | 0 .../plane/app/views/issue/comment.py | 0 .../plane/app/views/issue/label.py | 0 .../plane/app/views/issue/link.py | 0 .../plane/app/views/issue/reaction.py | 0 .../plane/app/views/issue/relation.py | 0 .../plane/app/views/issue/sub_issue.py | 0 .../plane/app/views/issue/subscriber.py | 0 .../plane/app/views/issue/version.py | 0 .../plane/app/views/module/archive.py | 0 .../plane/app/views/module/base.py | 0 .../plane/app/views/module/issue.py | 0 .../plane/app/views/notification/base.py | 0 .../plane/app/views/page/base.py | 0 .../plane/app/views/page/version.py | 0 .../plane/app/views/project/base.py | 0 .../plane/app/views/project/invite.py | 0 .../plane/app/views/project/member.py | 0 .../plane/app/views/search/base.py | 0 .../plane/app/views/search/issue.py | 0 .../plane/app/views/state/base.py | 0 .../plane/app/views/timezone/base.py | 0 .../plane/app/views/user/base.py | 0 .../plane/app/views/view/base.py | 0 .../plane/app/views/webhook/base.py | 0 .../plane/app/views/workspace/base.py | 0 .../plane/app/views/workspace/cycle.py | 0 .../plane/app/views/workspace/draft.py | 0 .../plane/app/views/workspace/estimate.py | 0 .../plane/app/views/workspace/favorite.py | 0 .../plane/app/views/workspace/home.py | 0 .../plane/app/views/workspace/invite.py | 0 .../plane/app/views/workspace/label.py | 0 .../plane/app/views/workspace/member.py | 0 .../plane/app/views/workspace/module.py | 0 .../plane/app/views/workspace/quick_link.py | 0 .../plane/app/views/workspace/recent_visit.py | 0 .../plane/app/views/workspace/state.py | 0 .../plane/app/views/workspace/sticky.py | 0 .../plane/app/views/workspace/user.py | 0 .../app/views/workspace/user_preference.py | 0 apps/{server => api}/plane/asgi.py | 0 .../plane/authentication/__init__.py | 0 .../plane/authentication/adapter/__init__.py | 0 .../plane/authentication/adapter/base.py | 0 .../authentication/adapter/credential.py | 0 .../plane/authentication/adapter/error.py | 0 .../plane/authentication/adapter/exception.py | 0 .../plane/authentication/adapter/oauth.py | 0 .../plane/authentication/apps.py | 0 .../authentication/middleware/__init__.py | 0 .../authentication/middleware/session.py | 0 .../plane/authentication/provider/__init__.py | 0 .../provider/credentials/__init__.py | 0 .../provider/credentials/email.py | 0 .../provider/credentials/magic_code.py | 0 .../authentication/provider/oauth/__init__.py | 0 .../authentication/provider/oauth/github.py | 0 .../authentication/provider/oauth/gitlab.py | 0 .../authentication/provider/oauth/google.py | 0 .../plane/authentication/rate_limit.py | 0 .../plane/authentication/session.py | 0 .../plane/authentication/urls.py | 0 .../plane/authentication/utils/host.py | 0 .../plane/authentication/utils/login.py | 0 .../authentication/utils/redirection_path.py | 0 .../utils/user_auth_workflow.py | 0 .../utils/workspace_project_join.py | 0 .../plane/authentication/views/__init__.py | 0 .../plane/authentication/views/app/check.py | 0 .../plane/authentication/views/app/email.py | 0 .../plane/authentication/views/app/github.py | 0 .../plane/authentication/views/app/gitlab.py | 0 .../plane/authentication/views/app/google.py | 0 .../plane/authentication/views/app/magic.py | 0 .../views/app/password_management.py | 0 .../plane/authentication/views/app/signout.py | 0 .../plane/authentication/views/common.py | 0 .../plane/authentication/views/space/check.py | 0 .../plane/authentication/views/space/email.py | 0 .../authentication/views/space/github.py | 0 .../authentication/views/space/gitlab.py | 0 .../authentication/views/space/google.py | 0 .../plane/authentication/views/space/magic.py | 0 .../views/space/password_management.py | 0 .../authentication/views/space/signout.py | 0 .../{server => api}/plane/bgtasks/__init__.py | 0 .../plane/bgtasks/analytic_plot_export.py | 0 .../plane/bgtasks/api_logs_task.py | 0 apps/{server => api}/plane/bgtasks/apps.py | 0 .../plane/bgtasks/copy_s3_object.py | 0 .../plane/bgtasks/deletion_task.py | 0 .../plane/bgtasks/dummy_data_task.py | 0 .../plane/bgtasks/email_notification_task.py | 0 .../plane/bgtasks/event_tracking_task.py | 0 .../plane/bgtasks/export_task.py | 0 .../plane/bgtasks/exporter_expired_task.py | 0 .../plane/bgtasks/file_asset_task.py | 0 .../plane/bgtasks/forgot_password_task.py | 0 .../plane/bgtasks/issue_activities_task.py | 0 .../plane/bgtasks/issue_automation_task.py | 0 .../bgtasks/issue_description_version_sync.py | 0 .../bgtasks/issue_description_version_task.py | 0 .../plane/bgtasks/issue_version_sync.py | 0 .../plane/bgtasks/magic_link_code_task.py | 0 .../plane/bgtasks/notification_task.py | 0 .../plane/bgtasks/page_transaction_task.py | 0 .../plane/bgtasks/page_version_task.py | 0 .../bgtasks/project_add_user_email_task.py | 0 .../plane/bgtasks/project_invitation_task.py | 0 .../plane/bgtasks/recent_visited_task.py | 0 .../plane/bgtasks/storage_metadata_task.py | 0 .../bgtasks/user_activation_email_task.py | 0 .../bgtasks/user_deactivation_email_task.py | 0 .../plane/bgtasks/webhook_task.py | 0 .../plane/bgtasks/work_item_link_task.py | 0 .../bgtasks/workspace_invitation_task.py | 0 .../plane/bgtasks/workspace_seed_task.py | 0 apps/{server => api}/plane/celery.py | 0 apps/{server => api}/plane/db/__init__.py | 0 apps/{server => api}/plane/db/apps.py | 0 .../plane/db/management/__init__.py | 0 .../plane/db/management/commands/__init__.py | 0 .../db/management/commands/activate_user.py | 0 .../db/management/commands/clear_cache.py | 0 .../db/management/commands/create_bucket.py | 0 .../management/commands/create_dummy_data.py | 0 .../commands/create_instance_admin.py | 0 .../commands/create_project_member.py | 0 .../commands/fix_duplicate_sequences.py | 0 .../db/management/commands/reset_password.py | 0 .../sync_issue_description_version.py | 0 .../management/commands/sync_issue_version.py | 0 .../db/management/commands/test_email.py | 0 .../db/management/commands/update_bucket.py | 0 .../commands/update_deleted_workspace_slug.py | 0 .../db/management/commands/wait_for_db.py | 0 .../commands/wait_for_migrations.py | 0 .../plane/db/migrations/0001_initial.py | 0 .../db/migrations/0002_auto_20221104_2239.py | 0 .../db/migrations/0003_auto_20221109_2320.py | 0 .../migrations/0004_alter_state_sequence.py | 0 .../db/migrations/0005_auto_20221114_2127.py | 0 .../db/migrations/0006_alter_cycle_status.py | 0 .../plane/db/migrations/0007_label_parent.py | 0 .../plane/db/migrations/0008_label_colour.py | 0 .../db/migrations/0009_auto_20221208_0310.py | 0 .../db/migrations/0010_auto_20221213_0037.py | 0 .../db/migrations/0011_auto_20221222_2357.py | 0 .../db/migrations/0012_auto_20230104_0117.py | 0 .../db/migrations/0013_auto_20230107_0041.py | 0 ...r_workspacememberinvite_unique_together.py | 0 .../db/migrations/0015_auto_20230107_1636.py | 0 .../db/migrations/0016_auto_20230107_1735.py | 0 .../0017_alter_workspace_unique_together.py | 0 .../db/migrations/0018_auto_20230130_0119.py | 0 .../db/migrations/0019_auto_20230131_0049.py | 0 .../db/migrations/0020_auto_20230214_0118.py | 0 .../db/migrations/0021_auto_20230223_0104.py | 0 .../db/migrations/0022_auto_20230307_0304.py | 0 .../db/migrations/0023_auto_20230316_0040.py | 0 .../db/migrations/0024_auto_20230322_0138.py | 0 .../db/migrations/0025_auto_20230331_0203.py | 0 .../0026_alter_projectmember_view_props.py | 0 .../db/migrations/0027_auto_20230409_0312.py | 0 .../db/migrations/0028_auto_20230414_1703.py | 0 .../db/migrations/0029_auto_20230502_0126.py | 0 ...030_alter_estimatepoint_unique_together.py | 0 .../plane/db/migrations/0031_analyticview.py | 0 .../db/migrations/0032_auto_20230520_2015.py | 0 .../db/migrations/0033_auto_20230618_2125.py | 0 .../db/migrations/0034_auto_20230628_1046.py | 0 .../db/migrations/0035_auto_20230704_2225.py | 0 .../0036_alter_workspace_organization_size.py | 0 ...archived_at_project_archive_in_and_more.py | 0 .../db/migrations/0038_auto_20230720_1505.py | 0 .../db/migrations/0039_auto_20230723_2203.py | 0 ...r_preferences_user_cover_image_and_more.py | 0 ...sort_order_issuecomment_access_and_more.py | 0 ..._alter_analyticview_created_by_and_more.py | 0 ..._alter_analyticview_created_by_and_more.py | 0 .../db/migrations/0044_auto_20230913_0709.py | 0 ...ch_workspacemember_issue_props_and_more.py | 0 ..._alter_analyticview_created_by_and_more.py | 0 ...escription_apitoken_expired_at_and_more.py | 0 .../db/migrations/0048_auto_20231116_0713.py | 0 .../db/migrations/0049_auto_20231116_0713.py | 0 ..._case_alter_workspace_organization_size.py | 0 ...ernal_id_cycle_external_source_and_more.py | 0 .../db/migrations/0052_auto_20231220_1141.py | 0 .../db/migrations/0053_auto_20240102_1315.py | 0 .../0054_dashboard_widget_dashboardwidget.py | 0 .../db/migrations/0055_auto_20240108_0648.py | 0 ...ficationpreference_emailnotificationlog.py | 0 .../db/migrations/0057_auto_20240122_0901.py | 0 .../0058_alter_moduleissue_issue_and_more.py | 0 .../db/migrations/0059_auto_20240208_0957.py | 0 .../0060_cycle_progress_snapshot.py | 0 .../db/migrations/0061_project_logo_props.py | 0 ...archived_at_module_archived_at_and_more.py | 0 .../0063_state_is_triage_alter_state_group.py | 0 .../db/migrations/0064_auto_20240409_1134.py | 0 .../db/migrations/0065_auto_20240415_0937.py | 0 ...oken_cycle_logo_props_module_logo_props.py | 0 .../db/migrations/0067_issue_estimate.py | 0 ...project_remove_pagelog_project_and_more.py | 0 .../0069_alter_account_provider_and_more.py | 0 ...ervice_exporterhistory_filters_and_more.py | 0 ...ssueproperty_issueuserproperty_and_more.py | 0 ...72_issueattachment_external_id_and_more.py | 0 ...ommentreaction_unique_together_and_more.py | 0 .../0074_deploy_board_and_project_issues.py | 0 .../migrations/0075_alter_fileasset_asset.py | 0 .../0076_alter_projectmember_role_and_more.py | 0 ...timezone_project_user_timezone_and_more.py | 0 ..._comment_fileasset_entity_type_and_more.py | 0 .../db/migrations/0079_auto_20241009_0619.py | 0 ...draft_issue_alter_fileasset_entity_type.py | 0 ...1_remove_globalview_created_by_and_more.py | 0 ...anagers_alter_cycleissue_issue_and_more.py | 0 ...0083_device_workspace_timezone_and_more.py | 0 ...e_project_when_deleted_at_null_and_more.py | 0 ...e_remove_inboxissue_created_by_and_more.py | 0 ...alter_teampage_unique_together_and_more.py | 0 ...emove_issueversion_description_and_more.py | 0 ...088_sticky_sort_order_workspaceuserlink.py | 0 .../0089_workspacehomepreference_and_more.py | 0 ..._dashboard_deprecateddashboard_and_more.py | 0 .../0091_issuecomment_edited_at_and_more.py | 0 ...ashboardwidget_unique_together_and_more.py | 0 ..._to_page_page_moved_to_project_and_more.py | 0 .../db/migrations/0094_auto_20250425_0902.py | 0 ...5_page_external_id_page_external_source.py | 0 ...0096_user_is_email_valid_user_masked_at.py | 0 ...ect_external_id_project_external_source.py | 0 .../plane/db/migrations/__init__.py | 0 apps/{server => api}/plane/db/mixins.py | 0 .../plane/db/models/__init__.py | 0 .../plane/db/models/analytic.py | 0 apps/{server => api}/plane/db/models/api.py | 0 apps/{server => api}/plane/db/models/asset.py | 0 apps/{server => api}/plane/db/models/base.py | 0 apps/{server => api}/plane/db/models/cycle.py | 0 .../plane/db/models/deploy_board.py | 0 .../{server => api}/plane/db/models/device.py | 0 apps/{server => api}/plane/db/models/draft.py | 0 .../plane/db/models/estimate.py | 0 .../plane/db/models/exporter.py | 0 .../plane/db/models/favorite.py | 0 .../plane/db/models/importer.py | 0 .../{server => api}/plane/db/models/intake.py | 0 .../plane/db/models/integration/__init__.py | 0 .../plane/db/models/integration/base.py | 0 .../plane/db/models/integration/github.py | 0 .../plane/db/models/integration/slack.py | 0 apps/{server => api}/plane/db/models/issue.py | 0 .../plane/db/models/issue_type.py | 0 apps/{server => api}/plane/db/models/label.py | 0 .../{server => api}/plane/db/models/module.py | 0 .../plane/db/models/notification.py | 0 apps/{server => api}/plane/db/models/page.py | 0 .../plane/db/models/project.py | 0 .../plane/db/models/recent_visit.py | 0 .../plane/db/models/session.py | 0 .../plane/db/models/social_connection.py | 0 apps/{server => api}/plane/db/models/state.py | 0 .../{server => api}/plane/db/models/sticky.py | 0 apps/{server => api}/plane/db/models/user.py | 0 apps/{server => api}/plane/db/models/view.py | 0 .../plane/db/models/webhook.py | 0 .../plane/db/models/workspace.py | 0 .../{server => api}/plane/license/__init__.py | 0 .../plane/license/api/__init__.py | 0 .../plane/license/api/permissions/__init__.py | 0 .../plane/license/api/permissions/instance.py | 0 .../plane/license/api/serializers/__init__.py | 0 .../plane/license/api/serializers/admin.py | 0 .../plane/license/api/serializers/base.py | 0 .../license/api/serializers/configuration.py | 0 .../plane/license/api/serializers/instance.py | 0 .../plane/license/api/serializers/user.py | 0 .../license/api/serializers/workspace.py | 0 .../plane/license/api/views/__init__.py | 0 .../plane/license/api/views/admin.py | 0 .../plane/license/api/views/base.py | 0 .../plane/license/api/views/configuration.py | 0 .../plane/license/api/views/instance.py | 0 .../plane/license/api/views/workspace.py | 0 apps/{server => api}/plane/license/apps.py | 0 .../plane/license/bgtasks/__init__.py | 0 .../plane/license/bgtasks/tracer.py | 0 .../plane/license/management/__init__.py | 0 .../license/management/commands/__init__.py | 0 .../management/commands/configure_instance.py | 0 .../management/commands/register_instance.py | 0 .../plane/license/migrations/0001_initial.py | 0 ...rsion_instance_current_version_and_more.py | 0 ..._title_alter_changelog_version_and_more.py | 0 ...deleted_at_instance_deleted_at_and_more.py | 0 ...ename_product_instance_edition_and_more.py | 0 .../plane/license/migrations/__init__.py | 0 .../plane/license/models/__init__.py | 0 .../plane/license/models/instance.py | 0 apps/{server => api}/plane/license/urls.py | 0 .../plane/license/utils/__init__.py | 0 .../plane/license/utils/encryption.py | 0 .../plane/license/utils/instance_value.py | 0 .../plane/middleware/__init__.py | 0 apps/{server => api}/plane/middleware/apps.py | 0 .../plane/middleware/logger.py | 0 .../plane/seeds/data/issues.json | 0 .../plane/seeds/data/labels.json | 0 .../plane/seeds/data/projects.json | 0 .../plane/seeds/data/states.json | 0 .../plane/settings/__init__.py | 0 apps/{server => api}/plane/settings/common.py | 0 apps/{server => api}/plane/settings/local.py | 0 .../plane/settings/production.py | 0 apps/{server => api}/plane/settings/redis.py | 0 .../{server => api}/plane/settings/storage.py | 0 apps/{server => api}/plane/settings/test.py | 0 apps/{server => api}/plane/space/__init__.py | 0 apps/{server => api}/plane/space/apps.py | 0 .../plane/space/serializer/__init__.py | 0 .../plane/space/serializer/base.py | 0 .../plane/space/serializer/cycle.py | 0 .../plane/space/serializer/intake.py | 0 .../plane/space/serializer/issue.py | 0 .../plane/space/serializer/module.py | 0 .../plane/space/serializer/project.py | 0 .../plane/space/serializer/state.py | 0 .../plane/space/serializer/user.py | 0 .../plane/space/serializer/workspace.py | 0 .../plane/space/urls/__init__.py | 0 .../{server => api}/plane/space/urls/asset.py | 0 .../plane/space/urls/intake.py | 0 .../{server => api}/plane/space/urls/issue.py | 0 .../plane/space/urls/project.py | 0 .../plane/space/utils/grouper.py | 0 .../plane/space/views/__init__.py | 0 .../plane/space/views/asset.py | 0 .../{server => api}/plane/space/views/base.py | 0 .../plane/space/views/cycle.py | 0 .../plane/space/views/intake.py | 0 .../plane/space/views/issue.py | 0 .../plane/space/views/label.py | 0 .../{server => api}/plane/space/views/meta.py | 0 .../plane/space/views/module.py | 0 .../plane/space/views/project.py | 0 .../plane/space/views/state.py | 0 .../plane/static/css/style.css | 0 apps/{server => api}/plane/static/humans.txt | 0 .../{server => api}/plane/static/js/script.js | 0 apps/{server => api}/plane/tests/README.md | 0 .../plane/tests/TESTING_GUIDE.md | 0 apps/{server => api}/plane/tests/__init__.py | 0 apps/{server => api}/plane/tests/apps.py | 0 apps/{server => api}/plane/tests/conftest.py | 0 .../plane/tests/conftest_external.py | 0 .../plane/tests/contract/__init__.py | 0 .../plane/tests/contract/api/__init__.py | 0 .../plane/tests/contract/app/__init__.py | 0 .../tests/contract/app/test_api_token.py | 0 .../tests/contract/app/test_authentication.py | 0 .../tests/contract/app/test_project_app.py | 0 .../tests/contract/app/test_workspace_app.py | 0 apps/{server => api}/plane/tests/factories.py | 0 .../plane/tests/smoke/__init__.py | 0 .../plane/tests/smoke/test_auth_smoke.py | 0 .../plane/tests/unit/__init__.py | 0 .../plane/tests/unit/models/__init__.py | 0 .../tests/unit/models/test_workspace_model.py | 0 .../plane/tests/unit/serializers/__init__.py | 0 .../serializers/test_issue_recent_visit.py | 0 .../tests/unit/serializers/test_workspace.py | 0 .../plane/tests/unit/utils/__init__.py | 0 .../plane/tests/unit/utils/test_uuid.py | 0 apps/{server => api}/plane/urls.py | 0 apps/{server => api}/plane/utils/__init__.py | 0 .../plane/utils/analytics_plot.py | 0 .../plane/utils/build_chart.py | 0 apps/{server => api}/plane/utils/cache.py | 0 apps/{server => api}/plane/utils/constants.py | 0 .../{server => api}/plane/utils/date_utils.py | 0 .../plane/utils/error_codes.py | 0 .../plane/utils/exception_logger.py | 0 .../plane/utils/global_paginator.py | 0 apps/{server => api}/plane/utils/grouper.py | 0 apps/{server => api}/plane/utils/host.py | 0 .../plane/utils/html_processor.py | 0 apps/{server => api}/plane/utils/imports.py | 0 .../{server => api}/plane/utils/ip_address.py | 0 .../plane/utils/issue_filters.py | 0 .../plane/utils/issue_relation_mapper.py | 0 .../plane/utils/issue_search.py | 0 apps/{server => api}/plane/utils/logging.py | 0 apps/{server => api}/plane/utils/markdown.py | 0 .../plane/utils/order_queryset.py | 0 apps/{server => api}/plane/utils/paginator.py | 0 .../plane/utils/path_validator.py | 0 apps/{server => api}/plane/utils/telemetry.py | 0 .../plane/utils/timezone_converter.py | 0 apps/{server => api}/plane/utils/url.py | 0 apps/{server => api}/plane/utils/uuid.py | 0 apps/{server => api}/plane/web/__init__.py | 0 apps/{server => api}/plane/web/apps.py | 0 apps/{server => api}/plane/web/urls.py | 0 apps/{server => api}/plane/web/views.py | 0 apps/{server => api}/plane/wsgi.py | 0 apps/{server => api}/pyproject.toml | 0 apps/{server => api}/pytest.ini | 0 apps/{server => api}/requirements.txt | 0 apps/{server => api}/requirements/base.txt | 0 apps/{server => api}/requirements/local.txt | 0 .../requirements/production.txt | 0 apps/{server => api}/requirements/test.txt | 0 apps/{server => api}/run_tests.py | 0 apps/{server => api}/run_tests.sh | 0 .../templates/admin/base_site.html | 0 apps/{server => api}/templates/base.html | 0 .../templates/csrf_failure.html | 0 .../emails/auth/forgot_password.html | 0 .../templates/emails/auth/magic_signin.html | 0 .../templates/emails/exports/analytics.html | 0 .../invitations/project_invitation.html | 0 .../invitations/workspace_invitation.html | 0 .../emails/notifications/issue-updates.html | 0 .../notifications/project_addition.html | 0 .../notifications/webhook-deactivate.html | 0 .../templates/emails/test_email.html | 0 .../emails/user/user_activation.html | 0 .../emails/user/user_deactivation.html | 0 docker-compose-local.yml | 22 +++++++-------- docker-compose.yml | 28 ++++++++----------- setup.sh | 10 +++---- 554 files changed, 39 insertions(+), 43 deletions(-) rename apps/{server => api}/.coveragerc (100%) rename apps/{server => api}/.env.example (100%) rename apps/{server => api}/Dockerfile.api (100%) rename apps/{server => api}/Dockerfile.dev (100%) rename apps/{server => api}/bin/docker-entrypoint-api-local.sh (100%) rename apps/{server => api}/bin/docker-entrypoint-api.sh (100%) rename apps/{server => api}/bin/docker-entrypoint-beat.sh (100%) rename apps/{server => api}/bin/docker-entrypoint-migrator.sh (100%) rename apps/{server => api}/bin/docker-entrypoint-worker.sh (100%) rename apps/{server => api}/manage.py (100%) rename apps/{server => api}/package.json (100%) rename apps/{server => api}/plane/__init__.py (100%) rename apps/{server => api}/plane/analytics/__init__.py (100%) rename apps/{server => api}/plane/analytics/apps.py (100%) rename apps/{server => api}/plane/api/__init__.py (100%) rename apps/{server => api}/plane/api/apps.py (100%) rename apps/{server => api}/plane/api/middleware/__init__.py (100%) rename apps/{server => api}/plane/api/middleware/api_authentication.py (100%) rename apps/{server => api}/plane/api/rate_limit.py (100%) rename apps/{server => api}/plane/api/serializers/__init__.py (100%) rename apps/{server => api}/plane/api/serializers/base.py (100%) rename apps/{server => api}/plane/api/serializers/cycle.py (100%) rename apps/{server => api}/plane/api/serializers/estimate.py (100%) rename apps/{server => api}/plane/api/serializers/intake.py (100%) rename apps/{server => api}/plane/api/serializers/issue.py (100%) rename apps/{server => api}/plane/api/serializers/module.py (100%) rename apps/{server => api}/plane/api/serializers/project.py (100%) rename apps/{server => api}/plane/api/serializers/state.py (100%) rename apps/{server => api}/plane/api/serializers/user.py (100%) rename apps/{server => api}/plane/api/serializers/workspace.py (100%) rename apps/{server => api}/plane/api/urls/__init__.py (100%) rename apps/{server => api}/plane/api/urls/cycle.py (100%) rename apps/{server => api}/plane/api/urls/intake.py (100%) rename apps/{server => api}/plane/api/urls/issue.py (100%) rename apps/{server => api}/plane/api/urls/member.py (100%) rename apps/{server => api}/plane/api/urls/module.py (100%) rename apps/{server => api}/plane/api/urls/project.py (100%) rename apps/{server => api}/plane/api/urls/state.py (100%) rename apps/{server => api}/plane/api/views/__init__.py (100%) rename apps/{server => api}/plane/api/views/base.py (100%) rename apps/{server => api}/plane/api/views/cycle.py (100%) rename apps/{server => api}/plane/api/views/intake.py (100%) rename apps/{server => api}/plane/api/views/issue.py (100%) rename apps/{server => api}/plane/api/views/member.py (100%) rename apps/{server => api}/plane/api/views/module.py (100%) rename apps/{server => api}/plane/api/views/project.py (100%) rename apps/{server => api}/plane/api/views/state.py (100%) rename apps/{server => api}/plane/app/__init__.py (100%) rename apps/{server => api}/plane/app/apps.py (100%) rename apps/{server => api}/plane/app/middleware/__init__.py (100%) rename apps/{server => api}/plane/app/middleware/api_authentication.py (100%) rename apps/{server => api}/plane/app/permissions/__init__.py (100%) rename apps/{server => api}/plane/app/permissions/base.py (100%) rename apps/{server => api}/plane/app/permissions/project.py (100%) rename apps/{server => api}/plane/app/permissions/workspace.py (100%) rename apps/{server => api}/plane/app/serializers/__init__.py (100%) rename apps/{server => api}/plane/app/serializers/analytic.py (100%) rename apps/{server => api}/plane/app/serializers/api.py (100%) rename apps/{server => api}/plane/app/serializers/asset.py (100%) rename apps/{server => api}/plane/app/serializers/base.py (100%) rename apps/{server => api}/plane/app/serializers/cycle.py (100%) rename apps/{server => api}/plane/app/serializers/draft.py (100%) rename apps/{server => api}/plane/app/serializers/estimate.py (100%) rename apps/{server => api}/plane/app/serializers/exporter.py (100%) rename apps/{server => api}/plane/app/serializers/favorite.py (100%) rename apps/{server => api}/plane/app/serializers/importer.py (100%) rename apps/{server => api}/plane/app/serializers/intake.py (100%) rename apps/{server => api}/plane/app/serializers/issue.py (100%) rename apps/{server => api}/plane/app/serializers/module.py (100%) rename apps/{server => api}/plane/app/serializers/notification.py (100%) rename apps/{server => api}/plane/app/serializers/page.py (100%) rename apps/{server => api}/plane/app/serializers/project.py (100%) rename apps/{server => api}/plane/app/serializers/state.py (100%) rename apps/{server => api}/plane/app/serializers/user.py (100%) rename apps/{server => api}/plane/app/serializers/view.py (100%) rename apps/{server => api}/plane/app/serializers/webhook.py (100%) rename apps/{server => api}/plane/app/serializers/workspace.py (100%) rename apps/{server => api}/plane/app/urls/__init__.py (100%) rename apps/{server => api}/plane/app/urls/analytic.py (100%) rename apps/{server => api}/plane/app/urls/api.py (100%) rename apps/{server => api}/plane/app/urls/asset.py (100%) rename apps/{server => api}/plane/app/urls/cycle.py (100%) rename apps/{server => api}/plane/app/urls/estimate.py (100%) rename apps/{server => api}/plane/app/urls/external.py (100%) rename apps/{server => api}/plane/app/urls/intake.py (100%) rename apps/{server => api}/plane/app/urls/issue.py (100%) rename apps/{server => api}/plane/app/urls/module.py (100%) rename apps/{server => api}/plane/app/urls/notification.py (100%) rename apps/{server => api}/plane/app/urls/page.py (100%) rename apps/{server => api}/plane/app/urls/project.py (100%) rename apps/{server => api}/plane/app/urls/search.py (100%) rename apps/{server => api}/plane/app/urls/state.py (100%) rename apps/{server => api}/plane/app/urls/timezone.py (100%) rename apps/{server => api}/plane/app/urls/user.py (100%) rename apps/{server => api}/plane/app/urls/views.py (100%) rename apps/{server => api}/plane/app/urls/webhook.py (100%) rename apps/{server => api}/plane/app/urls/workspace.py (100%) rename apps/{server => api}/plane/app/views/__init__.py (100%) rename apps/{server => api}/plane/app/views/analytic/advance.py (100%) rename apps/{server => api}/plane/app/views/analytic/base.py (100%) rename apps/{server => api}/plane/app/views/analytic/project_analytics.py (100%) rename apps/{server => api}/plane/app/views/api.py (100%) rename apps/{server => api}/plane/app/views/asset/base.py (100%) rename apps/{server => api}/plane/app/views/asset/v2.py (100%) rename apps/{server => api}/plane/app/views/base.py (100%) rename apps/{server => api}/plane/app/views/cycle/archive.py (100%) rename apps/{server => api}/plane/app/views/cycle/base.py (100%) rename apps/{server => api}/plane/app/views/cycle/issue.py (100%) rename apps/{server => api}/plane/app/views/error_404.py (100%) rename apps/{server => api}/plane/app/views/estimate/base.py (100%) rename apps/{server => api}/plane/app/views/exporter/base.py (100%) rename apps/{server => api}/plane/app/views/external/base.py (100%) rename apps/{server => api}/plane/app/views/intake/base.py (100%) rename apps/{server => api}/plane/app/views/issue/activity.py (100%) rename apps/{server => api}/plane/app/views/issue/archive.py (100%) rename apps/{server => api}/plane/app/views/issue/attachment.py (100%) rename apps/{server => api}/plane/app/views/issue/base.py (100%) rename apps/{server => api}/plane/app/views/issue/comment.py (100%) rename apps/{server => api}/plane/app/views/issue/label.py (100%) rename apps/{server => api}/plane/app/views/issue/link.py (100%) rename apps/{server => api}/plane/app/views/issue/reaction.py (100%) rename apps/{server => api}/plane/app/views/issue/relation.py (100%) rename apps/{server => api}/plane/app/views/issue/sub_issue.py (100%) rename apps/{server => api}/plane/app/views/issue/subscriber.py (100%) rename apps/{server => api}/plane/app/views/issue/version.py (100%) rename apps/{server => api}/plane/app/views/module/archive.py (100%) rename apps/{server => api}/plane/app/views/module/base.py (100%) rename apps/{server => api}/plane/app/views/module/issue.py (100%) rename apps/{server => api}/plane/app/views/notification/base.py (100%) rename apps/{server => api}/plane/app/views/page/base.py (100%) rename apps/{server => api}/plane/app/views/page/version.py (100%) rename apps/{server => api}/plane/app/views/project/base.py (100%) rename apps/{server => api}/plane/app/views/project/invite.py (100%) rename apps/{server => api}/plane/app/views/project/member.py (100%) rename apps/{server => api}/plane/app/views/search/base.py (100%) rename apps/{server => api}/plane/app/views/search/issue.py (100%) rename apps/{server => api}/plane/app/views/state/base.py (100%) rename apps/{server => api}/plane/app/views/timezone/base.py (100%) rename apps/{server => api}/plane/app/views/user/base.py (100%) rename apps/{server => api}/plane/app/views/view/base.py (100%) rename apps/{server => api}/plane/app/views/webhook/base.py (100%) rename apps/{server => api}/plane/app/views/workspace/base.py (100%) rename apps/{server => api}/plane/app/views/workspace/cycle.py (100%) rename apps/{server => api}/plane/app/views/workspace/draft.py (100%) rename apps/{server => api}/plane/app/views/workspace/estimate.py (100%) rename apps/{server => api}/plane/app/views/workspace/favorite.py (100%) rename apps/{server => api}/plane/app/views/workspace/home.py (100%) rename apps/{server => api}/plane/app/views/workspace/invite.py (100%) rename apps/{server => api}/plane/app/views/workspace/label.py (100%) rename apps/{server => api}/plane/app/views/workspace/member.py (100%) rename apps/{server => api}/plane/app/views/workspace/module.py (100%) rename apps/{server => api}/plane/app/views/workspace/quick_link.py (100%) rename apps/{server => api}/plane/app/views/workspace/recent_visit.py (100%) rename apps/{server => api}/plane/app/views/workspace/state.py (100%) rename apps/{server => api}/plane/app/views/workspace/sticky.py (100%) rename apps/{server => api}/plane/app/views/workspace/user.py (100%) rename apps/{server => api}/plane/app/views/workspace/user_preference.py (100%) rename apps/{server => api}/plane/asgi.py (100%) rename apps/{server => api}/plane/authentication/__init__.py (100%) rename apps/{server => api}/plane/authentication/adapter/__init__.py (100%) rename apps/{server => api}/plane/authentication/adapter/base.py (100%) rename apps/{server => api}/plane/authentication/adapter/credential.py (100%) rename apps/{server => api}/plane/authentication/adapter/error.py (100%) rename apps/{server => api}/plane/authentication/adapter/exception.py (100%) rename apps/{server => api}/plane/authentication/adapter/oauth.py (100%) rename apps/{server => api}/plane/authentication/apps.py (100%) rename apps/{server => api}/plane/authentication/middleware/__init__.py (100%) rename apps/{server => api}/plane/authentication/middleware/session.py (100%) rename apps/{server => api}/plane/authentication/provider/__init__.py (100%) rename apps/{server => api}/plane/authentication/provider/credentials/__init__.py (100%) rename apps/{server => api}/plane/authentication/provider/credentials/email.py (100%) rename apps/{server => api}/plane/authentication/provider/credentials/magic_code.py (100%) rename apps/{server => api}/plane/authentication/provider/oauth/__init__.py (100%) rename apps/{server => api}/plane/authentication/provider/oauth/github.py (100%) rename apps/{server => api}/plane/authentication/provider/oauth/gitlab.py (100%) rename apps/{server => api}/plane/authentication/provider/oauth/google.py (100%) rename apps/{server => api}/plane/authentication/rate_limit.py (100%) rename apps/{server => api}/plane/authentication/session.py (100%) rename apps/{server => api}/plane/authentication/urls.py (100%) rename apps/{server => api}/plane/authentication/utils/host.py (100%) rename apps/{server => api}/plane/authentication/utils/login.py (100%) rename apps/{server => api}/plane/authentication/utils/redirection_path.py (100%) rename apps/{server => api}/plane/authentication/utils/user_auth_workflow.py (100%) rename apps/{server => api}/plane/authentication/utils/workspace_project_join.py (100%) rename apps/{server => api}/plane/authentication/views/__init__.py (100%) rename apps/{server => api}/plane/authentication/views/app/check.py (100%) rename apps/{server => api}/plane/authentication/views/app/email.py (100%) rename apps/{server => api}/plane/authentication/views/app/github.py (100%) rename apps/{server => api}/plane/authentication/views/app/gitlab.py (100%) rename apps/{server => api}/plane/authentication/views/app/google.py (100%) rename apps/{server => api}/plane/authentication/views/app/magic.py (100%) rename apps/{server => api}/plane/authentication/views/app/password_management.py (100%) rename apps/{server => api}/plane/authentication/views/app/signout.py (100%) rename apps/{server => api}/plane/authentication/views/common.py (100%) rename apps/{server => api}/plane/authentication/views/space/check.py (100%) rename apps/{server => api}/plane/authentication/views/space/email.py (100%) rename apps/{server => api}/plane/authentication/views/space/github.py (100%) rename apps/{server => api}/plane/authentication/views/space/gitlab.py (100%) rename apps/{server => api}/plane/authentication/views/space/google.py (100%) rename apps/{server => api}/plane/authentication/views/space/magic.py (100%) rename apps/{server => api}/plane/authentication/views/space/password_management.py (100%) rename apps/{server => api}/plane/authentication/views/space/signout.py (100%) rename apps/{server => api}/plane/bgtasks/__init__.py (100%) rename apps/{server => api}/plane/bgtasks/analytic_plot_export.py (100%) rename apps/{server => api}/plane/bgtasks/api_logs_task.py (100%) rename apps/{server => api}/plane/bgtasks/apps.py (100%) rename apps/{server => api}/plane/bgtasks/copy_s3_object.py (100%) rename apps/{server => api}/plane/bgtasks/deletion_task.py (100%) rename apps/{server => api}/plane/bgtasks/dummy_data_task.py (100%) rename apps/{server => api}/plane/bgtasks/email_notification_task.py (100%) rename apps/{server => api}/plane/bgtasks/event_tracking_task.py (100%) rename apps/{server => api}/plane/bgtasks/export_task.py (100%) rename apps/{server => api}/plane/bgtasks/exporter_expired_task.py (100%) rename apps/{server => api}/plane/bgtasks/file_asset_task.py (100%) rename apps/{server => api}/plane/bgtasks/forgot_password_task.py (100%) rename apps/{server => api}/plane/bgtasks/issue_activities_task.py (100%) rename apps/{server => api}/plane/bgtasks/issue_automation_task.py (100%) rename apps/{server => api}/plane/bgtasks/issue_description_version_sync.py (100%) rename apps/{server => api}/plane/bgtasks/issue_description_version_task.py (100%) rename apps/{server => api}/plane/bgtasks/issue_version_sync.py (100%) rename apps/{server => api}/plane/bgtasks/magic_link_code_task.py (100%) rename apps/{server => api}/plane/bgtasks/notification_task.py (100%) rename apps/{server => api}/plane/bgtasks/page_transaction_task.py (100%) rename apps/{server => api}/plane/bgtasks/page_version_task.py (100%) rename apps/{server => api}/plane/bgtasks/project_add_user_email_task.py (100%) rename apps/{server => api}/plane/bgtasks/project_invitation_task.py (100%) rename apps/{server => api}/plane/bgtasks/recent_visited_task.py (100%) rename apps/{server => api}/plane/bgtasks/storage_metadata_task.py (100%) rename apps/{server => api}/plane/bgtasks/user_activation_email_task.py (100%) rename apps/{server => api}/plane/bgtasks/user_deactivation_email_task.py (100%) rename apps/{server => api}/plane/bgtasks/webhook_task.py (100%) rename apps/{server => api}/plane/bgtasks/work_item_link_task.py (100%) rename apps/{server => api}/plane/bgtasks/workspace_invitation_task.py (100%) rename apps/{server => api}/plane/bgtasks/workspace_seed_task.py (100%) rename apps/{server => api}/plane/celery.py (100%) rename apps/{server => api}/plane/db/__init__.py (100%) rename apps/{server => api}/plane/db/apps.py (100%) rename apps/{server => api}/plane/db/management/__init__.py (100%) rename apps/{server => api}/plane/db/management/commands/__init__.py (100%) rename apps/{server => api}/plane/db/management/commands/activate_user.py (100%) rename apps/{server => api}/plane/db/management/commands/clear_cache.py (100%) rename apps/{server => api}/plane/db/management/commands/create_bucket.py (100%) rename apps/{server => api}/plane/db/management/commands/create_dummy_data.py (100%) rename apps/{server => api}/plane/db/management/commands/create_instance_admin.py (100%) rename apps/{server => api}/plane/db/management/commands/create_project_member.py (100%) rename apps/{server => api}/plane/db/management/commands/fix_duplicate_sequences.py (100%) rename apps/{server => api}/plane/db/management/commands/reset_password.py (100%) rename apps/{server => api}/plane/db/management/commands/sync_issue_description_version.py (100%) rename apps/{server => api}/plane/db/management/commands/sync_issue_version.py (100%) rename apps/{server => api}/plane/db/management/commands/test_email.py (100%) rename apps/{server => api}/plane/db/management/commands/update_bucket.py (100%) rename apps/{server => api}/plane/db/management/commands/update_deleted_workspace_slug.py (100%) rename apps/{server => api}/plane/db/management/commands/wait_for_db.py (100%) rename apps/{server => api}/plane/db/management/commands/wait_for_migrations.py (100%) rename apps/{server => api}/plane/db/migrations/0001_initial.py (100%) rename apps/{server => api}/plane/db/migrations/0002_auto_20221104_2239.py (100%) rename apps/{server => api}/plane/db/migrations/0003_auto_20221109_2320.py (100%) rename apps/{server => api}/plane/db/migrations/0004_alter_state_sequence.py (100%) rename apps/{server => api}/plane/db/migrations/0005_auto_20221114_2127.py (100%) rename apps/{server => api}/plane/db/migrations/0006_alter_cycle_status.py (100%) rename apps/{server => api}/plane/db/migrations/0007_label_parent.py (100%) rename apps/{server => api}/plane/db/migrations/0008_label_colour.py (100%) rename apps/{server => api}/plane/db/migrations/0009_auto_20221208_0310.py (100%) rename apps/{server => api}/plane/db/migrations/0010_auto_20221213_0037.py (100%) rename apps/{server => api}/plane/db/migrations/0011_auto_20221222_2357.py (100%) rename apps/{server => api}/plane/db/migrations/0012_auto_20230104_0117.py (100%) rename apps/{server => api}/plane/db/migrations/0013_auto_20230107_0041.py (100%) rename apps/{server => api}/plane/db/migrations/0014_alter_workspacememberinvite_unique_together.py (100%) rename apps/{server => api}/plane/db/migrations/0015_auto_20230107_1636.py (100%) rename apps/{server => api}/plane/db/migrations/0016_auto_20230107_1735.py (100%) rename apps/{server => api}/plane/db/migrations/0017_alter_workspace_unique_together.py (100%) rename apps/{server => api}/plane/db/migrations/0018_auto_20230130_0119.py (100%) rename apps/{server => api}/plane/db/migrations/0019_auto_20230131_0049.py (100%) rename apps/{server => api}/plane/db/migrations/0020_auto_20230214_0118.py (100%) rename apps/{server => api}/plane/db/migrations/0021_auto_20230223_0104.py (100%) rename apps/{server => api}/plane/db/migrations/0022_auto_20230307_0304.py (100%) rename apps/{server => api}/plane/db/migrations/0023_auto_20230316_0040.py (100%) rename apps/{server => api}/plane/db/migrations/0024_auto_20230322_0138.py (100%) rename apps/{server => api}/plane/db/migrations/0025_auto_20230331_0203.py (100%) rename apps/{server => api}/plane/db/migrations/0026_alter_projectmember_view_props.py (100%) rename apps/{server => api}/plane/db/migrations/0027_auto_20230409_0312.py (100%) rename apps/{server => api}/plane/db/migrations/0028_auto_20230414_1703.py (100%) rename apps/{server => api}/plane/db/migrations/0029_auto_20230502_0126.py (100%) rename apps/{server => api}/plane/db/migrations/0030_alter_estimatepoint_unique_together.py (100%) rename apps/{server => api}/plane/db/migrations/0031_analyticview.py (100%) rename apps/{server => api}/plane/db/migrations/0032_auto_20230520_2015.py (100%) rename apps/{server => api}/plane/db/migrations/0033_auto_20230618_2125.py (100%) rename apps/{server => api}/plane/db/migrations/0034_auto_20230628_1046.py (100%) rename apps/{server => api}/plane/db/migrations/0035_auto_20230704_2225.py (100%) rename apps/{server => api}/plane/db/migrations/0036_alter_workspace_organization_size.py (100%) rename apps/{server => api}/plane/db/migrations/0037_issue_archived_at_project_archive_in_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0038_auto_20230720_1505.py (100%) rename apps/{server => api}/plane/db/migrations/0039_auto_20230723_2203.py (100%) rename apps/{server => api}/plane/db/migrations/0040_projectmember_preferences_user_cover_image_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0041_cycle_sort_order_issuecomment_access_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0042_alter_analyticview_created_by_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0043_alter_analyticview_created_by_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0044_auto_20230913_0709.py (100%) rename apps/{server => api}/plane/db/migrations/0045_issueactivity_epoch_workspacemember_issue_props_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0046_label_sort_order_alter_analyticview_created_by_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0047_webhook_apitoken_description_apitoken_expired_at_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0048_auto_20231116_0713.py (100%) rename apps/{server => api}/plane/db/migrations/0049_auto_20231116_0713.py (100%) rename apps/{server => api}/plane/db/migrations/0050_user_use_case_alter_workspace_organization_size.py (100%) rename apps/{server => api}/plane/db/migrations/0051_cycle_external_id_cycle_external_source_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0052_auto_20231220_1141.py (100%) rename apps/{server => api}/plane/db/migrations/0053_auto_20240102_1315.py (100%) rename apps/{server => api}/plane/db/migrations/0054_dashboard_widget_dashboardwidget.py (100%) rename apps/{server => api}/plane/db/migrations/0055_auto_20240108_0648.py (100%) rename apps/{server => api}/plane/db/migrations/0056_usernotificationpreference_emailnotificationlog.py (100%) rename apps/{server => api}/plane/db/migrations/0057_auto_20240122_0901.py (100%) rename apps/{server => api}/plane/db/migrations/0058_alter_moduleissue_issue_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0059_auto_20240208_0957.py (100%) rename apps/{server => api}/plane/db/migrations/0060_cycle_progress_snapshot.py (100%) rename apps/{server => api}/plane/db/migrations/0061_project_logo_props.py (100%) rename apps/{server => api}/plane/db/migrations/0062_cycle_archived_at_module_archived_at_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0063_state_is_triage_alter_state_group.py (100%) rename apps/{server => api}/plane/db/migrations/0064_auto_20240409_1134.py (100%) rename apps/{server => api}/plane/db/migrations/0065_auto_20240415_0937.py (100%) rename apps/{server => api}/plane/db/migrations/0066_account_id_token_cycle_logo_props_module_logo_props.py (100%) rename apps/{server => api}/plane/db/migrations/0067_issue_estimate.py (100%) rename apps/{server => api}/plane/db/migrations/0068_remove_pagelabel_project_remove_pagelog_project_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0069_alter_account_provider_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0070_apitoken_is_service_exporterhistory_filters_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0071_rename_issueproperty_issueuserproperty_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0072_issueattachment_external_id_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0073_alter_commentreaction_unique_together_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0074_deploy_board_and_project_issues.py (100%) rename apps/{server => api}/plane/db/migrations/0075_alter_fileasset_asset.py (100%) rename apps/{server => api}/plane/db/migrations/0076_alter_projectmember_role_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0077_draftissue_cycle_user_timezone_project_user_timezone_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0078_fileasset_comment_fileasset_entity_type_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0079_auto_20241009_0619.py (100%) rename apps/{server => api}/plane/db/migrations/0080_fileasset_draft_issue_alter_fileasset_entity_type.py (100%) rename apps/{server => api}/plane/db/migrations/0081_remove_globalview_created_by_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0082_alter_issue_managers_alter_cycleissue_issue_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0083_device_workspace_timezone_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0084_remove_label_label_unique_name_project_when_deleted_at_null_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0085_intake_intakeissue_remove_inboxissue_created_by_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0086_issueversion_alter_teampage_unique_together_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0087_remove_issueversion_description_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py (100%) rename apps/{server => api}/plane/db/migrations/0089_workspacehomepreference_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0090_rename_dashboard_deprecateddashboard_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0091_issuecomment_edited_at_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0092_alter_deprecateddashboardwidget_unique_together_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0093_page_moved_to_page_page_moved_to_project_and_more.py (100%) rename apps/{server => api}/plane/db/migrations/0094_auto_20250425_0902.py (100%) rename apps/{server => api}/plane/db/migrations/0095_page_external_id_page_external_source.py (100%) rename apps/{server => api}/plane/db/migrations/0096_user_is_email_valid_user_masked_at.py (100%) rename apps/{server => api}/plane/db/migrations/0097_project_external_id_project_external_source.py (100%) rename apps/{server => api}/plane/db/migrations/__init__.py (100%) rename apps/{server => api}/plane/db/mixins.py (100%) rename apps/{server => api}/plane/db/models/__init__.py (100%) rename apps/{server => api}/plane/db/models/analytic.py (100%) rename apps/{server => api}/plane/db/models/api.py (100%) rename apps/{server => api}/plane/db/models/asset.py (100%) rename apps/{server => api}/plane/db/models/base.py (100%) rename apps/{server => api}/plane/db/models/cycle.py (100%) rename apps/{server => api}/plane/db/models/deploy_board.py (100%) rename apps/{server => api}/plane/db/models/device.py (100%) rename apps/{server => api}/plane/db/models/draft.py (100%) rename apps/{server => api}/plane/db/models/estimate.py (100%) rename apps/{server => api}/plane/db/models/exporter.py (100%) rename apps/{server => api}/plane/db/models/favorite.py (100%) rename apps/{server => api}/plane/db/models/importer.py (100%) rename apps/{server => api}/plane/db/models/intake.py (100%) rename apps/{server => api}/plane/db/models/integration/__init__.py (100%) rename apps/{server => api}/plane/db/models/integration/base.py (100%) rename apps/{server => api}/plane/db/models/integration/github.py (100%) rename apps/{server => api}/plane/db/models/integration/slack.py (100%) rename apps/{server => api}/plane/db/models/issue.py (100%) rename apps/{server => api}/plane/db/models/issue_type.py (100%) rename apps/{server => api}/plane/db/models/label.py (100%) rename apps/{server => api}/plane/db/models/module.py (100%) rename apps/{server => api}/plane/db/models/notification.py (100%) rename apps/{server => api}/plane/db/models/page.py (100%) rename apps/{server => api}/plane/db/models/project.py (100%) rename apps/{server => api}/plane/db/models/recent_visit.py (100%) rename apps/{server => api}/plane/db/models/session.py (100%) rename apps/{server => api}/plane/db/models/social_connection.py (100%) rename apps/{server => api}/plane/db/models/state.py (100%) rename apps/{server => api}/plane/db/models/sticky.py (100%) rename apps/{server => api}/plane/db/models/user.py (100%) rename apps/{server => api}/plane/db/models/view.py (100%) rename apps/{server => api}/plane/db/models/webhook.py (100%) rename apps/{server => api}/plane/db/models/workspace.py (100%) rename apps/{server => api}/plane/license/__init__.py (100%) rename apps/{server => api}/plane/license/api/__init__.py (100%) rename apps/{server => api}/plane/license/api/permissions/__init__.py (100%) rename apps/{server => api}/plane/license/api/permissions/instance.py (100%) rename apps/{server => api}/plane/license/api/serializers/__init__.py (100%) rename apps/{server => api}/plane/license/api/serializers/admin.py (100%) rename apps/{server => api}/plane/license/api/serializers/base.py (100%) rename apps/{server => api}/plane/license/api/serializers/configuration.py (100%) rename apps/{server => api}/plane/license/api/serializers/instance.py (100%) rename apps/{server => api}/plane/license/api/serializers/user.py (100%) rename apps/{server => api}/plane/license/api/serializers/workspace.py (100%) rename apps/{server => api}/plane/license/api/views/__init__.py (100%) rename apps/{server => api}/plane/license/api/views/admin.py (100%) rename apps/{server => api}/plane/license/api/views/base.py (100%) rename apps/{server => api}/plane/license/api/views/configuration.py (100%) rename apps/{server => api}/plane/license/api/views/instance.py (100%) rename apps/{server => api}/plane/license/api/views/workspace.py (100%) rename apps/{server => api}/plane/license/apps.py (100%) rename apps/{server => api}/plane/license/bgtasks/__init__.py (100%) rename apps/{server => api}/plane/license/bgtasks/tracer.py (100%) rename apps/{server => api}/plane/license/management/__init__.py (100%) rename apps/{server => api}/plane/license/management/commands/__init__.py (100%) rename apps/{server => api}/plane/license/management/commands/configure_instance.py (100%) rename apps/{server => api}/plane/license/management/commands/register_instance.py (100%) rename apps/{server => api}/plane/license/migrations/0001_initial.py (100%) rename apps/{server => api}/plane/license/migrations/0002_rename_version_instance_current_version_and_more.py (100%) rename apps/{server => api}/plane/license/migrations/0003_alter_changelog_title_alter_changelog_version_and_more.py (100%) rename apps/{server => api}/plane/license/migrations/0004_changelog_deleted_at_instance_deleted_at_and_more.py (100%) rename apps/{server => api}/plane/license/migrations/0005_rename_product_instance_edition_and_more.py (100%) rename apps/{server => api}/plane/license/migrations/__init__.py (100%) rename apps/{server => api}/plane/license/models/__init__.py (100%) rename apps/{server => api}/plane/license/models/instance.py (100%) rename apps/{server => api}/plane/license/urls.py (100%) rename apps/{server => api}/plane/license/utils/__init__.py (100%) rename apps/{server => api}/plane/license/utils/encryption.py (100%) rename apps/{server => api}/plane/license/utils/instance_value.py (100%) rename apps/{server => api}/plane/middleware/__init__.py (100%) rename apps/{server => api}/plane/middleware/apps.py (100%) rename apps/{server => api}/plane/middleware/logger.py (100%) rename apps/{server => api}/plane/seeds/data/issues.json (100%) rename apps/{server => api}/plane/seeds/data/labels.json (100%) rename apps/{server => api}/plane/seeds/data/projects.json (100%) rename apps/{server => api}/plane/seeds/data/states.json (100%) rename apps/{server => api}/plane/settings/__init__.py (100%) rename apps/{server => api}/plane/settings/common.py (100%) rename apps/{server => api}/plane/settings/local.py (100%) rename apps/{server => api}/plane/settings/production.py (100%) rename apps/{server => api}/plane/settings/redis.py (100%) rename apps/{server => api}/plane/settings/storage.py (100%) rename apps/{server => api}/plane/settings/test.py (100%) rename apps/{server => api}/plane/space/__init__.py (100%) rename apps/{server => api}/plane/space/apps.py (100%) rename apps/{server => api}/plane/space/serializer/__init__.py (100%) rename apps/{server => api}/plane/space/serializer/base.py (100%) rename apps/{server => api}/plane/space/serializer/cycle.py (100%) rename apps/{server => api}/plane/space/serializer/intake.py (100%) rename apps/{server => api}/plane/space/serializer/issue.py (100%) rename apps/{server => api}/plane/space/serializer/module.py (100%) rename apps/{server => api}/plane/space/serializer/project.py (100%) rename apps/{server => api}/plane/space/serializer/state.py (100%) rename apps/{server => api}/plane/space/serializer/user.py (100%) rename apps/{server => api}/plane/space/serializer/workspace.py (100%) rename apps/{server => api}/plane/space/urls/__init__.py (100%) rename apps/{server => api}/plane/space/urls/asset.py (100%) rename apps/{server => api}/plane/space/urls/intake.py (100%) rename apps/{server => api}/plane/space/urls/issue.py (100%) rename apps/{server => api}/plane/space/urls/project.py (100%) rename apps/{server => api}/plane/space/utils/grouper.py (100%) rename apps/{server => api}/plane/space/views/__init__.py (100%) rename apps/{server => api}/plane/space/views/asset.py (100%) rename apps/{server => api}/plane/space/views/base.py (100%) rename apps/{server => api}/plane/space/views/cycle.py (100%) rename apps/{server => api}/plane/space/views/intake.py (100%) rename apps/{server => api}/plane/space/views/issue.py (100%) rename apps/{server => api}/plane/space/views/label.py (100%) rename apps/{server => api}/plane/space/views/meta.py (100%) rename apps/{server => api}/plane/space/views/module.py (100%) rename apps/{server => api}/plane/space/views/project.py (100%) rename apps/{server => api}/plane/space/views/state.py (100%) rename apps/{server => api}/plane/static/css/style.css (100%) rename apps/{server => api}/plane/static/humans.txt (100%) rename apps/{server => api}/plane/static/js/script.js (100%) rename apps/{server => api}/plane/tests/README.md (100%) rename apps/{server => api}/plane/tests/TESTING_GUIDE.md (100%) rename apps/{server => api}/plane/tests/__init__.py (100%) rename apps/{server => api}/plane/tests/apps.py (100%) rename apps/{server => api}/plane/tests/conftest.py (100%) rename apps/{server => api}/plane/tests/conftest_external.py (100%) rename apps/{server => api}/plane/tests/contract/__init__.py (100%) rename apps/{server => api}/plane/tests/contract/api/__init__.py (100%) rename apps/{server => api}/plane/tests/contract/app/__init__.py (100%) rename apps/{server => api}/plane/tests/contract/app/test_api_token.py (100%) rename apps/{server => api}/plane/tests/contract/app/test_authentication.py (100%) rename apps/{server => api}/plane/tests/contract/app/test_project_app.py (100%) rename apps/{server => api}/plane/tests/contract/app/test_workspace_app.py (100%) rename apps/{server => api}/plane/tests/factories.py (100%) rename apps/{server => api}/plane/tests/smoke/__init__.py (100%) rename apps/{server => api}/plane/tests/smoke/test_auth_smoke.py (100%) rename apps/{server => api}/plane/tests/unit/__init__.py (100%) rename apps/{server => api}/plane/tests/unit/models/__init__.py (100%) rename apps/{server => api}/plane/tests/unit/models/test_workspace_model.py (100%) rename apps/{server => api}/plane/tests/unit/serializers/__init__.py (100%) rename apps/{server => api}/plane/tests/unit/serializers/test_issue_recent_visit.py (100%) rename apps/{server => api}/plane/tests/unit/serializers/test_workspace.py (100%) rename apps/{server => api}/plane/tests/unit/utils/__init__.py (100%) rename apps/{server => api}/plane/tests/unit/utils/test_uuid.py (100%) rename apps/{server => api}/plane/urls.py (100%) rename apps/{server => api}/plane/utils/__init__.py (100%) rename apps/{server => api}/plane/utils/analytics_plot.py (100%) rename apps/{server => api}/plane/utils/build_chart.py (100%) rename apps/{server => api}/plane/utils/cache.py (100%) rename apps/{server => api}/plane/utils/constants.py (100%) rename apps/{server => api}/plane/utils/date_utils.py (100%) rename apps/{server => api}/plane/utils/error_codes.py (100%) rename apps/{server => api}/plane/utils/exception_logger.py (100%) rename apps/{server => api}/plane/utils/global_paginator.py (100%) rename apps/{server => api}/plane/utils/grouper.py (100%) rename apps/{server => api}/plane/utils/host.py (100%) rename apps/{server => api}/plane/utils/html_processor.py (100%) rename apps/{server => api}/plane/utils/imports.py (100%) rename apps/{server => api}/plane/utils/ip_address.py (100%) rename apps/{server => api}/plane/utils/issue_filters.py (100%) rename apps/{server => api}/plane/utils/issue_relation_mapper.py (100%) rename apps/{server => api}/plane/utils/issue_search.py (100%) rename apps/{server => api}/plane/utils/logging.py (100%) rename apps/{server => api}/plane/utils/markdown.py (100%) rename apps/{server => api}/plane/utils/order_queryset.py (100%) rename apps/{server => api}/plane/utils/paginator.py (100%) rename apps/{server => api}/plane/utils/path_validator.py (100%) rename apps/{server => api}/plane/utils/telemetry.py (100%) rename apps/{server => api}/plane/utils/timezone_converter.py (100%) rename apps/{server => api}/plane/utils/url.py (100%) rename apps/{server => api}/plane/utils/uuid.py (100%) rename apps/{server => api}/plane/web/__init__.py (100%) rename apps/{server => api}/plane/web/apps.py (100%) rename apps/{server => api}/plane/web/urls.py (100%) rename apps/{server => api}/plane/web/views.py (100%) rename apps/{server => api}/plane/wsgi.py (100%) rename apps/{server => api}/pyproject.toml (100%) rename apps/{server => api}/pytest.ini (100%) rename apps/{server => api}/requirements.txt (100%) rename apps/{server => api}/requirements/base.txt (100%) rename apps/{server => api}/requirements/local.txt (100%) rename apps/{server => api}/requirements/production.txt (100%) rename apps/{server => api}/requirements/test.txt (100%) rename apps/{server => api}/run_tests.py (100%) rename apps/{server => api}/run_tests.sh (100%) rename apps/{server => api}/templates/admin/base_site.html (100%) rename apps/{server => api}/templates/base.html (100%) rename apps/{server => api}/templates/csrf_failure.html (100%) rename apps/{server => api}/templates/emails/auth/forgot_password.html (100%) rename apps/{server => api}/templates/emails/auth/magic_signin.html (100%) rename apps/{server => api}/templates/emails/exports/analytics.html (100%) rename apps/{server => api}/templates/emails/invitations/project_invitation.html (100%) rename apps/{server => api}/templates/emails/invitations/workspace_invitation.html (100%) rename apps/{server => api}/templates/emails/notifications/issue-updates.html (100%) rename apps/{server => api}/templates/emails/notifications/project_addition.html (100%) rename apps/{server => api}/templates/emails/notifications/webhook-deactivate.html (100%) rename apps/{server => api}/templates/emails/test_email.html (100%) rename apps/{server => api}/templates/emails/user/user_activation.html (100%) rename apps/{server => api}/templates/emails/user/user_deactivation.html (100%) diff --git a/.github/workflows/build-branch.yml b/.github/workflows/build-branch.yml index 9ce5ceed8f8..3c4125a0feb 100644 --- a/.github/workflows/build-branch.yml +++ b/.github/workflows/build-branch.yml @@ -205,7 +205,7 @@ jobs: buildx-platforms: ${{ needs.branch_build_setup.outputs.gh_buildx_platforms }} buildx-endpoint: ${{ needs.branch_build_setup.outputs.gh_buildx_endpoint }} - branch_build_push_apiserver: + branch_build_push_api: name: Build-Push API Server Docker Image runs-on: ubuntu-22.04 needs: [branch_build_setup] @@ -220,8 +220,8 @@ jobs: dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }} docker-image-owner: makeplane docker-image-name: ${{ needs.branch_build_setup.outputs.dh_img_backend }} - build-context: ./apps/server - dockerfile-path: ./apps/server/Dockerfile.api + build-context: ./apps/api + dockerfile-path: ./apps/api/Dockerfile.api buildx-driver: ${{ needs.branch_build_setup.outputs.gh_buildx_driver }} buildx-version: ${{ needs.branch_build_setup.outputs.gh_buildx_version }} buildx-platforms: ${{ needs.branch_build_setup.outputs.gh_buildx_platforms }} @@ -260,7 +260,7 @@ jobs: branch_build_push_web, branch_build_push_space, branch_build_push_live, - branch_build_push_apiserver, + branch_build_push_api, branch_build_push_proxy, ] env: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 01a4ff5ad58..1ff77f449fe 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,7 +48,7 @@ This helps us triage and manage issues more efficiently. The project is a monorepo, with backend api and frontend in a single repo. -The backend is a django project which is kept inside apps/server +The backend is a django project which is kept inside apps/api 1. Clone the repo diff --git a/aio/Dockerfile-app b/aio/Dockerfile-app index b209ce70e4c..6406c23d934 100644 --- a/aio/Dockerfile-app +++ b/aio/Dockerfile-app @@ -70,18 +70,18 @@ ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV PIP_DISABLE_PIP_VERSION_CHECK=1 -COPY apps/server/requirements.txt ./api/ -COPY apps/server/requirements ./api/requirements +COPY apps/api/requirements.txt ./api/ +COPY apps/api/requirements ./api/requirements RUN pip install -r ./api/requirements.txt --compile --no-cache-dir # Add in Django deps and generate Django's static files -COPY apps/server/manage.py ./api/manage.py -COPY apps/server/plane ./api/plane/ -COPY apps/server/templates ./api/templates/ +COPY apps/api/manage.py ./api/manage.py +COPY apps/api/plane ./api/plane/ +COPY apps/api/templates ./api/templates/ COPY package.json ./api/package.json -COPY apps/server/bin ./api/bin/ +COPY apps/api/bin ./api/bin/ RUN chmod +x ./api/bin/* RUN chmod -R 777 ./api/ diff --git a/apps/server/.coveragerc b/apps/api/.coveragerc similarity index 100% rename from apps/server/.coveragerc rename to apps/api/.coveragerc diff --git a/apps/server/.env.example b/apps/api/.env.example similarity index 100% rename from apps/server/.env.example rename to apps/api/.env.example diff --git a/apps/server/Dockerfile.api b/apps/api/Dockerfile.api similarity index 100% rename from apps/server/Dockerfile.api rename to apps/api/Dockerfile.api diff --git a/apps/server/Dockerfile.dev b/apps/api/Dockerfile.dev similarity index 100% rename from apps/server/Dockerfile.dev rename to apps/api/Dockerfile.dev diff --git a/apps/server/bin/docker-entrypoint-api-local.sh b/apps/api/bin/docker-entrypoint-api-local.sh similarity index 100% rename from apps/server/bin/docker-entrypoint-api-local.sh rename to apps/api/bin/docker-entrypoint-api-local.sh diff --git a/apps/server/bin/docker-entrypoint-api.sh b/apps/api/bin/docker-entrypoint-api.sh similarity index 100% rename from apps/server/bin/docker-entrypoint-api.sh rename to apps/api/bin/docker-entrypoint-api.sh diff --git a/apps/server/bin/docker-entrypoint-beat.sh b/apps/api/bin/docker-entrypoint-beat.sh similarity index 100% rename from apps/server/bin/docker-entrypoint-beat.sh rename to apps/api/bin/docker-entrypoint-beat.sh diff --git a/apps/server/bin/docker-entrypoint-migrator.sh b/apps/api/bin/docker-entrypoint-migrator.sh similarity index 100% rename from apps/server/bin/docker-entrypoint-migrator.sh rename to apps/api/bin/docker-entrypoint-migrator.sh diff --git a/apps/server/bin/docker-entrypoint-worker.sh b/apps/api/bin/docker-entrypoint-worker.sh similarity index 100% rename from apps/server/bin/docker-entrypoint-worker.sh rename to apps/api/bin/docker-entrypoint-worker.sh diff --git a/apps/server/manage.py b/apps/api/manage.py similarity index 100% rename from apps/server/manage.py rename to apps/api/manage.py diff --git a/apps/server/package.json b/apps/api/package.json similarity index 100% rename from apps/server/package.json rename to apps/api/package.json diff --git a/apps/server/plane/__init__.py b/apps/api/plane/__init__.py similarity index 100% rename from apps/server/plane/__init__.py rename to apps/api/plane/__init__.py diff --git a/apps/server/plane/analytics/__init__.py b/apps/api/plane/analytics/__init__.py similarity index 100% rename from apps/server/plane/analytics/__init__.py rename to apps/api/plane/analytics/__init__.py diff --git a/apps/server/plane/analytics/apps.py b/apps/api/plane/analytics/apps.py similarity index 100% rename from apps/server/plane/analytics/apps.py rename to apps/api/plane/analytics/apps.py diff --git a/apps/server/plane/api/__init__.py b/apps/api/plane/api/__init__.py similarity index 100% rename from apps/server/plane/api/__init__.py rename to apps/api/plane/api/__init__.py diff --git a/apps/server/plane/api/apps.py b/apps/api/plane/api/apps.py similarity index 100% rename from apps/server/plane/api/apps.py rename to apps/api/plane/api/apps.py diff --git a/apps/server/plane/api/middleware/__init__.py b/apps/api/plane/api/middleware/__init__.py similarity index 100% rename from apps/server/plane/api/middleware/__init__.py rename to apps/api/plane/api/middleware/__init__.py diff --git a/apps/server/plane/api/middleware/api_authentication.py b/apps/api/plane/api/middleware/api_authentication.py similarity index 100% rename from apps/server/plane/api/middleware/api_authentication.py rename to apps/api/plane/api/middleware/api_authentication.py diff --git a/apps/server/plane/api/rate_limit.py b/apps/api/plane/api/rate_limit.py similarity index 100% rename from apps/server/plane/api/rate_limit.py rename to apps/api/plane/api/rate_limit.py diff --git a/apps/server/plane/api/serializers/__init__.py b/apps/api/plane/api/serializers/__init__.py similarity index 100% rename from apps/server/plane/api/serializers/__init__.py rename to apps/api/plane/api/serializers/__init__.py diff --git a/apps/server/plane/api/serializers/base.py b/apps/api/plane/api/serializers/base.py similarity index 100% rename from apps/server/plane/api/serializers/base.py rename to apps/api/plane/api/serializers/base.py diff --git a/apps/server/plane/api/serializers/cycle.py b/apps/api/plane/api/serializers/cycle.py similarity index 100% rename from apps/server/plane/api/serializers/cycle.py rename to apps/api/plane/api/serializers/cycle.py diff --git a/apps/server/plane/api/serializers/estimate.py b/apps/api/plane/api/serializers/estimate.py similarity index 100% rename from apps/server/plane/api/serializers/estimate.py rename to apps/api/plane/api/serializers/estimate.py diff --git a/apps/server/plane/api/serializers/intake.py b/apps/api/plane/api/serializers/intake.py similarity index 100% rename from apps/server/plane/api/serializers/intake.py rename to apps/api/plane/api/serializers/intake.py diff --git a/apps/server/plane/api/serializers/issue.py b/apps/api/plane/api/serializers/issue.py similarity index 100% rename from apps/server/plane/api/serializers/issue.py rename to apps/api/plane/api/serializers/issue.py diff --git a/apps/server/plane/api/serializers/module.py b/apps/api/plane/api/serializers/module.py similarity index 100% rename from apps/server/plane/api/serializers/module.py rename to apps/api/plane/api/serializers/module.py diff --git a/apps/server/plane/api/serializers/project.py b/apps/api/plane/api/serializers/project.py similarity index 100% rename from apps/server/plane/api/serializers/project.py rename to apps/api/plane/api/serializers/project.py diff --git a/apps/server/plane/api/serializers/state.py b/apps/api/plane/api/serializers/state.py similarity index 100% rename from apps/server/plane/api/serializers/state.py rename to apps/api/plane/api/serializers/state.py diff --git a/apps/server/plane/api/serializers/user.py b/apps/api/plane/api/serializers/user.py similarity index 100% rename from apps/server/plane/api/serializers/user.py rename to apps/api/plane/api/serializers/user.py diff --git a/apps/server/plane/api/serializers/workspace.py b/apps/api/plane/api/serializers/workspace.py similarity index 100% rename from apps/server/plane/api/serializers/workspace.py rename to apps/api/plane/api/serializers/workspace.py diff --git a/apps/server/plane/api/urls/__init__.py b/apps/api/plane/api/urls/__init__.py similarity index 100% rename from apps/server/plane/api/urls/__init__.py rename to apps/api/plane/api/urls/__init__.py diff --git a/apps/server/plane/api/urls/cycle.py b/apps/api/plane/api/urls/cycle.py similarity index 100% rename from apps/server/plane/api/urls/cycle.py rename to apps/api/plane/api/urls/cycle.py diff --git a/apps/server/plane/api/urls/intake.py b/apps/api/plane/api/urls/intake.py similarity index 100% rename from apps/server/plane/api/urls/intake.py rename to apps/api/plane/api/urls/intake.py diff --git a/apps/server/plane/api/urls/issue.py b/apps/api/plane/api/urls/issue.py similarity index 100% rename from apps/server/plane/api/urls/issue.py rename to apps/api/plane/api/urls/issue.py diff --git a/apps/server/plane/api/urls/member.py b/apps/api/plane/api/urls/member.py similarity index 100% rename from apps/server/plane/api/urls/member.py rename to apps/api/plane/api/urls/member.py diff --git a/apps/server/plane/api/urls/module.py b/apps/api/plane/api/urls/module.py similarity index 100% rename from apps/server/plane/api/urls/module.py rename to apps/api/plane/api/urls/module.py diff --git a/apps/server/plane/api/urls/project.py b/apps/api/plane/api/urls/project.py similarity index 100% rename from apps/server/plane/api/urls/project.py rename to apps/api/plane/api/urls/project.py diff --git a/apps/server/plane/api/urls/state.py b/apps/api/plane/api/urls/state.py similarity index 100% rename from apps/server/plane/api/urls/state.py rename to apps/api/plane/api/urls/state.py diff --git a/apps/server/plane/api/views/__init__.py b/apps/api/plane/api/views/__init__.py similarity index 100% rename from apps/server/plane/api/views/__init__.py rename to apps/api/plane/api/views/__init__.py diff --git a/apps/server/plane/api/views/base.py b/apps/api/plane/api/views/base.py similarity index 100% rename from apps/server/plane/api/views/base.py rename to apps/api/plane/api/views/base.py diff --git a/apps/server/plane/api/views/cycle.py b/apps/api/plane/api/views/cycle.py similarity index 100% rename from apps/server/plane/api/views/cycle.py rename to apps/api/plane/api/views/cycle.py diff --git a/apps/server/plane/api/views/intake.py b/apps/api/plane/api/views/intake.py similarity index 100% rename from apps/server/plane/api/views/intake.py rename to apps/api/plane/api/views/intake.py diff --git a/apps/server/plane/api/views/issue.py b/apps/api/plane/api/views/issue.py similarity index 100% rename from apps/server/plane/api/views/issue.py rename to apps/api/plane/api/views/issue.py diff --git a/apps/server/plane/api/views/member.py b/apps/api/plane/api/views/member.py similarity index 100% rename from apps/server/plane/api/views/member.py rename to apps/api/plane/api/views/member.py diff --git a/apps/server/plane/api/views/module.py b/apps/api/plane/api/views/module.py similarity index 100% rename from apps/server/plane/api/views/module.py rename to apps/api/plane/api/views/module.py diff --git a/apps/server/plane/api/views/project.py b/apps/api/plane/api/views/project.py similarity index 100% rename from apps/server/plane/api/views/project.py rename to apps/api/plane/api/views/project.py diff --git a/apps/server/plane/api/views/state.py b/apps/api/plane/api/views/state.py similarity index 100% rename from apps/server/plane/api/views/state.py rename to apps/api/plane/api/views/state.py diff --git a/apps/server/plane/app/__init__.py b/apps/api/plane/app/__init__.py similarity index 100% rename from apps/server/plane/app/__init__.py rename to apps/api/plane/app/__init__.py diff --git a/apps/server/plane/app/apps.py b/apps/api/plane/app/apps.py similarity index 100% rename from apps/server/plane/app/apps.py rename to apps/api/plane/app/apps.py diff --git a/apps/server/plane/app/middleware/__init__.py b/apps/api/plane/app/middleware/__init__.py similarity index 100% rename from apps/server/plane/app/middleware/__init__.py rename to apps/api/plane/app/middleware/__init__.py diff --git a/apps/server/plane/app/middleware/api_authentication.py b/apps/api/plane/app/middleware/api_authentication.py similarity index 100% rename from apps/server/plane/app/middleware/api_authentication.py rename to apps/api/plane/app/middleware/api_authentication.py diff --git a/apps/server/plane/app/permissions/__init__.py b/apps/api/plane/app/permissions/__init__.py similarity index 100% rename from apps/server/plane/app/permissions/__init__.py rename to apps/api/plane/app/permissions/__init__.py diff --git a/apps/server/plane/app/permissions/base.py b/apps/api/plane/app/permissions/base.py similarity index 100% rename from apps/server/plane/app/permissions/base.py rename to apps/api/plane/app/permissions/base.py diff --git a/apps/server/plane/app/permissions/project.py b/apps/api/plane/app/permissions/project.py similarity index 100% rename from apps/server/plane/app/permissions/project.py rename to apps/api/plane/app/permissions/project.py diff --git a/apps/server/plane/app/permissions/workspace.py b/apps/api/plane/app/permissions/workspace.py similarity index 100% rename from apps/server/plane/app/permissions/workspace.py rename to apps/api/plane/app/permissions/workspace.py diff --git a/apps/server/plane/app/serializers/__init__.py b/apps/api/plane/app/serializers/__init__.py similarity index 100% rename from apps/server/plane/app/serializers/__init__.py rename to apps/api/plane/app/serializers/__init__.py diff --git a/apps/server/plane/app/serializers/analytic.py b/apps/api/plane/app/serializers/analytic.py similarity index 100% rename from apps/server/plane/app/serializers/analytic.py rename to apps/api/plane/app/serializers/analytic.py diff --git a/apps/server/plane/app/serializers/api.py b/apps/api/plane/app/serializers/api.py similarity index 100% rename from apps/server/plane/app/serializers/api.py rename to apps/api/plane/app/serializers/api.py diff --git a/apps/server/plane/app/serializers/asset.py b/apps/api/plane/app/serializers/asset.py similarity index 100% rename from apps/server/plane/app/serializers/asset.py rename to apps/api/plane/app/serializers/asset.py diff --git a/apps/server/plane/app/serializers/base.py b/apps/api/plane/app/serializers/base.py similarity index 100% rename from apps/server/plane/app/serializers/base.py rename to apps/api/plane/app/serializers/base.py diff --git a/apps/server/plane/app/serializers/cycle.py b/apps/api/plane/app/serializers/cycle.py similarity index 100% rename from apps/server/plane/app/serializers/cycle.py rename to apps/api/plane/app/serializers/cycle.py diff --git a/apps/server/plane/app/serializers/draft.py b/apps/api/plane/app/serializers/draft.py similarity index 100% rename from apps/server/plane/app/serializers/draft.py rename to apps/api/plane/app/serializers/draft.py diff --git a/apps/server/plane/app/serializers/estimate.py b/apps/api/plane/app/serializers/estimate.py similarity index 100% rename from apps/server/plane/app/serializers/estimate.py rename to apps/api/plane/app/serializers/estimate.py diff --git a/apps/server/plane/app/serializers/exporter.py b/apps/api/plane/app/serializers/exporter.py similarity index 100% rename from apps/server/plane/app/serializers/exporter.py rename to apps/api/plane/app/serializers/exporter.py diff --git a/apps/server/plane/app/serializers/favorite.py b/apps/api/plane/app/serializers/favorite.py similarity index 100% rename from apps/server/plane/app/serializers/favorite.py rename to apps/api/plane/app/serializers/favorite.py diff --git a/apps/server/plane/app/serializers/importer.py b/apps/api/plane/app/serializers/importer.py similarity index 100% rename from apps/server/plane/app/serializers/importer.py rename to apps/api/plane/app/serializers/importer.py diff --git a/apps/server/plane/app/serializers/intake.py b/apps/api/plane/app/serializers/intake.py similarity index 100% rename from apps/server/plane/app/serializers/intake.py rename to apps/api/plane/app/serializers/intake.py diff --git a/apps/server/plane/app/serializers/issue.py b/apps/api/plane/app/serializers/issue.py similarity index 100% rename from apps/server/plane/app/serializers/issue.py rename to apps/api/plane/app/serializers/issue.py diff --git a/apps/server/plane/app/serializers/module.py b/apps/api/plane/app/serializers/module.py similarity index 100% rename from apps/server/plane/app/serializers/module.py rename to apps/api/plane/app/serializers/module.py diff --git a/apps/server/plane/app/serializers/notification.py b/apps/api/plane/app/serializers/notification.py similarity index 100% rename from apps/server/plane/app/serializers/notification.py rename to apps/api/plane/app/serializers/notification.py diff --git a/apps/server/plane/app/serializers/page.py b/apps/api/plane/app/serializers/page.py similarity index 100% rename from apps/server/plane/app/serializers/page.py rename to apps/api/plane/app/serializers/page.py diff --git a/apps/server/plane/app/serializers/project.py b/apps/api/plane/app/serializers/project.py similarity index 100% rename from apps/server/plane/app/serializers/project.py rename to apps/api/plane/app/serializers/project.py diff --git a/apps/server/plane/app/serializers/state.py b/apps/api/plane/app/serializers/state.py similarity index 100% rename from apps/server/plane/app/serializers/state.py rename to apps/api/plane/app/serializers/state.py diff --git a/apps/server/plane/app/serializers/user.py b/apps/api/plane/app/serializers/user.py similarity index 100% rename from apps/server/plane/app/serializers/user.py rename to apps/api/plane/app/serializers/user.py diff --git a/apps/server/plane/app/serializers/view.py b/apps/api/plane/app/serializers/view.py similarity index 100% rename from apps/server/plane/app/serializers/view.py rename to apps/api/plane/app/serializers/view.py diff --git a/apps/server/plane/app/serializers/webhook.py b/apps/api/plane/app/serializers/webhook.py similarity index 100% rename from apps/server/plane/app/serializers/webhook.py rename to apps/api/plane/app/serializers/webhook.py diff --git a/apps/server/plane/app/serializers/workspace.py b/apps/api/plane/app/serializers/workspace.py similarity index 100% rename from apps/server/plane/app/serializers/workspace.py rename to apps/api/plane/app/serializers/workspace.py diff --git a/apps/server/plane/app/urls/__init__.py b/apps/api/plane/app/urls/__init__.py similarity index 100% rename from apps/server/plane/app/urls/__init__.py rename to apps/api/plane/app/urls/__init__.py diff --git a/apps/server/plane/app/urls/analytic.py b/apps/api/plane/app/urls/analytic.py similarity index 100% rename from apps/server/plane/app/urls/analytic.py rename to apps/api/plane/app/urls/analytic.py diff --git a/apps/server/plane/app/urls/api.py b/apps/api/plane/app/urls/api.py similarity index 100% rename from apps/server/plane/app/urls/api.py rename to apps/api/plane/app/urls/api.py diff --git a/apps/server/plane/app/urls/asset.py b/apps/api/plane/app/urls/asset.py similarity index 100% rename from apps/server/plane/app/urls/asset.py rename to apps/api/plane/app/urls/asset.py diff --git a/apps/server/plane/app/urls/cycle.py b/apps/api/plane/app/urls/cycle.py similarity index 100% rename from apps/server/plane/app/urls/cycle.py rename to apps/api/plane/app/urls/cycle.py diff --git a/apps/server/plane/app/urls/estimate.py b/apps/api/plane/app/urls/estimate.py similarity index 100% rename from apps/server/plane/app/urls/estimate.py rename to apps/api/plane/app/urls/estimate.py diff --git a/apps/server/plane/app/urls/external.py b/apps/api/plane/app/urls/external.py similarity index 100% rename from apps/server/plane/app/urls/external.py rename to apps/api/plane/app/urls/external.py diff --git a/apps/server/plane/app/urls/intake.py b/apps/api/plane/app/urls/intake.py similarity index 100% rename from apps/server/plane/app/urls/intake.py rename to apps/api/plane/app/urls/intake.py diff --git a/apps/server/plane/app/urls/issue.py b/apps/api/plane/app/urls/issue.py similarity index 100% rename from apps/server/plane/app/urls/issue.py rename to apps/api/plane/app/urls/issue.py diff --git a/apps/server/plane/app/urls/module.py b/apps/api/plane/app/urls/module.py similarity index 100% rename from apps/server/plane/app/urls/module.py rename to apps/api/plane/app/urls/module.py diff --git a/apps/server/plane/app/urls/notification.py b/apps/api/plane/app/urls/notification.py similarity index 100% rename from apps/server/plane/app/urls/notification.py rename to apps/api/plane/app/urls/notification.py diff --git a/apps/server/plane/app/urls/page.py b/apps/api/plane/app/urls/page.py similarity index 100% rename from apps/server/plane/app/urls/page.py rename to apps/api/plane/app/urls/page.py diff --git a/apps/server/plane/app/urls/project.py b/apps/api/plane/app/urls/project.py similarity index 100% rename from apps/server/plane/app/urls/project.py rename to apps/api/plane/app/urls/project.py diff --git a/apps/server/plane/app/urls/search.py b/apps/api/plane/app/urls/search.py similarity index 100% rename from apps/server/plane/app/urls/search.py rename to apps/api/plane/app/urls/search.py diff --git a/apps/server/plane/app/urls/state.py b/apps/api/plane/app/urls/state.py similarity index 100% rename from apps/server/plane/app/urls/state.py rename to apps/api/plane/app/urls/state.py diff --git a/apps/server/plane/app/urls/timezone.py b/apps/api/plane/app/urls/timezone.py similarity index 100% rename from apps/server/plane/app/urls/timezone.py rename to apps/api/plane/app/urls/timezone.py diff --git a/apps/server/plane/app/urls/user.py b/apps/api/plane/app/urls/user.py similarity index 100% rename from apps/server/plane/app/urls/user.py rename to apps/api/plane/app/urls/user.py diff --git a/apps/server/plane/app/urls/views.py b/apps/api/plane/app/urls/views.py similarity index 100% rename from apps/server/plane/app/urls/views.py rename to apps/api/plane/app/urls/views.py diff --git a/apps/server/plane/app/urls/webhook.py b/apps/api/plane/app/urls/webhook.py similarity index 100% rename from apps/server/plane/app/urls/webhook.py rename to apps/api/plane/app/urls/webhook.py diff --git a/apps/server/plane/app/urls/workspace.py b/apps/api/plane/app/urls/workspace.py similarity index 100% rename from apps/server/plane/app/urls/workspace.py rename to apps/api/plane/app/urls/workspace.py diff --git a/apps/server/plane/app/views/__init__.py b/apps/api/plane/app/views/__init__.py similarity index 100% rename from apps/server/plane/app/views/__init__.py rename to apps/api/plane/app/views/__init__.py diff --git a/apps/server/plane/app/views/analytic/advance.py b/apps/api/plane/app/views/analytic/advance.py similarity index 100% rename from apps/server/plane/app/views/analytic/advance.py rename to apps/api/plane/app/views/analytic/advance.py diff --git a/apps/server/plane/app/views/analytic/base.py b/apps/api/plane/app/views/analytic/base.py similarity index 100% rename from apps/server/plane/app/views/analytic/base.py rename to apps/api/plane/app/views/analytic/base.py diff --git a/apps/server/plane/app/views/analytic/project_analytics.py b/apps/api/plane/app/views/analytic/project_analytics.py similarity index 100% rename from apps/server/plane/app/views/analytic/project_analytics.py rename to apps/api/plane/app/views/analytic/project_analytics.py diff --git a/apps/server/plane/app/views/api.py b/apps/api/plane/app/views/api.py similarity index 100% rename from apps/server/plane/app/views/api.py rename to apps/api/plane/app/views/api.py diff --git a/apps/server/plane/app/views/asset/base.py b/apps/api/plane/app/views/asset/base.py similarity index 100% rename from apps/server/plane/app/views/asset/base.py rename to apps/api/plane/app/views/asset/base.py diff --git a/apps/server/plane/app/views/asset/v2.py b/apps/api/plane/app/views/asset/v2.py similarity index 100% rename from apps/server/plane/app/views/asset/v2.py rename to apps/api/plane/app/views/asset/v2.py diff --git a/apps/server/plane/app/views/base.py b/apps/api/plane/app/views/base.py similarity index 100% rename from apps/server/plane/app/views/base.py rename to apps/api/plane/app/views/base.py diff --git a/apps/server/plane/app/views/cycle/archive.py b/apps/api/plane/app/views/cycle/archive.py similarity index 100% rename from apps/server/plane/app/views/cycle/archive.py rename to apps/api/plane/app/views/cycle/archive.py diff --git a/apps/server/plane/app/views/cycle/base.py b/apps/api/plane/app/views/cycle/base.py similarity index 100% rename from apps/server/plane/app/views/cycle/base.py rename to apps/api/plane/app/views/cycle/base.py diff --git a/apps/server/plane/app/views/cycle/issue.py b/apps/api/plane/app/views/cycle/issue.py similarity index 100% rename from apps/server/plane/app/views/cycle/issue.py rename to apps/api/plane/app/views/cycle/issue.py diff --git a/apps/server/plane/app/views/error_404.py b/apps/api/plane/app/views/error_404.py similarity index 100% rename from apps/server/plane/app/views/error_404.py rename to apps/api/plane/app/views/error_404.py diff --git a/apps/server/plane/app/views/estimate/base.py b/apps/api/plane/app/views/estimate/base.py similarity index 100% rename from apps/server/plane/app/views/estimate/base.py rename to apps/api/plane/app/views/estimate/base.py diff --git a/apps/server/plane/app/views/exporter/base.py b/apps/api/plane/app/views/exporter/base.py similarity index 100% rename from apps/server/plane/app/views/exporter/base.py rename to apps/api/plane/app/views/exporter/base.py diff --git a/apps/server/plane/app/views/external/base.py b/apps/api/plane/app/views/external/base.py similarity index 100% rename from apps/server/plane/app/views/external/base.py rename to apps/api/plane/app/views/external/base.py diff --git a/apps/server/plane/app/views/intake/base.py b/apps/api/plane/app/views/intake/base.py similarity index 100% rename from apps/server/plane/app/views/intake/base.py rename to apps/api/plane/app/views/intake/base.py diff --git a/apps/server/plane/app/views/issue/activity.py b/apps/api/plane/app/views/issue/activity.py similarity index 100% rename from apps/server/plane/app/views/issue/activity.py rename to apps/api/plane/app/views/issue/activity.py diff --git a/apps/server/plane/app/views/issue/archive.py b/apps/api/plane/app/views/issue/archive.py similarity index 100% rename from apps/server/plane/app/views/issue/archive.py rename to apps/api/plane/app/views/issue/archive.py diff --git a/apps/server/plane/app/views/issue/attachment.py b/apps/api/plane/app/views/issue/attachment.py similarity index 100% rename from apps/server/plane/app/views/issue/attachment.py rename to apps/api/plane/app/views/issue/attachment.py diff --git a/apps/server/plane/app/views/issue/base.py b/apps/api/plane/app/views/issue/base.py similarity index 100% rename from apps/server/plane/app/views/issue/base.py rename to apps/api/plane/app/views/issue/base.py diff --git a/apps/server/plane/app/views/issue/comment.py b/apps/api/plane/app/views/issue/comment.py similarity index 100% rename from apps/server/plane/app/views/issue/comment.py rename to apps/api/plane/app/views/issue/comment.py diff --git a/apps/server/plane/app/views/issue/label.py b/apps/api/plane/app/views/issue/label.py similarity index 100% rename from apps/server/plane/app/views/issue/label.py rename to apps/api/plane/app/views/issue/label.py diff --git a/apps/server/plane/app/views/issue/link.py b/apps/api/plane/app/views/issue/link.py similarity index 100% rename from apps/server/plane/app/views/issue/link.py rename to apps/api/plane/app/views/issue/link.py diff --git a/apps/server/plane/app/views/issue/reaction.py b/apps/api/plane/app/views/issue/reaction.py similarity index 100% rename from apps/server/plane/app/views/issue/reaction.py rename to apps/api/plane/app/views/issue/reaction.py diff --git a/apps/server/plane/app/views/issue/relation.py b/apps/api/plane/app/views/issue/relation.py similarity index 100% rename from apps/server/plane/app/views/issue/relation.py rename to apps/api/plane/app/views/issue/relation.py diff --git a/apps/server/plane/app/views/issue/sub_issue.py b/apps/api/plane/app/views/issue/sub_issue.py similarity index 100% rename from apps/server/plane/app/views/issue/sub_issue.py rename to apps/api/plane/app/views/issue/sub_issue.py diff --git a/apps/server/plane/app/views/issue/subscriber.py b/apps/api/plane/app/views/issue/subscriber.py similarity index 100% rename from apps/server/plane/app/views/issue/subscriber.py rename to apps/api/plane/app/views/issue/subscriber.py diff --git a/apps/server/plane/app/views/issue/version.py b/apps/api/plane/app/views/issue/version.py similarity index 100% rename from apps/server/plane/app/views/issue/version.py rename to apps/api/plane/app/views/issue/version.py diff --git a/apps/server/plane/app/views/module/archive.py b/apps/api/plane/app/views/module/archive.py similarity index 100% rename from apps/server/plane/app/views/module/archive.py rename to apps/api/plane/app/views/module/archive.py diff --git a/apps/server/plane/app/views/module/base.py b/apps/api/plane/app/views/module/base.py similarity index 100% rename from apps/server/plane/app/views/module/base.py rename to apps/api/plane/app/views/module/base.py diff --git a/apps/server/plane/app/views/module/issue.py b/apps/api/plane/app/views/module/issue.py similarity index 100% rename from apps/server/plane/app/views/module/issue.py rename to apps/api/plane/app/views/module/issue.py diff --git a/apps/server/plane/app/views/notification/base.py b/apps/api/plane/app/views/notification/base.py similarity index 100% rename from apps/server/plane/app/views/notification/base.py rename to apps/api/plane/app/views/notification/base.py diff --git a/apps/server/plane/app/views/page/base.py b/apps/api/plane/app/views/page/base.py similarity index 100% rename from apps/server/plane/app/views/page/base.py rename to apps/api/plane/app/views/page/base.py diff --git a/apps/server/plane/app/views/page/version.py b/apps/api/plane/app/views/page/version.py similarity index 100% rename from apps/server/plane/app/views/page/version.py rename to apps/api/plane/app/views/page/version.py diff --git a/apps/server/plane/app/views/project/base.py b/apps/api/plane/app/views/project/base.py similarity index 100% rename from apps/server/plane/app/views/project/base.py rename to apps/api/plane/app/views/project/base.py diff --git a/apps/server/plane/app/views/project/invite.py b/apps/api/plane/app/views/project/invite.py similarity index 100% rename from apps/server/plane/app/views/project/invite.py rename to apps/api/plane/app/views/project/invite.py diff --git a/apps/server/plane/app/views/project/member.py b/apps/api/plane/app/views/project/member.py similarity index 100% rename from apps/server/plane/app/views/project/member.py rename to apps/api/plane/app/views/project/member.py diff --git a/apps/server/plane/app/views/search/base.py b/apps/api/plane/app/views/search/base.py similarity index 100% rename from apps/server/plane/app/views/search/base.py rename to apps/api/plane/app/views/search/base.py diff --git a/apps/server/plane/app/views/search/issue.py b/apps/api/plane/app/views/search/issue.py similarity index 100% rename from apps/server/plane/app/views/search/issue.py rename to apps/api/plane/app/views/search/issue.py diff --git a/apps/server/plane/app/views/state/base.py b/apps/api/plane/app/views/state/base.py similarity index 100% rename from apps/server/plane/app/views/state/base.py rename to apps/api/plane/app/views/state/base.py diff --git a/apps/server/plane/app/views/timezone/base.py b/apps/api/plane/app/views/timezone/base.py similarity index 100% rename from apps/server/plane/app/views/timezone/base.py rename to apps/api/plane/app/views/timezone/base.py diff --git a/apps/server/plane/app/views/user/base.py b/apps/api/plane/app/views/user/base.py similarity index 100% rename from apps/server/plane/app/views/user/base.py rename to apps/api/plane/app/views/user/base.py diff --git a/apps/server/plane/app/views/view/base.py b/apps/api/plane/app/views/view/base.py similarity index 100% rename from apps/server/plane/app/views/view/base.py rename to apps/api/plane/app/views/view/base.py diff --git a/apps/server/plane/app/views/webhook/base.py b/apps/api/plane/app/views/webhook/base.py similarity index 100% rename from apps/server/plane/app/views/webhook/base.py rename to apps/api/plane/app/views/webhook/base.py diff --git a/apps/server/plane/app/views/workspace/base.py b/apps/api/plane/app/views/workspace/base.py similarity index 100% rename from apps/server/plane/app/views/workspace/base.py rename to apps/api/plane/app/views/workspace/base.py diff --git a/apps/server/plane/app/views/workspace/cycle.py b/apps/api/plane/app/views/workspace/cycle.py similarity index 100% rename from apps/server/plane/app/views/workspace/cycle.py rename to apps/api/plane/app/views/workspace/cycle.py diff --git a/apps/server/plane/app/views/workspace/draft.py b/apps/api/plane/app/views/workspace/draft.py similarity index 100% rename from apps/server/plane/app/views/workspace/draft.py rename to apps/api/plane/app/views/workspace/draft.py diff --git a/apps/server/plane/app/views/workspace/estimate.py b/apps/api/plane/app/views/workspace/estimate.py similarity index 100% rename from apps/server/plane/app/views/workspace/estimate.py rename to apps/api/plane/app/views/workspace/estimate.py diff --git a/apps/server/plane/app/views/workspace/favorite.py b/apps/api/plane/app/views/workspace/favorite.py similarity index 100% rename from apps/server/plane/app/views/workspace/favorite.py rename to apps/api/plane/app/views/workspace/favorite.py diff --git a/apps/server/plane/app/views/workspace/home.py b/apps/api/plane/app/views/workspace/home.py similarity index 100% rename from apps/server/plane/app/views/workspace/home.py rename to apps/api/plane/app/views/workspace/home.py diff --git a/apps/server/plane/app/views/workspace/invite.py b/apps/api/plane/app/views/workspace/invite.py similarity index 100% rename from apps/server/plane/app/views/workspace/invite.py rename to apps/api/plane/app/views/workspace/invite.py diff --git a/apps/server/plane/app/views/workspace/label.py b/apps/api/plane/app/views/workspace/label.py similarity index 100% rename from apps/server/plane/app/views/workspace/label.py rename to apps/api/plane/app/views/workspace/label.py diff --git a/apps/server/plane/app/views/workspace/member.py b/apps/api/plane/app/views/workspace/member.py similarity index 100% rename from apps/server/plane/app/views/workspace/member.py rename to apps/api/plane/app/views/workspace/member.py diff --git a/apps/server/plane/app/views/workspace/module.py b/apps/api/plane/app/views/workspace/module.py similarity index 100% rename from apps/server/plane/app/views/workspace/module.py rename to apps/api/plane/app/views/workspace/module.py diff --git a/apps/server/plane/app/views/workspace/quick_link.py b/apps/api/plane/app/views/workspace/quick_link.py similarity index 100% rename from apps/server/plane/app/views/workspace/quick_link.py rename to apps/api/plane/app/views/workspace/quick_link.py diff --git a/apps/server/plane/app/views/workspace/recent_visit.py b/apps/api/plane/app/views/workspace/recent_visit.py similarity index 100% rename from apps/server/plane/app/views/workspace/recent_visit.py rename to apps/api/plane/app/views/workspace/recent_visit.py diff --git a/apps/server/plane/app/views/workspace/state.py b/apps/api/plane/app/views/workspace/state.py similarity index 100% rename from apps/server/plane/app/views/workspace/state.py rename to apps/api/plane/app/views/workspace/state.py diff --git a/apps/server/plane/app/views/workspace/sticky.py b/apps/api/plane/app/views/workspace/sticky.py similarity index 100% rename from apps/server/plane/app/views/workspace/sticky.py rename to apps/api/plane/app/views/workspace/sticky.py diff --git a/apps/server/plane/app/views/workspace/user.py b/apps/api/plane/app/views/workspace/user.py similarity index 100% rename from apps/server/plane/app/views/workspace/user.py rename to apps/api/plane/app/views/workspace/user.py diff --git a/apps/server/plane/app/views/workspace/user_preference.py b/apps/api/plane/app/views/workspace/user_preference.py similarity index 100% rename from apps/server/plane/app/views/workspace/user_preference.py rename to apps/api/plane/app/views/workspace/user_preference.py diff --git a/apps/server/plane/asgi.py b/apps/api/plane/asgi.py similarity index 100% rename from apps/server/plane/asgi.py rename to apps/api/plane/asgi.py diff --git a/apps/server/plane/authentication/__init__.py b/apps/api/plane/authentication/__init__.py similarity index 100% rename from apps/server/plane/authentication/__init__.py rename to apps/api/plane/authentication/__init__.py diff --git a/apps/server/plane/authentication/adapter/__init__.py b/apps/api/plane/authentication/adapter/__init__.py similarity index 100% rename from apps/server/plane/authentication/adapter/__init__.py rename to apps/api/plane/authentication/adapter/__init__.py diff --git a/apps/server/plane/authentication/adapter/base.py b/apps/api/plane/authentication/adapter/base.py similarity index 100% rename from apps/server/plane/authentication/adapter/base.py rename to apps/api/plane/authentication/adapter/base.py diff --git a/apps/server/plane/authentication/adapter/credential.py b/apps/api/plane/authentication/adapter/credential.py similarity index 100% rename from apps/server/plane/authentication/adapter/credential.py rename to apps/api/plane/authentication/adapter/credential.py diff --git a/apps/server/plane/authentication/adapter/error.py b/apps/api/plane/authentication/adapter/error.py similarity index 100% rename from apps/server/plane/authentication/adapter/error.py rename to apps/api/plane/authentication/adapter/error.py diff --git a/apps/server/plane/authentication/adapter/exception.py b/apps/api/plane/authentication/adapter/exception.py similarity index 100% rename from apps/server/plane/authentication/adapter/exception.py rename to apps/api/plane/authentication/adapter/exception.py diff --git a/apps/server/plane/authentication/adapter/oauth.py b/apps/api/plane/authentication/adapter/oauth.py similarity index 100% rename from apps/server/plane/authentication/adapter/oauth.py rename to apps/api/plane/authentication/adapter/oauth.py diff --git a/apps/server/plane/authentication/apps.py b/apps/api/plane/authentication/apps.py similarity index 100% rename from apps/server/plane/authentication/apps.py rename to apps/api/plane/authentication/apps.py diff --git a/apps/server/plane/authentication/middleware/__init__.py b/apps/api/plane/authentication/middleware/__init__.py similarity index 100% rename from apps/server/plane/authentication/middleware/__init__.py rename to apps/api/plane/authentication/middleware/__init__.py diff --git a/apps/server/plane/authentication/middleware/session.py b/apps/api/plane/authentication/middleware/session.py similarity index 100% rename from apps/server/plane/authentication/middleware/session.py rename to apps/api/plane/authentication/middleware/session.py diff --git a/apps/server/plane/authentication/provider/__init__.py b/apps/api/plane/authentication/provider/__init__.py similarity index 100% rename from apps/server/plane/authentication/provider/__init__.py rename to apps/api/plane/authentication/provider/__init__.py diff --git a/apps/server/plane/authentication/provider/credentials/__init__.py b/apps/api/plane/authentication/provider/credentials/__init__.py similarity index 100% rename from apps/server/plane/authentication/provider/credentials/__init__.py rename to apps/api/plane/authentication/provider/credentials/__init__.py diff --git a/apps/server/plane/authentication/provider/credentials/email.py b/apps/api/plane/authentication/provider/credentials/email.py similarity index 100% rename from apps/server/plane/authentication/provider/credentials/email.py rename to apps/api/plane/authentication/provider/credentials/email.py diff --git a/apps/server/plane/authentication/provider/credentials/magic_code.py b/apps/api/plane/authentication/provider/credentials/magic_code.py similarity index 100% rename from apps/server/plane/authentication/provider/credentials/magic_code.py rename to apps/api/plane/authentication/provider/credentials/magic_code.py diff --git a/apps/server/plane/authentication/provider/oauth/__init__.py b/apps/api/plane/authentication/provider/oauth/__init__.py similarity index 100% rename from apps/server/plane/authentication/provider/oauth/__init__.py rename to apps/api/plane/authentication/provider/oauth/__init__.py diff --git a/apps/server/plane/authentication/provider/oauth/github.py b/apps/api/plane/authentication/provider/oauth/github.py similarity index 100% rename from apps/server/plane/authentication/provider/oauth/github.py rename to apps/api/plane/authentication/provider/oauth/github.py diff --git a/apps/server/plane/authentication/provider/oauth/gitlab.py b/apps/api/plane/authentication/provider/oauth/gitlab.py similarity index 100% rename from apps/server/plane/authentication/provider/oauth/gitlab.py rename to apps/api/plane/authentication/provider/oauth/gitlab.py diff --git a/apps/server/plane/authentication/provider/oauth/google.py b/apps/api/plane/authentication/provider/oauth/google.py similarity index 100% rename from apps/server/plane/authentication/provider/oauth/google.py rename to apps/api/plane/authentication/provider/oauth/google.py diff --git a/apps/server/plane/authentication/rate_limit.py b/apps/api/plane/authentication/rate_limit.py similarity index 100% rename from apps/server/plane/authentication/rate_limit.py rename to apps/api/plane/authentication/rate_limit.py diff --git a/apps/server/plane/authentication/session.py b/apps/api/plane/authentication/session.py similarity index 100% rename from apps/server/plane/authentication/session.py rename to apps/api/plane/authentication/session.py diff --git a/apps/server/plane/authentication/urls.py b/apps/api/plane/authentication/urls.py similarity index 100% rename from apps/server/plane/authentication/urls.py rename to apps/api/plane/authentication/urls.py diff --git a/apps/server/plane/authentication/utils/host.py b/apps/api/plane/authentication/utils/host.py similarity index 100% rename from apps/server/plane/authentication/utils/host.py rename to apps/api/plane/authentication/utils/host.py diff --git a/apps/server/plane/authentication/utils/login.py b/apps/api/plane/authentication/utils/login.py similarity index 100% rename from apps/server/plane/authentication/utils/login.py rename to apps/api/plane/authentication/utils/login.py diff --git a/apps/server/plane/authentication/utils/redirection_path.py b/apps/api/plane/authentication/utils/redirection_path.py similarity index 100% rename from apps/server/plane/authentication/utils/redirection_path.py rename to apps/api/plane/authentication/utils/redirection_path.py diff --git a/apps/server/plane/authentication/utils/user_auth_workflow.py b/apps/api/plane/authentication/utils/user_auth_workflow.py similarity index 100% rename from apps/server/plane/authentication/utils/user_auth_workflow.py rename to apps/api/plane/authentication/utils/user_auth_workflow.py diff --git a/apps/server/plane/authentication/utils/workspace_project_join.py b/apps/api/plane/authentication/utils/workspace_project_join.py similarity index 100% rename from apps/server/plane/authentication/utils/workspace_project_join.py rename to apps/api/plane/authentication/utils/workspace_project_join.py diff --git a/apps/server/plane/authentication/views/__init__.py b/apps/api/plane/authentication/views/__init__.py similarity index 100% rename from apps/server/plane/authentication/views/__init__.py rename to apps/api/plane/authentication/views/__init__.py diff --git a/apps/server/plane/authentication/views/app/check.py b/apps/api/plane/authentication/views/app/check.py similarity index 100% rename from apps/server/plane/authentication/views/app/check.py rename to apps/api/plane/authentication/views/app/check.py diff --git a/apps/server/plane/authentication/views/app/email.py b/apps/api/plane/authentication/views/app/email.py similarity index 100% rename from apps/server/plane/authentication/views/app/email.py rename to apps/api/plane/authentication/views/app/email.py diff --git a/apps/server/plane/authentication/views/app/github.py b/apps/api/plane/authentication/views/app/github.py similarity index 100% rename from apps/server/plane/authentication/views/app/github.py rename to apps/api/plane/authentication/views/app/github.py diff --git a/apps/server/plane/authentication/views/app/gitlab.py b/apps/api/plane/authentication/views/app/gitlab.py similarity index 100% rename from apps/server/plane/authentication/views/app/gitlab.py rename to apps/api/plane/authentication/views/app/gitlab.py diff --git a/apps/server/plane/authentication/views/app/google.py b/apps/api/plane/authentication/views/app/google.py similarity index 100% rename from apps/server/plane/authentication/views/app/google.py rename to apps/api/plane/authentication/views/app/google.py diff --git a/apps/server/plane/authentication/views/app/magic.py b/apps/api/plane/authentication/views/app/magic.py similarity index 100% rename from apps/server/plane/authentication/views/app/magic.py rename to apps/api/plane/authentication/views/app/magic.py diff --git a/apps/server/plane/authentication/views/app/password_management.py b/apps/api/plane/authentication/views/app/password_management.py similarity index 100% rename from apps/server/plane/authentication/views/app/password_management.py rename to apps/api/plane/authentication/views/app/password_management.py diff --git a/apps/server/plane/authentication/views/app/signout.py b/apps/api/plane/authentication/views/app/signout.py similarity index 100% rename from apps/server/plane/authentication/views/app/signout.py rename to apps/api/plane/authentication/views/app/signout.py diff --git a/apps/server/plane/authentication/views/common.py b/apps/api/plane/authentication/views/common.py similarity index 100% rename from apps/server/plane/authentication/views/common.py rename to apps/api/plane/authentication/views/common.py diff --git a/apps/server/plane/authentication/views/space/check.py b/apps/api/plane/authentication/views/space/check.py similarity index 100% rename from apps/server/plane/authentication/views/space/check.py rename to apps/api/plane/authentication/views/space/check.py diff --git a/apps/server/plane/authentication/views/space/email.py b/apps/api/plane/authentication/views/space/email.py similarity index 100% rename from apps/server/plane/authentication/views/space/email.py rename to apps/api/plane/authentication/views/space/email.py diff --git a/apps/server/plane/authentication/views/space/github.py b/apps/api/plane/authentication/views/space/github.py similarity index 100% rename from apps/server/plane/authentication/views/space/github.py rename to apps/api/plane/authentication/views/space/github.py diff --git a/apps/server/plane/authentication/views/space/gitlab.py b/apps/api/plane/authentication/views/space/gitlab.py similarity index 100% rename from apps/server/plane/authentication/views/space/gitlab.py rename to apps/api/plane/authentication/views/space/gitlab.py diff --git a/apps/server/plane/authentication/views/space/google.py b/apps/api/plane/authentication/views/space/google.py similarity index 100% rename from apps/server/plane/authentication/views/space/google.py rename to apps/api/plane/authentication/views/space/google.py diff --git a/apps/server/plane/authentication/views/space/magic.py b/apps/api/plane/authentication/views/space/magic.py similarity index 100% rename from apps/server/plane/authentication/views/space/magic.py rename to apps/api/plane/authentication/views/space/magic.py diff --git a/apps/server/plane/authentication/views/space/password_management.py b/apps/api/plane/authentication/views/space/password_management.py similarity index 100% rename from apps/server/plane/authentication/views/space/password_management.py rename to apps/api/plane/authentication/views/space/password_management.py diff --git a/apps/server/plane/authentication/views/space/signout.py b/apps/api/plane/authentication/views/space/signout.py similarity index 100% rename from apps/server/plane/authentication/views/space/signout.py rename to apps/api/plane/authentication/views/space/signout.py diff --git a/apps/server/plane/bgtasks/__init__.py b/apps/api/plane/bgtasks/__init__.py similarity index 100% rename from apps/server/plane/bgtasks/__init__.py rename to apps/api/plane/bgtasks/__init__.py diff --git a/apps/server/plane/bgtasks/analytic_plot_export.py b/apps/api/plane/bgtasks/analytic_plot_export.py similarity index 100% rename from apps/server/plane/bgtasks/analytic_plot_export.py rename to apps/api/plane/bgtasks/analytic_plot_export.py diff --git a/apps/server/plane/bgtasks/api_logs_task.py b/apps/api/plane/bgtasks/api_logs_task.py similarity index 100% rename from apps/server/plane/bgtasks/api_logs_task.py rename to apps/api/plane/bgtasks/api_logs_task.py diff --git a/apps/server/plane/bgtasks/apps.py b/apps/api/plane/bgtasks/apps.py similarity index 100% rename from apps/server/plane/bgtasks/apps.py rename to apps/api/plane/bgtasks/apps.py diff --git a/apps/server/plane/bgtasks/copy_s3_object.py b/apps/api/plane/bgtasks/copy_s3_object.py similarity index 100% rename from apps/server/plane/bgtasks/copy_s3_object.py rename to apps/api/plane/bgtasks/copy_s3_object.py diff --git a/apps/server/plane/bgtasks/deletion_task.py b/apps/api/plane/bgtasks/deletion_task.py similarity index 100% rename from apps/server/plane/bgtasks/deletion_task.py rename to apps/api/plane/bgtasks/deletion_task.py diff --git a/apps/server/plane/bgtasks/dummy_data_task.py b/apps/api/plane/bgtasks/dummy_data_task.py similarity index 100% rename from apps/server/plane/bgtasks/dummy_data_task.py rename to apps/api/plane/bgtasks/dummy_data_task.py diff --git a/apps/server/plane/bgtasks/email_notification_task.py b/apps/api/plane/bgtasks/email_notification_task.py similarity index 100% rename from apps/server/plane/bgtasks/email_notification_task.py rename to apps/api/plane/bgtasks/email_notification_task.py diff --git a/apps/server/plane/bgtasks/event_tracking_task.py b/apps/api/plane/bgtasks/event_tracking_task.py similarity index 100% rename from apps/server/plane/bgtasks/event_tracking_task.py rename to apps/api/plane/bgtasks/event_tracking_task.py diff --git a/apps/server/plane/bgtasks/export_task.py b/apps/api/plane/bgtasks/export_task.py similarity index 100% rename from apps/server/plane/bgtasks/export_task.py rename to apps/api/plane/bgtasks/export_task.py diff --git a/apps/server/plane/bgtasks/exporter_expired_task.py b/apps/api/plane/bgtasks/exporter_expired_task.py similarity index 100% rename from apps/server/plane/bgtasks/exporter_expired_task.py rename to apps/api/plane/bgtasks/exporter_expired_task.py diff --git a/apps/server/plane/bgtasks/file_asset_task.py b/apps/api/plane/bgtasks/file_asset_task.py similarity index 100% rename from apps/server/plane/bgtasks/file_asset_task.py rename to apps/api/plane/bgtasks/file_asset_task.py diff --git a/apps/server/plane/bgtasks/forgot_password_task.py b/apps/api/plane/bgtasks/forgot_password_task.py similarity index 100% rename from apps/server/plane/bgtasks/forgot_password_task.py rename to apps/api/plane/bgtasks/forgot_password_task.py diff --git a/apps/server/plane/bgtasks/issue_activities_task.py b/apps/api/plane/bgtasks/issue_activities_task.py similarity index 100% rename from apps/server/plane/bgtasks/issue_activities_task.py rename to apps/api/plane/bgtasks/issue_activities_task.py diff --git a/apps/server/plane/bgtasks/issue_automation_task.py b/apps/api/plane/bgtasks/issue_automation_task.py similarity index 100% rename from apps/server/plane/bgtasks/issue_automation_task.py rename to apps/api/plane/bgtasks/issue_automation_task.py diff --git a/apps/server/plane/bgtasks/issue_description_version_sync.py b/apps/api/plane/bgtasks/issue_description_version_sync.py similarity index 100% rename from apps/server/plane/bgtasks/issue_description_version_sync.py rename to apps/api/plane/bgtasks/issue_description_version_sync.py diff --git a/apps/server/plane/bgtasks/issue_description_version_task.py b/apps/api/plane/bgtasks/issue_description_version_task.py similarity index 100% rename from apps/server/plane/bgtasks/issue_description_version_task.py rename to apps/api/plane/bgtasks/issue_description_version_task.py diff --git a/apps/server/plane/bgtasks/issue_version_sync.py b/apps/api/plane/bgtasks/issue_version_sync.py similarity index 100% rename from apps/server/plane/bgtasks/issue_version_sync.py rename to apps/api/plane/bgtasks/issue_version_sync.py diff --git a/apps/server/plane/bgtasks/magic_link_code_task.py b/apps/api/plane/bgtasks/magic_link_code_task.py similarity index 100% rename from apps/server/plane/bgtasks/magic_link_code_task.py rename to apps/api/plane/bgtasks/magic_link_code_task.py diff --git a/apps/server/plane/bgtasks/notification_task.py b/apps/api/plane/bgtasks/notification_task.py similarity index 100% rename from apps/server/plane/bgtasks/notification_task.py rename to apps/api/plane/bgtasks/notification_task.py diff --git a/apps/server/plane/bgtasks/page_transaction_task.py b/apps/api/plane/bgtasks/page_transaction_task.py similarity index 100% rename from apps/server/plane/bgtasks/page_transaction_task.py rename to apps/api/plane/bgtasks/page_transaction_task.py diff --git a/apps/server/plane/bgtasks/page_version_task.py b/apps/api/plane/bgtasks/page_version_task.py similarity index 100% rename from apps/server/plane/bgtasks/page_version_task.py rename to apps/api/plane/bgtasks/page_version_task.py diff --git a/apps/server/plane/bgtasks/project_add_user_email_task.py b/apps/api/plane/bgtasks/project_add_user_email_task.py similarity index 100% rename from apps/server/plane/bgtasks/project_add_user_email_task.py rename to apps/api/plane/bgtasks/project_add_user_email_task.py diff --git a/apps/server/plane/bgtasks/project_invitation_task.py b/apps/api/plane/bgtasks/project_invitation_task.py similarity index 100% rename from apps/server/plane/bgtasks/project_invitation_task.py rename to apps/api/plane/bgtasks/project_invitation_task.py diff --git a/apps/server/plane/bgtasks/recent_visited_task.py b/apps/api/plane/bgtasks/recent_visited_task.py similarity index 100% rename from apps/server/plane/bgtasks/recent_visited_task.py rename to apps/api/plane/bgtasks/recent_visited_task.py diff --git a/apps/server/plane/bgtasks/storage_metadata_task.py b/apps/api/plane/bgtasks/storage_metadata_task.py similarity index 100% rename from apps/server/plane/bgtasks/storage_metadata_task.py rename to apps/api/plane/bgtasks/storage_metadata_task.py diff --git a/apps/server/plane/bgtasks/user_activation_email_task.py b/apps/api/plane/bgtasks/user_activation_email_task.py similarity index 100% rename from apps/server/plane/bgtasks/user_activation_email_task.py rename to apps/api/plane/bgtasks/user_activation_email_task.py diff --git a/apps/server/plane/bgtasks/user_deactivation_email_task.py b/apps/api/plane/bgtasks/user_deactivation_email_task.py similarity index 100% rename from apps/server/plane/bgtasks/user_deactivation_email_task.py rename to apps/api/plane/bgtasks/user_deactivation_email_task.py diff --git a/apps/server/plane/bgtasks/webhook_task.py b/apps/api/plane/bgtasks/webhook_task.py similarity index 100% rename from apps/server/plane/bgtasks/webhook_task.py rename to apps/api/plane/bgtasks/webhook_task.py diff --git a/apps/server/plane/bgtasks/work_item_link_task.py b/apps/api/plane/bgtasks/work_item_link_task.py similarity index 100% rename from apps/server/plane/bgtasks/work_item_link_task.py rename to apps/api/plane/bgtasks/work_item_link_task.py diff --git a/apps/server/plane/bgtasks/workspace_invitation_task.py b/apps/api/plane/bgtasks/workspace_invitation_task.py similarity index 100% rename from apps/server/plane/bgtasks/workspace_invitation_task.py rename to apps/api/plane/bgtasks/workspace_invitation_task.py diff --git a/apps/server/plane/bgtasks/workspace_seed_task.py b/apps/api/plane/bgtasks/workspace_seed_task.py similarity index 100% rename from apps/server/plane/bgtasks/workspace_seed_task.py rename to apps/api/plane/bgtasks/workspace_seed_task.py diff --git a/apps/server/plane/celery.py b/apps/api/plane/celery.py similarity index 100% rename from apps/server/plane/celery.py rename to apps/api/plane/celery.py diff --git a/apps/server/plane/db/__init__.py b/apps/api/plane/db/__init__.py similarity index 100% rename from apps/server/plane/db/__init__.py rename to apps/api/plane/db/__init__.py diff --git a/apps/server/plane/db/apps.py b/apps/api/plane/db/apps.py similarity index 100% rename from apps/server/plane/db/apps.py rename to apps/api/plane/db/apps.py diff --git a/apps/server/plane/db/management/__init__.py b/apps/api/plane/db/management/__init__.py similarity index 100% rename from apps/server/plane/db/management/__init__.py rename to apps/api/plane/db/management/__init__.py diff --git a/apps/server/plane/db/management/commands/__init__.py b/apps/api/plane/db/management/commands/__init__.py similarity index 100% rename from apps/server/plane/db/management/commands/__init__.py rename to apps/api/plane/db/management/commands/__init__.py diff --git a/apps/server/plane/db/management/commands/activate_user.py b/apps/api/plane/db/management/commands/activate_user.py similarity index 100% rename from apps/server/plane/db/management/commands/activate_user.py rename to apps/api/plane/db/management/commands/activate_user.py diff --git a/apps/server/plane/db/management/commands/clear_cache.py b/apps/api/plane/db/management/commands/clear_cache.py similarity index 100% rename from apps/server/plane/db/management/commands/clear_cache.py rename to apps/api/plane/db/management/commands/clear_cache.py diff --git a/apps/server/plane/db/management/commands/create_bucket.py b/apps/api/plane/db/management/commands/create_bucket.py similarity index 100% rename from apps/server/plane/db/management/commands/create_bucket.py rename to apps/api/plane/db/management/commands/create_bucket.py diff --git a/apps/server/plane/db/management/commands/create_dummy_data.py b/apps/api/plane/db/management/commands/create_dummy_data.py similarity index 100% rename from apps/server/plane/db/management/commands/create_dummy_data.py rename to apps/api/plane/db/management/commands/create_dummy_data.py diff --git a/apps/server/plane/db/management/commands/create_instance_admin.py b/apps/api/plane/db/management/commands/create_instance_admin.py similarity index 100% rename from apps/server/plane/db/management/commands/create_instance_admin.py rename to apps/api/plane/db/management/commands/create_instance_admin.py diff --git a/apps/server/plane/db/management/commands/create_project_member.py b/apps/api/plane/db/management/commands/create_project_member.py similarity index 100% rename from apps/server/plane/db/management/commands/create_project_member.py rename to apps/api/plane/db/management/commands/create_project_member.py diff --git a/apps/server/plane/db/management/commands/fix_duplicate_sequences.py b/apps/api/plane/db/management/commands/fix_duplicate_sequences.py similarity index 100% rename from apps/server/plane/db/management/commands/fix_duplicate_sequences.py rename to apps/api/plane/db/management/commands/fix_duplicate_sequences.py diff --git a/apps/server/plane/db/management/commands/reset_password.py b/apps/api/plane/db/management/commands/reset_password.py similarity index 100% rename from apps/server/plane/db/management/commands/reset_password.py rename to apps/api/plane/db/management/commands/reset_password.py diff --git a/apps/server/plane/db/management/commands/sync_issue_description_version.py b/apps/api/plane/db/management/commands/sync_issue_description_version.py similarity index 100% rename from apps/server/plane/db/management/commands/sync_issue_description_version.py rename to apps/api/plane/db/management/commands/sync_issue_description_version.py diff --git a/apps/server/plane/db/management/commands/sync_issue_version.py b/apps/api/plane/db/management/commands/sync_issue_version.py similarity index 100% rename from apps/server/plane/db/management/commands/sync_issue_version.py rename to apps/api/plane/db/management/commands/sync_issue_version.py diff --git a/apps/server/plane/db/management/commands/test_email.py b/apps/api/plane/db/management/commands/test_email.py similarity index 100% rename from apps/server/plane/db/management/commands/test_email.py rename to apps/api/plane/db/management/commands/test_email.py diff --git a/apps/server/plane/db/management/commands/update_bucket.py b/apps/api/plane/db/management/commands/update_bucket.py similarity index 100% rename from apps/server/plane/db/management/commands/update_bucket.py rename to apps/api/plane/db/management/commands/update_bucket.py diff --git a/apps/server/plane/db/management/commands/update_deleted_workspace_slug.py b/apps/api/plane/db/management/commands/update_deleted_workspace_slug.py similarity index 100% rename from apps/server/plane/db/management/commands/update_deleted_workspace_slug.py rename to apps/api/plane/db/management/commands/update_deleted_workspace_slug.py diff --git a/apps/server/plane/db/management/commands/wait_for_db.py b/apps/api/plane/db/management/commands/wait_for_db.py similarity index 100% rename from apps/server/plane/db/management/commands/wait_for_db.py rename to apps/api/plane/db/management/commands/wait_for_db.py diff --git a/apps/server/plane/db/management/commands/wait_for_migrations.py b/apps/api/plane/db/management/commands/wait_for_migrations.py similarity index 100% rename from apps/server/plane/db/management/commands/wait_for_migrations.py rename to apps/api/plane/db/management/commands/wait_for_migrations.py diff --git a/apps/server/plane/db/migrations/0001_initial.py b/apps/api/plane/db/migrations/0001_initial.py similarity index 100% rename from apps/server/plane/db/migrations/0001_initial.py rename to apps/api/plane/db/migrations/0001_initial.py diff --git a/apps/server/plane/db/migrations/0002_auto_20221104_2239.py b/apps/api/plane/db/migrations/0002_auto_20221104_2239.py similarity index 100% rename from apps/server/plane/db/migrations/0002_auto_20221104_2239.py rename to apps/api/plane/db/migrations/0002_auto_20221104_2239.py diff --git a/apps/server/plane/db/migrations/0003_auto_20221109_2320.py b/apps/api/plane/db/migrations/0003_auto_20221109_2320.py similarity index 100% rename from apps/server/plane/db/migrations/0003_auto_20221109_2320.py rename to apps/api/plane/db/migrations/0003_auto_20221109_2320.py diff --git a/apps/server/plane/db/migrations/0004_alter_state_sequence.py b/apps/api/plane/db/migrations/0004_alter_state_sequence.py similarity index 100% rename from apps/server/plane/db/migrations/0004_alter_state_sequence.py rename to apps/api/plane/db/migrations/0004_alter_state_sequence.py diff --git a/apps/server/plane/db/migrations/0005_auto_20221114_2127.py b/apps/api/plane/db/migrations/0005_auto_20221114_2127.py similarity index 100% rename from apps/server/plane/db/migrations/0005_auto_20221114_2127.py rename to apps/api/plane/db/migrations/0005_auto_20221114_2127.py diff --git a/apps/server/plane/db/migrations/0006_alter_cycle_status.py b/apps/api/plane/db/migrations/0006_alter_cycle_status.py similarity index 100% rename from apps/server/plane/db/migrations/0006_alter_cycle_status.py rename to apps/api/plane/db/migrations/0006_alter_cycle_status.py diff --git a/apps/server/plane/db/migrations/0007_label_parent.py b/apps/api/plane/db/migrations/0007_label_parent.py similarity index 100% rename from apps/server/plane/db/migrations/0007_label_parent.py rename to apps/api/plane/db/migrations/0007_label_parent.py diff --git a/apps/server/plane/db/migrations/0008_label_colour.py b/apps/api/plane/db/migrations/0008_label_colour.py similarity index 100% rename from apps/server/plane/db/migrations/0008_label_colour.py rename to apps/api/plane/db/migrations/0008_label_colour.py diff --git a/apps/server/plane/db/migrations/0009_auto_20221208_0310.py b/apps/api/plane/db/migrations/0009_auto_20221208_0310.py similarity index 100% rename from apps/server/plane/db/migrations/0009_auto_20221208_0310.py rename to apps/api/plane/db/migrations/0009_auto_20221208_0310.py diff --git a/apps/server/plane/db/migrations/0010_auto_20221213_0037.py b/apps/api/plane/db/migrations/0010_auto_20221213_0037.py similarity index 100% rename from apps/server/plane/db/migrations/0010_auto_20221213_0037.py rename to apps/api/plane/db/migrations/0010_auto_20221213_0037.py diff --git a/apps/server/plane/db/migrations/0011_auto_20221222_2357.py b/apps/api/plane/db/migrations/0011_auto_20221222_2357.py similarity index 100% rename from apps/server/plane/db/migrations/0011_auto_20221222_2357.py rename to apps/api/plane/db/migrations/0011_auto_20221222_2357.py diff --git a/apps/server/plane/db/migrations/0012_auto_20230104_0117.py b/apps/api/plane/db/migrations/0012_auto_20230104_0117.py similarity index 100% rename from apps/server/plane/db/migrations/0012_auto_20230104_0117.py rename to apps/api/plane/db/migrations/0012_auto_20230104_0117.py diff --git a/apps/server/plane/db/migrations/0013_auto_20230107_0041.py b/apps/api/plane/db/migrations/0013_auto_20230107_0041.py similarity index 100% rename from apps/server/plane/db/migrations/0013_auto_20230107_0041.py rename to apps/api/plane/db/migrations/0013_auto_20230107_0041.py diff --git a/apps/server/plane/db/migrations/0014_alter_workspacememberinvite_unique_together.py b/apps/api/plane/db/migrations/0014_alter_workspacememberinvite_unique_together.py similarity index 100% rename from apps/server/plane/db/migrations/0014_alter_workspacememberinvite_unique_together.py rename to apps/api/plane/db/migrations/0014_alter_workspacememberinvite_unique_together.py diff --git a/apps/server/plane/db/migrations/0015_auto_20230107_1636.py b/apps/api/plane/db/migrations/0015_auto_20230107_1636.py similarity index 100% rename from apps/server/plane/db/migrations/0015_auto_20230107_1636.py rename to apps/api/plane/db/migrations/0015_auto_20230107_1636.py diff --git a/apps/server/plane/db/migrations/0016_auto_20230107_1735.py b/apps/api/plane/db/migrations/0016_auto_20230107_1735.py similarity index 100% rename from apps/server/plane/db/migrations/0016_auto_20230107_1735.py rename to apps/api/plane/db/migrations/0016_auto_20230107_1735.py diff --git a/apps/server/plane/db/migrations/0017_alter_workspace_unique_together.py b/apps/api/plane/db/migrations/0017_alter_workspace_unique_together.py similarity index 100% rename from apps/server/plane/db/migrations/0017_alter_workspace_unique_together.py rename to apps/api/plane/db/migrations/0017_alter_workspace_unique_together.py diff --git a/apps/server/plane/db/migrations/0018_auto_20230130_0119.py b/apps/api/plane/db/migrations/0018_auto_20230130_0119.py similarity index 100% rename from apps/server/plane/db/migrations/0018_auto_20230130_0119.py rename to apps/api/plane/db/migrations/0018_auto_20230130_0119.py diff --git a/apps/server/plane/db/migrations/0019_auto_20230131_0049.py b/apps/api/plane/db/migrations/0019_auto_20230131_0049.py similarity index 100% rename from apps/server/plane/db/migrations/0019_auto_20230131_0049.py rename to apps/api/plane/db/migrations/0019_auto_20230131_0049.py diff --git a/apps/server/plane/db/migrations/0020_auto_20230214_0118.py b/apps/api/plane/db/migrations/0020_auto_20230214_0118.py similarity index 100% rename from apps/server/plane/db/migrations/0020_auto_20230214_0118.py rename to apps/api/plane/db/migrations/0020_auto_20230214_0118.py diff --git a/apps/server/plane/db/migrations/0021_auto_20230223_0104.py b/apps/api/plane/db/migrations/0021_auto_20230223_0104.py similarity index 100% rename from apps/server/plane/db/migrations/0021_auto_20230223_0104.py rename to apps/api/plane/db/migrations/0021_auto_20230223_0104.py diff --git a/apps/server/plane/db/migrations/0022_auto_20230307_0304.py b/apps/api/plane/db/migrations/0022_auto_20230307_0304.py similarity index 100% rename from apps/server/plane/db/migrations/0022_auto_20230307_0304.py rename to apps/api/plane/db/migrations/0022_auto_20230307_0304.py diff --git a/apps/server/plane/db/migrations/0023_auto_20230316_0040.py b/apps/api/plane/db/migrations/0023_auto_20230316_0040.py similarity index 100% rename from apps/server/plane/db/migrations/0023_auto_20230316_0040.py rename to apps/api/plane/db/migrations/0023_auto_20230316_0040.py diff --git a/apps/server/plane/db/migrations/0024_auto_20230322_0138.py b/apps/api/plane/db/migrations/0024_auto_20230322_0138.py similarity index 100% rename from apps/server/plane/db/migrations/0024_auto_20230322_0138.py rename to apps/api/plane/db/migrations/0024_auto_20230322_0138.py diff --git a/apps/server/plane/db/migrations/0025_auto_20230331_0203.py b/apps/api/plane/db/migrations/0025_auto_20230331_0203.py similarity index 100% rename from apps/server/plane/db/migrations/0025_auto_20230331_0203.py rename to apps/api/plane/db/migrations/0025_auto_20230331_0203.py diff --git a/apps/server/plane/db/migrations/0026_alter_projectmember_view_props.py b/apps/api/plane/db/migrations/0026_alter_projectmember_view_props.py similarity index 100% rename from apps/server/plane/db/migrations/0026_alter_projectmember_view_props.py rename to apps/api/plane/db/migrations/0026_alter_projectmember_view_props.py diff --git a/apps/server/plane/db/migrations/0027_auto_20230409_0312.py b/apps/api/plane/db/migrations/0027_auto_20230409_0312.py similarity index 100% rename from apps/server/plane/db/migrations/0027_auto_20230409_0312.py rename to apps/api/plane/db/migrations/0027_auto_20230409_0312.py diff --git a/apps/server/plane/db/migrations/0028_auto_20230414_1703.py b/apps/api/plane/db/migrations/0028_auto_20230414_1703.py similarity index 100% rename from apps/server/plane/db/migrations/0028_auto_20230414_1703.py rename to apps/api/plane/db/migrations/0028_auto_20230414_1703.py diff --git a/apps/server/plane/db/migrations/0029_auto_20230502_0126.py b/apps/api/plane/db/migrations/0029_auto_20230502_0126.py similarity index 100% rename from apps/server/plane/db/migrations/0029_auto_20230502_0126.py rename to apps/api/plane/db/migrations/0029_auto_20230502_0126.py diff --git a/apps/server/plane/db/migrations/0030_alter_estimatepoint_unique_together.py b/apps/api/plane/db/migrations/0030_alter_estimatepoint_unique_together.py similarity index 100% rename from apps/server/plane/db/migrations/0030_alter_estimatepoint_unique_together.py rename to apps/api/plane/db/migrations/0030_alter_estimatepoint_unique_together.py diff --git a/apps/server/plane/db/migrations/0031_analyticview.py b/apps/api/plane/db/migrations/0031_analyticview.py similarity index 100% rename from apps/server/plane/db/migrations/0031_analyticview.py rename to apps/api/plane/db/migrations/0031_analyticview.py diff --git a/apps/server/plane/db/migrations/0032_auto_20230520_2015.py b/apps/api/plane/db/migrations/0032_auto_20230520_2015.py similarity index 100% rename from apps/server/plane/db/migrations/0032_auto_20230520_2015.py rename to apps/api/plane/db/migrations/0032_auto_20230520_2015.py diff --git a/apps/server/plane/db/migrations/0033_auto_20230618_2125.py b/apps/api/plane/db/migrations/0033_auto_20230618_2125.py similarity index 100% rename from apps/server/plane/db/migrations/0033_auto_20230618_2125.py rename to apps/api/plane/db/migrations/0033_auto_20230618_2125.py diff --git a/apps/server/plane/db/migrations/0034_auto_20230628_1046.py b/apps/api/plane/db/migrations/0034_auto_20230628_1046.py similarity index 100% rename from apps/server/plane/db/migrations/0034_auto_20230628_1046.py rename to apps/api/plane/db/migrations/0034_auto_20230628_1046.py diff --git a/apps/server/plane/db/migrations/0035_auto_20230704_2225.py b/apps/api/plane/db/migrations/0035_auto_20230704_2225.py similarity index 100% rename from apps/server/plane/db/migrations/0035_auto_20230704_2225.py rename to apps/api/plane/db/migrations/0035_auto_20230704_2225.py diff --git a/apps/server/plane/db/migrations/0036_alter_workspace_organization_size.py b/apps/api/plane/db/migrations/0036_alter_workspace_organization_size.py similarity index 100% rename from apps/server/plane/db/migrations/0036_alter_workspace_organization_size.py rename to apps/api/plane/db/migrations/0036_alter_workspace_organization_size.py diff --git a/apps/server/plane/db/migrations/0037_issue_archived_at_project_archive_in_and_more.py b/apps/api/plane/db/migrations/0037_issue_archived_at_project_archive_in_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0037_issue_archived_at_project_archive_in_and_more.py rename to apps/api/plane/db/migrations/0037_issue_archived_at_project_archive_in_and_more.py diff --git a/apps/server/plane/db/migrations/0038_auto_20230720_1505.py b/apps/api/plane/db/migrations/0038_auto_20230720_1505.py similarity index 100% rename from apps/server/plane/db/migrations/0038_auto_20230720_1505.py rename to apps/api/plane/db/migrations/0038_auto_20230720_1505.py diff --git a/apps/server/plane/db/migrations/0039_auto_20230723_2203.py b/apps/api/plane/db/migrations/0039_auto_20230723_2203.py similarity index 100% rename from apps/server/plane/db/migrations/0039_auto_20230723_2203.py rename to apps/api/plane/db/migrations/0039_auto_20230723_2203.py diff --git a/apps/server/plane/db/migrations/0040_projectmember_preferences_user_cover_image_and_more.py b/apps/api/plane/db/migrations/0040_projectmember_preferences_user_cover_image_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0040_projectmember_preferences_user_cover_image_and_more.py rename to apps/api/plane/db/migrations/0040_projectmember_preferences_user_cover_image_and_more.py diff --git a/apps/server/plane/db/migrations/0041_cycle_sort_order_issuecomment_access_and_more.py b/apps/api/plane/db/migrations/0041_cycle_sort_order_issuecomment_access_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0041_cycle_sort_order_issuecomment_access_and_more.py rename to apps/api/plane/db/migrations/0041_cycle_sort_order_issuecomment_access_and_more.py diff --git a/apps/server/plane/db/migrations/0042_alter_analyticview_created_by_and_more.py b/apps/api/plane/db/migrations/0042_alter_analyticview_created_by_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0042_alter_analyticview_created_by_and_more.py rename to apps/api/plane/db/migrations/0042_alter_analyticview_created_by_and_more.py diff --git a/apps/server/plane/db/migrations/0043_alter_analyticview_created_by_and_more.py b/apps/api/plane/db/migrations/0043_alter_analyticview_created_by_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0043_alter_analyticview_created_by_and_more.py rename to apps/api/plane/db/migrations/0043_alter_analyticview_created_by_and_more.py diff --git a/apps/server/plane/db/migrations/0044_auto_20230913_0709.py b/apps/api/plane/db/migrations/0044_auto_20230913_0709.py similarity index 100% rename from apps/server/plane/db/migrations/0044_auto_20230913_0709.py rename to apps/api/plane/db/migrations/0044_auto_20230913_0709.py diff --git a/apps/server/plane/db/migrations/0045_issueactivity_epoch_workspacemember_issue_props_and_more.py b/apps/api/plane/db/migrations/0045_issueactivity_epoch_workspacemember_issue_props_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0045_issueactivity_epoch_workspacemember_issue_props_and_more.py rename to apps/api/plane/db/migrations/0045_issueactivity_epoch_workspacemember_issue_props_and_more.py diff --git a/apps/server/plane/db/migrations/0046_label_sort_order_alter_analyticview_created_by_and_more.py b/apps/api/plane/db/migrations/0046_label_sort_order_alter_analyticview_created_by_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0046_label_sort_order_alter_analyticview_created_by_and_more.py rename to apps/api/plane/db/migrations/0046_label_sort_order_alter_analyticview_created_by_and_more.py diff --git a/apps/server/plane/db/migrations/0047_webhook_apitoken_description_apitoken_expired_at_and_more.py b/apps/api/plane/db/migrations/0047_webhook_apitoken_description_apitoken_expired_at_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0047_webhook_apitoken_description_apitoken_expired_at_and_more.py rename to apps/api/plane/db/migrations/0047_webhook_apitoken_description_apitoken_expired_at_and_more.py diff --git a/apps/server/plane/db/migrations/0048_auto_20231116_0713.py b/apps/api/plane/db/migrations/0048_auto_20231116_0713.py similarity index 100% rename from apps/server/plane/db/migrations/0048_auto_20231116_0713.py rename to apps/api/plane/db/migrations/0048_auto_20231116_0713.py diff --git a/apps/server/plane/db/migrations/0049_auto_20231116_0713.py b/apps/api/plane/db/migrations/0049_auto_20231116_0713.py similarity index 100% rename from apps/server/plane/db/migrations/0049_auto_20231116_0713.py rename to apps/api/plane/db/migrations/0049_auto_20231116_0713.py diff --git a/apps/server/plane/db/migrations/0050_user_use_case_alter_workspace_organization_size.py b/apps/api/plane/db/migrations/0050_user_use_case_alter_workspace_organization_size.py similarity index 100% rename from apps/server/plane/db/migrations/0050_user_use_case_alter_workspace_organization_size.py rename to apps/api/plane/db/migrations/0050_user_use_case_alter_workspace_organization_size.py diff --git a/apps/server/plane/db/migrations/0051_cycle_external_id_cycle_external_source_and_more.py b/apps/api/plane/db/migrations/0051_cycle_external_id_cycle_external_source_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0051_cycle_external_id_cycle_external_source_and_more.py rename to apps/api/plane/db/migrations/0051_cycle_external_id_cycle_external_source_and_more.py diff --git a/apps/server/plane/db/migrations/0052_auto_20231220_1141.py b/apps/api/plane/db/migrations/0052_auto_20231220_1141.py similarity index 100% rename from apps/server/plane/db/migrations/0052_auto_20231220_1141.py rename to apps/api/plane/db/migrations/0052_auto_20231220_1141.py diff --git a/apps/server/plane/db/migrations/0053_auto_20240102_1315.py b/apps/api/plane/db/migrations/0053_auto_20240102_1315.py similarity index 100% rename from apps/server/plane/db/migrations/0053_auto_20240102_1315.py rename to apps/api/plane/db/migrations/0053_auto_20240102_1315.py diff --git a/apps/server/plane/db/migrations/0054_dashboard_widget_dashboardwidget.py b/apps/api/plane/db/migrations/0054_dashboard_widget_dashboardwidget.py similarity index 100% rename from apps/server/plane/db/migrations/0054_dashboard_widget_dashboardwidget.py rename to apps/api/plane/db/migrations/0054_dashboard_widget_dashboardwidget.py diff --git a/apps/server/plane/db/migrations/0055_auto_20240108_0648.py b/apps/api/plane/db/migrations/0055_auto_20240108_0648.py similarity index 100% rename from apps/server/plane/db/migrations/0055_auto_20240108_0648.py rename to apps/api/plane/db/migrations/0055_auto_20240108_0648.py diff --git a/apps/server/plane/db/migrations/0056_usernotificationpreference_emailnotificationlog.py b/apps/api/plane/db/migrations/0056_usernotificationpreference_emailnotificationlog.py similarity index 100% rename from apps/server/plane/db/migrations/0056_usernotificationpreference_emailnotificationlog.py rename to apps/api/plane/db/migrations/0056_usernotificationpreference_emailnotificationlog.py diff --git a/apps/server/plane/db/migrations/0057_auto_20240122_0901.py b/apps/api/plane/db/migrations/0057_auto_20240122_0901.py similarity index 100% rename from apps/server/plane/db/migrations/0057_auto_20240122_0901.py rename to apps/api/plane/db/migrations/0057_auto_20240122_0901.py diff --git a/apps/server/plane/db/migrations/0058_alter_moduleissue_issue_and_more.py b/apps/api/plane/db/migrations/0058_alter_moduleissue_issue_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0058_alter_moduleissue_issue_and_more.py rename to apps/api/plane/db/migrations/0058_alter_moduleissue_issue_and_more.py diff --git a/apps/server/plane/db/migrations/0059_auto_20240208_0957.py b/apps/api/plane/db/migrations/0059_auto_20240208_0957.py similarity index 100% rename from apps/server/plane/db/migrations/0059_auto_20240208_0957.py rename to apps/api/plane/db/migrations/0059_auto_20240208_0957.py diff --git a/apps/server/plane/db/migrations/0060_cycle_progress_snapshot.py b/apps/api/plane/db/migrations/0060_cycle_progress_snapshot.py similarity index 100% rename from apps/server/plane/db/migrations/0060_cycle_progress_snapshot.py rename to apps/api/plane/db/migrations/0060_cycle_progress_snapshot.py diff --git a/apps/server/plane/db/migrations/0061_project_logo_props.py b/apps/api/plane/db/migrations/0061_project_logo_props.py similarity index 100% rename from apps/server/plane/db/migrations/0061_project_logo_props.py rename to apps/api/plane/db/migrations/0061_project_logo_props.py diff --git a/apps/server/plane/db/migrations/0062_cycle_archived_at_module_archived_at_and_more.py b/apps/api/plane/db/migrations/0062_cycle_archived_at_module_archived_at_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0062_cycle_archived_at_module_archived_at_and_more.py rename to apps/api/plane/db/migrations/0062_cycle_archived_at_module_archived_at_and_more.py diff --git a/apps/server/plane/db/migrations/0063_state_is_triage_alter_state_group.py b/apps/api/plane/db/migrations/0063_state_is_triage_alter_state_group.py similarity index 100% rename from apps/server/plane/db/migrations/0063_state_is_triage_alter_state_group.py rename to apps/api/plane/db/migrations/0063_state_is_triage_alter_state_group.py diff --git a/apps/server/plane/db/migrations/0064_auto_20240409_1134.py b/apps/api/plane/db/migrations/0064_auto_20240409_1134.py similarity index 100% rename from apps/server/plane/db/migrations/0064_auto_20240409_1134.py rename to apps/api/plane/db/migrations/0064_auto_20240409_1134.py diff --git a/apps/server/plane/db/migrations/0065_auto_20240415_0937.py b/apps/api/plane/db/migrations/0065_auto_20240415_0937.py similarity index 100% rename from apps/server/plane/db/migrations/0065_auto_20240415_0937.py rename to apps/api/plane/db/migrations/0065_auto_20240415_0937.py diff --git a/apps/server/plane/db/migrations/0066_account_id_token_cycle_logo_props_module_logo_props.py b/apps/api/plane/db/migrations/0066_account_id_token_cycle_logo_props_module_logo_props.py similarity index 100% rename from apps/server/plane/db/migrations/0066_account_id_token_cycle_logo_props_module_logo_props.py rename to apps/api/plane/db/migrations/0066_account_id_token_cycle_logo_props_module_logo_props.py diff --git a/apps/server/plane/db/migrations/0067_issue_estimate.py b/apps/api/plane/db/migrations/0067_issue_estimate.py similarity index 100% rename from apps/server/plane/db/migrations/0067_issue_estimate.py rename to apps/api/plane/db/migrations/0067_issue_estimate.py diff --git a/apps/server/plane/db/migrations/0068_remove_pagelabel_project_remove_pagelog_project_and_more.py b/apps/api/plane/db/migrations/0068_remove_pagelabel_project_remove_pagelog_project_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0068_remove_pagelabel_project_remove_pagelog_project_and_more.py rename to apps/api/plane/db/migrations/0068_remove_pagelabel_project_remove_pagelog_project_and_more.py diff --git a/apps/server/plane/db/migrations/0069_alter_account_provider_and_more.py b/apps/api/plane/db/migrations/0069_alter_account_provider_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0069_alter_account_provider_and_more.py rename to apps/api/plane/db/migrations/0069_alter_account_provider_and_more.py diff --git a/apps/server/plane/db/migrations/0070_apitoken_is_service_exporterhistory_filters_and_more.py b/apps/api/plane/db/migrations/0070_apitoken_is_service_exporterhistory_filters_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0070_apitoken_is_service_exporterhistory_filters_and_more.py rename to apps/api/plane/db/migrations/0070_apitoken_is_service_exporterhistory_filters_and_more.py diff --git a/apps/server/plane/db/migrations/0071_rename_issueproperty_issueuserproperty_and_more.py b/apps/api/plane/db/migrations/0071_rename_issueproperty_issueuserproperty_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0071_rename_issueproperty_issueuserproperty_and_more.py rename to apps/api/plane/db/migrations/0071_rename_issueproperty_issueuserproperty_and_more.py diff --git a/apps/server/plane/db/migrations/0072_issueattachment_external_id_and_more.py b/apps/api/plane/db/migrations/0072_issueattachment_external_id_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0072_issueattachment_external_id_and_more.py rename to apps/api/plane/db/migrations/0072_issueattachment_external_id_and_more.py diff --git a/apps/server/plane/db/migrations/0073_alter_commentreaction_unique_together_and_more.py b/apps/api/plane/db/migrations/0073_alter_commentreaction_unique_together_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0073_alter_commentreaction_unique_together_and_more.py rename to apps/api/plane/db/migrations/0073_alter_commentreaction_unique_together_and_more.py diff --git a/apps/server/plane/db/migrations/0074_deploy_board_and_project_issues.py b/apps/api/plane/db/migrations/0074_deploy_board_and_project_issues.py similarity index 100% rename from apps/server/plane/db/migrations/0074_deploy_board_and_project_issues.py rename to apps/api/plane/db/migrations/0074_deploy_board_and_project_issues.py diff --git a/apps/server/plane/db/migrations/0075_alter_fileasset_asset.py b/apps/api/plane/db/migrations/0075_alter_fileasset_asset.py similarity index 100% rename from apps/server/plane/db/migrations/0075_alter_fileasset_asset.py rename to apps/api/plane/db/migrations/0075_alter_fileasset_asset.py diff --git a/apps/server/plane/db/migrations/0076_alter_projectmember_role_and_more.py b/apps/api/plane/db/migrations/0076_alter_projectmember_role_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0076_alter_projectmember_role_and_more.py rename to apps/api/plane/db/migrations/0076_alter_projectmember_role_and_more.py diff --git a/apps/server/plane/db/migrations/0077_draftissue_cycle_user_timezone_project_user_timezone_and_more.py b/apps/api/plane/db/migrations/0077_draftissue_cycle_user_timezone_project_user_timezone_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0077_draftissue_cycle_user_timezone_project_user_timezone_and_more.py rename to apps/api/plane/db/migrations/0077_draftissue_cycle_user_timezone_project_user_timezone_and_more.py diff --git a/apps/server/plane/db/migrations/0078_fileasset_comment_fileasset_entity_type_and_more.py b/apps/api/plane/db/migrations/0078_fileasset_comment_fileasset_entity_type_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0078_fileasset_comment_fileasset_entity_type_and_more.py rename to apps/api/plane/db/migrations/0078_fileasset_comment_fileasset_entity_type_and_more.py diff --git a/apps/server/plane/db/migrations/0079_auto_20241009_0619.py b/apps/api/plane/db/migrations/0079_auto_20241009_0619.py similarity index 100% rename from apps/server/plane/db/migrations/0079_auto_20241009_0619.py rename to apps/api/plane/db/migrations/0079_auto_20241009_0619.py diff --git a/apps/server/plane/db/migrations/0080_fileasset_draft_issue_alter_fileasset_entity_type.py b/apps/api/plane/db/migrations/0080_fileasset_draft_issue_alter_fileasset_entity_type.py similarity index 100% rename from apps/server/plane/db/migrations/0080_fileasset_draft_issue_alter_fileasset_entity_type.py rename to apps/api/plane/db/migrations/0080_fileasset_draft_issue_alter_fileasset_entity_type.py diff --git a/apps/server/plane/db/migrations/0081_remove_globalview_created_by_and_more.py b/apps/api/plane/db/migrations/0081_remove_globalview_created_by_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0081_remove_globalview_created_by_and_more.py rename to apps/api/plane/db/migrations/0081_remove_globalview_created_by_and_more.py diff --git a/apps/server/plane/db/migrations/0082_alter_issue_managers_alter_cycleissue_issue_and_more.py b/apps/api/plane/db/migrations/0082_alter_issue_managers_alter_cycleissue_issue_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0082_alter_issue_managers_alter_cycleissue_issue_and_more.py rename to apps/api/plane/db/migrations/0082_alter_issue_managers_alter_cycleissue_issue_and_more.py diff --git a/apps/server/plane/db/migrations/0083_device_workspace_timezone_and_more.py b/apps/api/plane/db/migrations/0083_device_workspace_timezone_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0083_device_workspace_timezone_and_more.py rename to apps/api/plane/db/migrations/0083_device_workspace_timezone_and_more.py diff --git a/apps/server/plane/db/migrations/0084_remove_label_label_unique_name_project_when_deleted_at_null_and_more.py b/apps/api/plane/db/migrations/0084_remove_label_label_unique_name_project_when_deleted_at_null_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0084_remove_label_label_unique_name_project_when_deleted_at_null_and_more.py rename to apps/api/plane/db/migrations/0084_remove_label_label_unique_name_project_when_deleted_at_null_and_more.py diff --git a/apps/server/plane/db/migrations/0085_intake_intakeissue_remove_inboxissue_created_by_and_more.py b/apps/api/plane/db/migrations/0085_intake_intakeissue_remove_inboxissue_created_by_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0085_intake_intakeissue_remove_inboxissue_created_by_and_more.py rename to apps/api/plane/db/migrations/0085_intake_intakeissue_remove_inboxissue_created_by_and_more.py diff --git a/apps/server/plane/db/migrations/0086_issueversion_alter_teampage_unique_together_and_more.py b/apps/api/plane/db/migrations/0086_issueversion_alter_teampage_unique_together_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0086_issueversion_alter_teampage_unique_together_and_more.py rename to apps/api/plane/db/migrations/0086_issueversion_alter_teampage_unique_together_and_more.py diff --git a/apps/server/plane/db/migrations/0087_remove_issueversion_description_and_more.py b/apps/api/plane/db/migrations/0087_remove_issueversion_description_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0087_remove_issueversion_description_and_more.py rename to apps/api/plane/db/migrations/0087_remove_issueversion_description_and_more.py diff --git a/apps/server/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py b/apps/api/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py similarity index 100% rename from apps/server/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py rename to apps/api/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py diff --git a/apps/server/plane/db/migrations/0089_workspacehomepreference_and_more.py b/apps/api/plane/db/migrations/0089_workspacehomepreference_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0089_workspacehomepreference_and_more.py rename to apps/api/plane/db/migrations/0089_workspacehomepreference_and_more.py diff --git a/apps/server/plane/db/migrations/0090_rename_dashboard_deprecateddashboard_and_more.py b/apps/api/plane/db/migrations/0090_rename_dashboard_deprecateddashboard_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0090_rename_dashboard_deprecateddashboard_and_more.py rename to apps/api/plane/db/migrations/0090_rename_dashboard_deprecateddashboard_and_more.py diff --git a/apps/server/plane/db/migrations/0091_issuecomment_edited_at_and_more.py b/apps/api/plane/db/migrations/0091_issuecomment_edited_at_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0091_issuecomment_edited_at_and_more.py rename to apps/api/plane/db/migrations/0091_issuecomment_edited_at_and_more.py diff --git a/apps/server/plane/db/migrations/0092_alter_deprecateddashboardwidget_unique_together_and_more.py b/apps/api/plane/db/migrations/0092_alter_deprecateddashboardwidget_unique_together_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0092_alter_deprecateddashboardwidget_unique_together_and_more.py rename to apps/api/plane/db/migrations/0092_alter_deprecateddashboardwidget_unique_together_and_more.py diff --git a/apps/server/plane/db/migrations/0093_page_moved_to_page_page_moved_to_project_and_more.py b/apps/api/plane/db/migrations/0093_page_moved_to_page_page_moved_to_project_and_more.py similarity index 100% rename from apps/server/plane/db/migrations/0093_page_moved_to_page_page_moved_to_project_and_more.py rename to apps/api/plane/db/migrations/0093_page_moved_to_page_page_moved_to_project_and_more.py diff --git a/apps/server/plane/db/migrations/0094_auto_20250425_0902.py b/apps/api/plane/db/migrations/0094_auto_20250425_0902.py similarity index 100% rename from apps/server/plane/db/migrations/0094_auto_20250425_0902.py rename to apps/api/plane/db/migrations/0094_auto_20250425_0902.py diff --git a/apps/server/plane/db/migrations/0095_page_external_id_page_external_source.py b/apps/api/plane/db/migrations/0095_page_external_id_page_external_source.py similarity index 100% rename from apps/server/plane/db/migrations/0095_page_external_id_page_external_source.py rename to apps/api/plane/db/migrations/0095_page_external_id_page_external_source.py diff --git a/apps/server/plane/db/migrations/0096_user_is_email_valid_user_masked_at.py b/apps/api/plane/db/migrations/0096_user_is_email_valid_user_masked_at.py similarity index 100% rename from apps/server/plane/db/migrations/0096_user_is_email_valid_user_masked_at.py rename to apps/api/plane/db/migrations/0096_user_is_email_valid_user_masked_at.py diff --git a/apps/server/plane/db/migrations/0097_project_external_id_project_external_source.py b/apps/api/plane/db/migrations/0097_project_external_id_project_external_source.py similarity index 100% rename from apps/server/plane/db/migrations/0097_project_external_id_project_external_source.py rename to apps/api/plane/db/migrations/0097_project_external_id_project_external_source.py diff --git a/apps/server/plane/db/migrations/__init__.py b/apps/api/plane/db/migrations/__init__.py similarity index 100% rename from apps/server/plane/db/migrations/__init__.py rename to apps/api/plane/db/migrations/__init__.py diff --git a/apps/server/plane/db/mixins.py b/apps/api/plane/db/mixins.py similarity index 100% rename from apps/server/plane/db/mixins.py rename to apps/api/plane/db/mixins.py diff --git a/apps/server/plane/db/models/__init__.py b/apps/api/plane/db/models/__init__.py similarity index 100% rename from apps/server/plane/db/models/__init__.py rename to apps/api/plane/db/models/__init__.py diff --git a/apps/server/plane/db/models/analytic.py b/apps/api/plane/db/models/analytic.py similarity index 100% rename from apps/server/plane/db/models/analytic.py rename to apps/api/plane/db/models/analytic.py diff --git a/apps/server/plane/db/models/api.py b/apps/api/plane/db/models/api.py similarity index 100% rename from apps/server/plane/db/models/api.py rename to apps/api/plane/db/models/api.py diff --git a/apps/server/plane/db/models/asset.py b/apps/api/plane/db/models/asset.py similarity index 100% rename from apps/server/plane/db/models/asset.py rename to apps/api/plane/db/models/asset.py diff --git a/apps/server/plane/db/models/base.py b/apps/api/plane/db/models/base.py similarity index 100% rename from apps/server/plane/db/models/base.py rename to apps/api/plane/db/models/base.py diff --git a/apps/server/plane/db/models/cycle.py b/apps/api/plane/db/models/cycle.py similarity index 100% rename from apps/server/plane/db/models/cycle.py rename to apps/api/plane/db/models/cycle.py diff --git a/apps/server/plane/db/models/deploy_board.py b/apps/api/plane/db/models/deploy_board.py similarity index 100% rename from apps/server/plane/db/models/deploy_board.py rename to apps/api/plane/db/models/deploy_board.py diff --git a/apps/server/plane/db/models/device.py b/apps/api/plane/db/models/device.py similarity index 100% rename from apps/server/plane/db/models/device.py rename to apps/api/plane/db/models/device.py diff --git a/apps/server/plane/db/models/draft.py b/apps/api/plane/db/models/draft.py similarity index 100% rename from apps/server/plane/db/models/draft.py rename to apps/api/plane/db/models/draft.py diff --git a/apps/server/plane/db/models/estimate.py b/apps/api/plane/db/models/estimate.py similarity index 100% rename from apps/server/plane/db/models/estimate.py rename to apps/api/plane/db/models/estimate.py diff --git a/apps/server/plane/db/models/exporter.py b/apps/api/plane/db/models/exporter.py similarity index 100% rename from apps/server/plane/db/models/exporter.py rename to apps/api/plane/db/models/exporter.py diff --git a/apps/server/plane/db/models/favorite.py b/apps/api/plane/db/models/favorite.py similarity index 100% rename from apps/server/plane/db/models/favorite.py rename to apps/api/plane/db/models/favorite.py diff --git a/apps/server/plane/db/models/importer.py b/apps/api/plane/db/models/importer.py similarity index 100% rename from apps/server/plane/db/models/importer.py rename to apps/api/plane/db/models/importer.py diff --git a/apps/server/plane/db/models/intake.py b/apps/api/plane/db/models/intake.py similarity index 100% rename from apps/server/plane/db/models/intake.py rename to apps/api/plane/db/models/intake.py diff --git a/apps/server/plane/db/models/integration/__init__.py b/apps/api/plane/db/models/integration/__init__.py similarity index 100% rename from apps/server/plane/db/models/integration/__init__.py rename to apps/api/plane/db/models/integration/__init__.py diff --git a/apps/server/plane/db/models/integration/base.py b/apps/api/plane/db/models/integration/base.py similarity index 100% rename from apps/server/plane/db/models/integration/base.py rename to apps/api/plane/db/models/integration/base.py diff --git a/apps/server/plane/db/models/integration/github.py b/apps/api/plane/db/models/integration/github.py similarity index 100% rename from apps/server/plane/db/models/integration/github.py rename to apps/api/plane/db/models/integration/github.py diff --git a/apps/server/plane/db/models/integration/slack.py b/apps/api/plane/db/models/integration/slack.py similarity index 100% rename from apps/server/plane/db/models/integration/slack.py rename to apps/api/plane/db/models/integration/slack.py diff --git a/apps/server/plane/db/models/issue.py b/apps/api/plane/db/models/issue.py similarity index 100% rename from apps/server/plane/db/models/issue.py rename to apps/api/plane/db/models/issue.py diff --git a/apps/server/plane/db/models/issue_type.py b/apps/api/plane/db/models/issue_type.py similarity index 100% rename from apps/server/plane/db/models/issue_type.py rename to apps/api/plane/db/models/issue_type.py diff --git a/apps/server/plane/db/models/label.py b/apps/api/plane/db/models/label.py similarity index 100% rename from apps/server/plane/db/models/label.py rename to apps/api/plane/db/models/label.py diff --git a/apps/server/plane/db/models/module.py b/apps/api/plane/db/models/module.py similarity index 100% rename from apps/server/plane/db/models/module.py rename to apps/api/plane/db/models/module.py diff --git a/apps/server/plane/db/models/notification.py b/apps/api/plane/db/models/notification.py similarity index 100% rename from apps/server/plane/db/models/notification.py rename to apps/api/plane/db/models/notification.py diff --git a/apps/server/plane/db/models/page.py b/apps/api/plane/db/models/page.py similarity index 100% rename from apps/server/plane/db/models/page.py rename to apps/api/plane/db/models/page.py diff --git a/apps/server/plane/db/models/project.py b/apps/api/plane/db/models/project.py similarity index 100% rename from apps/server/plane/db/models/project.py rename to apps/api/plane/db/models/project.py diff --git a/apps/server/plane/db/models/recent_visit.py b/apps/api/plane/db/models/recent_visit.py similarity index 100% rename from apps/server/plane/db/models/recent_visit.py rename to apps/api/plane/db/models/recent_visit.py diff --git a/apps/server/plane/db/models/session.py b/apps/api/plane/db/models/session.py similarity index 100% rename from apps/server/plane/db/models/session.py rename to apps/api/plane/db/models/session.py diff --git a/apps/server/plane/db/models/social_connection.py b/apps/api/plane/db/models/social_connection.py similarity index 100% rename from apps/server/plane/db/models/social_connection.py rename to apps/api/plane/db/models/social_connection.py diff --git a/apps/server/plane/db/models/state.py b/apps/api/plane/db/models/state.py similarity index 100% rename from apps/server/plane/db/models/state.py rename to apps/api/plane/db/models/state.py diff --git a/apps/server/plane/db/models/sticky.py b/apps/api/plane/db/models/sticky.py similarity index 100% rename from apps/server/plane/db/models/sticky.py rename to apps/api/plane/db/models/sticky.py diff --git a/apps/server/plane/db/models/user.py b/apps/api/plane/db/models/user.py similarity index 100% rename from apps/server/plane/db/models/user.py rename to apps/api/plane/db/models/user.py diff --git a/apps/server/plane/db/models/view.py b/apps/api/plane/db/models/view.py similarity index 100% rename from apps/server/plane/db/models/view.py rename to apps/api/plane/db/models/view.py diff --git a/apps/server/plane/db/models/webhook.py b/apps/api/plane/db/models/webhook.py similarity index 100% rename from apps/server/plane/db/models/webhook.py rename to apps/api/plane/db/models/webhook.py diff --git a/apps/server/plane/db/models/workspace.py b/apps/api/plane/db/models/workspace.py similarity index 100% rename from apps/server/plane/db/models/workspace.py rename to apps/api/plane/db/models/workspace.py diff --git a/apps/server/plane/license/__init__.py b/apps/api/plane/license/__init__.py similarity index 100% rename from apps/server/plane/license/__init__.py rename to apps/api/plane/license/__init__.py diff --git a/apps/server/plane/license/api/__init__.py b/apps/api/plane/license/api/__init__.py similarity index 100% rename from apps/server/plane/license/api/__init__.py rename to apps/api/plane/license/api/__init__.py diff --git a/apps/server/plane/license/api/permissions/__init__.py b/apps/api/plane/license/api/permissions/__init__.py similarity index 100% rename from apps/server/plane/license/api/permissions/__init__.py rename to apps/api/plane/license/api/permissions/__init__.py diff --git a/apps/server/plane/license/api/permissions/instance.py b/apps/api/plane/license/api/permissions/instance.py similarity index 100% rename from apps/server/plane/license/api/permissions/instance.py rename to apps/api/plane/license/api/permissions/instance.py diff --git a/apps/server/plane/license/api/serializers/__init__.py b/apps/api/plane/license/api/serializers/__init__.py similarity index 100% rename from apps/server/plane/license/api/serializers/__init__.py rename to apps/api/plane/license/api/serializers/__init__.py diff --git a/apps/server/plane/license/api/serializers/admin.py b/apps/api/plane/license/api/serializers/admin.py similarity index 100% rename from apps/server/plane/license/api/serializers/admin.py rename to apps/api/plane/license/api/serializers/admin.py diff --git a/apps/server/plane/license/api/serializers/base.py b/apps/api/plane/license/api/serializers/base.py similarity index 100% rename from apps/server/plane/license/api/serializers/base.py rename to apps/api/plane/license/api/serializers/base.py diff --git a/apps/server/plane/license/api/serializers/configuration.py b/apps/api/plane/license/api/serializers/configuration.py similarity index 100% rename from apps/server/plane/license/api/serializers/configuration.py rename to apps/api/plane/license/api/serializers/configuration.py diff --git a/apps/server/plane/license/api/serializers/instance.py b/apps/api/plane/license/api/serializers/instance.py similarity index 100% rename from apps/server/plane/license/api/serializers/instance.py rename to apps/api/plane/license/api/serializers/instance.py diff --git a/apps/server/plane/license/api/serializers/user.py b/apps/api/plane/license/api/serializers/user.py similarity index 100% rename from apps/server/plane/license/api/serializers/user.py rename to apps/api/plane/license/api/serializers/user.py diff --git a/apps/server/plane/license/api/serializers/workspace.py b/apps/api/plane/license/api/serializers/workspace.py similarity index 100% rename from apps/server/plane/license/api/serializers/workspace.py rename to apps/api/plane/license/api/serializers/workspace.py diff --git a/apps/server/plane/license/api/views/__init__.py b/apps/api/plane/license/api/views/__init__.py similarity index 100% rename from apps/server/plane/license/api/views/__init__.py rename to apps/api/plane/license/api/views/__init__.py diff --git a/apps/server/plane/license/api/views/admin.py b/apps/api/plane/license/api/views/admin.py similarity index 100% rename from apps/server/plane/license/api/views/admin.py rename to apps/api/plane/license/api/views/admin.py diff --git a/apps/server/plane/license/api/views/base.py b/apps/api/plane/license/api/views/base.py similarity index 100% rename from apps/server/plane/license/api/views/base.py rename to apps/api/plane/license/api/views/base.py diff --git a/apps/server/plane/license/api/views/configuration.py b/apps/api/plane/license/api/views/configuration.py similarity index 100% rename from apps/server/plane/license/api/views/configuration.py rename to apps/api/plane/license/api/views/configuration.py diff --git a/apps/server/plane/license/api/views/instance.py b/apps/api/plane/license/api/views/instance.py similarity index 100% rename from apps/server/plane/license/api/views/instance.py rename to apps/api/plane/license/api/views/instance.py diff --git a/apps/server/plane/license/api/views/workspace.py b/apps/api/plane/license/api/views/workspace.py similarity index 100% rename from apps/server/plane/license/api/views/workspace.py rename to apps/api/plane/license/api/views/workspace.py diff --git a/apps/server/plane/license/apps.py b/apps/api/plane/license/apps.py similarity index 100% rename from apps/server/plane/license/apps.py rename to apps/api/plane/license/apps.py diff --git a/apps/server/plane/license/bgtasks/__init__.py b/apps/api/plane/license/bgtasks/__init__.py similarity index 100% rename from apps/server/plane/license/bgtasks/__init__.py rename to apps/api/plane/license/bgtasks/__init__.py diff --git a/apps/server/plane/license/bgtasks/tracer.py b/apps/api/plane/license/bgtasks/tracer.py similarity index 100% rename from apps/server/plane/license/bgtasks/tracer.py rename to apps/api/plane/license/bgtasks/tracer.py diff --git a/apps/server/plane/license/management/__init__.py b/apps/api/plane/license/management/__init__.py similarity index 100% rename from apps/server/plane/license/management/__init__.py rename to apps/api/plane/license/management/__init__.py diff --git a/apps/server/plane/license/management/commands/__init__.py b/apps/api/plane/license/management/commands/__init__.py similarity index 100% rename from apps/server/plane/license/management/commands/__init__.py rename to apps/api/plane/license/management/commands/__init__.py diff --git a/apps/server/plane/license/management/commands/configure_instance.py b/apps/api/plane/license/management/commands/configure_instance.py similarity index 100% rename from apps/server/plane/license/management/commands/configure_instance.py rename to apps/api/plane/license/management/commands/configure_instance.py diff --git a/apps/server/plane/license/management/commands/register_instance.py b/apps/api/plane/license/management/commands/register_instance.py similarity index 100% rename from apps/server/plane/license/management/commands/register_instance.py rename to apps/api/plane/license/management/commands/register_instance.py diff --git a/apps/server/plane/license/migrations/0001_initial.py b/apps/api/plane/license/migrations/0001_initial.py similarity index 100% rename from apps/server/plane/license/migrations/0001_initial.py rename to apps/api/plane/license/migrations/0001_initial.py diff --git a/apps/server/plane/license/migrations/0002_rename_version_instance_current_version_and_more.py b/apps/api/plane/license/migrations/0002_rename_version_instance_current_version_and_more.py similarity index 100% rename from apps/server/plane/license/migrations/0002_rename_version_instance_current_version_and_more.py rename to apps/api/plane/license/migrations/0002_rename_version_instance_current_version_and_more.py diff --git a/apps/server/plane/license/migrations/0003_alter_changelog_title_alter_changelog_version_and_more.py b/apps/api/plane/license/migrations/0003_alter_changelog_title_alter_changelog_version_and_more.py similarity index 100% rename from apps/server/plane/license/migrations/0003_alter_changelog_title_alter_changelog_version_and_more.py rename to apps/api/plane/license/migrations/0003_alter_changelog_title_alter_changelog_version_and_more.py diff --git a/apps/server/plane/license/migrations/0004_changelog_deleted_at_instance_deleted_at_and_more.py b/apps/api/plane/license/migrations/0004_changelog_deleted_at_instance_deleted_at_and_more.py similarity index 100% rename from apps/server/plane/license/migrations/0004_changelog_deleted_at_instance_deleted_at_and_more.py rename to apps/api/plane/license/migrations/0004_changelog_deleted_at_instance_deleted_at_and_more.py diff --git a/apps/server/plane/license/migrations/0005_rename_product_instance_edition_and_more.py b/apps/api/plane/license/migrations/0005_rename_product_instance_edition_and_more.py similarity index 100% rename from apps/server/plane/license/migrations/0005_rename_product_instance_edition_and_more.py rename to apps/api/plane/license/migrations/0005_rename_product_instance_edition_and_more.py diff --git a/apps/server/plane/license/migrations/__init__.py b/apps/api/plane/license/migrations/__init__.py similarity index 100% rename from apps/server/plane/license/migrations/__init__.py rename to apps/api/plane/license/migrations/__init__.py diff --git a/apps/server/plane/license/models/__init__.py b/apps/api/plane/license/models/__init__.py similarity index 100% rename from apps/server/plane/license/models/__init__.py rename to apps/api/plane/license/models/__init__.py diff --git a/apps/server/plane/license/models/instance.py b/apps/api/plane/license/models/instance.py similarity index 100% rename from apps/server/plane/license/models/instance.py rename to apps/api/plane/license/models/instance.py diff --git a/apps/server/plane/license/urls.py b/apps/api/plane/license/urls.py similarity index 100% rename from apps/server/plane/license/urls.py rename to apps/api/plane/license/urls.py diff --git a/apps/server/plane/license/utils/__init__.py b/apps/api/plane/license/utils/__init__.py similarity index 100% rename from apps/server/plane/license/utils/__init__.py rename to apps/api/plane/license/utils/__init__.py diff --git a/apps/server/plane/license/utils/encryption.py b/apps/api/plane/license/utils/encryption.py similarity index 100% rename from apps/server/plane/license/utils/encryption.py rename to apps/api/plane/license/utils/encryption.py diff --git a/apps/server/plane/license/utils/instance_value.py b/apps/api/plane/license/utils/instance_value.py similarity index 100% rename from apps/server/plane/license/utils/instance_value.py rename to apps/api/plane/license/utils/instance_value.py diff --git a/apps/server/plane/middleware/__init__.py b/apps/api/plane/middleware/__init__.py similarity index 100% rename from apps/server/plane/middleware/__init__.py rename to apps/api/plane/middleware/__init__.py diff --git a/apps/server/plane/middleware/apps.py b/apps/api/plane/middleware/apps.py similarity index 100% rename from apps/server/plane/middleware/apps.py rename to apps/api/plane/middleware/apps.py diff --git a/apps/server/plane/middleware/logger.py b/apps/api/plane/middleware/logger.py similarity index 100% rename from apps/server/plane/middleware/logger.py rename to apps/api/plane/middleware/logger.py diff --git a/apps/server/plane/seeds/data/issues.json b/apps/api/plane/seeds/data/issues.json similarity index 100% rename from apps/server/plane/seeds/data/issues.json rename to apps/api/plane/seeds/data/issues.json diff --git a/apps/server/plane/seeds/data/labels.json b/apps/api/plane/seeds/data/labels.json similarity index 100% rename from apps/server/plane/seeds/data/labels.json rename to apps/api/plane/seeds/data/labels.json diff --git a/apps/server/plane/seeds/data/projects.json b/apps/api/plane/seeds/data/projects.json similarity index 100% rename from apps/server/plane/seeds/data/projects.json rename to apps/api/plane/seeds/data/projects.json diff --git a/apps/server/plane/seeds/data/states.json b/apps/api/plane/seeds/data/states.json similarity index 100% rename from apps/server/plane/seeds/data/states.json rename to apps/api/plane/seeds/data/states.json diff --git a/apps/server/plane/settings/__init__.py b/apps/api/plane/settings/__init__.py similarity index 100% rename from apps/server/plane/settings/__init__.py rename to apps/api/plane/settings/__init__.py diff --git a/apps/server/plane/settings/common.py b/apps/api/plane/settings/common.py similarity index 100% rename from apps/server/plane/settings/common.py rename to apps/api/plane/settings/common.py diff --git a/apps/server/plane/settings/local.py b/apps/api/plane/settings/local.py similarity index 100% rename from apps/server/plane/settings/local.py rename to apps/api/plane/settings/local.py diff --git a/apps/server/plane/settings/production.py b/apps/api/plane/settings/production.py similarity index 100% rename from apps/server/plane/settings/production.py rename to apps/api/plane/settings/production.py diff --git a/apps/server/plane/settings/redis.py b/apps/api/plane/settings/redis.py similarity index 100% rename from apps/server/plane/settings/redis.py rename to apps/api/plane/settings/redis.py diff --git a/apps/server/plane/settings/storage.py b/apps/api/plane/settings/storage.py similarity index 100% rename from apps/server/plane/settings/storage.py rename to apps/api/plane/settings/storage.py diff --git a/apps/server/plane/settings/test.py b/apps/api/plane/settings/test.py similarity index 100% rename from apps/server/plane/settings/test.py rename to apps/api/plane/settings/test.py diff --git a/apps/server/plane/space/__init__.py b/apps/api/plane/space/__init__.py similarity index 100% rename from apps/server/plane/space/__init__.py rename to apps/api/plane/space/__init__.py diff --git a/apps/server/plane/space/apps.py b/apps/api/plane/space/apps.py similarity index 100% rename from apps/server/plane/space/apps.py rename to apps/api/plane/space/apps.py diff --git a/apps/server/plane/space/serializer/__init__.py b/apps/api/plane/space/serializer/__init__.py similarity index 100% rename from apps/server/plane/space/serializer/__init__.py rename to apps/api/plane/space/serializer/__init__.py diff --git a/apps/server/plane/space/serializer/base.py b/apps/api/plane/space/serializer/base.py similarity index 100% rename from apps/server/plane/space/serializer/base.py rename to apps/api/plane/space/serializer/base.py diff --git a/apps/server/plane/space/serializer/cycle.py b/apps/api/plane/space/serializer/cycle.py similarity index 100% rename from apps/server/plane/space/serializer/cycle.py rename to apps/api/plane/space/serializer/cycle.py diff --git a/apps/server/plane/space/serializer/intake.py b/apps/api/plane/space/serializer/intake.py similarity index 100% rename from apps/server/plane/space/serializer/intake.py rename to apps/api/plane/space/serializer/intake.py diff --git a/apps/server/plane/space/serializer/issue.py b/apps/api/plane/space/serializer/issue.py similarity index 100% rename from apps/server/plane/space/serializer/issue.py rename to apps/api/plane/space/serializer/issue.py diff --git a/apps/server/plane/space/serializer/module.py b/apps/api/plane/space/serializer/module.py similarity index 100% rename from apps/server/plane/space/serializer/module.py rename to apps/api/plane/space/serializer/module.py diff --git a/apps/server/plane/space/serializer/project.py b/apps/api/plane/space/serializer/project.py similarity index 100% rename from apps/server/plane/space/serializer/project.py rename to apps/api/plane/space/serializer/project.py diff --git a/apps/server/plane/space/serializer/state.py b/apps/api/plane/space/serializer/state.py similarity index 100% rename from apps/server/plane/space/serializer/state.py rename to apps/api/plane/space/serializer/state.py diff --git a/apps/server/plane/space/serializer/user.py b/apps/api/plane/space/serializer/user.py similarity index 100% rename from apps/server/plane/space/serializer/user.py rename to apps/api/plane/space/serializer/user.py diff --git a/apps/server/plane/space/serializer/workspace.py b/apps/api/plane/space/serializer/workspace.py similarity index 100% rename from apps/server/plane/space/serializer/workspace.py rename to apps/api/plane/space/serializer/workspace.py diff --git a/apps/server/plane/space/urls/__init__.py b/apps/api/plane/space/urls/__init__.py similarity index 100% rename from apps/server/plane/space/urls/__init__.py rename to apps/api/plane/space/urls/__init__.py diff --git a/apps/server/plane/space/urls/asset.py b/apps/api/plane/space/urls/asset.py similarity index 100% rename from apps/server/plane/space/urls/asset.py rename to apps/api/plane/space/urls/asset.py diff --git a/apps/server/plane/space/urls/intake.py b/apps/api/plane/space/urls/intake.py similarity index 100% rename from apps/server/plane/space/urls/intake.py rename to apps/api/plane/space/urls/intake.py diff --git a/apps/server/plane/space/urls/issue.py b/apps/api/plane/space/urls/issue.py similarity index 100% rename from apps/server/plane/space/urls/issue.py rename to apps/api/plane/space/urls/issue.py diff --git a/apps/server/plane/space/urls/project.py b/apps/api/plane/space/urls/project.py similarity index 100% rename from apps/server/plane/space/urls/project.py rename to apps/api/plane/space/urls/project.py diff --git a/apps/server/plane/space/utils/grouper.py b/apps/api/plane/space/utils/grouper.py similarity index 100% rename from apps/server/plane/space/utils/grouper.py rename to apps/api/plane/space/utils/grouper.py diff --git a/apps/server/plane/space/views/__init__.py b/apps/api/plane/space/views/__init__.py similarity index 100% rename from apps/server/plane/space/views/__init__.py rename to apps/api/plane/space/views/__init__.py diff --git a/apps/server/plane/space/views/asset.py b/apps/api/plane/space/views/asset.py similarity index 100% rename from apps/server/plane/space/views/asset.py rename to apps/api/plane/space/views/asset.py diff --git a/apps/server/plane/space/views/base.py b/apps/api/plane/space/views/base.py similarity index 100% rename from apps/server/plane/space/views/base.py rename to apps/api/plane/space/views/base.py diff --git a/apps/server/plane/space/views/cycle.py b/apps/api/plane/space/views/cycle.py similarity index 100% rename from apps/server/plane/space/views/cycle.py rename to apps/api/plane/space/views/cycle.py diff --git a/apps/server/plane/space/views/intake.py b/apps/api/plane/space/views/intake.py similarity index 100% rename from apps/server/plane/space/views/intake.py rename to apps/api/plane/space/views/intake.py diff --git a/apps/server/plane/space/views/issue.py b/apps/api/plane/space/views/issue.py similarity index 100% rename from apps/server/plane/space/views/issue.py rename to apps/api/plane/space/views/issue.py diff --git a/apps/server/plane/space/views/label.py b/apps/api/plane/space/views/label.py similarity index 100% rename from apps/server/plane/space/views/label.py rename to apps/api/plane/space/views/label.py diff --git a/apps/server/plane/space/views/meta.py b/apps/api/plane/space/views/meta.py similarity index 100% rename from apps/server/plane/space/views/meta.py rename to apps/api/plane/space/views/meta.py diff --git a/apps/server/plane/space/views/module.py b/apps/api/plane/space/views/module.py similarity index 100% rename from apps/server/plane/space/views/module.py rename to apps/api/plane/space/views/module.py diff --git a/apps/server/plane/space/views/project.py b/apps/api/plane/space/views/project.py similarity index 100% rename from apps/server/plane/space/views/project.py rename to apps/api/plane/space/views/project.py diff --git a/apps/server/plane/space/views/state.py b/apps/api/plane/space/views/state.py similarity index 100% rename from apps/server/plane/space/views/state.py rename to apps/api/plane/space/views/state.py diff --git a/apps/server/plane/static/css/style.css b/apps/api/plane/static/css/style.css similarity index 100% rename from apps/server/plane/static/css/style.css rename to apps/api/plane/static/css/style.css diff --git a/apps/server/plane/static/humans.txt b/apps/api/plane/static/humans.txt similarity index 100% rename from apps/server/plane/static/humans.txt rename to apps/api/plane/static/humans.txt diff --git a/apps/server/plane/static/js/script.js b/apps/api/plane/static/js/script.js similarity index 100% rename from apps/server/plane/static/js/script.js rename to apps/api/plane/static/js/script.js diff --git a/apps/server/plane/tests/README.md b/apps/api/plane/tests/README.md similarity index 100% rename from apps/server/plane/tests/README.md rename to apps/api/plane/tests/README.md diff --git a/apps/server/plane/tests/TESTING_GUIDE.md b/apps/api/plane/tests/TESTING_GUIDE.md similarity index 100% rename from apps/server/plane/tests/TESTING_GUIDE.md rename to apps/api/plane/tests/TESTING_GUIDE.md diff --git a/apps/server/plane/tests/__init__.py b/apps/api/plane/tests/__init__.py similarity index 100% rename from apps/server/plane/tests/__init__.py rename to apps/api/plane/tests/__init__.py diff --git a/apps/server/plane/tests/apps.py b/apps/api/plane/tests/apps.py similarity index 100% rename from apps/server/plane/tests/apps.py rename to apps/api/plane/tests/apps.py diff --git a/apps/server/plane/tests/conftest.py b/apps/api/plane/tests/conftest.py similarity index 100% rename from apps/server/plane/tests/conftest.py rename to apps/api/plane/tests/conftest.py diff --git a/apps/server/plane/tests/conftest_external.py b/apps/api/plane/tests/conftest_external.py similarity index 100% rename from apps/server/plane/tests/conftest_external.py rename to apps/api/plane/tests/conftest_external.py diff --git a/apps/server/plane/tests/contract/__init__.py b/apps/api/plane/tests/contract/__init__.py similarity index 100% rename from apps/server/plane/tests/contract/__init__.py rename to apps/api/plane/tests/contract/__init__.py diff --git a/apps/server/plane/tests/contract/api/__init__.py b/apps/api/plane/tests/contract/api/__init__.py similarity index 100% rename from apps/server/plane/tests/contract/api/__init__.py rename to apps/api/plane/tests/contract/api/__init__.py diff --git a/apps/server/plane/tests/contract/app/__init__.py b/apps/api/plane/tests/contract/app/__init__.py similarity index 100% rename from apps/server/plane/tests/contract/app/__init__.py rename to apps/api/plane/tests/contract/app/__init__.py diff --git a/apps/server/plane/tests/contract/app/test_api_token.py b/apps/api/plane/tests/contract/app/test_api_token.py similarity index 100% rename from apps/server/plane/tests/contract/app/test_api_token.py rename to apps/api/plane/tests/contract/app/test_api_token.py diff --git a/apps/server/plane/tests/contract/app/test_authentication.py b/apps/api/plane/tests/contract/app/test_authentication.py similarity index 100% rename from apps/server/plane/tests/contract/app/test_authentication.py rename to apps/api/plane/tests/contract/app/test_authentication.py diff --git a/apps/server/plane/tests/contract/app/test_project_app.py b/apps/api/plane/tests/contract/app/test_project_app.py similarity index 100% rename from apps/server/plane/tests/contract/app/test_project_app.py rename to apps/api/plane/tests/contract/app/test_project_app.py diff --git a/apps/server/plane/tests/contract/app/test_workspace_app.py b/apps/api/plane/tests/contract/app/test_workspace_app.py similarity index 100% rename from apps/server/plane/tests/contract/app/test_workspace_app.py rename to apps/api/plane/tests/contract/app/test_workspace_app.py diff --git a/apps/server/plane/tests/factories.py b/apps/api/plane/tests/factories.py similarity index 100% rename from apps/server/plane/tests/factories.py rename to apps/api/plane/tests/factories.py diff --git a/apps/server/plane/tests/smoke/__init__.py b/apps/api/plane/tests/smoke/__init__.py similarity index 100% rename from apps/server/plane/tests/smoke/__init__.py rename to apps/api/plane/tests/smoke/__init__.py diff --git a/apps/server/plane/tests/smoke/test_auth_smoke.py b/apps/api/plane/tests/smoke/test_auth_smoke.py similarity index 100% rename from apps/server/plane/tests/smoke/test_auth_smoke.py rename to apps/api/plane/tests/smoke/test_auth_smoke.py diff --git a/apps/server/plane/tests/unit/__init__.py b/apps/api/plane/tests/unit/__init__.py similarity index 100% rename from apps/server/plane/tests/unit/__init__.py rename to apps/api/plane/tests/unit/__init__.py diff --git a/apps/server/plane/tests/unit/models/__init__.py b/apps/api/plane/tests/unit/models/__init__.py similarity index 100% rename from apps/server/plane/tests/unit/models/__init__.py rename to apps/api/plane/tests/unit/models/__init__.py diff --git a/apps/server/plane/tests/unit/models/test_workspace_model.py b/apps/api/plane/tests/unit/models/test_workspace_model.py similarity index 100% rename from apps/server/plane/tests/unit/models/test_workspace_model.py rename to apps/api/plane/tests/unit/models/test_workspace_model.py diff --git a/apps/server/plane/tests/unit/serializers/__init__.py b/apps/api/plane/tests/unit/serializers/__init__.py similarity index 100% rename from apps/server/plane/tests/unit/serializers/__init__.py rename to apps/api/plane/tests/unit/serializers/__init__.py diff --git a/apps/server/plane/tests/unit/serializers/test_issue_recent_visit.py b/apps/api/plane/tests/unit/serializers/test_issue_recent_visit.py similarity index 100% rename from apps/server/plane/tests/unit/serializers/test_issue_recent_visit.py rename to apps/api/plane/tests/unit/serializers/test_issue_recent_visit.py diff --git a/apps/server/plane/tests/unit/serializers/test_workspace.py b/apps/api/plane/tests/unit/serializers/test_workspace.py similarity index 100% rename from apps/server/plane/tests/unit/serializers/test_workspace.py rename to apps/api/plane/tests/unit/serializers/test_workspace.py diff --git a/apps/server/plane/tests/unit/utils/__init__.py b/apps/api/plane/tests/unit/utils/__init__.py similarity index 100% rename from apps/server/plane/tests/unit/utils/__init__.py rename to apps/api/plane/tests/unit/utils/__init__.py diff --git a/apps/server/plane/tests/unit/utils/test_uuid.py b/apps/api/plane/tests/unit/utils/test_uuid.py similarity index 100% rename from apps/server/plane/tests/unit/utils/test_uuid.py rename to apps/api/plane/tests/unit/utils/test_uuid.py diff --git a/apps/server/plane/urls.py b/apps/api/plane/urls.py similarity index 100% rename from apps/server/plane/urls.py rename to apps/api/plane/urls.py diff --git a/apps/server/plane/utils/__init__.py b/apps/api/plane/utils/__init__.py similarity index 100% rename from apps/server/plane/utils/__init__.py rename to apps/api/plane/utils/__init__.py diff --git a/apps/server/plane/utils/analytics_plot.py b/apps/api/plane/utils/analytics_plot.py similarity index 100% rename from apps/server/plane/utils/analytics_plot.py rename to apps/api/plane/utils/analytics_plot.py diff --git a/apps/server/plane/utils/build_chart.py b/apps/api/plane/utils/build_chart.py similarity index 100% rename from apps/server/plane/utils/build_chart.py rename to apps/api/plane/utils/build_chart.py diff --git a/apps/server/plane/utils/cache.py b/apps/api/plane/utils/cache.py similarity index 100% rename from apps/server/plane/utils/cache.py rename to apps/api/plane/utils/cache.py diff --git a/apps/server/plane/utils/constants.py b/apps/api/plane/utils/constants.py similarity index 100% rename from apps/server/plane/utils/constants.py rename to apps/api/plane/utils/constants.py diff --git a/apps/server/plane/utils/date_utils.py b/apps/api/plane/utils/date_utils.py similarity index 100% rename from apps/server/plane/utils/date_utils.py rename to apps/api/plane/utils/date_utils.py diff --git a/apps/server/plane/utils/error_codes.py b/apps/api/plane/utils/error_codes.py similarity index 100% rename from apps/server/plane/utils/error_codes.py rename to apps/api/plane/utils/error_codes.py diff --git a/apps/server/plane/utils/exception_logger.py b/apps/api/plane/utils/exception_logger.py similarity index 100% rename from apps/server/plane/utils/exception_logger.py rename to apps/api/plane/utils/exception_logger.py diff --git a/apps/server/plane/utils/global_paginator.py b/apps/api/plane/utils/global_paginator.py similarity index 100% rename from apps/server/plane/utils/global_paginator.py rename to apps/api/plane/utils/global_paginator.py diff --git a/apps/server/plane/utils/grouper.py b/apps/api/plane/utils/grouper.py similarity index 100% rename from apps/server/plane/utils/grouper.py rename to apps/api/plane/utils/grouper.py diff --git a/apps/server/plane/utils/host.py b/apps/api/plane/utils/host.py similarity index 100% rename from apps/server/plane/utils/host.py rename to apps/api/plane/utils/host.py diff --git a/apps/server/plane/utils/html_processor.py b/apps/api/plane/utils/html_processor.py similarity index 100% rename from apps/server/plane/utils/html_processor.py rename to apps/api/plane/utils/html_processor.py diff --git a/apps/server/plane/utils/imports.py b/apps/api/plane/utils/imports.py similarity index 100% rename from apps/server/plane/utils/imports.py rename to apps/api/plane/utils/imports.py diff --git a/apps/server/plane/utils/ip_address.py b/apps/api/plane/utils/ip_address.py similarity index 100% rename from apps/server/plane/utils/ip_address.py rename to apps/api/plane/utils/ip_address.py diff --git a/apps/server/plane/utils/issue_filters.py b/apps/api/plane/utils/issue_filters.py similarity index 100% rename from apps/server/plane/utils/issue_filters.py rename to apps/api/plane/utils/issue_filters.py diff --git a/apps/server/plane/utils/issue_relation_mapper.py b/apps/api/plane/utils/issue_relation_mapper.py similarity index 100% rename from apps/server/plane/utils/issue_relation_mapper.py rename to apps/api/plane/utils/issue_relation_mapper.py diff --git a/apps/server/plane/utils/issue_search.py b/apps/api/plane/utils/issue_search.py similarity index 100% rename from apps/server/plane/utils/issue_search.py rename to apps/api/plane/utils/issue_search.py diff --git a/apps/server/plane/utils/logging.py b/apps/api/plane/utils/logging.py similarity index 100% rename from apps/server/plane/utils/logging.py rename to apps/api/plane/utils/logging.py diff --git a/apps/server/plane/utils/markdown.py b/apps/api/plane/utils/markdown.py similarity index 100% rename from apps/server/plane/utils/markdown.py rename to apps/api/plane/utils/markdown.py diff --git a/apps/server/plane/utils/order_queryset.py b/apps/api/plane/utils/order_queryset.py similarity index 100% rename from apps/server/plane/utils/order_queryset.py rename to apps/api/plane/utils/order_queryset.py diff --git a/apps/server/plane/utils/paginator.py b/apps/api/plane/utils/paginator.py similarity index 100% rename from apps/server/plane/utils/paginator.py rename to apps/api/plane/utils/paginator.py diff --git a/apps/server/plane/utils/path_validator.py b/apps/api/plane/utils/path_validator.py similarity index 100% rename from apps/server/plane/utils/path_validator.py rename to apps/api/plane/utils/path_validator.py diff --git a/apps/server/plane/utils/telemetry.py b/apps/api/plane/utils/telemetry.py similarity index 100% rename from apps/server/plane/utils/telemetry.py rename to apps/api/plane/utils/telemetry.py diff --git a/apps/server/plane/utils/timezone_converter.py b/apps/api/plane/utils/timezone_converter.py similarity index 100% rename from apps/server/plane/utils/timezone_converter.py rename to apps/api/plane/utils/timezone_converter.py diff --git a/apps/server/plane/utils/url.py b/apps/api/plane/utils/url.py similarity index 100% rename from apps/server/plane/utils/url.py rename to apps/api/plane/utils/url.py diff --git a/apps/server/plane/utils/uuid.py b/apps/api/plane/utils/uuid.py similarity index 100% rename from apps/server/plane/utils/uuid.py rename to apps/api/plane/utils/uuid.py diff --git a/apps/server/plane/web/__init__.py b/apps/api/plane/web/__init__.py similarity index 100% rename from apps/server/plane/web/__init__.py rename to apps/api/plane/web/__init__.py diff --git a/apps/server/plane/web/apps.py b/apps/api/plane/web/apps.py similarity index 100% rename from apps/server/plane/web/apps.py rename to apps/api/plane/web/apps.py diff --git a/apps/server/plane/web/urls.py b/apps/api/plane/web/urls.py similarity index 100% rename from apps/server/plane/web/urls.py rename to apps/api/plane/web/urls.py diff --git a/apps/server/plane/web/views.py b/apps/api/plane/web/views.py similarity index 100% rename from apps/server/plane/web/views.py rename to apps/api/plane/web/views.py diff --git a/apps/server/plane/wsgi.py b/apps/api/plane/wsgi.py similarity index 100% rename from apps/server/plane/wsgi.py rename to apps/api/plane/wsgi.py diff --git a/apps/server/pyproject.toml b/apps/api/pyproject.toml similarity index 100% rename from apps/server/pyproject.toml rename to apps/api/pyproject.toml diff --git a/apps/server/pytest.ini b/apps/api/pytest.ini similarity index 100% rename from apps/server/pytest.ini rename to apps/api/pytest.ini diff --git a/apps/server/requirements.txt b/apps/api/requirements.txt similarity index 100% rename from apps/server/requirements.txt rename to apps/api/requirements.txt diff --git a/apps/server/requirements/base.txt b/apps/api/requirements/base.txt similarity index 100% rename from apps/server/requirements/base.txt rename to apps/api/requirements/base.txt diff --git a/apps/server/requirements/local.txt b/apps/api/requirements/local.txt similarity index 100% rename from apps/server/requirements/local.txt rename to apps/api/requirements/local.txt diff --git a/apps/server/requirements/production.txt b/apps/api/requirements/production.txt similarity index 100% rename from apps/server/requirements/production.txt rename to apps/api/requirements/production.txt diff --git a/apps/server/requirements/test.txt b/apps/api/requirements/test.txt similarity index 100% rename from apps/server/requirements/test.txt rename to apps/api/requirements/test.txt diff --git a/apps/server/run_tests.py b/apps/api/run_tests.py similarity index 100% rename from apps/server/run_tests.py rename to apps/api/run_tests.py diff --git a/apps/server/run_tests.sh b/apps/api/run_tests.sh similarity index 100% rename from apps/server/run_tests.sh rename to apps/api/run_tests.sh diff --git a/apps/server/templates/admin/base_site.html b/apps/api/templates/admin/base_site.html similarity index 100% rename from apps/server/templates/admin/base_site.html rename to apps/api/templates/admin/base_site.html diff --git a/apps/server/templates/base.html b/apps/api/templates/base.html similarity index 100% rename from apps/server/templates/base.html rename to apps/api/templates/base.html diff --git a/apps/server/templates/csrf_failure.html b/apps/api/templates/csrf_failure.html similarity index 100% rename from apps/server/templates/csrf_failure.html rename to apps/api/templates/csrf_failure.html diff --git a/apps/server/templates/emails/auth/forgot_password.html b/apps/api/templates/emails/auth/forgot_password.html similarity index 100% rename from apps/server/templates/emails/auth/forgot_password.html rename to apps/api/templates/emails/auth/forgot_password.html diff --git a/apps/server/templates/emails/auth/magic_signin.html b/apps/api/templates/emails/auth/magic_signin.html similarity index 100% rename from apps/server/templates/emails/auth/magic_signin.html rename to apps/api/templates/emails/auth/magic_signin.html diff --git a/apps/server/templates/emails/exports/analytics.html b/apps/api/templates/emails/exports/analytics.html similarity index 100% rename from apps/server/templates/emails/exports/analytics.html rename to apps/api/templates/emails/exports/analytics.html diff --git a/apps/server/templates/emails/invitations/project_invitation.html b/apps/api/templates/emails/invitations/project_invitation.html similarity index 100% rename from apps/server/templates/emails/invitations/project_invitation.html rename to apps/api/templates/emails/invitations/project_invitation.html diff --git a/apps/server/templates/emails/invitations/workspace_invitation.html b/apps/api/templates/emails/invitations/workspace_invitation.html similarity index 100% rename from apps/server/templates/emails/invitations/workspace_invitation.html rename to apps/api/templates/emails/invitations/workspace_invitation.html diff --git a/apps/server/templates/emails/notifications/issue-updates.html b/apps/api/templates/emails/notifications/issue-updates.html similarity index 100% rename from apps/server/templates/emails/notifications/issue-updates.html rename to apps/api/templates/emails/notifications/issue-updates.html diff --git a/apps/server/templates/emails/notifications/project_addition.html b/apps/api/templates/emails/notifications/project_addition.html similarity index 100% rename from apps/server/templates/emails/notifications/project_addition.html rename to apps/api/templates/emails/notifications/project_addition.html diff --git a/apps/server/templates/emails/notifications/webhook-deactivate.html b/apps/api/templates/emails/notifications/webhook-deactivate.html similarity index 100% rename from apps/server/templates/emails/notifications/webhook-deactivate.html rename to apps/api/templates/emails/notifications/webhook-deactivate.html diff --git a/apps/server/templates/emails/test_email.html b/apps/api/templates/emails/test_email.html similarity index 100% rename from apps/server/templates/emails/test_email.html rename to apps/api/templates/emails/test_email.html diff --git a/apps/server/templates/emails/user/user_activation.html b/apps/api/templates/emails/user/user_activation.html similarity index 100% rename from apps/server/templates/emails/user/user_activation.html rename to apps/api/templates/emails/user/user_activation.html diff --git a/apps/server/templates/emails/user/user_deactivation.html b/apps/api/templates/emails/user/user_deactivation.html similarity index 100% rename from apps/server/templates/emails/user/user_deactivation.html rename to apps/api/templates/emails/user/user_deactivation.html diff --git a/docker-compose-local.yml b/docker-compose-local.yml index 257780143ad..01cd07f94e2 100644 --- a/docker-compose-local.yml +++ b/docker-compose-local.yml @@ -122,7 +122,7 @@ services: api: build: - context: ./apps/server + context: ./apps/api dockerfile: Dockerfile.dev args: DOCKER_BUILDKIT: 1 @@ -130,10 +130,10 @@ services: networks: - dev_env volumes: - - ./apps/server:/code + - ./apps/api:/code command: ./bin/docker-entrypoint-api-local.sh env_file: - - ./apps/server/.env + - ./apps/api/.env depends_on: - plane-db - plane-redis @@ -143,7 +143,7 @@ services: worker: build: - context: ./apps/server + context: ./apps/api dockerfile: Dockerfile.dev args: DOCKER_BUILDKIT: 1 @@ -151,10 +151,10 @@ services: networks: - dev_env volumes: - - ./apps/server:/code + - ./apps/api:/code command: ./bin/docker-entrypoint-worker.sh env_file: - - ./apps/server/.env + - ./apps/api/.env depends_on: - api - plane-db @@ -162,7 +162,7 @@ services: beat-worker: build: - context: ./apps/server + context: ./apps/api dockerfile: Dockerfile.dev args: DOCKER_BUILDKIT: 1 @@ -170,10 +170,10 @@ services: networks: - dev_env volumes: - - ./apps/server:/code + - ./apps/api:/code command: ./bin/docker-entrypoint-beat.sh env_file: - - ./apps/server/.env + - ./apps/api/.env depends_on: - api - plane-db @@ -181,7 +181,7 @@ services: migrator: build: - context: ./apps/server + context: ./apps/api dockerfile: Dockerfile.dev args: DOCKER_BUILDKIT: 1 @@ -189,7 +189,7 @@ services: networks: - dev_env volumes: - - ./apps/server:/code + - ./apps/api:/code command: ./bin/docker-entrypoint-migrator.sh --settings=plane.settings.local env_file: - .env diff --git a/docker-compose.yml b/docker-compose.yml index 184b514c10b..e584ac697b1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,11 +3,10 @@ services: container_name: web build: context: . - dockerfile: ./web/Dockerfile.web + dockerfile: ./apps/web/Dockerfile.web args: DOCKER_BUILDKIT: 1 restart: always - command: node web/server.js web depends_on: - api @@ -15,11 +14,10 @@ services: container_name: admin build: context: . - dockerfile: ./admin/Dockerfile.admin + dockerfile: ./apps/admin/Dockerfile.admin args: DOCKER_BUILDKIT: 1 restart: always - command: node admin/server.js admin depends_on: - api - web @@ -28,11 +26,10 @@ services: container_name: space build: context: . - dockerfile: ./space/Dockerfile.space + dockerfile: ./apps/space/Dockerfile.space args: DOCKER_BUILDKIT: 1 restart: always - command: node space/server.js space depends_on: - api - web @@ -40,14 +37,14 @@ services: api: container_name: api build: - context: ./apps/server + context: ./apps/api dockerfile: Dockerfile.api args: DOCKER_BUILDKIT: 1 restart: always command: ./bin/docker-entrypoint-api.sh env_file: - - ./apps/server/.env + - ./apps/api/.env depends_on: - plane-db - plane-redis @@ -55,14 +52,14 @@ services: worker: container_name: bgworker build: - context: ./apps/server + context: ./apps/api dockerfile: Dockerfile.api args: DOCKER_BUILDKIT: 1 restart: always command: ./bin/docker-entrypoint-worker.sh env_file: - - ./apps/server/.env + - ./apps/api/.env depends_on: - api - plane-db @@ -71,14 +68,14 @@ services: beat-worker: container_name: beatworker build: - context: ./apps/server + context: ./apps/api dockerfile: Dockerfile.api args: DOCKER_BUILDKIT: 1 restart: always command: ./bin/docker-entrypoint-beat.sh env_file: - - ./apps/server/.env + - ./apps/api/.env depends_on: - api - plane-db @@ -87,14 +84,14 @@ services: migrator: container_name: plane-migrator build: - context: ./apps/server + context: ./apps/api dockerfile: Dockerfile.api args: DOCKER_BUILDKIT: 1 restart: no command: ./bin/docker-entrypoint-migrator.sh env_file: - - ./apps/server/.env + - ./apps/api/.env depends_on: - plane-db - plane-redis @@ -103,11 +100,10 @@ services: container_name: plane-live build: context: . - dockerfile: ./live/Dockerfile.live + dockerfile: ./apps/live/Dockerfile.live args: DOCKER_BUILDKIT: 1 restart: always - command: node live/dist/server.js plane-db: container_name: plane-db diff --git a/setup.sh b/setup.sh index 5d87c844678..986a4261694 100755 --- a/setup.sh +++ b/setup.sh @@ -44,7 +44,7 @@ export LC_CTYPE=C echo -e "${YELLOW}Setting up environment files...${NC}" # Copy all environment example files -services=("" "web" "server" "space" "admin" "live") +services=("" "web" "api" "space" "admin" "live") success=true for service in "${services[@]}"; do @@ -60,7 +60,7 @@ for service in "${services[@]}"; do done # Generate SECRET_KEY for Django -if [ -f "./apps/server/.env" ]; then +if [ -f "./apps/api/.env" ]; then echo -e "\n${YELLOW}Generating Django SECRET_KEY...${NC}" SECRET_KEY=$(tr -dc 'a-z0-9' < /dev/urandom | head -c50) @@ -69,11 +69,11 @@ if [ -f "./apps/server/.env" ]; then echo -e "${RED}Ensure 'tr' and 'head' commands are available on your system.${NC}" success=false else - echo -e "SECRET_KEY=\"$SECRET_KEY\"" >> ./apps/server/.env - echo -e "${GREEN}✓${NC} Added SECRET_KEY to apps/server/.env" + echo -e "SECRET_KEY=\"$SECRET_KEY\"" >> ./apps/api/.env + echo -e "${GREEN}✓${NC} Added SECRET_KEY to apps/api/.env" fi else - echo -e "${RED}✗${NC} apps/server/.env not found. SECRET_KEY not added." + echo -e "${RED}✗${NC} apps/api/.env not found. SECRET_KEY not added." success=false fi From 509db322671fadabfef88c9e330540266ce0fcaa Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Fri, 4 Jul 2025 16:28:30 +0530 Subject: [PATCH 032/130] chore: updated node version to 22 and python version to 3.12.10 (#7343) * chore: updated node version to 22 and python version to 3.12.10 * chore: remove unneccessary comments * chore: remove nodejs-current dependency --- apps/admin/Dockerfile.admin | 2 +- apps/admin/Dockerfile.dev | 2 +- apps/api/Dockerfile.api | 22 ++++++++++++++-------- apps/live/Dockerfile.dev | 6 +++--- apps/live/Dockerfile.live | 4 +--- apps/space/Dockerfile.dev | 2 +- apps/space/Dockerfile.space | 2 +- apps/web/Dockerfile.dev | 5 +++-- apps/web/Dockerfile.web | 2 +- 9 files changed, 26 insertions(+), 21 deletions(-) diff --git a/apps/admin/Dockerfile.admin b/apps/admin/Dockerfile.admin index 07da8088a1c..01884206ed4 100644 --- a/apps/admin/Dockerfile.admin +++ b/apps/admin/Dockerfile.admin @@ -1,4 +1,4 @@ -FROM node:20-alpine AS base +FROM node:22-alpine AS base # ***************************************************************************** # STAGE 1: Build the project diff --git a/apps/admin/Dockerfile.dev b/apps/admin/Dockerfile.dev index 3bdc71c16d6..edf82d22785 100644 --- a/apps/admin/Dockerfile.dev +++ b/apps/admin/Dockerfile.dev @@ -1,4 +1,4 @@ -FROM node:20-alpine +FROM node:22-alpine RUN apk add --no-cache libc6-compat # Set working directory WORKDIR /app diff --git a/apps/api/Dockerfile.api b/apps/api/Dockerfile.api index 9c95f17b1a7..132514811c2 100644 --- a/apps/api/Dockerfile.api +++ b/apps/api/Dockerfile.api @@ -1,18 +1,22 @@ -FROM python:3.12.5-alpine AS backend +FROM python:3.12.10-alpine # set environment variables -ENV PYTHONDONTWRITEBYTECODE 1 -ENV PYTHONUNBUFFERED 1 +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 ENV PIP_DISABLE_PIP_VERSION_CHECK=1 -ENV INSTANCE_CHANGELOG_URL https://sites.plane.so/pages/691ef037bcfe416a902e48cb55f59891/ +ENV INSTANCE_CHANGELOG_URL=https://sites.plane.so/pages/691ef037bcfe416a902e48cb55f59891/ + +# Update system packages for security +RUN apk update && apk upgrade WORKDIR /code -RUN apk add --no-cache \ +RUN apk add --no-cache --upgrade \ "libpq" \ "libxslt" \ - "nodejs-current" \ - "xmlsec" + "xmlsec" \ + "ca-certificates" \ + "openssl" COPY requirements.txt ./ COPY requirements ./requirements @@ -30,7 +34,9 @@ RUN apk add --no-cache --virtual .build-deps \ && \ pip install -r requirements.txt --compile --no-cache-dir \ && \ - apk del .build-deps + apk del .build-deps \ + && \ + rm -rf /var/cache/apk/* # Add in Django deps and generate Django's static files diff --git a/apps/live/Dockerfile.dev b/apps/live/Dockerfile.dev index d893194ca96..4d251ee9aed 100644 --- a/apps/live/Dockerfile.dev +++ b/apps/live/Dockerfile.dev @@ -1,6 +1,6 @@ -FROM node:20-alpine +FROM node:22-alpine + RUN apk add --no-cache libc6-compat -# Set working directory WORKDIR /app COPY . . @@ -8,7 +8,7 @@ RUN yarn global add turbo RUN yarn install EXPOSE 3003 -ENV TURBO_TELEMETRY_DISABLED 1 +ENV TURBO_TELEMETRY_DISABLED=1 VOLUME [ "/app/node_modules", "/app/live/node_modules"] diff --git a/apps/live/Dockerfile.live b/apps/live/Dockerfile.live index 1a22ca18ac4..c3455fdcecc 100644 --- a/apps/live/Dockerfile.live +++ b/apps/live/Dockerfile.live @@ -1,6 +1,4 @@ -FROM node:20-alpine AS base -# The web Dockerfile is copy-pasted into our main docs at /docs/handbook/deploying-with-docker. -# Make sure you update this Dockerfile, the Dockerfile in the web workspace and copy that over to Dockerfile in the docs. +FROM node:22-alpine AS base # ***************************************************************************** # STAGE 1: Prune the project diff --git a/apps/space/Dockerfile.dev b/apps/space/Dockerfile.dev index b7e42dab84e..f735e0d84d8 100644 --- a/apps/space/Dockerfile.dev +++ b/apps/space/Dockerfile.dev @@ -1,4 +1,4 @@ -FROM node:20-alpine +FROM node:22-alpine RUN apk add --no-cache libc6-compat # Set working directory WORKDIR /app diff --git a/apps/space/Dockerfile.space b/apps/space/Dockerfile.space index ae7afc2c0d8..525d72f7b0d 100644 --- a/apps/space/Dockerfile.space +++ b/apps/space/Dockerfile.space @@ -1,4 +1,4 @@ -FROM node:20-alpine AS base +FROM node:22-alpine AS base # ***************************************************************************** # STAGE 1: Build the project diff --git a/apps/web/Dockerfile.dev b/apps/web/Dockerfile.dev index 64465755ee7..8ca87920753 100644 --- a/apps/web/Dockerfile.dev +++ b/apps/web/Dockerfile.dev @@ -1,12 +1,13 @@ -FROM node:20-alpine +FROM node:22-alpine + RUN apk add --no-cache libc6-compat # Set working directory WORKDIR /app - COPY . . RUN yarn global add turbo RUN yarn install + EXPOSE 3000 VOLUME [ "/app/node_modules", "/app/web/node_modules" ] CMD ["yarn", "dev", "--filter=web"] diff --git a/apps/web/Dockerfile.web b/apps/web/Dockerfile.web index a09aa640447..ac1da79af8c 100644 --- a/apps/web/Dockerfile.web +++ b/apps/web/Dockerfile.web @@ -1,4 +1,4 @@ -FROM node:20-alpine AS base +FROM node:22-alpine AS base # ***************************************************************************** # STAGE 1: Build the project From b909416c748ec6a12f306279c3821e27cc12bc65 Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com> Date: Fri, 4 Jul 2025 17:10:03 +0530 Subject: [PATCH 033/130] [WIKI-519] regression: page creator and version info #7341 --- .../tab-panels/info/actors-info.tsx | 4 +- .../tab-panels/info/version-history.tsx | 2 +- .../editors/document/collaborative-editor.tsx | 9 +--- .../editors/document/page-renderer.tsx | 48 ++++++++++++------- packages/editor/src/styles/variables.css | 44 ++++++++++------- 5 files changed, 62 insertions(+), 45 deletions(-) diff --git a/apps/web/core/components/pages/navigation-pane/tab-panels/info/actors-info.tsx b/apps/web/core/components/pages/navigation-pane/tab-panels/info/actors-info.tsx index d4c166ddff0..d0bd1b907bd 100644 --- a/apps/web/core/components/pages/navigation-pane/tab-panels/info/actors-info.tsx +++ b/apps/web/core/components/pages/navigation-pane/tab-panels/info/actors-info.tsx @@ -21,9 +21,9 @@ export const PageNavigationPaneInfoTabActorsInfo: React.FC = observer((pr // store hooks const { getUserDetails } = useMember(); // derived values - const { created_by, updated_by } = page; + const { owned_by, updated_by } = page; const editorInformation = updated_by ? getUserDetails(updated_by) : undefined; - const creatorInformation = created_by ? getUserDetails(created_by) : undefined; + const creatorInformation = owned_by ? getUserDetails(owned_by) : undefined; // translation const { t } = useTranslation(); diff --git a/apps/web/core/components/pages/navigation-pane/tab-panels/info/version-history.tsx b/apps/web/core/components/pages/navigation-pane/tab-panels/info/version-history.tsx index 31069299f30..d1454b12c05 100644 --- a/apps/web/core/components/pages/navigation-pane/tab-panels/info/version-history.tsx +++ b/apps/web/core/components/pages/navigation-pane/tab-panels/info/version-history.tsx @@ -34,7 +34,7 @@ const VersionHistoryItem = observer((props: VersionHistoryItemProps) => { // store hooks const { getUserDetails } = useMember(); // derived values - const versionCreator = getUserDetails(version.created_by); + const versionCreator = getUserDetails(version.owned_by); // translation const { t } = useTranslation(); diff --git a/packages/editor/src/core/components/editors/document/collaborative-editor.tsx b/packages/editor/src/core/components/editors/document/collaborative-editor.tsx index e20ac3f5f9d..daaa5617737 100644 --- a/packages/editor/src/core/components/editors/document/collaborative-editor.tsx +++ b/packages/editor/src/core/components/editors/document/collaborative-editor.tsx @@ -3,7 +3,7 @@ import React from "react"; // plane imports import { cn } from "@plane/utils"; // components -import { DocumentContentLoader, PageRenderer } from "@/components/editors"; +import { PageRenderer } from "@/components/editors"; // constants import { DEFAULT_DISPLAY_CONFIG } from "@/constants/config"; // extensions @@ -82,12 +82,6 @@ const CollaborativeDocumentEditor: React.FC = if (!editor) return null; - const blockWidthClassName = cn("w-full max-w-[720px] mx-auto transition-all duration-200 ease-in-out", { - "max-w-[1152px]": displayConfig.wideLayout, - }); - - if (!hasServerSynced && !hasServerConnectionFailed) return ; - return ( = editor={editor} editorContainerClassName={cn(editorContainerClassNames, "document-editor")} id={id} + isLoading={!hasServerSynced && !hasServerConnectionFailed} tabIndex={tabIndex} /> ); diff --git a/packages/editor/src/core/components/editors/document/page-renderer.tsx b/packages/editor/src/core/components/editors/document/page-renderer.tsx index 62613b0a13e..1316d2d7249 100644 --- a/packages/editor/src/core/components/editors/document/page-renderer.tsx +++ b/packages/editor/src/core/components/editors/document/page-renderer.tsx @@ -1,6 +1,8 @@ import { Editor } from "@tiptap/react"; +// plane imports +import { cn } from "@plane/utils"; // components -import { EditorContainer, EditorContentWrapper } from "@/components/editors"; +import { DocumentContentLoader, EditorContainer, EditorContentWrapper } from "@/components/editors"; import { AIFeaturesMenu, BlockMenu, EditorBubbleMenu } from "@/components/menus"; // types import { TAIHandler, TDisplayConfig } from "@/types"; @@ -12,29 +14,39 @@ type Props = { editor: Editor; editorContainerClassName: string; id: string; + isLoading?: boolean; tabIndex?: number; }; export const PageRenderer = (props: Props) => { - const { aiHandler, bubbleMenuEnabled, displayConfig, editor, editorContainerClassName, id, tabIndex } = props; + const { aiHandler, bubbleMenuEnabled, displayConfig, editor, editorContainerClassName, id, isLoading, tabIndex } = + props; return ( -
    - - - {editor.isEditable && ( -
    - {bubbleMenuEnabled && } - - -
    - )} -
    +
    + {isLoading ? ( + + ) : ( + + + {editor.isEditable && ( +
    + {bubbleMenuEnabled && } + + +
    + )} +
    + )}
    ); }; diff --git a/packages/editor/src/styles/variables.css b/packages/editor/src/styles/variables.css index 8d4e41a3c49..f03808c1a15 100644 --- a/packages/editor/src/styles/variables.css +++ b/packages/editor/src/styles/variables.css @@ -169,27 +169,34 @@ #page-content-container { container-name: page-content-container; container-type: inline-size; -} -.editor-container.document-editor { - --editor-content-width: var(--normal-content-width); + .frame-renderer { + --editor-content-width: var(--normal-content-width); - &.wide-layout { - --editor-content-width: var(--wide-content-width); - } + &.wide-layout { + --editor-content-width: var(--wide-content-width); + } - .ProseMirror { - & > *:not(.editor-full-width-block) { + .editor-container.page-title-editor .ProseMirror, + .document-editor-loader { max-width: var(--editor-content-width); - margin-left: auto !important; - margin-right: auto !important; + margin: 0 auto; transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); } - & > .editor-full-width-block { - max-width: 100%; - padding-inline-start: calc((100% - var(--editor-content-width)) / 2); - padding-inline-end: var(--wide-content-margin); + .editor-container.document-editor .ProseMirror { + & > *:not(.editor-full-width-block) { + max-width: var(--editor-content-width); + margin-left: auto !important; + margin-right: auto !important; + transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + } + + & > .editor-full-width-block { + max-width: 100%; + padding-inline-start: calc((100% - var(--editor-content-width)) / 2); + padding-inline-end: var(--wide-content-margin); + } } } } @@ -219,7 +226,8 @@ /* keep a static padding of 96px for wide layouts for container width >912px and <1344px */ @container page-content-container (min-width: 912px) and (max-width: 1344px) { - .editor-container.wide-layout, + #page-content-container .frame-renderer.wide-layout .editor-container, + #page-content-container .frame-renderer.wide-layout .document-editor-loader, .page-header-container { padding-left: var(--wide-content-margin); padding-right: var(--wide-content-margin); @@ -228,7 +236,8 @@ /* keep a static padding of 20px for wide layouts for container width <912px */ @container page-content-container (max-width: 912px) { - .editor-container.wide-layout, + #page-content-container .frame-renderer.wide-layout .editor-container, + #page-content-container .frame-renderer.wide-layout .document-editor-loader, .page-header-container { padding-left: var(--normal-content-margin); padding-right: var(--normal-content-margin); @@ -237,7 +246,8 @@ /* keep a static padding of 20px for normal layouts for container width <760px */ @container page-content-container (max-width: 760px) { - .editor-container:not(.wide-layout), + #page-content-container .frame-renderer:not(.wide-layout) .editor-container, + #page-content-container .frame-renderer:not(.wide-layout) .document-editor-loader, .page-header-container { padding-left: var(--normal-content-margin); padding-right: var(--normal-content-margin); From 28375c46e5da3bc62421ffd80e5f4adc696db63a Mon Sep 17 00:00:00 2001 From: Vipin Chaudhary Date: Fri, 4 Jul 2025 18:35:23 +0530 Subject: [PATCH 034/130] [WIKI-521] fix : emoji unexpectedly scroll (#7344) * fix: emoji modal scroll * refactor: emoji list * fix: escape behavior * fix: minor type fixes --- .../emoji/components/emojis-list.tsx | 217 +++++++++++------- .../src/core/extensions/emoji/suggestion.ts | 84 +++---- 2 files changed, 162 insertions(+), 139 deletions(-) diff --git a/packages/editor/src/core/extensions/emoji/components/emojis-list.tsx b/packages/editor/src/core/extensions/emoji/components/emojis-list.tsx index 86443cc9d40..706dbc685a2 100644 --- a/packages/editor/src/core/extensions/emoji/components/emojis-list.tsx +++ b/packages/editor/src/core/extensions/emoji/components/emojis-list.tsx @@ -1,5 +1,7 @@ -import { Editor } from "@tiptap/react"; -import { forwardRef, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useRef, useState } from "react"; +import { computePosition, flip, shift } from "@floating-ui/dom"; +import { Editor, posToDOMRect } from "@tiptap/react"; +import { SuggestionKeyDownProps } from "@tiptap/suggestion"; +import { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from "react"; // plane imports import { cn } from "@plane/utils"; @@ -18,14 +20,33 @@ export interface EmojiListProps { } export interface EmojiListRef { - onKeyDown: (props: { event: KeyboardEvent }) => boolean; + onKeyDown: (props: SuggestionKeyDownProps) => boolean; } +const updatePosition = (editor: Editor, element: HTMLElement) => { + const virtualElement = { + getBoundingClientRect: () => posToDOMRect(editor.view, editor.state.selection.from, editor.state.selection.to), + }; + + computePosition(virtualElement, element, { + placement: "bottom-start", + strategy: "absolute", + middleware: [shift(), flip()], + }).then(({ x, y, strategy }) => { + Object.assign(element.style, { + width: "max-content", + position: strategy, + left: `${x}px`, + top: `${y}px`, + }); + }); +}; + export const EmojiList = forwardRef((props, ref) => { - const { items, command } = props; + const { items, command, editor } = props; const [selectedIndex, setSelectedIndex] = useState(0); - // refs - const emojiListContainer = useRef(null); + const [isVisible, setIsVisible] = useState(false); + const containerRef = useRef(null); const selectItem = useCallback( (index: number): void => { @@ -37,26 +58,68 @@ export const EmojiList = forwardRef((props, ref) = [command, items] ); - const upHandler = useCallback(() => { - setSelectedIndex((prevIndex) => (prevIndex + items.length - 1) % items.length); - }, [items.length]); + const handleKeyDown = useCallback( + (event: KeyboardEvent): boolean => { + if (event.key === "Escape") { + event.preventDefault(); + return true; + } - const downHandler = useCallback(() => { - setSelectedIndex((prevIndex) => (prevIndex + 1) % items.length); - }, [items.length]); + if (event.key === "ArrowUp") { + event.preventDefault(); + setSelectedIndex((prev) => (prev + items.length - 1) % items.length); + return true; + } - const enterHandler = useCallback(() => { - setSelectedIndex((prevIndex) => { - selectItem(prevIndex); - return prevIndex; - }); - }, [selectItem]); + if (event.key === "ArrowDown") { + event.preventDefault(); + setSelectedIndex((prev) => (prev + 1) % items.length); + return true; + } + + if (event.key === "Enter") { + event.preventDefault(); + selectItem(selectedIndex); + return true; + } + return false; + }, + [items.length, selectedIndex, selectItem] + ); + + // Update position when items change + useEffect(() => { + if (containerRef.current && editor) { + updatePosition(editor, containerRef.current); + } + }, [items, editor]); + + // Handle scroll events + useEffect(() => { + const handleScroll = () => { + if (containerRef.current && editor) { + updatePosition(editor, containerRef.current); + } + }; + + document.addEventListener("scroll", handleScroll, true); + return () => document.removeEventListener("scroll", handleScroll, true); + }, [editor]); + + // Show animation + useEffect(() => { + setIsVisible(false); + const timeout = setTimeout(() => setIsVisible(true), 50); + return () => clearTimeout(timeout); + }, []); + + // Reset selection when items change useEffect(() => setSelectedIndex(0), [items]); - // scroll to the dropdown item when navigating via keyboard - useLayoutEffect(() => { - const container = emojiListContainer?.current; + // Scroll selected item into view + useEffect(() => { + const container = containerRef.current; if (!container) return; const item = container.querySelector(`#emoji-item-${selectedIndex}`) as HTMLElement; @@ -64,9 +127,7 @@ export const EmojiList = forwardRef((props, ref) = const containerRect = container.getBoundingClientRect(); const itemRect = item.getBoundingClientRect(); - const isItemInView = itemRect.top >= containerRect.top && itemRect.bottom <= containerRect.bottom; - - if (!isItemInView) { + if (itemRect.top < containerRect.top || itemRect.bottom > containerRect.bottom) { item.scrollIntoView({ block: "nearest" }); } } @@ -75,75 +136,57 @@ export const EmojiList = forwardRef((props, ref) = useImperativeHandle( ref, () => ({ - onKeyDown: ({ event }: { event: KeyboardEvent }): boolean => { - if (event.key === "ArrowUp") { - upHandler(); - return true; - } - - if (event.key === "ArrowDown") { - downHandler(); - return true; - } - - if (event.key === "Enter") { - enterHandler(); - event.preventDefault(); - event.stopPropagation(); - - return true; - } - - return false; - }, + onKeyDown: ({ event }: SuggestionKeyDownProps): boolean => handleKeyDown(event), }), - [upHandler, downHandler, enterHandler] + [handleKeyDown] ); + return (
    - {items.length ? ( - items.map((item, index) => { - const isSelected = index === selectedIndex; - const emojiKey = item.shortcodes.join(" - "); - - return ( - - ); - }) - ) : ( -
    No emojis found
    - )} + onClick={() => selectItem(index)} + onMouseEnter={() => setSelectedIndex(index)} + > + + {item.fallbackImage ? ( + {item.name} + ) : ( + item.emoji + )} + + + :{item.name}: + + + ); + }) + ) : ( +
    No emojis found
    + )} +
    ); }); diff --git a/packages/editor/src/core/extensions/emoji/suggestion.ts b/packages/editor/src/core/extensions/emoji/suggestion.ts index 459d605a5de..a75e93fb031 100644 --- a/packages/editor/src/core/extensions/emoji/suggestion.ts +++ b/packages/editor/src/core/extensions/emoji/suggestion.ts @@ -1,13 +1,12 @@ import type { EmojiOptions } from "@tiptap/extension-emoji"; import { ReactRenderer, Editor } from "@tiptap/react"; import { SuggestionProps, SuggestionKeyDownProps } from "@tiptap/suggestion"; -import tippy, { Instance as TippyInstance } from "tippy.js"; // constants import { CORE_EXTENSIONS } from "@/constants/extension"; // helpers import { getExtensionStorage } from "@/helpers/get-extension-storage"; // local imports -import { EmojiItem, EmojiList, EmojiListRef, EmojiListProps } from "./components/emojis-list"; +import { EmojiItem, EmojiList, EmojiListRef } from "./components/emojis-list"; const DEFAULT_EMOJIS = ["+1", "-1", "smile", "orange_heart", "eyes"]; @@ -36,85 +35,66 @@ const emojiSuggestion: EmojiOptions["suggestion"] = { allowSpaces: false, render: () => { - let component: ReactRenderer; - let popup: TippyInstance[] | null = null; + let component: ReactRenderer; + let editor: Editor; return { onStart: (props: SuggestionProps): void => { - const emojiListProps: EmojiListProps = { - items: props.items, - command: props.command, - editor: props.editor, - }; + if (!props.clientRect) return; - getExtensionStorage(props.editor, CORE_EXTENSIONS.UTILITY).activeDropbarExtensions.push(CORE_EXTENSIONS.EMOJI); + editor = props.editor; + + // Track active dropdown + getExtensionStorage(editor, CORE_EXTENSIONS.UTILITY).activeDropbarExtensions.push(CORE_EXTENSIONS.EMOJI); component = new ReactRenderer(EmojiList, { - props: emojiListProps, + props: { + items: props.items, + command: props.command, + editor: props.editor, + }, editor: props.editor, }); - if (!props.clientRect) return; - - popup = tippy("body", { - getReferenceClientRect: props.clientRect as () => DOMRect, - appendTo: () => - document.querySelector(".active-editor") ?? - document.querySelector('[id^="editor-container"]') ?? - document.body, - content: component.element, - showOnCreate: true, - interactive: true, - trigger: "manual", - placement: "bottom-start", - hideOnClick: false, - sticky: "reference", - animation: false, - duration: 0, - offset: [0, 8], - }); + // Append to editor container + const targetElement = + (props.editor.options.element as HTMLElement) || props.editor.view.dom.parentElement || document.body; + targetElement.appendChild(component.element); }, onUpdate: (props: SuggestionProps): void => { - const emojiListProps: EmojiListProps = { + if (!component) return; + + component.updateProps({ items: props.items, command: props.command, editor: props.editor, - }; - - component.updateProps(emojiListProps); - - if (popup && props.clientRect) { - popup[0]?.setProps({ - getReferenceClientRect: props.clientRect as () => DOMRect, - }); - } + }); }, onKeyDown: (props: SuggestionKeyDownProps): boolean => { if (props.event.key === "Escape") { - if (popup) { - popup[0]?.hide(); - } if (component) { component.destroy(); } return true; } - return component.ref?.onKeyDown(props) || false; + // Delegate to EmojiList + return component?.ref?.onKeyDown(props) || false; }, - onExit: (props: SuggestionProps): void => { - const utilityStorage = getExtensionStorage(props.editor, CORE_EXTENSIONS.UTILITY); - const index = utilityStorage.activeDropbarExtensions.indexOf(CORE_EXTENSIONS.EMOJI); - if (index > -1) { - utilityStorage.activeDropbarExtensions.splice(index, 1); + onExit: (): void => { + // Remove from active dropdowns + if (editor) { + const utilityStorage = getExtensionStorage(editor, CORE_EXTENSIONS.UTILITY); + const index = utilityStorage.activeDropbarExtensions.indexOf(CORE_EXTENSIONS.EMOJI); + if (index > -1) { + utilityStorage.activeDropbarExtensions.splice(index, 1); + } } - if (popup) { - popup[0]?.destroy(); - } + // Cleanup if (component) { component.destroy(); } From 0f0c4b52931771247f1dfd79c45aa43057014c02 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Mon, 7 Jul 2025 16:09:52 +0530 Subject: [PATCH 035/130] [WEB-4443] fix: remove scroll-behaviour smooth causing Gantt chart continuous scroll (#7351) --- apps/admin/styles/globals.css | 1 - apps/space/styles/globals.css | 1 - apps/web/styles/globals.css | 1 - 3 files changed, 3 deletions(-) diff --git a/apps/admin/styles/globals.css b/apps/admin/styles/globals.css index bdd91161bab..d5554ce2f27 100644 --- a/apps/admin/styles/globals.css +++ b/apps/admin/styles/globals.css @@ -332,7 +332,6 @@ text-rendering: optimizeLegibility; -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; - scroll-behavior: smooth; } body { diff --git a/apps/space/styles/globals.css b/apps/space/styles/globals.css index 783a157929a..60cfd7f06fa 100644 --- a/apps/space/styles/globals.css +++ b/apps/space/styles/globals.css @@ -367,7 +367,6 @@ text-rendering: optimizeLegibility; -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; - scroll-behavior: smooth; } body { diff --git a/apps/web/styles/globals.css b/apps/web/styles/globals.css index 51c4419b86f..c6e4654d077 100644 --- a/apps/web/styles/globals.css +++ b/apps/web/styles/globals.css @@ -497,7 +497,6 @@ text-rendering: optimizeLegibility; -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; - scroll-behavior: smooth; } body { From e306a92adbe4dc7d595afbbde708844f1edd41af Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:04:12 +0530 Subject: [PATCH 036/130] [WIKI-523] refactor: assets item component (#7346) --- .../[projectId]/pages/(detail)/header.tsx | 2 +- .../navigation-pane/tab-panels/assets.tsx | 2 + .../components/pages/navigation-pane/index.ts | 2 +- .../navigation-pane/tab-panels/assets.tsx | 44 ++++++++++++------- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx index 65e4d947544..4292e67ea45 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/header.tsx @@ -79,7 +79,7 @@ export const PageDetailsHeader = observer(() => { onChange={(value: string) => { router.push(`/${workspaceSlug}/projects/${projectId}/pages/${value}`); }} - title={page?.name} + title={getPageName(page?.name)} icon={ diff --git a/apps/web/ce/components/pages/navigation-pane/tab-panels/assets.tsx b/apps/web/ce/components/pages/navigation-pane/tab-panels/assets.tsx index 960f0653ccf..065723811bb 100644 --- a/apps/web/ce/components/pages/navigation-pane/tab-panels/assets.tsx +++ b/apps/web/ce/components/pages/navigation-pane/tab-panels/assets.tsx @@ -5,6 +5,8 @@ import { TPageInstance } from "@/store/pages/base-page"; export type TAdditionalPageNavigationPaneAssetItemProps = { asset: TEditorAsset; + assetSrc: string; + assetDownloadSrc: string; page: TPageInstance; }; diff --git a/apps/web/core/components/pages/navigation-pane/index.ts b/apps/web/core/components/pages/navigation-pane/index.ts index 52026510632..fc8595eaafc 100644 --- a/apps/web/core/components/pages/navigation-pane/index.ts +++ b/apps/web/core/components/pages/navigation-pane/index.ts @@ -5,7 +5,7 @@ export * from "./root"; export const PAGE_NAVIGATION_PANE_WIDTH = 294; -export const PAGE_NAVIGATION_PANE_TABS_QUERY_PARAM = "sidebarTab"; +export const PAGE_NAVIGATION_PANE_TABS_QUERY_PARAM = "paneTab"; export const PAGE_NAVIGATION_PANE_VERSION_QUERY_PARAM = "version"; export const PAGE_NAVIGATION_PANE_TAB_KEYS = ORDERED_PAGE_NAVIGATION_TABS_LIST.map((tab) => tab.key); diff --git a/apps/web/core/components/pages/navigation-pane/tab-panels/assets.tsx b/apps/web/core/components/pages/navigation-pane/tab-panels/assets.tsx index f770ae7b40e..357b759ad35 100644 --- a/apps/web/core/components/pages/navigation-pane/tab-panels/assets.tsx +++ b/apps/web/core/components/pages/navigation-pane/tab-panels/assets.tsx @@ -1,3 +1,4 @@ +import { useMemo } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { Download } from "lucide-react"; @@ -29,37 +30,37 @@ const AssetItem = observer((props: AssetItemProps) => { // translation const { t } = useTranslation(); - const getAssetSrc = (path: string) => { - if (!path || !workspaceSlug) return ""; - if (path.startsWith("http")) { - return path; + const assetSrc: string = useMemo(() => { + if (!asset.src || !workspaceSlug) return ""; + if (asset.src.startsWith("http")) { + return asset.src; } else { return ( getEditorAssetSrc({ - assetId: path, + assetId: asset.src, projectId: project_ids?.[0], workspaceSlug: workspaceSlug.toString(), }) ?? "" ); } - }; + }, [asset.src, project_ids, workspaceSlug]); - const getAssetDownloadSrc = (path: string) => { - if (!path || !workspaceSlug) return ""; - if (path.startsWith("http")) { - return path; + const assetDownloadSrc: string = useMemo(() => { + if (!asset.src || !workspaceSlug) return ""; + if (asset.src.startsWith("http")) { + return asset.src; } else { return ( getEditorAssetDownloadSrc({ - assetId: path, + assetId: asset.src, projectId: project_ids?.[0], workspaceSlug: workspaceSlug.toString(), }) ?? "" ); } - }; + }, [asset.src, project_ids, workspaceSlug]); - if ([CORE_EXTENSIONS.IMAGE, CORE_EXTENSIONS.CUSTOM_IMAGE].includes(asset.type)) + if ([CORE_EXTENSIONS.IMAGE, CORE_EXTENSIONS.CUSTOM_IMAGE].includes(asset.type as CORE_EXTENSIONS)) return ( {
    @@ -76,7 +77,7 @@ const AssetItem = observer((props: AssetItemProps) => {

    { ); - return ; + return ( + + ); }); export const PageNavigationPaneAssetsTabPanel: React.FC = observer((props) => { @@ -103,7 +111,9 @@ export const PageNavigationPaneAssetsTabPanel: React.FC = observer((props return (

    - {assetsList?.map((asset) => )} + {assetsList?.map((asset) => ( + + ))}
    ); }); From a2a62e2731728f2954259d002a090d310f17a6a2 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Mon, 7 Jul 2025 19:52:18 +0530 Subject: [PATCH 037/130] [WEB-4453] fix: enable revalidation on focus and stale data for current user fetch to handle 401 errors (#7353) --- apps/space/core/lib/instance-provider.tsx | 4 ++-- apps/space/core/store/user.store.ts | 4 ++++ packages/services/src/user/user.service.ts | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/space/core/lib/instance-provider.tsx b/apps/space/core/lib/instance-provider.tsx index 06056364f37..d0e473dfe85 100644 --- a/apps/space/core/lib/instance-provider.tsx +++ b/apps/space/core/lib/instance-provider.tsx @@ -32,8 +32,8 @@ export const InstanceProvider = observer(({ children }: { children: ReactNode }) }); useSWR("CURRENT_USER", () => fetchCurrentUser(), { shouldRetryOnError: false, - revalidateOnFocus: false, - revalidateIfStale: false, + revalidateOnFocus: true, + revalidateIfStale: true, }); if (!instance && !error) diff --git a/apps/space/core/store/user.store.ts b/apps/space/core/store/user.store.ts index 510545bd350..438b67aeba6 100644 --- a/apps/space/core/store/user.store.ts +++ b/apps/space/core/store/user.store.ts @@ -1,3 +1,4 @@ +import { AxiosError } from "axios"; import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; // plane imports @@ -112,6 +113,9 @@ export class UserStore implements IUserStore { status: "user-fetch-error", message: "Failed to fetch current user", }; + if (error instanceof AxiosError && error.status === 401) { + this.data = undefined; + } }); throw error; } diff --git a/packages/services/src/user/user.service.ts b/packages/services/src/user/user.service.ts index 33929766251..c177b1ffd8d 100644 --- a/packages/services/src/user/user.service.ts +++ b/packages/services/src/user/user.service.ts @@ -26,7 +26,7 @@ export class UserService extends APIService { return this.get("/api/users/me/") .then((response) => response?.data) .catch((error) => { - throw error?.response; + throw error; }); } From ab79a5da10f2d116e393b32ec9efb2bac02fda5a Mon Sep 17 00:00:00 2001 From: Vipin Chaudhary Date: Tue, 8 Jul 2025 03:21:03 +0530 Subject: [PATCH 038/130] [WIKI-524] fix: emoji fall back image (#7354) --- .../editor/src/core/extensions/emoji/emoji.ts | 444 ++++++++++++++++++ .../src/core/extensions/emoji/extension.ts | 10 +- .../src/core/extensions/emoji/suggestion.ts | 20 +- .../core/extensions/read-only-extensions.ts | 2 + 4 files changed, 467 insertions(+), 9 deletions(-) create mode 100644 packages/editor/src/core/extensions/emoji/emoji.ts diff --git a/packages/editor/src/core/extensions/emoji/emoji.ts b/packages/editor/src/core/extensions/emoji/emoji.ts new file mode 100644 index 00000000000..12fe7e06f3b --- /dev/null +++ b/packages/editor/src/core/extensions/emoji/emoji.ts @@ -0,0 +1,444 @@ +import { + combineTransactionSteps, + escapeForRegEx, + findChildrenInRange, + getChangedRanges, + InputRule, + mergeAttributes, + Node, + nodeInputRule, + PasteRule, + removeDuplicates, +} from "@tiptap/core"; +import { emojis, emojiToShortcode, shortcodeToEmoji } from "@tiptap/extension-emoji"; +import { Plugin, PluginKey, Transaction } from "@tiptap/pm/state"; +import Suggestion, { SuggestionOptions } from "@tiptap/suggestion"; +import emojiRegex from "emoji-regex"; +import { isEmojiSupported } from "is-emoji-supported"; + +declare module "@tiptap/core" { + interface Commands { + emoji: { + /** + * Add an emoji + */ + setEmoji: (shortcode: string) => ReturnType; + }; + } +} + +export type EmojiItem = { + /** + * A unique name of the emoji which will be stored as attribute + */ + name: string; + /** + * The emoji unicode character + */ + emoji?: string; + /** + * A list of unique shortcodes that are used by input rules to find the emoji + */ + shortcodes: string[]; + /** + * A list of tags that can help for searching emojis + */ + tags: string[]; + /** + * A name that can help to group emojis + */ + group?: string; + /** + * A list of unique emoticons + */ + emoticons?: string[]; + /** + * The unicode version the emoji was introduced + */ + version?: number; + /** + * A fallback image if the current system doesn't support the emoji or for custom emojis + */ + fallbackImage?: string; + /** + * Store some custom data + */ + [key: string]: any; +}; + +export type EmojiOptions = { + HTMLAttributes: Record; + emojis: EmojiItem[]; + enableEmoticons: boolean; + forceFallbackImages: boolean; + suggestion: Omit; +}; + +export type EmojiStorage = { + emojis: EmojiItem[]; + isSupported: (item: EmojiItem) => boolean; +}; + +export const EmojiSuggestionPluginKey = new PluginKey("emojiSuggestion"); + +export const inputRegex = /:([a-zA-Z0-9_+-]+):$/; + +export const pasteRegex = /:([a-zA-Z0-9_+-]+):/g; + +export const Emoji = Node.create({ + name: "emoji", + + inline: true, + + group: "inline", + + selectable: false, + + addOptions() { + return { + HTMLAttributes: {}, + // emojis: , + emojis: emojis, + enableEmoticons: false, + forceFallbackImages: false, + suggestion: { + char: ":", + pluginKey: EmojiSuggestionPluginKey, + command: ({ editor, range, props }) => { + // increase range.to by one when the next node is of type "text" + // and starts with a space character + const nodeAfter = editor.view.state.selection.$to.nodeAfter; + const overrideSpace = nodeAfter?.text?.startsWith(" "); + + if (overrideSpace) { + range.to += 1; + } + + editor + .chain() + .focus() + .insertContentAt(range, [ + { + type: this.name, + attrs: props, + }, + { + type: "text", + text: " ", + }, + ]) + .command(({ tr, state }) => { + tr.setStoredMarks(state.doc.resolve(state.selection.to - 2).marks()); + return true; + }) + .run(); + }, + allow: ({ state, range }) => { + const $from = state.doc.resolve(range.from); + const type = state.schema.nodes[this.name]; + const allow = !!$from.parent.type.contentMatch.matchType(type); + + return allow; + }, + }, + }; + }, + + addStorage() { + const { emojis } = this.options; + const supportMap: Record = removeDuplicates(emojis.map((item) => item.version)) + .filter((version) => typeof version === "number") + .reduce((versions, version) => { + const emoji = emojis.find((item) => item.version === version && item.emoji); + + return { + ...versions, + [version as number]: emoji ? isEmojiSupported(emoji.emoji as string) : false, + }; + }, {}); + + return { + emojis: this.options.emojis, + isSupported: (emojiItem) => (emojiItem.version ? supportMap[emojiItem.version] : false), + }; + }, + + addAttributes() { + return { + name: { + default: null, + parseHTML: (element) => element.dataset.name, + renderHTML: (attributes) => ({ + "data-name": attributes.name, + }), + }, + }; + }, + + parseHTML() { + return [ + { + tag: `span[data-type="${this.name}"]`, + }, + ]; + }, + + renderHTML({ HTMLAttributes, node }) { + const emojiItem = shortcodeToEmoji(node.attrs.name, this.options.emojis); + const attributes = mergeAttributes(HTMLAttributes, this.options.HTMLAttributes, { "data-type": this.name }); + + if (!emojiItem) { + return ["span", attributes, `:${node.attrs.name}:`]; + } + + const renderFallbackImage = false; + + return [ + "span", + attributes, + renderFallbackImage + ? [ + "img", + { + src: emojiItem.fallbackImage, + draggable: "false", + loading: "lazy", + align: "absmiddle", + }, + ] + : emojiItem.emoji || `:${emojiItem.shortcodes[0]}:`, + ]; + }, + + renderText({ node }) { + const emojiItem = shortcodeToEmoji(node.attrs.name, this.options.emojis); + + return emojiItem?.emoji || `:${node.attrs.name}:`; + }, + + addCommands() { + return { + setEmoji: + (shortcode) => + ({ chain }) => { + const emojiItem = shortcodeToEmoji(shortcode, this.options.emojis); + + if (!emojiItem) { + return false; + } + + chain() + .insertContent({ + type: this.name, + attrs: { + name: emojiItem.name, + }, + }) + .command(({ tr, state }) => { + tr.setStoredMarks(state.doc.resolve(state.selection.to - 1).marks()); + return true; + }) + .run(); + + return true; + }, + }; + }, + + addInputRules() { + const inputRules: InputRule[] = []; + + inputRules.push( + new InputRule({ + find: inputRegex, + handler: ({ range, match, chain }) => { + const name = match[1]; + + if (!shortcodeToEmoji(name, this.options.emojis)) { + return; + } + + chain() + .insertContentAt(range, { + type: this.name, + attrs: { + name, + }, + }) + .command(({ tr, state }) => { + tr.setStoredMarks(state.doc.resolve(state.selection.to - 1).marks()); + return true; + }) + .run(); + }, + }) + ); + + if (this.options.enableEmoticons) { + // get the list of supported emoticons + const emoticons = this.options.emojis + .map((item) => item.emoticons) + .flat() + .filter((item) => item) as string[]; + + const emoticonRegex = new RegExp(`(?:^|\\s)(${emoticons.map((item) => escapeForRegEx(item)).join("|")}) $`); + + inputRules.push( + nodeInputRule({ + find: emoticonRegex, + type: this.type, + getAttributes: (match) => { + const emoji = this.options.emojis.find((item) => item.emoticons?.includes(match[1])); + + if (!emoji) { + return; + } + + return { + name: emoji.name, + }; + }, + }) + ); + } + + return inputRules; + }, + + addPasteRules() { + return [ + new PasteRule({ + find: pasteRegex, + handler: ({ range, match, chain }) => { + const name = match[1]; + + if (!shortcodeToEmoji(name, this.options.emojis)) { + return; + } + + chain() + .insertContentAt( + range, + { + type: this.name, + attrs: { + name, + }, + }, + { + updateSelection: false, + } + ) + .command(({ tr, state }) => { + tr.setStoredMarks(state.doc.resolve(state.selection.to - 1).marks()); + return true; + }) + .run(); + }, + }), + ]; + }, + + addProseMirrorPlugins() { + return [ + Suggestion({ + editor: this.editor, + ...this.options.suggestion, + }), + + new Plugin({ + key: new PluginKey("emoji"), + props: { + // double click to select emoji doesn’t work by default + // that’s why we simulate this behavior + handleDoubleClickOn: (view, pos, node) => { + if (node.type !== this.type) { + return false; + } + + const from = pos; + const to = from + node.nodeSize; + + this.editor.commands.setTextSelection({ + from, + to, + }); + + return true; + }, + }, + + // replace text emojis with emoji node on any change + appendTransaction: (transactions, oldState, newState) => { + const docChanges = + transactions.some((transaction) => transaction.docChanged) && !oldState.doc.eq(newState.doc); + + if (!docChanges) { + return; + } + + const { tr } = newState; + const transform = combineTransactionSteps(oldState.doc, transactions as Transaction[]); + const changes = getChangedRanges(transform); + + changes.forEach(({ newRange }) => { + // We don’t want to add emoji inline nodes within code blocks. + // Because this would split the code block. + + // This only works if the range of changes is within a code node. + // For all other cases (e.g. the whole document is set/pasted and the parent of the range is `doc`) + // it doesn't and we have to double check later. + if (newState.doc.resolve(newRange.from).parent.type.spec.code) { + return; + } + + const textNodes = findChildrenInRange(newState.doc, newRange, (node) => node.type.isText); + + textNodes.forEach(({ node, pos }) => { + if (!node.text) { + return; + } + + const matches = [...node.text.matchAll(emojiRegex())]; + + matches.forEach((match) => { + if (match.index === undefined) { + return; + } + + const emoji = match[0]; + const name = emojiToShortcode(emoji, this.options.emojis); + + if (!name) { + return; + } + + const from = tr.mapping.map(pos + match.index); + + // Double check parent node is not a code block. + if (newState.doc.resolve(from).parent.type.spec.code) { + return; + } + + const to = from + emoji.length; + const emojiNode = this.type.create({ + name, + }); + + tr.replaceRangeWith(from, to, emojiNode); + + tr.setStoredMarks(newState.doc.resolve(from).marks()); + }); + }); + }); + + if (!tr.steps.length) { + return; + } + + return tr; + }, + }), + ]; + }, +}); diff --git a/packages/editor/src/core/extensions/emoji/extension.ts b/packages/editor/src/core/extensions/emoji/extension.ts index 362b0244980..7e35038cc95 100644 --- a/packages/editor/src/core/extensions/emoji/extension.ts +++ b/packages/editor/src/core/extensions/emoji/extension.ts @@ -1,7 +1,8 @@ -import Emoji, { EmojiItem, gitHubEmojis, shortcodeToEmoji } from "@tiptap/extension-emoji"; // local imports +import { gitHubEmojis, shortcodeToEmoji } from "@tiptap/extension-emoji"; import { MarkdownSerializerState } from "@tiptap/pm/markdown"; import { Node as ProseMirrorNode } from "@tiptap/pm/model"; +import { Emoji } from "./emoji"; import suggestion from "./suggestion"; export const EmojiExtension = Emoji.extend({ @@ -10,17 +11,16 @@ export const EmojiExtension = Emoji.extend({ ...this.parent?.(), markdown: { serialize(state: MarkdownSerializerState, node: ProseMirrorNode) { - const emojiItem = shortcodeToEmoji(node.attrs.name, this.options.emojis) - if(emojiItem?.emoji) { + const emojiItem = shortcodeToEmoji(node.attrs.name, this.options.emojis); + if (emojiItem?.emoji) { state.write(emojiItem?.emoji); - } else if(emojiItem?.fallbackImage) { + } else if (emojiItem?.fallbackImage) { state.write(`\n![${emojiItem.name}-${emojiItem.shortcodes[0]}](${emojiItem?.fallbackImage})\n`); } else { state.write(`:${node.attrs.name}:`); } }, }, - }; }, }).configure({ diff --git a/packages/editor/src/core/extensions/emoji/suggestion.ts b/packages/editor/src/core/extensions/emoji/suggestion.ts index a75e93fb031..caadb483c79 100644 --- a/packages/editor/src/core/extensions/emoji/suggestion.ts +++ b/packages/editor/src/core/extensions/emoji/suggestion.ts @@ -12,17 +12,29 @@ const DEFAULT_EMOJIS = ["+1", "-1", "smile", "orange_heart", "eyes"]; const emojiSuggestion: EmojiOptions["suggestion"] = { items: ({ editor, query }: { editor: Editor; query: string }): EmojiItem[] => { + const { emojis } = getExtensionStorage(editor, CORE_EXTENSIONS.EMOJI); + const { isSupported } = getExtensionStorage(editor, CORE_EXTENSIONS.EMOJI); + const filteredEmojis = emojis.filter((emoji) => { + const hasEmoji = !!emoji?.emoji; + const hasFallbackImage = !!emoji?.fallbackImage; + const renderFallbackImage = + (emoji.forceFallbackImages && !hasEmoji) || + (emoji.forceFallbackImages && hasFallbackImage) || + (emoji.forceFallbackImages && !isSupported(emoji) && hasFallbackImage) || + ((!isSupported(emoji) || !hasEmoji) && hasFallbackImage); + return !renderFallbackImage; + }); + if (query.trim() === "") { - const { emojis } = getExtensionStorage(editor, CORE_EXTENSIONS.EMOJI); const defaultEmojis = DEFAULT_EMOJIS.map((name) => - emojis.find((emoji: EmojiItem) => emoji.shortcodes.includes(name) || emoji.name === name) + filteredEmojis.find((emoji: EmojiItem) => emoji.shortcodes.includes(name) || emoji.name === name) ) .filter(Boolean) .slice(0, 5); return defaultEmojis as EmojiItem[]; } - return getExtensionStorage(editor, CORE_EXTENSIONS.EMOJI) - .emojis.filter(({ shortcodes, tags }) => { + return filteredEmojis + .filter(({ shortcodes, tags }) => { const lowerQuery = query.toLowerCase(); return ( shortcodes.find((shortcode: string) => shortcode.startsWith(lowerQuery)) || diff --git a/packages/editor/src/core/extensions/read-only-extensions.ts b/packages/editor/src/core/extensions/read-only-extensions.ts index c99b02312c8..25541dd3ccf 100644 --- a/packages/editor/src/core/extensions/read-only-extensions.ts +++ b/packages/editor/src/core/extensions/read-only-extensions.ts @@ -33,6 +33,7 @@ import { CoreReadOnlyEditorAdditionalExtensions } from "@/plane-editor/extension import type { IReadOnlyEditorProps } from "@/types"; // local imports import { CustomImageExtension } from "./custom-image/extension"; +import { EmojiExtension } from "./emoji/extension"; type Props = Pick; @@ -73,6 +74,7 @@ export const CoreReadOnlyEditorExtensions = (props: Props): Extensions => { dropcursor: false, gapcursor: false, }), + EmojiExtension, CustomQuoteExtension, CustomHorizontalRule.configure({ HTMLAttributes: { From c0f986cf9518e542ff964f6f35ef23d2e7ca9259 Mon Sep 17 00:00:00 2001 From: Aaron Heckmann Date: Tue, 8 Jul 2025 01:03:12 -0700 Subject: [PATCH 039/130] fix(partial): get dev env working (#7356) part of #7355 --- apps/admin/package.json | 3 +-- apps/space/package.json | 3 +-- apps/web/package.json | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/apps/admin/package.json b/apps/admin/package.json index e01c0ef26d8..2546c62beed 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -5,8 +5,7 @@ "license": "AGPL-3.0", "private": true, "scripts": { - "dev": "turbo run develop", - "develop": "next dev --port 3001", + "dev": "next dev --port 3001", "build": "next build", "preview": "next build && next start", "start": "next start", diff --git a/apps/space/package.json b/apps/space/package.json index 8f5794bc8e6..2e5d2b559df 100644 --- a/apps/space/package.json +++ b/apps/space/package.json @@ -4,8 +4,7 @@ "private": true, "license": "AGPL-3.0", "scripts": { - "dev": "turbo run develop", - "develop": "next dev -p 3002", + "dev": "next dev -p 3002", "build": "next build", "start": "next start", "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist", diff --git a/apps/web/package.json b/apps/web/package.json index 244206ec325..66273772e27 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -4,8 +4,7 @@ "private": true, "license": "AGPL-3.0", "scripts": { - "dev": "turbo run develop", - "develop": "next dev --port 3000", + "dev": "next dev --port 3000", "build": "next build", "start": "next start", "clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist", From 388588c588b6a4f88d0f2acb313e5acba53fc47b Mon Sep 17 00:00:00 2001 From: "M. Palanikannan" <73993394+Palanikannan1437@users.noreply.github.com> Date: Tue, 8 Jul 2025 13:59:54 +0530 Subject: [PATCH 040/130] fix: turbo dev command (#7358) * chore: add dependencies for dev and develop scripts in turbo.json * update persistence * chore: remove develop command --------- Co-authored-by: sriramveeraghanta --- turbo.json | 1 + 1 file changed, 1 insertion(+) diff --git a/turbo.json b/turbo.json index 308d3d5b321..09f2a42ad59 100644 --- a/turbo.json +++ b/turbo.json @@ -25,6 +25,7 @@ "outputs": [".next/**", "dist/**"] }, "dev": { + "dependsOn": ["^build"], "cache": false, "persistent": true }, From 13ab0624d0e2363d8f960020d1de85793ce540b3 Mon Sep 17 00:00:00 2001 From: "M. Palanikannan" <73993394+Palanikannan1437@users.noreply.github.com> Date: Tue, 8 Jul 2025 14:58:41 +0530 Subject: [PATCH 041/130] [WIKI-510] feat: enhance issue description input with unsaved changes tracking (#7357) --- .../components/issues/description-input.tsx | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/apps/web/core/components/issues/description-input.tsx b/apps/web/core/components/issues/description-input.tsx index 10d0dfac8ba..1e99de3aa82 100644 --- a/apps/web/core/components/issues/description-input.tsx +++ b/apps/web/core/components/issues/description-input.tsx @@ -1,6 +1,6 @@ "use client"; -import { FC, useCallback, useEffect, useState } from "react"; +import { FC, useCallback, useEffect, useRef, useState } from "react"; import debounce from "lodash/debounce"; import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; @@ -53,6 +53,8 @@ export const IssueDescriptionInput: FC = observer((p id: issueId, description_html: initialValue, }); + // ref to track if there are unsaved changes + const hasUnsavedChanges = useRef(false); // store hooks const { uploadEditorAsset } = useEditorAsset(); const { getWorkspaceBySlug } = useWorkspace(); @@ -87,6 +89,8 @@ export const IssueDescriptionInput: FC = observer((p id: issueId, description_html: initialValue === "" ? "

    " : initialValue, }); + // Reset unsaved changes flag when form is reset + hasUnsavedChanges.current = false; }, [initialValue, issueId, reset]); // ADDING handleDescriptionFormSubmit TO DEPENDENCY ARRAY PRODUCES ADVERSE EFFECTS @@ -94,11 +98,35 @@ export const IssueDescriptionInput: FC = observer((p // eslint-disable-next-line react-hooks/exhaustive-deps const debouncedFormSave = useCallback( debounce(async () => { - handleSubmit(handleDescriptionFormSubmit)().finally(() => setIsSubmitting("submitted")); + handleSubmit(handleDescriptionFormSubmit)().finally(() => { + setIsSubmitting("submitted"); + hasUnsavedChanges.current = false; + }); }, 1500), [handleSubmit, issueId] ); + // Save on unmount if there are unsaved changes + useEffect( + () => () => { + debouncedFormSave.cancel(); + + if (hasUnsavedChanges.current) { + handleSubmit(handleDescriptionFormSubmit)() + .catch((error) => { + console.error("Failed to save description on unmount:", error); + }) + .finally(() => { + setIsSubmitting("submitted"); + hasUnsavedChanges.current = false; + }); + } + }, + // since we don't want to save on unmount if there are no unsaved changes, no deps are needed + // eslint-disable-next-line react-hooks/exhaustive-deps + [] + ); + if (!workspaceId) return null; return ( @@ -120,6 +148,7 @@ export const IssueDescriptionInput: FC = observer((p onChange={(_description: object, description_html: string) => { setIsSubmitting("submitting"); onChange(description_html); + hasUnsavedChanges.current = true; debouncedFormSave(); }} placeholder={ From f40dda8fdc1dced0a94921b0550a1ad3b8604c3a Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Tue, 8 Jul 2025 15:22:00 +0530 Subject: [PATCH 042/130] [WEB-4454] fix: check project publish status using anchor field from publish settings --- .../project/publish-project/modal.tsx | 27 ++++++++++--------- .../workspace/sidebar/projects-list-item.tsx | 2 +- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/apps/web/core/components/project/publish-project/modal.tsx b/apps/web/core/components/project/publish-project/modal.tsx index a980b2eacf6..5cef1744807 100644 --- a/apps/web/core/components/project/publish-project/modal.tsx +++ b/apps/web/core/components/project/publish-project/modal.tsx @@ -7,7 +7,7 @@ import { Controller, useForm } from "react-hook-form"; import { Check, ExternalLink, Globe2 } from "lucide-react"; // types import { SPACE_BASE_PATH, SPACE_BASE_URL } from "@plane/constants"; -import { IProject, TProjectPublishLayouts, TProjectPublishSettings } from "@plane/types"; +import { TProjectPublishLayouts, TProjectPublishSettings } from "@plane/types"; // ui import { Button, Loader, ToggleSwitch, TOAST_TYPE, setToast, CustomSelect, ModalCore, EModalWidth } from "@plane/ui"; // helpers @@ -17,7 +17,7 @@ import { useProjectPublish } from "@/hooks/store"; type Props = { isOpen: boolean; - project: IProject; + projectId: string; onClose: () => void; }; @@ -41,7 +41,7 @@ const VIEW_OPTIONS: { ]; export const PublishProjectModal: React.FC = observer((props) => { - const { isOpen, project, onClose } = props; + const { isOpen, onClose, projectId } = props; // states const [isUnPublishing, setIsUnPublishing] = useState(false); // router @@ -56,7 +56,8 @@ export const PublishProjectModal: React.FC = observer((props) => { fetchSettingsLoader, } = useProjectPublish(); // derived values - const projectPublishSettings = getPublishSettingsByProjectID(project.id); + const projectPublishSettings = getPublishSettingsByProjectID(projectId); + const isProjectPublished = !!projectPublishSettings?.anchor; // form info const { control, @@ -77,19 +78,19 @@ export const PublishProjectModal: React.FC = observer((props) => { if (!workspaceSlug || !isOpen) return; if (!projectPublishSettings) { - fetchPublishSettings(workspaceSlug.toString(), project.id); + fetchPublishSettings(workspaceSlug.toString(), projectId); } - }, [fetchPublishSettings, isOpen, project, projectPublishSettings, workspaceSlug]); + }, [fetchPublishSettings, isOpen, projectId, projectPublishSettings, workspaceSlug]); const handlePublishProject = async (payload: Partial) => { if (!workspaceSlug) return; - await publishProject(workspaceSlug.toString(), project.id, payload); + await publishProject(workspaceSlug.toString(), projectId, payload); }; const handleUpdatePublishSettings = async (payload: Partial) => { if (!workspaceSlug || !payload.id) return; - await updatePublishSettings(workspaceSlug.toString(), project.id, payload.id, payload).then((res) => { + await updatePublishSettings(workspaceSlug.toString(), projectId, payload.id, payload).then((res) => { setToast({ type: TOAST_TYPE.SUCCESS, title: "Success!", @@ -106,7 +107,7 @@ export const PublishProjectModal: React.FC = observer((props) => { setIsUnPublishing(true); - await unPublishProject(workspaceSlug.toString(), project.id, publishId) + await unPublishProject(workspaceSlug.toString(), projectId, publishId) .catch(() => setToast({ type: TOAST_TYPE.ERROR, @@ -142,7 +143,7 @@ export const PublishProjectModal: React.FC = observer((props) => { view_props: formData.view_props, }; - if (formData.id && project.anchor) await handleUpdatePublishSettings(payload); + if (formData.id && isProjectPublished) await handleUpdatePublishSettings(payload); else await handlePublishProject(payload); }; @@ -173,7 +174,7 @@ export const PublishProjectModal: React.FC = observer((props) => {
    Publish project
    - {project.anchor && ( + {isProjectPublished && ( @@ -190,7 +191,7 @@ export const PublishProjectModal: React.FC = observer((props) => { ) : (
    - {project.anchor && projectPublishSettings && ( + {isProjectPublished && projectPublishSettings && ( <>
    = observer((props) => { - {project.anchor ? ( + {isProjectPublished ? ( isDirty && ( ); }); diff --git a/apps/web/core/components/settings/header.tsx b/apps/web/core/components/settings/header.tsx index 0beb28c93ee..832f7f39b88 100644 --- a/apps/web/core/components/settings/header.tsx +++ b/apps/web/core/components/settings/header.tsx @@ -2,6 +2,7 @@ import { observer } from "mobx-react"; import Link from "next/link"; +import { useTheme } from "next-themes"; import { ChevronLeftIcon } from "lucide-react"; import { useTranslation } from "@plane/i18n"; import { getButtonStyling } from "@plane/ui/src/button"; @@ -15,16 +16,16 @@ export const SettingsHeader = observer(() => { const { t } = useTranslation(); const { currentWorkspace } = useWorkspace(); const { isScrolled } = useUserSettings(); + // resolved theme + const { resolvedTheme } = useTheme(); // redirect url for normal mode return (
    { diff --git a/apps/web/core/components/settings/sidebar/root.tsx b/apps/web/core/components/settings/sidebar/root.tsx index c681a8cc11c..7a8c915edeb 100644 --- a/apps/web/core/components/settings/sidebar/root.tsx +++ b/apps/web/core/components/settings/sidebar/root.tsx @@ -1,5 +1,6 @@ import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; +import { ScrollArea } from "@plane/ui"; import { cn } from "@plane/utils"; import { SettingsSidebarHeader } from "./header"; import SettingsSidebarNavItem, { TSettingItem } from "./nav-item"; @@ -45,12 +46,15 @@ export const SettingsSidebar = observer((props: SettingsSidebarProps) => { {/* Header */} {/* Navigation */} -
    + {categories.map((category) => { if (groupedSettings[category].length === 0) return null; return (
    - {t(category)} + {t(category)}
    {groupedSettings[category].map( (setting) => @@ -70,7 +74,7 @@ export const SettingsSidebar = observer((props: SettingsSidebarProps) => {
    ); })} -
    +
    ); }); diff --git a/apps/web/core/components/sidebar/index.ts b/apps/web/core/components/sidebar/index.ts index b2e6f7602d8..c639b0bac80 100644 --- a/apps/web/core/components/sidebar/index.ts +++ b/apps/web/core/components/sidebar/index.ts @@ -1 +1,4 @@ -export * from "./sidebar-navigation"; \ No newline at end of file +export * from "./sidebar-navigation"; +export * from "./resizable-sidebar"; +export * from "./sidebar-item"; +export * from "./sidebar-toggle-button"; diff --git a/apps/web/core/components/sidebar/resizable-sidebar.tsx b/apps/web/core/components/sidebar/resizable-sidebar.tsx new file mode 100644 index 00000000000..9f0741297b4 --- /dev/null +++ b/apps/web/core/components/sidebar/resizable-sidebar.tsx @@ -0,0 +1,287 @@ +"use client"; + +import React, { Dispatch, ReactElement, SetStateAction, useCallback, useEffect, useState, useRef } from "react"; +// helpers +import { cn } from "@plane/utils"; + +interface ResizableSidebarProps { + showPeek?: boolean; + togglePeek: (value?: boolean) => void; + isCollapsed?: boolean; + width: number; + setWidth: Dispatch>; + defaultWidth?: number; + minWidth?: number; + maxWidth?: number; + defaultCollapsed?: boolean; + peekDuration?: number; + toggleCollapsed: (value?: boolean) => void; + onWidthChange?: (width: number) => void; + onCollapsedChange?: (collapsed: boolean) => void; + className?: string; + children?: ReactElement; + extendedSidebar?: ReactElement; + isAnyExtendedSidebarExpanded?: boolean; + isAnySidebarDropdownOpen?: boolean; + disablePeekTrigger?: boolean; +} + +export function ResizableSidebar({ + showPeek = false, + togglePeek, + peekDuration = 500, + isCollapsed = false, + toggleCollapsed: toggleCollapsedProp, + onCollapsedChange, + width, + setWidth, + onWidthChange, + minWidth = 236, + maxWidth = 350, + className = "", + children, + extendedSidebar, + isAnyExtendedSidebarExpanded = false, + isAnySidebarDropdownOpen = false, + disablePeekTrigger = false, +}: ResizableSidebarProps) { + // states + const [isResizing, setIsResizing] = useState(false); + const [isHoveringTrigger, setIsHoveringTrigger] = useState(false); + // refs + const peekTimeoutRef = useRef>(); + + // handlers + const setShowPeek = useCallback( + (value: boolean) => { + togglePeek(value); + }, + [togglePeek] + ); + + const handleResize = useCallback( + (e: MouseEvent) => { + if (!isResizing) return; + const newWidth = Math.min(Math.max(e.clientX, minWidth), maxWidth); + setWidth(newWidth); + }, + [isResizing, minWidth, maxWidth, setWidth] + ); + + const startResizing = useCallback(() => { + setIsResizing(true); + }, []); + + const stopResizing = useCallback(() => { + setIsResizing(false); + }, []); + + const toggleCollapsed = useCallback(() => { + toggleCollapsedProp(); + setShowPeek(false); + setIsHoveringTrigger(false); + if (peekTimeoutRef.current) { + clearTimeout(peekTimeoutRef.current); + } + }, [toggleCollapsedProp, setShowPeek]); + + const handleTriggerEnter = useCallback(() => { + if (isCollapsed) { + setIsHoveringTrigger(true); + setShowPeek(true); + if (peekTimeoutRef.current) { + clearTimeout(peekTimeoutRef.current); + } + } + }, [isCollapsed, setShowPeek]); + + const handleTriggerLeave = useCallback(() => { + if (isCollapsed && !isAnyExtendedSidebarExpanded) { + setIsHoveringTrigger(false); + peekTimeoutRef.current = setTimeout(() => { + setShowPeek(false); + }, peekDuration); + } + }, [isCollapsed, peekDuration, setShowPeek, isAnyExtendedSidebarExpanded]); + + const handlePeekEnter = useCallback(() => { + if (isCollapsed && showPeek) { + if (peekTimeoutRef.current) { + clearTimeout(peekTimeoutRef.current); + } + } + }, [isCollapsed, showPeek]); + + const handlePeekLeave = useCallback(() => { + if (isCollapsed && !isAnyExtendedSidebarExpanded && !isAnySidebarDropdownOpen) { + peekTimeoutRef.current = setTimeout(() => { + setShowPeek(false); + }, peekDuration); + } + }, [isCollapsed, peekDuration, setShowPeek, isAnyExtendedSidebarExpanded, isAnySidebarDropdownOpen]); + + // Set up event listeners for resizing + useEffect(() => { + if (isResizing) { + document.addEventListener("mousemove", handleResize); + document.addEventListener("mouseup", stopResizing); + document.body.style.cursor = "col-resize"; + document.body.style.userSelect = "none"; + } + + return () => { + document.removeEventListener("mousemove", handleResize); + document.removeEventListener("mouseup", stopResizing); + document.body.style.cursor = ""; + document.body.style.userSelect = ""; + }; + }, [isResizing, handleResize, stopResizing]); + + // Clean up timeout on unmount + useEffect( + () => () => { + if (peekTimeoutRef.current) { + clearTimeout(peekTimeoutRef.current); + } + }, + [] + ); + + useEffect(() => { + if (!isAnySidebarDropdownOpen && isCollapsed && isHoveringTrigger) { + handlePeekLeave(); + } + }, [isAnySidebarDropdownOpen]); + + useEffect(() => { + if (!isAnyExtendedSidebarExpanded && isCollapsed && isHoveringTrigger) { + handlePeekLeave(); + } + }, [isAnyExtendedSidebarExpanded]); + + // Reset peek when sidebar is expanded + useEffect(() => { + if (!isCollapsed) { + setShowPeek(false); + setIsHoveringTrigger(false); + if (peekTimeoutRef.current) { + clearTimeout(peekTimeoutRef.current); + } + } + }, [isCollapsed, setShowPeek]); + + // Call external handlers when state changes + useEffect(() => { + onWidthChange?.(width); + }, [width, onWidthChange]); + + useEffect(() => { + onCollapsedChange?.(isCollapsed); + }, [isCollapsed, onCollapsedChange]); + + return ( + <> + {/* Main Sidebar */} +
    + +
    + + {/* Peek Trigger Area */} + {isCollapsed && !disablePeekTrigger && ( +
    + )} + + {/* Peek View */} +
    + +
    + + {/* Extended Sidebar */} + {extendedSidebar && extendedSidebar} + + ); +} diff --git a/apps/web/core/components/sidebar/sidebar-item.tsx b/apps/web/core/components/sidebar/sidebar-item.tsx new file mode 100644 index 00000000000..48d0b0ccff9 --- /dev/null +++ b/apps/web/core/components/sidebar/sidebar-item.tsx @@ -0,0 +1,158 @@ +import Link from "next/link"; +import { cn } from "@plane/utils"; + +// ============================================================================ +// TYPES +// ============================================================================ + +interface AppSidebarItemData { + href?: string; + label?: string; + icon?: React.ReactNode; + isActive?: boolean; + onClick?: () => void; + disabled?: boolean; +} + +interface AppSidebarItemProps { + variant?: "link" | "button"; + item?: AppSidebarItemData; +} + +interface AppSidebarItemLabelProps { + highlight?: boolean; + label?: string; +} + +interface AppSidebarItemIconProps { + icon?: React.ReactNode; + highlight?: boolean; +} + +interface AppSidebarLinkItemProps { + href?: string; + children: React.ReactNode; + className?: string; +} + +interface AppSidebarButtonItemProps { + children: React.ReactNode; + onClick?: () => void; + disabled?: boolean; + className?: string; +} + +// ============================================================================ +// STYLES +// ============================================================================ + +const styles = { + base: "group flex flex-col gap-0.5 items-center justify-center text-custom-text-300", + icon: "flex items-center justify-center gap-2 size-8 rounded-md text-custom-text-300", + iconActive: "bg-custom-background-80 text-custom-text-200", + iconInactive: "group-hover:text-custom-text-200 group-hover:bg-custom-background-80", + label: "text-xs font-semibold", + labelActive: "text-custom-text-200", + labelInactive: "group-hover:text-custom-text-200 text-custom-text-300", +} as const; + +// ============================================================================ +// SUB-COMPONENTS +// ============================================================================ + +const AppSidebarItemLabel: React.FC = ({ highlight = false, label }) => { + if (!label) return null; + + return ( + + {label} + + ); +}; + +const AppSidebarItemIcon: React.FC = ({ icon, highlight }) => { + if (!icon) return null; + + return ( +
    + {icon} +
    + ); +}; + +const AppSidebarLinkItem: React.FC = ({ href, children, className }) => { + if (!href) return null; + + return ( + + {children} + + ); +}; + +const AppSidebarButtonItem: React.FC = ({ + children, + onClick, + disabled = false, + className, +}) => ( + +); + +// ============================================================================ +// MAIN COMPONENT +// ============================================================================ + +type AppSidebarItemComponent = React.FC & { + Label: React.FC; + Icon: React.FC; + Link: React.FC; + Button: React.FC; +}; + +const AppSidebarItem: AppSidebarItemComponent = ({ variant = "link", item }) => { + if (!item) return null; + + const { icon, isActive, label, href, onClick, disabled } = item; + + const commonItems = ( + <> + + + + ); + + if (variant === "link") { + return {commonItems}; + } + + return ( + + {commonItems} + + ); +}; + +// ============================================================================ +// COMPOUND COMPONENT ASSIGNMENT +// ============================================================================ + +AppSidebarItem.Label = AppSidebarItemLabel; +AppSidebarItem.Icon = AppSidebarItemIcon; +AppSidebarItem.Link = AppSidebarLinkItem; +AppSidebarItem.Button = AppSidebarButtonItem; + +export { AppSidebarItem }; +export type { AppSidebarItemData, AppSidebarItemProps }; diff --git a/apps/web/core/components/sidebar/sidebar-toggle-button.tsx b/apps/web/core/components/sidebar/sidebar-toggle-button.tsx new file mode 100644 index 00000000000..45caea0c6ae --- /dev/null +++ b/apps/web/core/components/sidebar/sidebar-toggle-button.tsx @@ -0,0 +1,23 @@ +"use client"; + +import { observer } from "mobx-react"; +import { PanelLeft } from "lucide-react"; +// hooks +import { useAppTheme } from "@/hooks/store"; + +export const AppSidebarToggleButton = observer(() => { + // store hooks + const { toggleSidebar, sidebarPeek, toggleSidebarPeek } = useAppTheme(); + + return ( + + ); +}); diff --git a/apps/web/core/components/workspace-notifications/notification-app-sidebar-option.tsx b/apps/web/core/components/workspace-notifications/notification-app-sidebar-option.tsx index 358026806de..3a2e9071cfa 100644 --- a/apps/web/core/components/workspace-notifications/notification-app-sidebar-option.tsx +++ b/apps/web/core/components/workspace-notifications/notification-app-sidebar-option.tsx @@ -12,11 +12,10 @@ import { useWorkspaceNotifications } from "@/hooks/store"; type TNotificationAppSidebarOption = { workspaceSlug: string; - isSidebarCollapsed: boolean | undefined; }; export const NotificationAppSidebarOption: FC = observer((props) => { - const { workspaceSlug, isSidebarCollapsed } = props; + const { workspaceSlug } = props; // hooks const { unreadNotificationsCount, getUnreadNotificationsCount } = useWorkspaceNotifications(); @@ -33,9 +32,6 @@ export const NotificationAppSidebarOption: FC = o if (totalNotifications <= 0) return <>; - if (isSidebarCollapsed) - return
    ; - return (
    diff --git a/apps/web/core/components/workspace-notifications/sidebar/header/root.tsx b/apps/web/core/components/workspace-notifications/sidebar/header/root.tsx index 7ed9ea5289d..bd935b66570 100644 --- a/apps/web/core/components/workspace-notifications/sidebar/header/root.tsx +++ b/apps/web/core/components/workspace-notifications/sidebar/header/root.tsx @@ -9,6 +9,8 @@ import { Breadcrumbs, Header } from "@plane/ui"; import { BreadcrumbLink } from "@/components/common"; import { SidebarHamburgerToggle } from "@/components/core"; import { NotificationSidebarHeaderOptions } from "@/components/workspace-notifications"; +// hooks +import { useAppTheme } from "@/hooks/store"; type TNotificationSidebarHeader = { workspaceSlug: string; @@ -17,14 +19,14 @@ type TNotificationSidebarHeader = { export const NotificationSidebarHeader: FC = observer((props) => { const { workspaceSlug } = props; const { t } = useTranslation(); + const { sidebarCollapsed } = useAppTheme(); if (!workspaceSlug) return <>; return (
    -
    - -
    + {sidebarCollapsed && } + {
    {workspace.name}
    diff --git a/apps/web/core/components/workspace/sidebar/dropdown.tsx b/apps/web/core/components/workspace/sidebar/dropdown.tsx index d1d5e524974..e9f3adee0a2 100644 --- a/apps/web/core/components/workspace/sidebar/dropdown.tsx +++ b/apps/web/core/components/workspace/sidebar/dropdown.tsx @@ -1,258 +1,22 @@ "use client"; -import { Fragment, Ref, useState } from "react"; import { observer } from "mobx-react"; -import Link from "next/link"; -import { useParams } from "next/navigation"; -import { usePopper } from "react-popper"; -// icons -import { ChevronDown, CirclePlus, LogOut, Mails, Settings } from "lucide-react"; -// ui -import { Menu, Transition } from "@headlessui/react"; -// plane imports -import { GOD_MODE_URL } from "@plane/constants"; -import { useTranslation } from "@plane/i18n"; -import { IWorkspace } from "@plane/types"; -import { Avatar, Loader, TOAST_TYPE, setToast } from "@plane/ui"; -import { orderWorkspacesList, cn, getFileURL } from "@plane/utils"; -// helpers // hooks -import { useAppTheme, useUser, useUserProfile, useWorkspace } from "@/hooks/store"; -// plane web helpers -import { getIsWorkspaceCreationDisabled } from "@/plane-web/helpers/instance.helper"; +import { useAppRail } from "@/hooks/use-app-rail"; // components -import { WorkspaceLogo } from "../logo"; -import SidebarDropdownItem from "./dropdown-item"; +import { WorkspaceAppSwitcher } from "@/plane-web/components/workspace/app-switcher"; +import { UserMenuRoot } from "./user-menu-root"; +import { WorkspaceMenuRoot } from "./workspace-menu-root"; export const SidebarDropdown = observer(() => { - const { workspaceSlug } = useParams(); - // store hooks - const { sidebarCollapsed, toggleSidebar } = useAppTheme(); - const { data: currentUser } = useUser(); - const { signOut } = useUser(); - const { updateUserProfile } = useUserProfile(); - const { currentWorkspace: activeWorkspace, workspaces } = useWorkspace(); - // derived values - const isWorkspaceCreationEnabled = getIsWorkspaceCreationDisabled() === false; - const isUserInstanceAdmin = false; - // translation - const { t } = useTranslation(); - // popper-js refs - const [referenceElement, setReferenceElement] = useState(null); - const [popperElement, setPopperElement] = useState(null); - // popper-js init - const { styles, attributes } = usePopper(referenceElement, popperElement, { - placement: "right", - modifiers: [{ name: "preventOverflow", options: { padding: 12 } }], - }); + // hooks + const { shouldRenderAppRail, isEnabled: isAppRailEnabled } = useAppRail(); - const handleWorkspaceNavigation = (workspace: IWorkspace) => updateUserProfile({ last_workspace_id: workspace?.id }); - - const handleSignOut = async () => { - await signOut().catch(() => - setToast({ - type: TOAST_TYPE.ERROR, - title: t("sign_out.toast.error.title"), - message: t("sign_out.toast.error.message"), - }) - ); - }; - - const handleItemClick = () => { - if (window.innerWidth < 768) { - toggleSidebar(); - } - }; - const workspacesList = orderWorkspacesList(Object.values(workspaces ?? {})); - // TODO: fix workspaces list scroll return ( -
    - - {({ open, close }) => ( - <> - -
    - - {!sidebarCollapsed && ( -

    - {activeWorkspace?.name ?? t("loading")} -

    - )} -
    - {!sidebarCollapsed && ( -
    - - -
    -
    - - {currentUser?.email} - - {workspacesList ? ( -
    - {(activeWorkspace - ? [ - activeWorkspace, - ...workspacesList.filter((workspace) => workspace.id !== activeWorkspace?.id), - ] - : workspacesList - ).map((workspace) => ( - - ))} -
    - ) : ( -
    - - - - -
    - )} -
    -
    - {isWorkspaceCreationEnabled && ( - - - - {t("create_workspace")} - - - )} - - - - - {t("workspace_invites")} - - - -
    - - - {t("sign_out")} - -
    -
    -
    -
    -
    - - )} -
    - - - - - - } - style={styles.popper} - {...attributes.popper} - > -
    - {currentUser?.email} - - - - - {t("settings")} - - - -
    -
    - - - {t("sign_out")} - -
    - {isUserInstanceAdmin && ( -
    - - - - {t("enter_god_mode")} - - - -
    - )} -
    -
    -
    +
    + + {isAppRailEnabled && !shouldRenderAppRail && } +
    ); }); diff --git a/apps/web/core/components/workspace/sidebar/favorites/favorite-folder.tsx b/apps/web/core/components/workspace/sidebar/favorites/favorite-folder.tsx index 91f8addd865..bc9f1e9d930 100644 --- a/apps/web/core/components/workspace/sidebar/favorites/favorite-folder.tsx +++ b/apps/web/core/components/workspace/sidebar/favorites/favorite-folder.tsx @@ -25,7 +25,6 @@ import { CustomMenu, Tooltip, DropIndicator, FavoriteFolderIcon, DragHandle } fr // helpers import { cn } from "@plane/utils"; // hooks -import { useAppTheme } from "@/hooks/store"; import { useFavorite } from "@/hooks/store/use-favorite"; import { usePlatformOS } from "@/hooks/use-platform-os"; // local imports @@ -44,7 +43,6 @@ type Props = { export const FavoriteFolder: React.FC = (props) => { const { favorite, handleRemoveFromFavorites, isLastChild, handleDrop } = props; // store hooks - const { sidebarCollapsed: isSidebarCollapsed } = useAppTheme(); const { getGroupedFavorites } = useFavorite(); const { isMobile } = usePlatformOS(); const { workspaceSlug } = useParams(); @@ -159,7 +157,6 @@ export const FavoriteFolder: React.FC = (props) => { "group/project-item relative w-full px-2 py-1.5 flex items-center rounded-md text-custom-sidebar-text-100 hover:bg-custom-sidebar-background-90", { "bg-custom-sidebar-background-90": isMenuActive, - "p-0 size-8 aspect-square justify-center mx-auto": isSidebarCollapsed, } )} > @@ -169,117 +166,95 @@ export const FavoriteFolder: React.FC = (props) => {
    - {isSidebarCollapsed ? ( -
    - + <> + +
    -
    + + + +
    +

    {favorite.name}

    - -
    - ) : ( - <> - -
    - - - - -
    - -
    -

    {favorite.name}

    -
    +
    +
    + + + + } + menuButtonOnClick={() => setIsMenuActive(!isMenuActive)} + className={cn( + "opacity-0 pointer-events-none flex-shrink-0 group-hover/project-item:opacity-100 group-hover/project-item:pointer-events-auto", + { + "opacity-100 pointer-events-auto": isMenuActive, + } + )} + customButtonClassName="grid place-items-center" + placement="bottom-start" + ariaLabel={t("aria_labels.projects_sidebar.toggle_quick_actions_menu")} + > + handleRemoveFromFavorites(favorite)}> + + + Remove from favorites + + + setFolderToRename(favorite.id)}> +
    + + Rename Folder
    - - - - +
    +
    + setIsMenuActive(!isMenuActive)} - className={cn( - "opacity-0 pointer-events-none flex-shrink-0 group-hover/project-item:opacity-100 group-hover/project-item:pointer-events-auto", - { - "opacity-100 pointer-events-auto": isMenuActive, - } - )} - customButtonClassName="grid place-items-center" - placement="bottom-start" - ariaLabel={t("aria_labels.projects_sidebar.toggle_quick_actions_menu")} - > - handleRemoveFromFavorites(favorite)}> - - - Remove from favorites - - - setFolderToRename(favorite.id)}> -
    - - Rename Folder -
    -
    - - - - - - )} + )} + aria-label={t( + open ? "aria_labels.projects_sidebar.close_folder" : "aria_labels.projects_sidebar.open_folder" + )} + > + +
    +
    {favorite.children && favorite.children.length > 0 && ( = (props) => { leaveFrom="transform scale-100 opacity-100" leaveTo="transform scale-95 opacity-0" > - + {orderBy(favorite.children, "sequence", "desc").map((child, index) => ( = observer((props) => { - const { href, title, icon, isSidebarCollapsed } = props; + const { href, title, icon } = props; // store hooks const { toggleSidebar } = useAppTheme(); const { isMobile } = usePlatformOS(); - const linkClass = "flex items-center gap-1.5 truncate w-full"; - const collapsedClass = - "group/project-item cursor-pointer relative group w-full flex items-center justify-center gap-1.5 rounded px-2 py-1 outline-none text-custom-sidebar-text-200 hover:bg-custom-sidebar-background-90 active:bg-custom-sidebar-background-90 truncate p-0 size-8 aspect-square mx-auto"; - const handleOnClick = () => { if (isMobile) toggleSidebar(); }; return ( - - + + {icon} - {!isSidebarCollapsed && {title}} + {title} ); diff --git a/apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-wrapper.tsx b/apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-wrapper.tsx index 9c3c64b8d06..7b96060850f 100644 --- a/apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-wrapper.tsx +++ b/apps/web/core/components/workspace/sidebar/favorites/favorite-items/common/favorite-item-wrapper.tsx @@ -7,28 +7,23 @@ type Props = { children: React.ReactNode; elementRef: React.RefObject; isMenuActive?: boolean; - sidebarCollapsed?: boolean; }; export const FavoriteItemWrapper: FC = (props) => { - const { children, elementRef, isMenuActive = false, sidebarCollapsed = false } = props; + const { children, elementRef, isMenuActive = false } = props; return ( <> - {sidebarCollapsed ? ( -
    {children}
    - ) : ( -
    - {children} -
    - )} +
    + {children} +
    ); }; diff --git a/apps/web/core/components/workspace/sidebar/favorites/favorite-items/root.tsx b/apps/web/core/components/workspace/sidebar/favorites/favorite-items/root.tsx index 49931802e84..1b5c9436e4c 100644 --- a/apps/web/core/components/workspace/sidebar/favorites/favorite-items/root.tsx +++ b/apps/web/core/components/workspace/sidebar/favorites/favorite-items/root.tsx @@ -27,7 +27,6 @@ import { FavoriteItemTitle, } from "@/components/workspace/sidebar/favorites"; // hooks -import { useAppTheme } from "@/hooks/store"; import { useFavoriteItemDetails } from "@/hooks/use-favorite-item-details"; //helpers import { getCanDrop, getInstructionFromPayload } from "../favorites.helpers"; @@ -45,7 +44,6 @@ export const FavoriteRoot: FC = observer((props) => { // props const { isLastChild, parentId, workspaceSlug, favorite, handleRemoveFromFavorites, handleDrop } = props; // store hooks - const { sidebarCollapsed } = useAppTheme(); const { itemLink, itemIcon, itemTitle } = useFavoriteItemDetails(workspaceSlug, favorite); //state const [isDragging, setIsDragging] = useState(false); @@ -82,12 +80,7 @@ export const FavoriteRoot: FC = observer((props) => { const root = createRoot(container); root.render(
    - +
    ); return () => root.unmount(); @@ -138,18 +131,16 @@ export const FavoriteRoot: FC = observer((props) => { return ( <> - - {!sidebarCollapsed && } - - {!sidebarCollapsed && ( - - )} + + + + {isLastChild && } diff --git a/apps/web/core/components/workspace/sidebar/favorites/favorites-menu.tsx b/apps/web/core/components/workspace/sidebar/favorites/favorites-menu.tsx index d2d30a37df9..607e572c9a3 100644 --- a/apps/web/core/components/workspace/sidebar/favorites/favorites-menu.tsx +++ b/apps/web/core/components/workspace/sidebar/favorites/favorites-menu.tsx @@ -23,10 +23,8 @@ import { setToast, TOAST_TYPE, Tooltip } from "@plane/ui"; // helpers import { cn } from "@plane/utils"; // hooks -import { useAppTheme } from "@/hooks/store"; import { useFavorite } from "@/hooks/store/use-favorite"; import useLocalStorage from "@/hooks/use-local-storage"; -import { usePlatformOS } from "@/hooks/use-platform-os"; // plane web components import { FavoriteFolder } from "./favorite-folder"; import { FavoriteRoot } from "./favorite-items"; @@ -40,19 +38,10 @@ export const SidebarFavoritesMenu = observer(() => { // navigation const { workspaceSlug } = useParams(); // store hooks - const { sidebarCollapsed } = useAppTheme(); - const { - favoriteIds, - groupedFavorites, - deleteFavorite, - removeFromFavoriteFolder, - reOrderFavorite, - moveFavoriteToFolder, - } = useFavorite(); + const { groupedFavorites, deleteFavorite, removeFromFavoriteFolder, reOrderFavorite, moveFavoriteToFolder } = + useFavorite(); // translation const { t } = useTranslation(); - // platform hooks - const { isMobile } = usePlatformOS(); // local storage const { setValue: toggleFavoriteMenu, storedValue } = useLocalStorage(IS_FAVORITE_MENU_OPEN, false); // derived values @@ -154,10 +143,6 @@ export const SidebarFavoritesMenu = observer(() => { [workspaceSlug, reOrderFavorite, t] ); - useEffect(() => { - if (sidebarCollapsed) toggleFavoriteMenu(true); - }, [sidebarCollapsed, toggleFavoriteMenu]); - useEffect(() => { const element = elementRef.current; @@ -189,27 +174,48 @@ export const SidebarFavoritesMenu = observer(() => { return ( <> - {!sidebarCollapsed && ( -
    + toggleFavoriteMenu(!isFavoriteMenuOpen)} + aria-label={t( + isFavoriteMenuOpen + ? "aria_labels.projects_sidebar.close_favorites_menu" + : "aria_labels.projects_sidebar.open_favorites_menu" + )} > + {t("favorites")} + +
    + + + toggleFavoriteMenu(!isFavoriteMenuOpen)} aria-label={t( isFavoriteMenuOpen @@ -217,42 +223,14 @@ export const SidebarFavoritesMenu = observer(() => { : "aria_labels.projects_sidebar.open_favorites_menu" )} > - {t("favorites")} + -
    - - - - toggleFavoriteMenu(!isFavoriteMenuOpen)} - aria-label={t( - isFavoriteMenuOpen - ? "aria_labels.projects_sidebar.close_favorites_menu" - : "aria_labels.projects_sidebar.open_favorites_menu" - )} - > - - -
    - )} +
    { leaveTo="transform scale-95 opacity-0" > {isFavoriteMenuOpen && ( - + {createNewFolder && } {Object.keys(groupedFavorites).length === 0 ? ( <> - {!sidebarCollapsed && ( - - {t("no_favorites_yet")} - - )} + {t("no_favorites_yet")} ) : ( orderBy(Object.values(groupedFavorites), "sequence", "desc") .filter((fav) => !fav.parent) .map((fav, index, { length }) => ( <> - {fav?.id && ( - - {fav?.is_folder ? ( - - ) : ( - - )} - + {fav?.is_folder ? ( + + ) : ( + )} )) @@ -320,10 +277,6 @@ export const SidebarFavoritesMenu = observer(() => { )}
    - - {sidebarCollapsed && favoriteIds.length > 0 && ( -
    - )} ); }); diff --git a/apps/web/core/components/workspace/sidebar/help-menu.tsx b/apps/web/core/components/workspace/sidebar/help-menu.tsx new file mode 100644 index 00000000000..3a1dc8320a2 --- /dev/null +++ b/apps/web/core/components/workspace/sidebar/help-menu.tsx @@ -0,0 +1,149 @@ +"use client"; + +import React, { useState } from "react"; +import { observer } from "mobx-react"; +import { useParams } from "next/navigation"; +import { FileText, HelpCircle, MessagesSquare, User } from "lucide-react"; +import { useTranslation } from "@plane/i18n"; +// ui +import { CustomMenu, Tooltip, ToggleSwitch } from "@plane/ui"; +// components +import { cn } from "@plane/utils"; +import { ProductUpdatesModal } from "@/components/global"; +// helpers +// hooks +import { useCommandPalette, useInstance, useTransient, useUserSettings } from "@/hooks/store"; +import { usePlatformOS } from "@/hooks/use-platform-os"; +// plane web components +import { PlaneVersionNumber } from "@/plane-web/components/global"; + +export interface WorkspaceHelpSectionProps { + setSidebarActive?: React.Dispatch>; +} + +export const HelpMenu: React.FC = observer(() => { + const { workspaceSlug, projectId } = useParams(); + // store hooks + const { t } = useTranslation(); + const { toggleShortcutModal } = useCommandPalette(); + const { isMobile } = usePlatformOS(); + const { config } = useInstance(); + const { isIntercomToggle, toggleIntercom } = useTransient(); + const { canUseLocalDB, toggleLocalDB } = useUserSettings(); + // states + const [isNeedHelpOpen, setIsNeedHelpOpen] = useState(false); + const [isProductUpdatesModalOpen, setProductUpdatesModalOpen] = useState(false); + + const handleCrispWindowShow = () => { + toggleIntercom(!isIntercomToggle); + }; + + return ( + <> + setProductUpdatesModalOpen(false)} /> +
    + + + + +
    + } + customButtonClassName="relative grid place-items-center rounded-md p-1.5 outline-none" + menuButtonOnClick={() => !isNeedHelpOpen && setIsNeedHelpOpen(true)} + onMenuClose={() => setIsNeedHelpOpen(false)} + placement="top-end" + maxHeight="lg" + closeOnSelect + > + +
    + + {t("documentation")} + + + {config?.intercom_app_id && config?.is_intercom_enabled && ( + + + + )} + + + + {t("contact_sales")} + + +
    + +
    { + e.preventDefault(); + e.stopPropagation(); + }} + className="flex w-full items-center justify-between text-xs hover:bg-custom-background-80" + > + {t("hyper_mode")} + toggleLocalDB(workspaceSlug?.toString(), projectId?.toString())} + /> +
    +
    + + + + + + + + + Discord + + +
    + +
    + +
    + + ); +}); diff --git a/apps/web/core/components/workspace/sidebar/help-section.tsx b/apps/web/core/components/workspace/sidebar/help-section.tsx index 73f036cd412..5aff74d568c 100644 --- a/apps/web/core/components/workspace/sidebar/help-section.tsx +++ b/apps/web/core/components/workspace/sidebar/help-section.tsx @@ -26,7 +26,7 @@ export const SidebarHelpSection: React.FC = observer( const { workspaceSlug, projectId } = useParams(); // store hooks const { t } = useTranslation(); - const { sidebarCollapsed, toggleSidebar } = useAppTheme(); + const { sidebarCollapsed: isCollapsed, toggleSidebar, sidebarPeek, toggleSidebarPeek } = useAppTheme(); const { toggleShortcutModal } = useCommandPalette(); const { isMobile } = usePlatformOS(); const { config } = useInstance(); @@ -40,22 +40,11 @@ export const SidebarHelpSection: React.FC = observer( toggleIntercom(!isIntercomToggle); }; - const isCollapsed = sidebarCollapsed || false; - return ( <> setProductUpdatesModalOpen(false)} /> -
    -
    +
    +
    = observer(
    } - customButtonClassName={`relative grid place-items-center rounded-md p-1.5 outline-none ${isCollapsed ? "w-full" : ""}`} + customButtonClassName="relative grid place-items-center rounded-md p-1.5 outline-none" menuButtonOnClick={() => !isNeedHelpOpen && setIsNeedHelpOpen(true)} onMenuClose={() => setIsNeedHelpOpen(false)} - placement={isCollapsed ? "left-end" : "top-end"} + placement="top-end" maxHeight="lg" closeOnSelect > @@ -158,23 +147,18 @@ export const SidebarHelpSection: React.FC = observer(
    -
    +
    -
    +
    + + )} + + + + {t("contact_sales")} + + +
    + +
    { + e.preventDefault(); + e.stopPropagation(); + }} + className="flex w-full items-center justify-between text-xs hover:bg-custom-background-80" + > + {t("hyper_mode")} + toggleLocalDB(workspaceSlug?.toString(), projectId?.toString())} + /> +
    +
    + + + + + + + +
    + Discord + + +
    + +
    + + + ); +}); diff --git a/apps/web/core/components/workspace/sidebar/index.ts b/apps/web/core/components/workspace/sidebar/index.ts index 0a1f2a920c7..8c18ceae6b3 100644 --- a/apps/web/core/components/workspace/sidebar/index.ts +++ b/apps/web/core/components/workspace/sidebar/index.ts @@ -10,3 +10,4 @@ export * from "./user-menu-item"; export * from "./workspace-menu"; export * from "./workspace-menu-item"; export * from "./workspace-menu-header"; +export * from "./help-section"; diff --git a/apps/web/core/components/workspace/sidebar/project-navigation.tsx b/apps/web/core/components/workspace/sidebar/project-navigation.tsx index a6176bed834..754f45de5c7 100644 --- a/apps/web/core/components/workspace/sidebar/project-navigation.tsx +++ b/apps/web/core/components/workspace/sidebar/project-navigation.tsx @@ -9,13 +9,11 @@ import { EUserPermissionsLevel, EUserPermissions } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { EUserProjectRoles } from "@plane/types"; // plane ui -import { Tooltip, DiceIcon, ContrastIcon, LayersIcon, Intake } from "@plane/ui"; +import { DiceIcon, ContrastIcon, LayersIcon, Intake } from "@plane/ui"; // components import { SidebarNavItem } from "@/components/sidebar"; // hooks import { useAppTheme, useIssueDetail, useProject, useUserPermissions } from "@/hooks/store"; -import { usePlatformOS } from "@/hooks/use-platform-os"; -// plane-web constants export type TNavigationItem = { name: string; @@ -32,17 +30,15 @@ type TProjectItemsProps = { workspaceSlug: string; projectId: string; additionalNavigationItems?: (workspaceSlug: string, projectId: string) => TNavigationItem[]; - isSidebarCollapsed: boolean; }; export const ProjectNavigation: FC = observer((props) => { - const { workspaceSlug, projectId, additionalNavigationItems, isSidebarCollapsed } = props; + const { workspaceSlug, projectId, additionalNavigationItems } = props; const { workItem: workItemIdentifierFromRoute } = useParams(); // store hooks const { t } = useTranslation(); const { toggleSidebar } = useAppTheme(); const { getPartialProjectById } = useProject(); - const { isMobile } = usePlatformOS(); const { allowPermissions } = useUserPermissions(); const { issue: { getIssueIdByIdentifier, getIssueById }, @@ -176,28 +172,14 @@ export const ProjectNavigation: FC = observer((props) => { if (!hasAccess) return null; return ( - - - -
    - - {!isSidebarCollapsed && {t(item.i18n_key)}} -
    -
    - -
    + + +
    + + {t(item.i18n_key)} +
    +
    + ); })} diff --git a/apps/web/core/components/workspace/sidebar/projects-list-item.tsx b/apps/web/core/components/workspace/sidebar/projects-list-item.tsx index 37a1ebb45ba..714c36eca5a 100644 --- a/apps/web/core/components/workspace/sidebar/projects-list-item.tsx +++ b/apps/web/core/components/workspace/sidebar/projects-list-item.tsx @@ -57,12 +57,13 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { renderInExtendedSidebar = false, } = props; // store hooks - const { sidebarCollapsed } = useAppTheme(); const { t } = useTranslation(); const { getPartialProjectById } = useProject(); const { isMobile } = usePlatformOS(); const { allowPermissions } = useUserPermissions(); const { getIsProjectListOpen, toggleProjectListOpen } = useCommandPalette(); + const { toggleAnySidebarDropdown } = useAppTheme(); + // states const [leaveProjectModalOpen, setLeaveProjectModal] = useState(false); const [publishModalOpen, setPublishModal] = useState(false); @@ -99,8 +100,6 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { setLeaveProjectModal(true); }; - const isSidebarCollapsed = sidebarCollapsed && !renderInExtendedSidebar; - useEffect(() => { const element = projectRef.current; const dragHandleElement = dragHandleRef.current; @@ -110,7 +109,7 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { return combine( draggable({ element, - canDrag: () => !disableDrag && !isSidebarCollapsed, + canDrag: () => !disableDrag, dragHandle: dragHandleElement ?? undefined, getInitialData: () => ({ id: projectId, dragInstanceId: "PROJECTS" }), onDragStart: () => { @@ -190,6 +189,11 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { ); }, [projectId, isLastChild, projectListType, handleOnProjectDrop]); + useEffect(() => { + if (isMenuActive) toggleAnySidebarDropdown(true); + else toggleAnySidebarDropdown(false); + }, [isMenuActive]); + useOutsideClickDetector(actionSectionRef, () => setIsMenuActive(false)); useOutsideClickDetector(projectRef, () => projectRef?.current?.classList?.remove(HIGHLIGHT_CLASS)); @@ -218,7 +222,6 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { "group/project-item relative w-full px-2 py-1.5 flex items-center rounded-md text-custom-sidebar-text-100 hover:bg-custom-sidebar-background-90", { "bg-custom-sidebar-background-90": isMenuActive, - "p-0 size-8 aspect-square justify-center mx-auto": isSidebarCollapsed, } )} id={`${project?.id}`} @@ -240,7 +243,6 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { "cursor-not-allowed opacity-60": project.sort_order === null, "cursor-grabbing": isDragging, flex: isMenuActive || renderInExtendedSidebar, - "!hidden": isSidebarCollapsed, } )} ref={dragHandleRef} @@ -249,76 +251,53 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { )} - {isSidebarCollapsed ? ( + <> - +
    +

    {project.name}

    - ) : ( - <> - - setIsMenuActive(!isMenuActive)} > - -
    - -
    -

    {project.name}

    -
    -
    -
    - setIsMenuActive(!isMenuActive)} - > - - + + + } + className={cn( + "opacity-0 pointer-events-none flex-shrink-0 group-hover/project-item:opacity-100 group-hover/project-item:pointer-events-auto", + { + "opacity-100 pointer-events-auto": isMenuActive, } - className={cn( - "opacity-0 pointer-events-none flex-shrink-0 group-hover/project-item:opacity-100 group-hover/project-item:pointer-events-auto", - { - "opacity-100 pointer-events-auto": isMenuActive, - } - )} - customButtonClassName="grid place-items-center" - placement="bottom-start" - ariaLabel={t("aria_labels.projects_sidebar.toggle_quick_actions_menu")} - useCaptureForOutsideClick - closeOnSelect - > - {/* TODO: Removed is_favorite logic due to the optimization in projects API */} - {/* {isAuthorized && ( + )} + customButtonClassName="grid place-items-center" + placement="bottom-start" + ariaLabel={t("aria_labels.projects_sidebar.toggle_quick_actions_menu")} + useCaptureForOutsideClick + closeOnSelect + onMenuClose={() => setIsMenuActive(false)} + > + {/* TODO: Removed is_favorite logic due to the optimization in projects API */} + {/* {isAuthorized && ( @@ -333,82 +312,81 @@ export const SidebarProjectsListItem: React.FC = observer((props) => { )} */} - {/* publish project settings */} - {isAdmin && ( - setPublishModal(true)}> -
    -
    - -
    -
    {t("publish_project")}
    + {/* publish project settings */} + {isAdmin && ( + setPublishModal(true)}> +
    +
    +
    - - )} - - - - {t("copy_link")} - +
    {t("publish_project")}
    +
    - {isAuthorized && ( - { - router.push(`/${workspaceSlug}/projects/${project?.id}/archives/issues`); - }} - > -
    - - {t("archives")} -
    -
    - )} + )} + + + + {t("copy_link")} + + + {isAuthorized && ( { - router.push(`/${workspaceSlug}/settings/projects/${project?.id}`); + router.push(`/${workspaceSlug}/projects/${project?.id}/archives/issues`); }} >
    - - {t("settings")} + + {t("archives")}
    - {/* leave project */} - {!isAuthorized && ( - -
    - - {t("leave_project")} -
    -
    - )} - - setIsProjectListOpen(!isProjectListOpen)} - aria-label={t( - isProjectListOpen - ? "aria_labels.projects_sidebar.close_project_menu" - : "aria_labels.projects_sidebar.open_project_menu" - )} + )} + { + router.push(`/${workspaceSlug}/settings/projects/${project?.id}`); + }} > - - - - )} +
    + + {t("settings")} +
    + + {/* leave project */} + {!isAuthorized && ( + +
    + + {t("leave_project")} +
    +
    + )} + + setIsProjectListOpen(!isProjectListOpen)} + aria-label={t( + isProjectListOpen + ? "aria_labels.projects_sidebar.close_project_menu" + : "aria_labels.projects_sidebar.open_project_menu" + )} + > + + +
    = observer((props) => { > {isProjectListOpen && ( - + )} diff --git a/apps/web/core/components/workspace/sidebar/projects-list.tsx b/apps/web/core/components/workspace/sidebar/projects-list.tsx index 14419ffe882..1f4a8f71ff0 100644 --- a/apps/web/core/components/workspace/sidebar/projects-list.tsx +++ b/apps/web/core/components/workspace/sidebar/projects-list.tsx @@ -5,7 +5,7 @@ import { combine } from "@atlaskit/pragmatic-drag-and-drop/combine"; import { autoScrollForElements } from "@atlaskit/pragmatic-drag-and-drop-auto-scroll/element"; import { observer } from "mobx-react"; import { useParams, usePathname } from "next/navigation"; -import { Briefcase, ChevronRight, Plus } from "lucide-react"; +import { ChevronRight, Plus } from "lucide-react"; import { Disclosure, Transition } from "@headlessui/react"; import { EUserPermissions, EUserPermissionsLevel, PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; @@ -17,7 +17,7 @@ import { CreateProjectModal } from "@/components/project"; import { SidebarProjectsListItem } from "@/components/workspace"; // helpers // hooks -import { useAppTheme, useCommandPalette, useProject, useUserPermissions } from "@/hooks/store"; +import { useCommandPalette, useProject, useUserPermissions } from "@/hooks/store"; // plane web types import { TProject } from "@/plane-web/types"; @@ -32,7 +32,6 @@ export const SidebarProjectsList: FC = observer(() => { // store hooks const { t } = useTranslation(); const { toggleCreateProjectModal } = useCommandPalette(); - const { sidebarCollapsed } = useAppTheme(); const { allowPermissions } = useUserPermissions(); const { loader, getPartialProjectById, joinedProjectIds: joinedProjects, updateProjectView } = useProject(); @@ -86,8 +85,6 @@ export const SidebarProjectsList: FC = observer(() => { }); }; - const isCollapsed = sidebarCollapsed || false; - /** * Implementing scroll animation styles based on the scroll length of the container */ @@ -151,24 +148,11 @@ export const SidebarProjectsList: FC = observer(() => { > <> -
    +
    toggleListDisclosure(!isAllProjectsListOpen)} aria-label={t( isAllProjectsListOpen @@ -176,52 +160,42 @@ export const SidebarProjectsList: FC = observer(() => { : "aria_labels.projects_sidebar.open_projects_menu" )} > - - <> - {isCollapsed ? ( - - ) : ( - {t("projects")} - )} - - + {t("projects")} - {!isCollapsed && ( -
    - {isAuthorizedUser && ( - - - +
    + {isAuthorizedUser && ( + + + + )} + toggleListDisclosure(!isAllProjectsListOpen)} + aria-label={t( + isAllProjectsListOpen + ? "aria_labels.projects_sidebar.close_projects_menu" + : "aria_labels.projects_sidebar.open_projects_menu" )} - toggleListDisclosure(!isAllProjectsListOpen)} - aria-label={t( - isAllProjectsListOpen - ? "aria_labels.projects_sidebar.close_projects_menu" - : "aria_labels.projects_sidebar.open_projects_menu" - )} - > - - -
    - )} + > + + +
    { )} {isAllProjectsListOpen && ( - + <> {joinedProjects.map((projectId, index) => ( { {isAuthorizedUser && joinedProjects?.length === 0 && ( )}
    diff --git a/apps/web/core/components/workspace/sidebar/quick-actions.tsx b/apps/web/core/components/workspace/sidebar/quick-actions.tsx index b553c40a480..8784472331a 100644 --- a/apps/web/core/components/workspace/sidebar/quick-actions.tsx +++ b/apps/web/core/components/workspace/sidebar/quick-actions.tsx @@ -12,7 +12,7 @@ import { CreateUpdateIssueModal } from "@/components/issues"; // constants // helpers // hooks -import { useAppTheme, useCommandPalette, useProject, useUserPermissions } from "@/hooks/store"; +import { useCommandPalette, useProject, useUserPermissions } from "@/hooks/store"; import useLocalStorage from "@/hooks/use-local-storage"; // plane web components import { AppSearch } from "@/plane-web/components/workspace"; @@ -30,7 +30,6 @@ export const SidebarQuickActions = observer(() => { const workspaceSlug = routerWorkspaceSlug?.toString(); // store hooks const { toggleCreateIssueModal } = useCommandPalette(); - const { sidebarCollapsed: isSidebarCollapsed } = useAppTheme(); const { joinedProjectIds } = useProject(); const { allowPermissions } = useUserPermissions(); // local storage @@ -73,19 +72,13 @@ export const SidebarQuickActions = observer(() => { onSubmit={() => removeWorkspaceDraftIssue()} isDraft /> -
    +
    diff --git a/apps/web/core/components/workspace/sidebar/sidebar-menu-items.tsx b/apps/web/core/components/workspace/sidebar/sidebar-menu-items.tsx index 89c0f150eaa..3a2676c816a 100644 --- a/apps/web/core/components/workspace/sidebar/sidebar-menu-items.tsx +++ b/apps/web/core/components/workspace/sidebar/sidebar-menu-items.tsx @@ -2,11 +2,13 @@ import React, { useMemo } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; -import { Ellipsis } from "lucide-react"; +import { ChevronRight, Ellipsis } from "lucide-react"; +import { Disclosure, Transition } from "@headlessui/react"; // plane imports import { WORKSPACE_SIDEBAR_DYNAMIC_NAVIGATION_ITEMS_LINKS, WORKSPACE_SIDEBAR_STATIC_NAVIGATION_ITEMS_LINKS, + WORKSPACE_SIDEBAR_STATIC_PINNED_NAVIGATION_ITEMS_LINKS, } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { cn } from "@plane/utils"; @@ -14,20 +16,30 @@ import { cn } from "@plane/utils"; import { SidebarNavItem } from "@/components/sidebar"; // store hooks import { useAppTheme, useWorkspace } from "@/hooks/store"; +import useLocalStorage from "@/hooks/use-local-storage"; // plane-web imports import { SidebarItem } from "@/plane-web/components/workspace/sidebar"; export const SidebarMenuItems = observer(() => { // routers const { workspaceSlug } = useParams(); + const { setValue: toggleWorkspaceMenu, storedValue: isWorkspaceMenuOpen } = useLocalStorage( + "is_workspace_menu_open", + true + ); + // store hooks - const { sidebarCollapsed, extendedSidebarCollapsed, toggleExtendedSidebar } = useAppTheme(); + const { isExtendedSidebarOpened, toggleExtendedSidebar } = useAppTheme(); const { getNavigationPreferences } = useWorkspace(); // translation const { t } = useTranslation(); // derived values const currentWorkspaceNavigationPreferences = getNavigationPreferences(workspaceSlug.toString()); + const toggleListDisclosure = (isOpen: boolean) => { + toggleWorkspaceMenu(isOpen); + }; + const sortedNavigationItems = useMemo( () => WORKSPACE_SIDEBAR_DYNAMIC_NAVIGATION_ITEMS_LINKS.map((item) => { @@ -41,35 +53,86 @@ export const SidebarMenuItems = observer(() => { ); return ( -
    - {WORKSPACE_SIDEBAR_STATIC_NAVIGATION_ITEMS_LINKS.map((item, _index) => ( - - ))} - {sortedNavigationItems.map((item, _index) => ( - - ))} - - - -
    + {isWorkspaceMenuOpen && ( + + <> + {WORKSPACE_SIDEBAR_STATIC_PINNED_NAVIGATION_ITEMS_LINKS.map((item, _index) => ( + + ))} + {sortedNavigationItems.map((item, _index) => ( + + ))} + + + + + + )} + + + ); }); diff --git a/apps/web/core/components/workspace/sidebar/user-menu-item.tsx b/apps/web/core/components/workspace/sidebar/user-menu-item.tsx index 34e056400b4..5d0b555dc1b 100644 --- a/apps/web/core/components/workspace/sidebar/user-menu-item.tsx +++ b/apps/web/core/components/workspace/sidebar/user-menu-item.tsx @@ -4,10 +4,9 @@ import Link from "next/link"; import { useParams, usePathname } from "next/navigation"; // plane imports import { EUserPermissionsLevel, SIDEBAR_TRACKER_ELEMENTS } from "@plane/constants"; -import { usePlatformOS } from "@plane/hooks"; + import { useTranslation } from "@plane/i18n"; import { EUserWorkspaceRoles } from "@plane/types"; -import { Tooltip } from "@plane/ui"; // components import { SidebarNavItem } from "@/components/sidebar"; import { NotificationAppSidebarOption } from "@/components/workspace-notifications"; @@ -36,8 +35,7 @@ export const SidebarUserMenuItem: FC = observer((props const { t } = useTranslation(); // store hooks const { allowPermissions } = useUserPermissions(); - const { toggleSidebar, sidebarCollapsed } = useAppTheme(); - const { isMobile } = usePlatformOS(); + const { toggleSidebar } = useAppTheme(); const isActive = pathname === item.href; @@ -59,30 +57,14 @@ export const SidebarUserMenuItem: FC = observer((props }; return ( - - handleLinkClick(item.key)}> - -
    - - {!sidebarCollapsed &&

    {t(item.labelTranslationKey)}

    } -
    - {item.key === "notifications" && ( - - )} -
    - -
    + handleLinkClick(item.key)}> + +
    + +

    {t(item.labelTranslationKey)}

    +
    + {item.key === "notifications" && } +
    + ); }); diff --git a/apps/web/core/components/workspace/sidebar/user-menu-root.tsx b/apps/web/core/components/workspace/sidebar/user-menu-root.tsx new file mode 100644 index 00000000000..1dda949959c --- /dev/null +++ b/apps/web/core/components/workspace/sidebar/user-menu-root.tsx @@ -0,0 +1,159 @@ +"use client"; + +import { Fragment, Ref, useState, useEffect } from "react"; +import { observer } from "mobx-react"; +import Link from "next/link"; +import { useParams } from "next/navigation"; +import { usePopper } from "react-popper"; +// icons +import { LogOut, PanelLeftDashed, Settings } from "lucide-react"; +// ui +import { Menu, Transition } from "@headlessui/react"; +// plane imports +import { GOD_MODE_URL } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; +import { Avatar, TOAST_TYPE, setToast } from "@plane/ui"; +import { getFileURL } from "@plane/utils"; +// hooks +import { useAppTheme, useUser } from "@/hooks/store"; +import { useAppRail } from "@/hooks/use-app-rail"; + +type Props = { + size?: "sm" | "md"; +}; + +export const UserMenuRoot = observer((props: Props) => { + const { size = "sm" } = props; + const { workspaceSlug } = useParams(); + // store hooks + const { toggleAnySidebarDropdown, sidebarPeek, toggleSidebarPeek } = useAppTheme(); + + const { isEnabled, shouldRenderAppRail, toggleAppRail } = useAppRail(); + const { data: currentUser } = useUser(); + const { signOut } = useUser(); + // derived values + + const isUserInstanceAdmin = false; + // translation + const { t } = useTranslation(); + // local state + const [isUserMenuOpen, setIsUserMenuOpen] = useState(false); + // popper-js refs + const [referenceElement, setReferenceElement] = useState(null); + const [popperElement, setPopperElement] = useState(null); + // popper-js init + const { styles, attributes } = usePopper(referenceElement, popperElement, { + placement: "right", + modifiers: [{ name: "preventOverflow", options: { padding: 12 } }], + }); + + const handleSignOut = async () => { + await signOut().catch(() => + setToast({ + type: TOAST_TYPE.ERROR, + title: t("sign_out.toast.error.title"), + message: t("sign_out.toast.error.message"), + }) + ); + }; + + // Toggle sidebar dropdown state when either menu is open + useEffect(() => { + if (isUserMenuOpen) toggleAnySidebarDropdown(true); + else toggleAnySidebarDropdown(false); + }, [isUserMenuOpen]); + + return ( + + {({ open, close }: { open: boolean; close: () => void }) => { + // Update local state directly + if (isUserMenuOpen !== open) { + setIsUserMenuOpen(open); + } + + return ( + <> + + + + + } + style={styles.popper} + {...attributes.popper} + > +
    + {currentUser?.email} + + + + + {t("settings")} + + + + {isEnabled && ( + { + if (sidebarPeek) toggleSidebarPeek(false); + toggleAppRail(); + }} + > + + {shouldRenderAppRail ? "Undock AppRail" : "Dock AppRail"} + + )} +
    +
    + + + {t("sign_out")} + +
    + {isUserInstanceAdmin && ( +
    + + + + {t("enter_god_mode")} + + + +
    + )} +
    +
    + + ); + }} +
    + ); +}); diff --git a/apps/web/core/components/workspace/sidebar/user-menu.tsx b/apps/web/core/components/workspace/sidebar/user-menu.tsx index 762d55a3afe..9826a77b91a 100644 --- a/apps/web/core/components/workspace/sidebar/user-menu.tsx +++ b/apps/web/core/components/workspace/sidebar/user-menu.tsx @@ -8,15 +8,12 @@ import { EUserWorkspaceRoles } from "@plane/types"; // plane imports import { UserActivityIcon } from "@plane/ui"; // components -import { cn } from "@plane/utils"; import { SidebarUserMenuItem } from "@/components/workspace/sidebar"; -// helpers // hooks -import { useAppTheme, useUserPermissions, useUser } from "@/hooks/store"; +import { useUserPermissions, useUser } from "@/hooks/store"; export const SidebarUserMenu = observer(() => { const { workspaceSlug } = useParams(); - const { sidebarCollapsed } = useAppTheme(); const { workspaceUserInfo } = useUserPermissions(); const { data: currentUser } = useUser(); @@ -54,11 +51,7 @@ export const SidebarUserMenu = observer(() => { const draftIssueCount = workspaceUserInfo[workspaceSlug.toString()]?.draft_issue_count; return ( -
    +
    {SIDEBAR_USER_MENU_ITEMS.map((item) => ( ))} diff --git a/apps/web/core/components/workspace/sidebar/workspace-menu-header.tsx b/apps/web/core/components/workspace/sidebar/workspace-menu-header.tsx index 26e0951c909..0d2a736f3a2 100644 --- a/apps/web/core/components/workspace/sidebar/workspace-menu-header.tsx +++ b/apps/web/core/components/workspace/sidebar/workspace-menu-header.tsx @@ -12,7 +12,7 @@ import { EUserWorkspaceRoles } from "@plane/types"; import { CustomMenu } from "@plane/ui"; import { cn } from "@plane/utils"; // store hooks -import { useAppTheme, useUserPermissions } from "@/hooks/store"; +import { useUserPermissions } from "@/hooks/store"; export type SidebarWorkspaceMenuHeaderProps = { isWorkspaceMenuOpen: boolean; @@ -27,7 +27,6 @@ export const SidebarWorkspaceMenuHeader: FC = o const actionSectionRef = useRef(null); // hooks const { workspaceSlug } = useParams(); - const { sidebarCollapsed } = useAppTheme(); const { allowPermissions } = useUserPermissions(); const { t } = useTranslation(); @@ -37,19 +36,8 @@ export const SidebarWorkspaceMenuHeader: FC = o // eslint-disable-next-line @typescript-eslint/no-explicit-any const isAdmin = allowPermissions([EUserWorkspaceRoles.ADMIN] as any, EUserPermissionsLevel.WORKSPACE); - if (sidebarCollapsed) { - return <>; - } - return ( -
    +
    = obser const { workspaceSlug } = useParams(); const { allowPermissions } = useUserPermissions(); // store hooks - const { toggleSidebar, sidebarCollapsed } = useAppTheme(); - const { isMobile } = usePlatformOS(); + const { toggleSidebar } = useAppTheme(); const handleLinkClick = () => { if (window.innerWidth < 768) { @@ -51,33 +48,20 @@ export const SidebarWorkspaceMenuItem: FC = obser const isActive = item.href === pathname; return ( - - handleLinkClick()}> - -
    - - {!sidebarCollapsed &&

    {t(item.labelTranslationKey)}

    } -
    - {!sidebarCollapsed && item.key === "active_cycles" && ( -
    - -
    - )} -
    - -
    + handleLinkClick()}> + +
    + +

    {t(item.labelTranslationKey)}

    +
    +
    + +
    +
    + ); }); diff --git a/apps/web/core/components/workspace/sidebar/workspace-menu-root.tsx b/apps/web/core/components/workspace/sidebar/workspace-menu-root.tsx new file mode 100644 index 00000000000..c6f1d3ec2ce --- /dev/null +++ b/apps/web/core/components/workspace/sidebar/workspace-menu-root.tsx @@ -0,0 +1,216 @@ +"use client"; + +import React, { Fragment, useState, useEffect } from "react"; +import { observer } from "mobx-react"; +import Link from "next/link"; +// icons +import { ChevronDown, CirclePlus, LogOut, Mails } from "lucide-react"; +// ui +import { Menu, Transition } from "@headlessui/react"; +// plane imports +import { useTranslation } from "@plane/i18n"; +import { IWorkspace } from "@plane/types"; +import { Loader, TOAST_TYPE, setToast } from "@plane/ui"; +import { orderWorkspacesList, cn } from "@plane/utils"; +// helpers +import { AppSidebarItem } from "@/components/sidebar"; +// hooks +import { useAppTheme, useUser, useUserProfile, useWorkspace } from "@/hooks/store"; +// plane web helpers +import { getIsWorkspaceCreationDisabled } from "@/plane-web/helpers/instance.helper"; +// components +import { WorkspaceLogo } from "../logo"; +import SidebarDropdownItem from "./dropdown-item"; + +type WorkspaceMenuRootProps = { + renderLogoOnly?: boolean; +}; + +export const WorkspaceMenuRoot = observer((props: WorkspaceMenuRootProps) => { + const { renderLogoOnly } = props; + // store hooks + const { toggleSidebar, toggleAnySidebarDropdown } = useAppTheme(); + const { data: currentUser } = useUser(); + const { signOut } = useUser(); + const { updateUserProfile } = useUserProfile(); + const { currentWorkspace: activeWorkspace, workspaces } = useWorkspace(); + // derived values + const isWorkspaceCreationEnabled = getIsWorkspaceCreationDisabled() === false; + // translation + const { t } = useTranslation(); + // local state + const [isWorkspaceMenuOpen, setIsWorkspaceMenuOpen] = useState(false); + + const handleWorkspaceNavigation = (workspace: IWorkspace) => updateUserProfile({ last_workspace_id: workspace?.id }); + + const handleSignOut = async () => { + await signOut().catch(() => + setToast({ + type: TOAST_TYPE.ERROR, + title: t("sign_out.toast.error.title"), + message: t("sign_out.toast.error.message"), + }) + ); + }; + + const handleItemClick = () => { + if (window.innerWidth < 768) { + toggleSidebar(); + } + }; + const workspacesList = orderWorkspacesList(Object.values(workspaces ?? {})); + // TODO: fix workspaces list scroll + + // Toggle sidebar dropdown state when either menu is open + useEffect(() => { + if (isWorkspaceMenuOpen) toggleAnySidebarDropdown(true); + else toggleAnySidebarDropdown(false); + }, [isWorkspaceMenuOpen]); + + const logo = activeWorkspace?.logo_url; + const name = activeWorkspace?.name; + + return ( + + {({ open, close }: { open: boolean; close: () => void }) => { + // Update local state directly + if (isWorkspaceMenuOpen !== open) { + setIsWorkspaceMenuOpen(open); + } + + return ( + <> + {renderLogoOnly ? ( + + + ), + }} + /> + + ) : ( + +
    + +

    + {activeWorkspace?.name ?? t("loading")} +

    +
    +
    + )} + + + +
    +
    + + {currentUser?.email} + + {workspacesList ? ( +
    + {(activeWorkspace + ? [ + activeWorkspace, + ...workspacesList.filter((workspace) => workspace.id !== activeWorkspace?.id), + ] + : workspacesList + ).map((workspace) => ( + + ))} +
    + ) : ( +
    + + + + +
    + )} +
    +
    + {isWorkspaceCreationEnabled && ( + + + + {t("create_workspace")} + + + )} + + + + + {t("workspace_invites")} + + + +
    + + + {t("sign_out")} + +
    +
    +
    +
    +
    + + ); + }} +
    + ); +}); diff --git a/apps/web/core/components/workspace/sidebar/workspace-menu.tsx b/apps/web/core/components/workspace/sidebar/workspace-menu.tsx index 069b781def1..a43224d8df0 100644 --- a/apps/web/core/components/workspace/sidebar/workspace-menu.tsx +++ b/apps/web/core/components/workspace/sidebar/workspace-menu.tsx @@ -1,6 +1,6 @@ "use client"; -import React, { useEffect } from "react"; +import React from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { BarChart2, Briefcase, Layers } from "lucide-react"; @@ -11,25 +11,17 @@ import { ContrastIcon } from "@plane/ui"; // components import { cn } from "@plane/utils"; import { SidebarWorkspaceMenuHeader, SidebarWorkspaceMenuItem } from "@/components/workspace/sidebar"; -// helpers // hooks -import { useAppTheme } from "@/hooks/store"; import useLocalStorage from "@/hooks/use-local-storage"; export const SidebarWorkspaceMenu = observer(() => { // router params const { workspaceSlug } = useParams(); - // store hooks - const { sidebarCollapsed } = useAppTheme(); // local storage const { setValue: toggleWorkspaceMenu, storedValue } = useLocalStorage("is_workspace_menu_open", true); // derived values const isWorkspaceMenuOpen = !!storedValue; - useEffect(() => { - if (sidebarCollapsed) toggleWorkspaceMenu(true); - }, [sidebarCollapsed, toggleWorkspaceMenu]); - const SIDEBAR_WORKSPACE_MENU_ITEMS = [ { key: "projects", @@ -74,13 +66,7 @@ export const SidebarWorkspaceMenu = observer(() => { leaveTo="transform scale-95 opacity-0" > {isWorkspaceMenuOpen && ( - + {SIDEBAR_WORKSPACE_MENU_ITEMS.map((item) => ( ))} diff --git a/apps/web/core/hooks/context/app-rail-context.tsx b/apps/web/core/hooks/context/app-rail-context.tsx new file mode 100644 index 00000000000..6fe902cdd88 --- /dev/null +++ b/apps/web/core/hooks/context/app-rail-context.tsx @@ -0,0 +1,47 @@ +"use client"; + +import React, { createContext, ReactNode } from "react"; +import { observer } from "mobx-react"; +import { useParams } from "next/navigation"; +// hooks +import useLocalStorage from "@/hooks/use-local-storage"; + +export interface AppRailContextType { + isEnabled: boolean; + shouldRenderAppRail: boolean; + toggleAppRail: (value?: boolean) => void; +} + +const AppRailContext = createContext(undefined); + +export { AppRailContext }; + +interface AppRailProviderProps { + children: ReactNode; +} + +export const AppRailProvider = observer(({ children }: AppRailProviderProps) => { + const { workspaceSlug } = useParams(); + const { storedValue: isAppRailVisible, setValue: setIsAppRailVisible } = useLocalStorage( + `APP_RAIL_${workspaceSlug}`, + false + ); + + const isEnabled = false; + + const toggleAppRail = (value?: boolean) => { + if (value === undefined) { + setIsAppRailVisible(!isAppRailVisible); + } else { + setIsAppRailVisible(value); + } + }; + + const contextValue: AppRailContextType = { + isEnabled, + shouldRenderAppRail: !!isAppRailVisible && isEnabled, + toggleAppRail, + }; + + return {children}; +}); diff --git a/apps/web/core/hooks/use-app-rail.tsx b/apps/web/core/hooks/use-app-rail.tsx new file mode 100644 index 00000000000..5318f80df7e --- /dev/null +++ b/apps/web/core/hooks/use-app-rail.tsx @@ -0,0 +1,10 @@ +import { useContext } from "react"; +import { AppRailContext } from "./context/app-rail-context"; + +export const useAppRail = () => { + const context = useContext(AppRailContext); + if (context === undefined) { + throw new Error("useAppRail must be used within AppRailProvider"); + } + return context; +}; diff --git a/apps/web/core/hooks/use-workspace-paths.ts b/apps/web/core/hooks/use-workspace-paths.ts new file mode 100644 index 00000000000..fd0e742191f --- /dev/null +++ b/apps/web/core/hooks/use-workspace-paths.ts @@ -0,0 +1,24 @@ +"use client"; + +import { useParams, usePathname } from "next/navigation"; + +/** + * Custom hook to detect different workspace paths + * @returns Object containing boolean flags for different workspace paths + */ +export const useWorkspacePaths = () => { + const { workspaceSlug } = useParams(); + const pathname = usePathname(); + + const isSettingsPath = pathname.includes(`/${workspaceSlug}/settings`); + const isWikiPath = pathname.includes(`/${workspaceSlug}/pages`); + const isAiPath = pathname.includes(`/${workspaceSlug}/pi-chat`); + const isProjectsPath = pathname.includes(`/${workspaceSlug}/`) && !isWikiPath && !isAiPath && !isSettingsPath; + + return { + isSettingsPath, + isWikiPath, + isAiPath, + isProjectsPath, + }; +}; diff --git a/apps/web/core/layouts/auth-layout/project-wrapper.tsx b/apps/web/core/layouts/auth-layout/project-wrapper.tsx index a11732b20d9..0bee5655c22 100644 --- a/apps/web/core/layouts/auth-layout/project-wrapper.tsx +++ b/apps/web/core/layouts/auth-layout/project-wrapper.tsx @@ -165,7 +165,7 @@ export const ProjectAuthWrapper: FC = observer((props) => { // check if the project member apis is loading if (isParentLoading || (!projectMemberInfo && projectId && hasPermissionToCurrentProject === null)) return ( -
    +
    @@ -183,7 +183,7 @@ export const ProjectAuthWrapper: FC = observer((props) => { // check if the project info is not found. if (loader === "loaded" && projectId && !!hasPermissionToCurrentProject === false) return ( -
    +
    = observer((props) // if list of workspaces are not there then we have to render the spinner if (isParentLoading || allWorkspaces === undefined || loader || isDBInitializing) { return ( -
    +
    @@ -147,7 +146,7 @@ export const WorkspaceAuthWrapper: FC = observer((props) // if workspaces are there and we are trying to access the workspace that we are not part of then show the existing workspaces if (currentWorkspace === undefined && !currentWorkspaceInfo) { return ( -
    +
    diff --git a/apps/web/core/store/theme.store.ts b/apps/web/core/store/theme.store.ts index b37fb0ef5f3..e788089e10e 100644 --- a/apps/web/core/store/theme.store.ts +++ b/apps/web/core/store/theme.store.ts @@ -2,9 +2,11 @@ import { action, observable, makeObservable, runInAction } from "mobx"; export interface IThemeStore { // observables + isAnySidebarDropdownOpen: boolean | undefined; sidebarCollapsed: boolean | undefined; - extendedSidebarCollapsed: boolean | undefined; - extendedProjectSidebarCollapsed: boolean | undefined; + sidebarPeek: boolean | undefined; + isExtendedSidebarOpened: boolean | undefined; + isExtendedProjectSidebarOpened: boolean | undefined; profileSidebarCollapsed: boolean | undefined; workspaceAnalyticsSidebarCollapsed: boolean | undefined; issueDetailSidebarCollapsed: boolean | undefined; @@ -12,7 +14,9 @@ export interface IThemeStore { initiativesSidebarCollapsed: boolean | undefined; projectOverviewSidebarCollapsed: boolean | undefined; // actions + toggleAnySidebarDropdown: (open?: boolean) => void; toggleSidebar: (collapsed?: boolean) => void; + toggleSidebarPeek: (peek?: boolean) => void; toggleExtendedSidebar: (collapsed?: boolean) => void; toggleExtendedProjectSidebar: (collapsed?: boolean) => void; toggleProfileSidebar: (collapsed?: boolean) => void; @@ -25,9 +29,11 @@ export interface IThemeStore { export class ThemeStore implements IThemeStore { // observables + isAnySidebarDropdownOpen: boolean | undefined = undefined; sidebarCollapsed: boolean | undefined = undefined; - extendedSidebarCollapsed: boolean | undefined = true; - extendedProjectSidebarCollapsed: boolean | undefined = undefined; + sidebarPeek: boolean | undefined = undefined; + isExtendedSidebarOpened: boolean | undefined = undefined; + isExtendedProjectSidebarOpened: boolean | undefined = undefined; profileSidebarCollapsed: boolean | undefined = undefined; workspaceAnalyticsSidebarCollapsed: boolean | undefined = undefined; issueDetailSidebarCollapsed: boolean | undefined = undefined; @@ -38,9 +44,11 @@ export class ThemeStore implements IThemeStore { constructor() { makeObservable(this, { // observable + isAnySidebarDropdownOpen: observable.ref, sidebarCollapsed: observable.ref, - extendedSidebarCollapsed: observable.ref, - extendedProjectSidebarCollapsed: observable.ref, + sidebarPeek: observable.ref, + isExtendedSidebarOpened: observable.ref, + isExtendedProjectSidebarOpened: observable.ref, profileSidebarCollapsed: observable.ref, workspaceAnalyticsSidebarCollapsed: observable.ref, issueDetailSidebarCollapsed: observable.ref, @@ -48,7 +56,9 @@ export class ThemeStore implements IThemeStore { initiativesSidebarCollapsed: observable.ref, projectOverviewSidebarCollapsed: observable.ref, // action + toggleAnySidebarDropdown: action, toggleSidebar: action, + toggleSidebarPeek: action, toggleExtendedSidebar: action, toggleExtendedProjectSidebar: action, toggleProfileSidebar: action, @@ -60,6 +70,14 @@ export class ThemeStore implements IThemeStore { }); } + toggleAnySidebarDropdown = (open?: boolean) => { + if (open === undefined) { + this.isAnySidebarDropdownOpen = !this.isAnySidebarDropdownOpen; + } else { + this.isAnySidebarDropdownOpen = open; + } + }; + /** * Toggle the sidebar collapsed state * @param collapsed @@ -73,14 +91,26 @@ export class ThemeStore implements IThemeStore { localStorage.setItem("app_sidebar_collapsed", this.sidebarCollapsed.toString()); }; + /** + * Toggle the sidebar peek state + * @param peek + */ + toggleSidebarPeek = (peek?: boolean) => { + if (peek === undefined) { + this.sidebarPeek = !this.sidebarPeek; + } else { + this.sidebarPeek = peek; + } + }; + /** * Toggle the extended sidebar collapsed state * @param collapsed */ toggleExtendedSidebar = (collapsed?: boolean) => { - const updatedState = collapsed ?? !this.extendedSidebarCollapsed; + const updatedState = collapsed ?? !this.isExtendedSidebarOpened; runInAction(() => { - this.extendedSidebarCollapsed = updatedState; + this.isExtendedSidebarOpened = updatedState; }); localStorage.setItem("extended_sidebar_collapsed", updatedState.toString()); }; @@ -91,11 +121,11 @@ export class ThemeStore implements IThemeStore { */ toggleExtendedProjectSidebar = (collapsed?: boolean) => { if (collapsed === undefined) { - this.extendedProjectSidebarCollapsed = !this.extendedProjectSidebarCollapsed; + this.isExtendedProjectSidebarOpened = !this.isExtendedProjectSidebarOpened; } else { - this.extendedProjectSidebarCollapsed = collapsed; + this.isExtendedProjectSidebarOpened = collapsed; } - localStorage.setItem("extended_project_sidebar_collapsed", this.extendedProjectSidebarCollapsed.toString()); + localStorage.setItem("extended_project_sidebar_collapsed", this.isExtendedProjectSidebarOpened.toString()); }; /** diff --git a/apps/web/ee/components/app-rail/index.ts b/apps/web/ee/components/app-rail/index.ts new file mode 100644 index 00000000000..68889686dcf --- /dev/null +++ b/apps/web/ee/components/app-rail/index.ts @@ -0,0 +1 @@ +export * from "ce/components/app-rail"; diff --git a/apps/web/ee/components/workspace/index.ts b/apps/web/ee/components/workspace/index.ts index b0b8ffd3ad0..4e148736d6a 100644 --- a/apps/web/ee/components/workspace/index.ts +++ b/apps/web/ee/components/workspace/index.ts @@ -3,3 +3,4 @@ export * from "./upgrade-badge"; export * from "./billing"; export * from "./delete-workspace-section"; export * from "./sidebar"; +export * from "ce/components/workspace/app-switcher"; diff --git a/apps/web/ee/components/workspace/upgrade-badge.tsx b/apps/web/ee/components/workspace/upgrade-badge.tsx index 1c7fcfb644c..d12716555fc 100644 --- a/apps/web/ee/components/workspace/upgrade-badge.tsx +++ b/apps/web/ee/components/workspace/upgrade-badge.tsx @@ -1 +1,2 @@ export * from "ce/components/workspace/upgrade-badge"; +export * from "ce/components/workspace/content-wrapper"; diff --git a/packages/constants/src/index.ts b/packages/constants/src/index.ts index d7ccebd319e..045538f3a03 100644 --- a/packages/constants/src/index.ts +++ b/packages/constants/src/index.ts @@ -35,3 +35,4 @@ export * from "./settings"; export * from "./icon"; export * from "./estimates"; export * from "./analytics"; +export * from "./sidebar"; diff --git a/packages/constants/src/sidebar.ts b/packages/constants/src/sidebar.ts new file mode 100644 index 00000000000..7468597549c --- /dev/null +++ b/packages/constants/src/sidebar.ts @@ -0,0 +1,2 @@ +export const SIDEBAR_WIDTH = 250; +export const EXTENDED_SIDEBAR_WIDTH = 300; diff --git a/packages/constants/src/workspace.ts b/packages/constants/src/workspace.ts index 03493253843..24bcd8fa893 100644 --- a/packages/constants/src/workspace.ts +++ b/packages/constants/src/workspace.ts @@ -317,6 +317,9 @@ export const WORKSPACE_SIDEBAR_STATIC_NAVIGATION_ITEMS: Record = ({ width = "16", height = "16", className, color = "currentColor" }) => ( + + + + + + + + + + + +); diff --git a/packages/ui/src/icons/index.ts b/packages/ui/src/icons/index.ts index 143c3d79a7c..500925e3c6c 100644 --- a/packages/ui/src/icons/index.ts +++ b/packages/ui/src/icons/index.ts @@ -52,3 +52,6 @@ export * from "./sticky-note-icon"; export * from "./bar-icon"; export * from "./tree-map-icon"; export * from "./display-properties"; +export * from "./ai-icon"; +export * from "./plane-icon"; +export * from "./wiki-icon"; diff --git a/packages/ui/src/icons/plane-icon.tsx b/packages/ui/src/icons/plane-icon.tsx new file mode 100644 index 00000000000..f56e8e03ee0 --- /dev/null +++ b/packages/ui/src/icons/plane-icon.tsx @@ -0,0 +1,35 @@ +import * as React from "react"; + +import { ISvgIcons } from "./type"; + +export const PlaneNewIcon: React.FC = ({ + width = "16", + height = "16", + className, + color = "currentColor", +}) => ( + + + + + + + + + + + +); diff --git a/packages/ui/src/icons/wiki-icon.tsx b/packages/ui/src/icons/wiki-icon.tsx new file mode 100644 index 00000000000..7ef090714c7 --- /dev/null +++ b/packages/ui/src/icons/wiki-icon.tsx @@ -0,0 +1,26 @@ +import * as React from "react"; + +import { ISvgIcons } from "./type"; + +export const WikiIcon: React.FC = ({ width = "16", height = "16", className, color = "currentColor" }) => ( + + + + + + + + + + +); From 6ce700fd5d6c827ad6d6e8dad688139ef0d0f051 Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Tue, 8 Jul 2025 20:41:11 +0530 Subject: [PATCH 047/130] chore: format files using prettier (#7364) * chore: format files using prettier * chore: api server files formatted --- apps/api/plane/api/views/issue.py | 1 + apps/api/plane/app/serializers/cycle.py | 2 +- apps/api/plane/app/serializers/issue.py | 1 - apps/api/plane/app/serializers/project.py | 4 +- apps/api/plane/app/serializers/user.py | 6 +- apps/api/plane/app/serializers/view.py | 1 - apps/api/plane/app/views/analytic/advance.py | 6 +- apps/api/plane/app/views/notification/base.py | 2 +- .../management/commands/create_dummy_data.py | 2 +- apps/api/plane/tests/conftest.py | 6 +- apps/api/plane/tests/conftest_external.py | 33 +- apps/api/plane/tests/contract/app/__init__.py | 1 - .../tests/contract/app/test_authentication.py | 84 +- .../tests/contract/app/test_workspace_app.py | 14 +- apps/api/plane/tests/factories.py | 39 +- apps/api/plane/tests/smoke/test_auth_smoke.py | 59 +- .../tests/unit/models/test_workspace_model.py | 14 +- .../tests/unit/serializers/test_workspace.py | 23 +- apps/api/plane/tests/unit/utils/test_uuid.py | 8 +- apps/api/plane/utils/global_paginator.py | 4 +- apps/api/plane/utils/paginator.py | 2 +- apps/api/run_tests.py | 36 +- apps/live/src/ce/lib/fetch-document.ts | 4 +- apps/live/src/ce/lib/update-document.ts | 4 +- apps/live/src/core/extensions/index.ts | 43 +- apps/live/src/core/helpers/error-handler.ts | 5 +- apps/live/src/core/helpers/page.ts | 41 +- apps/live/src/core/hocuspocus-server.ts | 8 +- apps/live/src/core/lib/page.ts | 56 +- apps/live/src/core/services/page.service.ts | 58 +- apps/live/src/ee/lib/fetch-document.ts | 2 +- apps/live/src/ee/types/common.d.ts | 2 +- .../issues/filters/applied-filters/root.tsx | 6 +- .../issue-layouts/kanban/kanban-group.tsx | 4 +- .../issues/issue-layouts/kanban/swimlanes.tsx | 7 +- .../[projectId]/archives/cycles/page.tsx | 2 +- .../archives/issues/(list)/page.tsx | 2 +- .../settings/(workspace)/sidebar.tsx | 8 +- apps/web/app/(all)/layout.preload.tsx | 2 +- apps/web/app/(all)/sign-up/layout.tsx | 2 +- apps/web/app/(home)/layout.tsx | 4 +- .../components/common/subscription/index.ts | 2 +- .../global/product-updates-header.tsx | 2 +- .../ce/components/global/version-number.tsx | 6 +- .../issues/bulk-operations/index.ts | 2 +- .../ce/components/issues/issue-modal/index.ts | 1 - apps/web/ce/components/relations/activity.ts | 8 +- apps/web/ce/helpers/workspace.helper.ts | 2 +- apps/web/ce/services/project/index.ts | 2 +- apps/web/ce/types/projects/projects.ts | 2 +- .../account/oauth/oauth-options.tsx | 3 +- .../components/analytics/select/project.tsx | 10 +- .../work-items/workitems-insight-table.tsx | 1 - .../core/components/api-token/modal/form.tsx | 2 +- .../components/api-token/token-list-item.tsx | 2 +- .../automation/auto-archive-automation.tsx | 2 +- apps/web/core/components/chart/utils.ts | 12 +- .../global/product-updates/footer.tsx | 54 +- .../issues/archived-issues-header.tsx | 13 +- .../issues/attachment/attachment-detail.tsx | 9 +- apps/web/core/components/issues/filters.tsx | 7 +- .../issue-detail-quick-actions.tsx | 9 +- .../issues/issue-layouts/gantt/index.ts | 1 - .../spreadsheet/base-spreadsheet-root.tsx | 8 +- .../components/issues/issue-modal/form.tsx | 9 +- .../core/components/issues/select/label.tsx | 7 +- .../issues/workspace-draft/empty-state.tsx | 2 +- .../gantt-chart/modules-list-layout.tsx | 5 +- .../components/profile/overview/activity.tsx | 4 +- .../profile/profile-issues-filter.tsx | 13 +- .../sidebar/notification-card/content.tsx | 8 +- apps/web/core/components/workspace/logo.tsx | 1 - .../sidebar/favorites/favorites.helpers.ts | 7 +- .../workspace/sidebar/favorites/index.ts | 2 +- .../components/workspace/views/header.tsx | 4 +- apps/web/core/lib/n-progress/index.tsx | 9 +- apps/web/core/lib/n-progress/utils/sameURL.ts | 11 +- apps/web/core/lib/posthog-view.tsx | 21 +- apps/web/core/lib/store-context.tsx | 4 +- .../worker/wa-sqlite/src/types/globals.d.ts | 2 +- .../worker/wa-sqlite/src/types/index.d.ts | 207 +++-- .../web/core/store/issue/draft/issue.store.ts | 9 +- .../store/issue/helpers/base-issues.store.ts | 2 +- .../core/store/issue/profile/issue.store.ts | 9 +- apps/web/core/store/issue/root.store.ts | 11 +- .../issue/workspace-draft/filter.store.ts | 3 +- apps/web/core/store/user/profile.store.ts | 3 +- apps/web/core/store/workspace/home.ts | 7 +- .../workspace-active-cycles-upgrade.tsx | 2 +- apps/web/ee/components/breadcrumbs/index.ts | 2 +- .../issues/bulk-operations/index.ts | 2 +- .../quick-action-dropdowns/index.ts | 2 +- apps/web/ee/components/sidebar/index.ts | 2 +- .../ee/components/workspace/billing/index.ts | 2 +- apps/web/public/animated-icons/uploading.json | 743 +++++++++++++++++- apps/web/styles/nprogress.css | 4 +- packages/constants/src/analytics/index.ts | 2 +- packages/constants/src/auth.ts | 3 +- packages/constants/src/chart.ts | 172 ++-- packages/constants/src/issue/layout.ts | 7 +- packages/constants/src/metadata.ts | 18 +- packages/constants/src/notification.ts | 3 +- packages/constants/src/tab-indices.ts | 25 +- packages/constants/src/themes.ts | 8 +- packages/constants/src/user.ts | 6 +- packages/decorators/src/index.ts | 1 - packages/decorators/src/rest.ts | 4 +- packages/decorators/tsconfig.json | 10 +- packages/decorators/tsup.config.ts | 10 +- packages/editor/src/ce/types/utils.ts | 2 +- .../components/editors/editor-container.tsx | 3 +- .../components/menus/bubble-menu/root.tsx | 14 +- packages/hooks/src/use-local-storage.tsx | 10 +- packages/logger/README.md | 23 +- .../propel/src/charts/components/legend.tsx | 22 +- .../propel/src/charts/components/tick.tsx | 38 +- .../propel/src/charts/radar-chart/index.ts | 2 +- .../propel/src/charts/scatter-chart/index.ts | 2 +- .../propel/src/charts/scatter-chart/root.tsx | 2 +- .../src/charts/tree-map/map-content.tsx | 4 +- packages/propel/src/table/index.ts | 2 +- .../services/src/file/file-upload.service.ts | 7 +- packages/services/tsconfig.json | 2 +- packages/types/src/activity.ts | 18 +- packages/types/src/analytics.ts | 1 - packages/types/src/charts/common.ts | 4 - packages/types/src/command-palette.ts | 5 +- packages/types/src/instance/auth.ts | 8 +- packages/types/src/instance/image.ts | 2 +- packages/types/src/issues/base.ts | 8 +- packages/types/src/issues/issue.ts | 2 +- packages/types/src/issues/issue_attachment.ts | 2 +- packages/types/src/module/modules.ts | 12 +- packages/types/src/pragmatic.ts | 7 +- packages/types/src/project/project_filters.ts | 4 +- packages/types/src/project/projects.ts | 2 +- packages/types/src/views.ts | 6 +- packages/types/src/workspace-views.ts | 6 +- packages/ui/.storybook/main.ts | 2 +- packages/ui/src/dropdown/Readme.md | 6 +- packages/ui/styles/globals.css | 28 +- packages/utils/src/array.ts | 1 - packages/utils/src/calendar.ts | 7 +- packages/utils/src/cycle.ts | 4 +- packages/utils/src/module.ts | 4 +- packages/utils/src/page.ts | 5 +- packages/utils/src/project-views.ts | 2 +- packages/utils/src/string.ts | 3 +- packages/utils/src/work-item/modal.ts | 1 - 149 files changed, 1519 insertions(+), 920 deletions(-) diff --git a/apps/api/plane/api/views/issue.py b/apps/api/plane/api/views/issue.py index 7ba8cb2537b..6a5016bec46 100644 --- a/apps/api/plane/api/views/issue.py +++ b/apps/api/plane/api/views/issue.py @@ -60,6 +60,7 @@ from plane.bgtasks.webhook_task import model_activity from plane.bgtasks.work_item_link_task import crawl_work_item_link_title + class WorkspaceIssueAPIEndpoint(BaseAPIView): """ This viewset provides `retrieveByIssueId` on workspace level diff --git a/apps/api/plane/app/serializers/cycle.py b/apps/api/plane/app/serializers/cycle.py index b3b69e37531..2aa2ac7b7c9 100644 --- a/apps/api/plane/app/serializers/cycle.py +++ b/apps/api/plane/app/serializers/cycle.py @@ -102,4 +102,4 @@ class CycleUserPropertiesSerializer(BaseSerializer): class Meta: model = CycleUserProperties fields = "__all__" - read_only_fields = ["workspace", "project", "cycle" "user"] + read_only_fields = ["workspace", "project", "cycle", "user"] diff --git a/apps/api/plane/app/serializers/issue.py b/apps/api/plane/app/serializers/issue.py index c2aca4f8129..965d78aa2b6 100644 --- a/apps/api/plane/app/serializers/issue.py +++ b/apps/api/plane/app/serializers/issue.py @@ -726,7 +726,6 @@ class Meta: class IssueListDetailSerializer(serializers.Serializer): - def __init__(self, *args, **kwargs): # Extract expand parameter and store it as instance variable self.expand = kwargs.pop("expand", []) or [] diff --git a/apps/api/plane/app/serializers/project.py b/apps/api/plane/app/serializers/project.py index 8d521e8e834..3640904431a 100644 --- a/apps/api/plane/app/serializers/project.py +++ b/apps/api/plane/app/serializers/project.py @@ -148,8 +148,8 @@ class Meta: fields = "__all__" -class ProjectMemberRoleSerializer(DynamicBaseSerializer): - original_role = serializers.IntegerField(source='role', read_only=True) +class ProjectMemberRoleSerializer(DynamicBaseSerializer): + original_role = serializers.IntegerField(source="role", read_only=True) class Meta: model = ProjectMember diff --git a/apps/api/plane/app/serializers/user.py b/apps/api/plane/app/serializers/user.py index c5a3d35df0c..7b545356884 100644 --- a/apps/api/plane/app/serializers/user.py +++ b/apps/api/plane/app/serializers/user.py @@ -110,7 +110,11 @@ def get_workspace(self, obj): workspace_member__member=obj.id, workspace_member__is_active=True, ).first() - logo_asset_url = workspace.logo_asset.asset_url if workspace.logo_asset is not None else "" + logo_asset_url = ( + workspace.logo_asset.asset_url + if workspace.logo_asset is not None + else "" + ) return { "last_workspace_id": profile.last_workspace_id, "last_workspace_slug": ( diff --git a/apps/api/plane/app/serializers/view.py b/apps/api/plane/app/serializers/view.py index 94ff68de39c..bf7ff9727c6 100644 --- a/apps/api/plane/app/serializers/view.py +++ b/apps/api/plane/app/serializers/view.py @@ -8,7 +8,6 @@ class ViewIssueListSerializer(serializers.Serializer): - def get_assignee_ids(self, instance): return [assignee.assignee_id for assignee in instance.issue_assignee.all()] diff --git a/apps/api/plane/app/views/analytic/advance.py b/apps/api/plane/app/views/analytic/advance.py index 8a2aea90b7c..c690fbe7dc2 100644 --- a/apps/api/plane/app/views/analytic/advance.py +++ b/apps/api/plane/app/views/analytic/advance.py @@ -160,7 +160,8 @@ def get_project_issues_stats(self) -> QuerySet: ) return ( - base_queryset.values("project_id", "project__name").annotate( + base_queryset.values("project_id", "project__name") + .annotate( cancelled_work_items=Count("id", filter=Q(state__group="cancelled")), completed_work_items=Count("id", filter=Q(state__group="completed")), backlog_work_items=Count("id", filter=Q(state__group="backlog")), @@ -173,8 +174,7 @@ def get_project_issues_stats(self) -> QuerySet: def get_work_items_stats(self) -> Dict[str, Dict[str, int]]: base_queryset = Issue.issue_objects.filter(**self.filters["base_filters"]) return ( - base_queryset - .values("project_id", "project__name") + base_queryset.values("project_id", "project__name") .annotate( cancelled_work_items=Count("id", filter=Q(state__group="cancelled")), completed_work_items=Count("id", filter=Q(state__group="completed")), diff --git a/apps/api/plane/app/views/notification/base.py b/apps/api/plane/app/views/notification/base.py index d2aa1a02d7b..e84cf4d2939 100644 --- a/apps/api/plane/app/views/notification/base.py +++ b/apps/api/plane/app/views/notification/base.py @@ -37,7 +37,7 @@ def get_queryset(self): workspace__slug=self.kwargs.get("slug"), receiver_id=self.request.user.id, ) - .select_related("workspace", "project," "triggered_by", "receiver") + .select_related("workspace", "project", "triggered_by", "receiver") ) @allow_permission( diff --git a/apps/api/plane/db/management/commands/create_dummy_data.py b/apps/api/plane/db/management/commands/create_dummy_data.py index 3eedc390ce4..0915cd9d81d 100644 --- a/apps/api/plane/db/management/commands/create_dummy_data.py +++ b/apps/api/plane/db/management/commands/create_dummy_data.py @@ -50,7 +50,7 @@ def handle(self, *args: Any, **options: Any) -> str | None: project_count = int(input("Number of projects to be created: ")) for i in range(project_count): - print(f"Please provide the following details for project {i+1}:") + print(f"Please provide the following details for project {i + 1}:") issue_count = int(input("Number of issues to be created: ")) cycle_count = int(input("Number of cycles to be created: ")) module_count = int(input("Number of modules to be created: ")) diff --git a/apps/api/plane/tests/conftest.py b/apps/api/plane/tests/conftest.py index a7d4394e295..b70c9352a30 100644 --- a/apps/api/plane/tests/conftest.py +++ b/apps/api/plane/tests/conftest.py @@ -134,7 +134,7 @@ def workspace(create_user): ) WorkspaceMember.objects.create( - workspace=created_workspace, member=create_user, role=20 - ) - + workspace=created_workspace, member=create_user, role=20 + ) + return created_workspace diff --git a/apps/api/plane/tests/conftest_external.py b/apps/api/plane/tests/conftest_external.py index d2d6a2df51e..50022b49063 100644 --- a/apps/api/plane/tests/conftest_external.py +++ b/apps/api/plane/tests/conftest_external.py @@ -21,7 +21,7 @@ def mock_redis(): mock_redis_client.ttl.return_value = -1 # Start the patch - with patch('plane.settings.redis.redis_instance', return_value=mock_redis_client): + with patch("plane.settings.redis.redis_instance", return_value=mock_redis_client): yield mock_redis_client @@ -44,7 +44,7 @@ def mock_elasticsearch(): mock_es_client.delete.return_value = {"_id": "test_id", "result": "deleted"} # Start the patch - with patch('elasticsearch.Elasticsearch', return_value=mock_es_client): + with patch("elasticsearch.Elasticsearch", return_value=mock_es_client): yield mock_es_client @@ -68,39 +68,30 @@ def mock_mongodb(): # Configure common MongoDB collection operations mock_mongo_collection.find_one.return_value = None mock_mongo_collection.find.return_value = MagicMock( - __iter__=lambda x: iter([]), - count=lambda: 0 + __iter__=lambda x: iter([]), count=lambda: 0 ) mock_mongo_collection.insert_one.return_value = MagicMock( - inserted_id="mock_id_123", - acknowledged=True + inserted_id="mock_id_123", acknowledged=True ) mock_mongo_collection.insert_many.return_value = MagicMock( - inserted_ids=["mock_id_123", "mock_id_456"], - acknowledged=True + inserted_ids=["mock_id_123", "mock_id_456"], acknowledged=True ) mock_mongo_collection.update_one.return_value = MagicMock( - modified_count=1, - matched_count=1, - acknowledged=True + modified_count=1, matched_count=1, acknowledged=True ) mock_mongo_collection.update_many.return_value = MagicMock( - modified_count=2, - matched_count=2, - acknowledged=True + modified_count=2, matched_count=2, acknowledged=True ) mock_mongo_collection.delete_one.return_value = MagicMock( - deleted_count=1, - acknowledged=True + deleted_count=1, acknowledged=True ) mock_mongo_collection.delete_many.return_value = MagicMock( - deleted_count=2, - acknowledged=True + deleted_count=2, acknowledged=True ) mock_mongo_collection.count_documents.return_value = 0 # Start the patch - with patch('pymongo.MongoClient', return_value=mock_mongo_client): + with patch("pymongo.MongoClient", return_value=mock_mongo_client): yield mock_mongo_client @@ -112,6 +103,6 @@ def mock_celery(): This fixture patches Celery's task.delay() to prevent actual task execution. """ # Start the patch - with patch('celery.app.task.Task.delay') as mock_delay: + with patch("celery.app.task.Task.delay") as mock_delay: mock_delay.return_value = MagicMock(id="mock-task-id") - yield mock_delay \ No newline at end of file + yield mock_delay diff --git a/apps/api/plane/tests/contract/app/__init__.py b/apps/api/plane/tests/contract/app/__init__.py index 0519ecba6ea..e69de29bb2d 100644 --- a/apps/api/plane/tests/contract/app/__init__.py +++ b/apps/api/plane/tests/contract/app/__init__.py @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/api/plane/tests/contract/app/test_authentication.py b/apps/api/plane/tests/contract/app/test_authentication.py index 0dc54871046..a52882b9d22 100644 --- a/apps/api/plane/tests/contract/app/test_authentication.py +++ b/apps/api/plane/tests/contract/app/test_authentication.py @@ -16,7 +16,9 @@ @pytest.fixture def setup_instance(db): """Create and configure an instance for authentication tests""" - instance_id = uuid.uuid4() if not Instance.objects.exists() else Instance.objects.first().id + instance_id = ( + uuid.uuid4() if not Instance.objects.exists() else Instance.objects.first().id + ) # Create or update instance with all required fields instance, _ = Instance.objects.update_or_create( @@ -28,7 +30,7 @@ def setup_instance(db): "domain": "http://localhost:8000", "last_checked_at": timezone.now(), "is_setup_done": True, - } + }, ) return instance @@ -36,7 +38,9 @@ def setup_instance(db): @pytest.fixture def django_client(): """Return a Django test client with User-Agent header for handling redirects""" - client = Client(HTTP_USER_AGENT="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1") + client = Client( + HTTP_USER_AGENT="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1" + ) return client @@ -79,7 +83,9 @@ def test_email_validity(self, api_client, setup_user, setup_instance): @pytest.mark.django_db @patch("plane.bgtasks.magic_link_code_task.magic_link.delay") - def test_magic_generate(self, mock_magic_link, api_client, setup_user, setup_instance): + def test_magic_generate( + self, mock_magic_link, api_client, setup_user, setup_instance + ): """Test successful magic link generation""" url = reverse("magic-generate") @@ -97,7 +103,9 @@ def test_magic_generate(self, mock_magic_link, api_client, setup_user, setup_ins @pytest.mark.django_db @patch("plane.bgtasks.magic_link_code_task.magic_link.delay") - def test_max_generate_attempt(self, mock_magic_link, api_client, setup_user, setup_instance): + def test_max_generate_attempt( + self, mock_magic_link, api_client, setup_user, setup_instance + ): """Test exceeding maximum magic link generation attempts""" url = reverse("magic-generate") @@ -163,10 +171,9 @@ def test_password_validity(self, django_client, setup_user, setup_instance): url, {"email": "user@plane.so", "password": "user123"}, follow=True ) - # Check for the specific authentication error in the URL redirect_urls = [url for url, _ in response.redirect_chain] - redirect_contents = ' '.join(redirect_urls) + redirect_contents = " ".join(redirect_urls) # The actual error code for invalid password is AUTHENTICATION_FAILED_SIGN_IN assert "AUTHENTICATION_FAILED_SIGN_IN" in redirect_contents @@ -201,14 +208,13 @@ def test_next_path_redirection(self, django_client, setup_user, setup_instance): response = django_client.post( url, {"email": "user@plane.so", "password": "user@123", "next_path": next_path}, - follow=False + follow=False, ) # Check that the initial response is a redirect (302) without error code assert response.status_code == 302 assert "error_code" not in response.url - # In a real browser, the next_path would be used to build the absolute URL # Since we're just testing the authentication logic, we won't check for the exact URL structure # Instead, just verify that we're authenticated @@ -237,16 +243,16 @@ def test_without_data(self, django_client, setup_user, setup_instance): assert "MAGIC_SIGN_IN_EMAIL_CODE_REQUIRED" in response.redirect_chain[-1][0] @pytest.mark.django_db - def test_expired_invalid_magic_link(self, django_client, setup_user, setup_instance): + def test_expired_invalid_magic_link( + self, django_client, setup_user, setup_instance + ): """Test magic link sign-in with expired/invalid link""" ri = redis_instance() ri.delete("magic_user@plane.so") url = reverse("magic-sign-in") response = django_client.post( - url, - {"email": "user@plane.so", "code": "xxxx-xxxxx-xxxx"}, - follow=False + url, {"email": "user@plane.so", "code": "xxxx-xxxxx-xxxx"}, follow=False ) # Check that we get a redirect @@ -254,7 +260,10 @@ def test_expired_invalid_magic_link(self, django_client, setup_user, setup_insta # The actual error code is EXPIRED_MAGIC_CODE_SIGN_IN (when key doesn't exist) # or INVALID_MAGIC_CODE_SIGN_IN (when key exists but code doesn't match) - assert "EXPIRED_MAGIC_CODE_SIGN_IN" in response.url or "INVALID_MAGIC_CODE_SIGN_IN" in response.url + assert ( + "EXPIRED_MAGIC_CODE_SIGN_IN" in response.url + or "INVALID_MAGIC_CODE_SIGN_IN" in response.url + ) @pytest.mark.django_db def test_user_does_not_exist(self, django_client, setup_instance): @@ -263,7 +272,7 @@ def test_user_does_not_exist(self, django_client, setup_instance): response = django_client.post( url, {"email": "nonexistent@plane.so", "code": "xxxx-xxxxx-xxxx"}, - follow=True + follow=True, ) # Check redirect contains error code @@ -271,7 +280,9 @@ def test_user_does_not_exist(self, django_client, setup_instance): @pytest.mark.django_db @patch("plane.bgtasks.magic_link_code_task.magic_link.delay") - def test_magic_code_sign_in(self, mock_magic_link, django_client, api_client, setup_user, setup_instance): + def test_magic_code_sign_in( + self, mock_magic_link, django_client, api_client, setup_user, setup_instance + ): """Test successful magic link sign-in process""" # First generate a magic link token gen_url = reverse("magic-generate") @@ -288,9 +299,7 @@ def test_magic_code_sign_in(self, mock_magic_link, django_client, api_client, se # Use Django client to test the redirect flow without following redirects url = reverse("magic-sign-in") response = django_client.post( - url, - {"email": "user@plane.so", "code": token}, - follow=False + url, {"email": "user@plane.so", "code": token}, follow=False ) # Check that the initial response is a redirect without error code @@ -302,7 +311,9 @@ def test_magic_code_sign_in(self, mock_magic_link, django_client, api_client, se @pytest.mark.django_db @patch("plane.bgtasks.magic_link_code_task.magic_link.delay") - def test_magic_sign_in_with_next_path(self, mock_magic_link, django_client, api_client, setup_user, setup_instance): + def test_magic_sign_in_with_next_path( + self, mock_magic_link, django_client, api_client, setup_user, setup_instance + ): """Test magic sign-in with next_path parameter""" # First generate a magic link token gen_url = reverse("magic-generate") @@ -322,7 +333,7 @@ def test_magic_sign_in_with_next_path(self, mock_magic_link, django_client, api_ response = django_client.post( url, {"email": "user@plane.so", "code": token, "next_path": next_path}, - follow=False + follow=False, ) # Check that the initial response is a redirect without error code @@ -357,9 +368,7 @@ def test_user_already_exists(self, django_client, db, setup_instance): url = reverse("magic-sign-up") response = django_client.post( - url, - {"email": "existing@plane.so", "code": "xxxx-xxxxx-xxxx"}, - follow=True + url, {"email": "existing@plane.so", "code": "xxxx-xxxxx-xxxx"}, follow=True ) # Check redirect contains error code @@ -370,9 +379,7 @@ def test_expired_invalid_magic_link(self, django_client, setup_instance): """Test magic link sign-up with expired/invalid link""" url = reverse("magic-sign-up") response = django_client.post( - url, - {"email": "new@plane.so", "code": "xxxx-xxxxx-xxxx"}, - follow=False + url, {"email": "new@plane.so", "code": "xxxx-xxxxx-xxxx"}, follow=False ) # Check that we get a redirect @@ -380,11 +387,16 @@ def test_expired_invalid_magic_link(self, django_client, setup_instance): # The actual error code is EXPIRED_MAGIC_CODE_SIGN_UP (when key doesn't exist) # or INVALID_MAGIC_CODE_SIGN_UP (when key exists but code doesn't match) - assert "EXPIRED_MAGIC_CODE_SIGN_UP" in response.url or "INVALID_MAGIC_CODE_SIGN_UP" in response.url + assert ( + "EXPIRED_MAGIC_CODE_SIGN_UP" in response.url + or "INVALID_MAGIC_CODE_SIGN_UP" in response.url + ) @pytest.mark.django_db @patch("plane.bgtasks.magic_link_code_task.magic_link.delay") - def test_magic_code_sign_up(self, mock_magic_link, django_client, api_client, setup_instance): + def test_magic_code_sign_up( + self, mock_magic_link, django_client, api_client, setup_instance + ): """Test successful magic link sign-up process""" email = "newuser@plane.so" @@ -403,9 +415,7 @@ def test_magic_code_sign_up(self, mock_magic_link, django_client, api_client, se # Use Django client to test the redirect flow without following redirects url = reverse("magic-sign-up") response = django_client.post( - url, - {"email": email, "code": token}, - follow=False + url, {"email": email, "code": token}, follow=False ) # Check that the initial response is a redirect without error code @@ -420,7 +430,9 @@ def test_magic_code_sign_up(self, mock_magic_link, django_client, api_client, se @pytest.mark.django_db @patch("plane.bgtasks.magic_link_code_task.magic_link.delay") - def test_magic_sign_up_with_next_path(self, mock_magic_link, django_client, api_client, setup_instance): + def test_magic_sign_up_with_next_path( + self, mock_magic_link, django_client, api_client, setup_instance + ): """Test magic sign-up with next_path parameter""" email = "newuser2@plane.so" @@ -440,9 +452,7 @@ def test_magic_sign_up_with_next_path(self, mock_magic_link, django_client, api_ url = reverse("magic-sign-up") next_path = "onboarding" response = django_client.post( - url, - {"email": email, "code": token, "next_path": next_path}, - follow=False + url, {"email": email, "code": token, "next_path": next_path}, follow=False ) # Check that the initial response is a redirect without error code @@ -456,4 +466,4 @@ def test_magic_sign_up_with_next_path(self, mock_magic_link, django_client, api_ assert User.objects.filter(email=email).exists() # Check if user is authenticated - assert "_auth_user_id" in django_client.session \ No newline at end of file + assert "_auth_user_id" in django_client.session diff --git a/apps/api/plane/tests/contract/app/test_workspace_app.py b/apps/api/plane/tests/contract/app/test_workspace_app.py index 71ad1d41243..9d4c560e514 100644 --- a/apps/api/plane/tests/contract/app/test_workspace_app.py +++ b/apps/api/plane/tests/contract/app/test_workspace_app.py @@ -21,7 +21,9 @@ def test_create_workspace_empty_data(self, session_client): @pytest.mark.django_db @patch("plane.bgtasks.workspace_seed_task.workspace_seed.delay") - def test_create_workspace_valid_data(self, mock_workspace_seed, session_client, create_user): + def test_create_workspace_valid_data( + self, mock_workspace_seed, session_client, create_user + ): """Test creating a workspace with valid data""" url = reverse("workspace") user = create_user # Use the create_user fixture directly as it returns a user object @@ -30,7 +32,7 @@ def test_create_workspace_valid_data(self, mock_workspace_seed, session_client, workspace_data = { "name": "Plane", "slug": "pla-ne-test", - "company_name": "Plane Inc." + "company_name": "Plane Inc.", } # Make the request @@ -57,15 +59,13 @@ def test_create_workspace_valid_data(self, mock_workspace_seed, session_client, mock_workspace_seed.assert_called_once_with(response.data["id"]) @pytest.mark.django_db - @patch('plane.bgtasks.workspace_seed_task.workspace_seed.delay') + @patch("plane.bgtasks.workspace_seed_task.workspace_seed.delay") def test_create_duplicate_workspace(self, mock_workspace_seed, session_client): """Test creating a duplicate workspace""" url = reverse("workspace") # Create first workspace - session_client.post( - url, {"name": "Plane", "slug": "pla-ne"}, format="json" - ) + session_client.post(url, {"name": "Plane", "slug": "pla-ne"}, format="json") # Try to create a workspace with the same slug response = session_client.post( @@ -76,4 +76,4 @@ def test_create_duplicate_workspace(self, mock_workspace_seed, session_client): assert response.status_code == status.HTTP_400_BAD_REQUEST # Optionally check the error message to confirm it's related to the duplicate slug - assert "slug" in response.data \ No newline at end of file + assert "slug" in response.data diff --git a/apps/api/plane/tests/factories.py b/apps/api/plane/tests/factories.py index 8d95773ded1..b8cd78361ab 100644 --- a/apps/api/plane/tests/factories.py +++ b/apps/api/plane/tests/factories.py @@ -2,26 +2,21 @@ from uuid import uuid4 from django.utils import timezone -from plane.db.models import ( - User, - Workspace, - WorkspaceMember, - Project, - ProjectMember -) +from plane.db.models import User, Workspace, WorkspaceMember, Project, ProjectMember class UserFactory(factory.django.DjangoModelFactory): """Factory for creating User instances""" + class Meta: model = User - django_get_or_create = ('email',) + django_get_or_create = ("email",) id = factory.LazyFunction(uuid4) - email = factory.Sequence(lambda n: f'user{n}@plane.so') - password = factory.PostGenerationMethodCall('set_password', 'password') - first_name = factory.Sequence(lambda n: f'First{n}') - last_name = factory.Sequence(lambda n: f'Last{n}') + email = factory.Sequence(lambda n: f"user{n}@plane.so") + password = factory.PostGenerationMethodCall("set_password", "password") + first_name = factory.Sequence(lambda n: f"First{n}") + last_name = factory.Sequence(lambda n: f"Last{n}") is_active = True is_superuser = False is_staff = False @@ -29,13 +24,14 @@ class Meta: class WorkspaceFactory(factory.django.DjangoModelFactory): """Factory for creating Workspace instances""" + class Meta: model = Workspace - django_get_or_create = ('slug',) + django_get_or_create = ("slug",) id = factory.LazyFunction(uuid4) - name = factory.Sequence(lambda n: f'Workspace {n}') - slug = factory.Sequence(lambda n: f'workspace-{n}') + name = factory.Sequence(lambda n: f"Workspace {n}") + slug = factory.Sequence(lambda n: f"workspace-{n}") owner = factory.SubFactory(UserFactory) created_at = factory.LazyFunction(timezone.now) updated_at = factory.LazyFunction(timezone.now) @@ -43,6 +39,7 @@ class Meta: class WorkspaceMemberFactory(factory.django.DjangoModelFactory): """Factory for creating WorkspaceMember instances""" + class Meta: model = WorkspaceMember @@ -56,21 +53,23 @@ class Meta: class ProjectFactory(factory.django.DjangoModelFactory): """Factory for creating Project instances""" + class Meta: model = Project - django_get_or_create = ('name', 'workspace') + django_get_or_create = ("name", "workspace") id = factory.LazyFunction(uuid4) - name = factory.Sequence(lambda n: f'Project {n}') + name = factory.Sequence(lambda n: f"Project {n}") workspace = factory.SubFactory(WorkspaceFactory) - created_by = factory.SelfAttribute('workspace.owner') - updated_by = factory.SelfAttribute('workspace.owner') + created_by = factory.SelfAttribute("workspace.owner") + updated_by = factory.SelfAttribute("workspace.owner") created_at = factory.LazyFunction(timezone.now) updated_at = factory.LazyFunction(timezone.now) class ProjectMemberFactory(factory.django.DjangoModelFactory): """Factory for creating ProjectMember instances""" + class Meta: model = ProjectMember @@ -79,4 +78,4 @@ class Meta: member = factory.SubFactory(UserFactory) role = 20 # Admin role by default created_at = factory.LazyFunction(timezone.now) - updated_at = factory.LazyFunction(timezone.now) \ No newline at end of file + updated_at = factory.LazyFunction(timezone.now) diff --git a/apps/api/plane/tests/smoke/test_auth_smoke.py b/apps/api/plane/tests/smoke/test_auth_smoke.py index 4d6de6c35c1..85ca476b4d3 100644 --- a/apps/api/plane/tests/smoke/test_auth_smoke.py +++ b/apps/api/plane/tests/smoke/test_auth_smoke.py @@ -16,72 +16,79 @@ def test_login_endpoint_available(self, plane_server, create_user, user_data): # 1. Test bad login - test with wrong password response = requests.post( - url, - data={ - "email": user_data["email"], - "password": "wrong-password" - } + url, data={"email": user_data["email"], "password": "wrong-password"} ) # For bad credentials, any of these status codes would be valid # The test shouldn't be brittle to minor implementation changes - assert response.status_code != 500, "Authentication should not cause server errors" + assert response.status_code != 500, ( + "Authentication should not cause server errors" + ) assert response.status_code != 404, "Authentication endpoint should exist" if response.status_code == 200: # If API returns 200 for failures, check the response body for error indication - if hasattr(response, 'json'): + if hasattr(response, "json"): try: data = response.json() # JSON response might indicate error in its structure - assert "error" in data or "error_code" in data or "detail" in data or response.url.endswith("sign-in"), \ - "Error response should contain error details" + assert ( + "error" in data + or "error_code" in data + or "detail" in data + or response.url.endswith("sign-in") + ), "Error response should contain error details" except ValueError: # It's ok if response isn't JSON format pass elif response.status_code in [302, 303]: # If it's a redirect, it should redirect to a login page or error page - redirect_url = response.headers.get('Location', '') - assert "error" in redirect_url or "sign-in" in redirect_url, \ + redirect_url = response.headers.get("Location", "") + assert "error" in redirect_url or "sign-in" in redirect_url, ( "Failed login should redirect to login page or error page" + ) # 2. Test good login with correct credentials response = requests.post( url, - data={ - "email": user_data["email"], - "password": user_data["password"] - }, - allow_redirects=False # Don't follow redirects + data={"email": user_data["email"], "password": user_data["password"]}, + allow_redirects=False, # Don't follow redirects ) # Successful auth should not be a client error or server error - assert response.status_code not in range(400, 600), \ + assert response.status_code not in range(400, 600), ( f"Authentication with valid credentials failed with status {response.status_code}" + ) # Specific validation based on response type if response.status_code in [302, 303]: # Redirect-based auth: check that redirect URL doesn't contain error - redirect_url = response.headers.get('Location', '') - assert "error" not in redirect_url and "error_code" not in redirect_url, \ + redirect_url = response.headers.get("Location", "") + assert "error" not in redirect_url and "error_code" not in redirect_url, ( "Successful login redirect should not contain error parameters" + ) elif response.status_code == 200: # API token-based auth: check for tokens or user session - if hasattr(response, 'json'): + if hasattr(response, "json"): try: data = response.json() # If it's a token response if "access_token" in data: - assert "refresh_token" in data, "JWT auth should return both access and refresh tokens" + assert "refresh_token" in data, ( + "JWT auth should return both access and refresh tokens" + ) # If it's a user session response elif "user" in data: - assert "is_authenticated" in data and data["is_authenticated"], \ - "User session response should indicate authentication" + assert ( + "is_authenticated" in data and data["is_authenticated"] + ), "User session response should indicate authentication" # Otherwise it should at least indicate success else: - assert not any(error_key in data for error_key in ["error", "error_code", "detail"]), \ - "Success response should not contain error keys" + assert not any( + error_key in data + for error_key in ["error", "error_code", "detail"] + ), "Success response should not contain error keys" except ValueError: # Non-JSON is acceptable if it's a redirect or HTML response pass @@ -97,4 +104,4 @@ def test_healthcheck_endpoint(self, plane_server): response = requests.get(f"{plane_server.url}/") # Should be OK - assert response.status_code == 200, "Health check endpoint should return 200 OK" \ No newline at end of file + assert response.status_code == 200, "Health check endpoint should return 200 OK" diff --git a/apps/api/plane/tests/unit/models/test_workspace_model.py b/apps/api/plane/tests/unit/models/test_workspace_model.py index 40380fa0f47..aa3c1564541 100644 --- a/apps/api/plane/tests/unit/models/test_workspace_model.py +++ b/apps/api/plane/tests/unit/models/test_workspace_model.py @@ -13,10 +13,7 @@ def test_workspace_creation(self, create_user): """Test creating a workspace""" # Create a workspace workspace = Workspace.objects.create( - name="Test Workspace", - slug="test-workspace", - id=uuid4(), - owner=create_user + name="Test Workspace", slug="test-workspace", id=uuid4(), owner=create_user ) # Verify it was created @@ -30,21 +27,18 @@ def test_workspace_member_creation(self, create_user): """Test creating a workspace member""" # Create a workspace workspace = Workspace.objects.create( - name="Test Workspace", - slug="test-workspace", - id=uuid4(), - owner=create_user + name="Test Workspace", slug="test-workspace", id=uuid4(), owner=create_user ) # Create a workspace member workspace_member = WorkspaceMember.objects.create( workspace=workspace, member=create_user, - role=20 # Admin role + role=20, # Admin role ) # Verify it was created assert workspace_member.id is not None assert workspace_member.workspace == workspace assert workspace_member.member == create_user - assert workspace_member.role == 20 \ No newline at end of file + assert workspace_member.role == 20 diff --git a/apps/api/plane/tests/unit/serializers/test_workspace.py b/apps/api/plane/tests/unit/serializers/test_workspace.py index 19767a7c61f..28e6c8d755b 100644 --- a/apps/api/plane/tests/unit/serializers/test_workspace.py +++ b/apps/api/plane/tests/unit/serializers/test_workspace.py @@ -13,18 +13,13 @@ def test_workspace_lite_serializer_fields(self, db): """Test that the serializer includes the correct fields""" # Create a user to be the owner owner = User.objects.create( - email="test@example.com", - first_name="Test", - last_name="User" + email="test@example.com", first_name="Test", last_name="User" ) # Create a workspace with explicit ID to test serialization workspace_id = uuid4() workspace = Workspace.objects.create( - name="Test Workspace", - slug="test-workspace", - id=workspace_id, - owner=owner + name="Test Workspace", slug="test-workspace", id=workspace_id, owner=owner ) # Serialize the workspace @@ -43,23 +38,17 @@ def test_workspace_lite_serializer_read_only(self, db): """Test that the serializer fields are read-only""" # Create a user to be the owner owner = User.objects.create( - email="test2@example.com", - first_name="Test", - last_name="User" + email="test2@example.com", first_name="Test", last_name="User" ) # Create a workspace workspace = Workspace.objects.create( - name="Test Workspace", - slug="test-workspace", - id=uuid4(), - owner=owner + name="Test Workspace", slug="test-workspace", id=uuid4(), owner=owner ) # Try to update via serializer serializer = WorkspaceLiteSerializer( - workspace, - data={"name": "Updated Name", "slug": "updated-slug"} + workspace, data={"name": "Updated Name", "slug": "updated-slug"} ) # Serializer should be valid (since read-only fields are ignored) @@ -68,4 +57,4 @@ def test_workspace_lite_serializer_read_only(self, db): # Save should not update the read-only fields updated_workspace = serializer.save() assert updated_workspace.name == "Test Workspace" - assert updated_workspace.slug == "test-workspace" \ No newline at end of file + assert updated_workspace.slug == "test-workspace" diff --git a/apps/api/plane/tests/unit/utils/test_uuid.py b/apps/api/plane/tests/unit/utils/test_uuid.py index 81403c5bef2..5503f2bc37b 100644 --- a/apps/api/plane/tests/unit/utils/test_uuid.py +++ b/apps/api/plane/tests/unit/utils/test_uuid.py @@ -19,7 +19,9 @@ def test_is_valid_uuid_with_invalid_uuid(self): assert is_valid_uuid("not-a-uuid") is False assert is_valid_uuid("123456789") is False assert is_valid_uuid("") is False - assert is_valid_uuid("00000000-0000-0000-0000-000000000000") is False # This is a valid UUID but version 1 + assert ( + is_valid_uuid("00000000-0000-0000-0000-000000000000") is False + ) # This is a valid UUID but version 1 def test_convert_uuid_to_integer(self): """Test convert_uuid_to_integer function""" @@ -46,4 +48,6 @@ def test_convert_uuid_to_integer_string_input(self): test_uuid = uuid.UUID(test_uuid_str) # Should get the same result whether passing UUID or string - assert convert_uuid_to_integer(test_uuid) == convert_uuid_to_integer(test_uuid_str) \ No newline at end of file + assert convert_uuid_to_integer(test_uuid) == convert_uuid_to_integer( + test_uuid_str + ) diff --git a/apps/api/plane/utils/global_paginator.py b/apps/api/plane/utils/global_paginator.py index 338d86117f5..1b7f908c547 100644 --- a/apps/api/plane/utils/global_paginator.py +++ b/apps/api/plane/utils/global_paginator.py @@ -50,11 +50,11 @@ def paginate(base_queryset, queryset, cursor, on_result): paginated_data = queryset[start_index:end_index] # Create the pagination info object - prev_cursor = f"{page_size}:{cursor_object.current_page-1}:0" + prev_cursor = f"{page_size}:{cursor_object.current_page - 1}:0" cursor = f"{page_size}:{cursor_object.current_page}:0" next_cursor = None if end_index < total_results: - next_cursor = f"{page_size}:{cursor_object.current_page+1}:0" + next_cursor = f"{page_size}:{cursor_object.current_page + 1}:0" prev_page_results = False if cursor_object.current_page > 0: diff --git a/apps/api/plane/utils/paginator.py b/apps/api/plane/utils/paginator.py index 0793d2a30e8..ce9c65f644e 100644 --- a/apps/api/plane/utils/paginator.py +++ b/apps/api/plane/utils/paginator.py @@ -35,7 +35,7 @@ def __eq__(self, other): # Return the representation of the cursor def __repr__(self): - return f"{type(self).__name__,}: value={self.value} offset={self.offset}, is_prev={int(self.is_prev)}" + return f"{(type(self).__name__,)}: value={self.value} offset={self.offset}, is_prev={int(self.is_prev)}" # noqa: E501 # Return if the cursor is true def __bool__(self): diff --git a/apps/api/run_tests.py b/apps/api/run_tests.py index f4f0951b199..6f42229c9c0 100755 --- a/apps/api/run_tests.py +++ b/apps/api/run_tests.py @@ -6,36 +6,20 @@ def main(): parser = argparse.ArgumentParser(description="Run Plane tests") + parser.add_argument("-u", "--unit", action="store_true", help="Run unit tests only") parser.add_argument( - "-u", "--unit", - action="store_true", - help="Run unit tests only" + "-c", "--contract", action="store_true", help="Run contract tests only" ) parser.add_argument( - "-c", "--contract", - action="store_true", - help="Run contract tests only" + "-s", "--smoke", action="store_true", help="Run smoke tests only" ) parser.add_argument( - "-s", "--smoke", - action="store_true", - help="Run smoke tests only" + "-o", "--coverage", action="store_true", help="Generate coverage report" ) parser.add_argument( - "-o", "--coverage", - action="store_true", - help="Generate coverage report" - ) - parser.add_argument( - "-p", "--parallel", - action="store_true", - help="Run tests in parallel" - ) - parser.add_argument( - "-v", "--verbose", - action="store_true", - help="Verbose output" + "-p", "--parallel", action="store_true", help="Run tests in parallel" ) + parser.add_argument("-v", "--verbose", action="store_true", help="Verbose output") args = parser.parse_args() # Build command @@ -71,10 +55,10 @@ def main(): # Print command print(f"Running: {' '.join(cmd)}") - + # Execute command result = subprocess.run(cmd) - + # Check coverage thresholds if coverage is enabled if args.coverage: print("Checking coverage thresholds...") @@ -83,9 +67,9 @@ def main(): if coverage_result.returncode != 0: print("Coverage below threshold (90%)") sys.exit(coverage_result.returncode) - + sys.exit(result.returncode) if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/apps/live/src/ce/lib/fetch-document.ts b/apps/live/src/ce/lib/fetch-document.ts index 5a27c2179a6..f7b4d8ea676 100644 --- a/apps/live/src/ce/lib/fetch-document.ts +++ b/apps/live/src/ce/lib/fetch-document.ts @@ -6,9 +6,9 @@ type TArgs = { documentType: TDocumentTypes | undefined; pageId: string; params: URLSearchParams; -} +}; export const fetchDocument = async (args: TArgs): Promise => { const { documentType } = args; throw Error(`Fetch failed: Invalid document type ${documentType} provided.`); -} \ No newline at end of file +}; diff --git a/apps/live/src/ce/lib/update-document.ts b/apps/live/src/ce/lib/update-document.ts index b998e154f57..cbef54e7466 100644 --- a/apps/live/src/ce/lib/update-document.ts +++ b/apps/live/src/ce/lib/update-document.ts @@ -7,9 +7,9 @@ type TArgs = { pageId: string; params: URLSearchParams; updatedDescription: Uint8Array; -} +}; export const updateDocument = async (args: TArgs): Promise => { const { documentType } = args; throw Error(`Update failed: Invalid document type ${documentType} provided.`); -} \ No newline at end of file +}; diff --git a/apps/live/src/core/extensions/index.ts b/apps/live/src/core/extensions/index.ts index 4867cad3d7b..7364169a461 100644 --- a/apps/live/src/core/extensions/index.ts +++ b/apps/live/src/core/extensions/index.ts @@ -9,18 +9,12 @@ import { Redis as HocusPocusRedis } from "@hocuspocus/extension-redis"; import { manualLogger } from "@/core/helpers/logger.js"; import { getRedisUrl } from "@/core/lib/utils/redis-url.js"; // core libraries -import { - fetchPageDescriptionBinary, - updatePageDescription, -} from "@/core/lib/page.js"; +import { fetchPageDescriptionBinary, updatePageDescription } from "@/core/lib/page.js"; // plane live libraries import { fetchDocument } from "@/plane-live/lib/fetch-document.js"; import { updateDocument } from "@/plane-live/lib/update-document.js"; // types -import { - type HocusPocusServerContext, - type TDocumentTypes, -} from "@/core/types/common.js"; +import { type HocusPocusServerContext, type TDocumentTypes } from "@/core/types/common.js"; export const getExtensions: () => Promise = async () => { const extensions: Extension[] = [ @@ -35,20 +29,14 @@ export const getExtensions: () => Promise = async () => { const cookie = (context as HocusPocusServerContext).cookie; // query params const params = requestParameters; - const documentType = params.get("documentType")?.toString() as - | TDocumentTypes - | undefined; + const documentType = params.get("documentType")?.toString() as TDocumentTypes | undefined; // TODO: Fix this lint error. // eslint-disable-next-line no-async-promise-executor return new Promise(async (resolve) => { try { let fetchedData = null; if (documentType === "project_page") { - fetchedData = await fetchPageDescriptionBinary( - params, - pageId, - cookie, - ); + fetchedData = await fetchPageDescriptionBinary(params, pageId, cookie); } else { fetchedData = await fetchDocument({ cookie, @@ -63,18 +51,11 @@ export const getExtensions: () => Promise = async () => { } }); }, - store: async ({ - context, - state, - documentName: pageId, - requestParameters, - }) => { + store: async ({ context, state, documentName: pageId, requestParameters }) => { const cookie = (context as HocusPocusServerContext).cookie; // query params const params = requestParameters; - const documentType = params.get("documentType")?.toString() as - | TDocumentTypes - | undefined; + const documentType = params.get("documentType")?.toString() as TDocumentTypes | undefined; // TODO: Fix this lint error. // eslint-disable-next-line no-async-promise-executor @@ -107,16 +88,12 @@ export const getExtensions: () => Promise = async () => { await new Promise((resolve, reject) => { redisClient.on("error", (error: any) => { - if ( - error?.code === "ENOTFOUND" || - error.message.includes("WRONGPASS") || - error.message.includes("NOAUTH") - ) { + if (error?.code === "ENOTFOUND" || error.message.includes("WRONGPASS") || error.message.includes("NOAUTH")) { redisClient.disconnect(); } manualLogger.warn( `Redis Client wasn't able to connect, continuing without Redis (you won't be able to sync data between multiple plane live servers)`, - error, + error ); reject(error); }); @@ -130,12 +107,12 @@ export const getExtensions: () => Promise = async () => { } catch (error) { manualLogger.warn( `Redis Client wasn't able to connect, continuing without Redis (you won't be able to sync data between multiple plane live servers)`, - error, + error ); } } else { manualLogger.warn( - "Redis URL is not set, continuing without Redis (you won't be able to sync data between multiple plane live servers)", + "Redis URL is not set, continuing without Redis (you won't be able to sync data between multiple plane live servers)" ); } diff --git a/apps/live/src/core/helpers/error-handler.ts b/apps/live/src/core/helpers/error-handler.ts index 6cc46b6dd7d..fac75f92f22 100644 --- a/apps/live/src/core/helpers/error-handler.ts +++ b/apps/live/src/core/helpers/error-handler.ts @@ -11,10 +11,7 @@ export const errorHandler: ErrorRequestHandler = (err, _req, res) => { // Send the response res.json({ error: { - message: - process.env.NODE_ENV === "production" - ? "An unexpected error occurred" - : err.message, + message: process.env.NODE_ENV === "production" ? "An unexpected error occurred" : err.message, ...(process.env.NODE_ENV !== "production" && { stack: err.stack }), }, }); diff --git a/apps/live/src/core/helpers/page.ts b/apps/live/src/core/helpers/page.ts index 4e79afe6b88..d4322d1ad89 100644 --- a/apps/live/src/core/helpers/page.ts +++ b/apps/live/src/core/helpers/page.ts @@ -1,17 +1,16 @@ import { getSchema } from "@tiptap/core"; import { generateHTML, generateJSON } from "@tiptap/html"; import { prosemirrorJSONToYDoc, yXmlFragmentToProseMirrorRootNode } from "y-prosemirror"; -import * as Y from "yjs" +import * as Y from "yjs"; // plane editor import { CoreEditorExtensionsWithoutProps, DocumentEditorExtensionsWithoutProps } from "@plane/editor/lib"; -const DOCUMENT_EDITOR_EXTENSIONS = [ - ...CoreEditorExtensionsWithoutProps, - ...DocumentEditorExtensionsWithoutProps, -]; +const DOCUMENT_EDITOR_EXTENSIONS = [...CoreEditorExtensionsWithoutProps, ...DocumentEditorExtensionsWithoutProps]; const documentEditorSchema = getSchema(DOCUMENT_EDITOR_EXTENSIONS); -export const getAllDocumentFormatsFromBinaryData = (description: Uint8Array): { +export const getAllDocumentFormatsFromBinaryData = ( + description: Uint8Array +): { contentBinaryEncoded: string; contentJSON: object; contentHTML: string; @@ -22,10 +21,7 @@ export const getAllDocumentFormatsFromBinaryData = (description: Uint8Array): { Y.applyUpdate(yDoc, description); // convert to JSON const type = yDoc.getXmlFragment("default"); - const contentJSON = yXmlFragmentToProseMirrorRootNode( - type, - documentEditorSchema - ).toJSON(); + const contentJSON = yXmlFragmentToProseMirrorRootNode(type, documentEditorSchema).toJSON(); // convert to HTML const contentHTML = generateHTML(contentJSON, DOCUMENT_EDITOR_EXTENSIONS); @@ -34,26 +30,21 @@ export const getAllDocumentFormatsFromBinaryData = (description: Uint8Array): { contentJSON, contentHTML, }; -} +}; -export const getBinaryDataFromHTMLString = (descriptionHTML: string): { - contentBinary: Uint8Array +export const getBinaryDataFromHTMLString = ( + descriptionHTML: string +): { + contentBinary: Uint8Array; } => { // convert HTML to JSON - const contentJSON = generateJSON( - descriptionHTML ?? "

    ", - DOCUMENT_EDITOR_EXTENSIONS - ); + const contentJSON = generateJSON(descriptionHTML ?? "

    ", DOCUMENT_EDITOR_EXTENSIONS); // convert JSON to Y.Doc format - const transformedData = prosemirrorJSONToYDoc( - documentEditorSchema, - contentJSON, - "default" - ); + const transformedData = prosemirrorJSONToYDoc(documentEditorSchema, contentJSON, "default"); // convert Y.Doc to Uint8Array format const encodedData = Y.encodeStateAsUpdate(transformedData); return { - contentBinary: encodedData - } -} \ No newline at end of file + contentBinary: encodedData, + }; +}; diff --git a/apps/live/src/core/hocuspocus-server.ts b/apps/live/src/core/hocuspocus-server.ts index 51896c23bce..072d45cbc27 100644 --- a/apps/live/src/core/hocuspocus-server.ts +++ b/apps/live/src/core/hocuspocus-server.ts @@ -4,10 +4,7 @@ import { v4 as uuidv4 } from "uuid"; import { handleAuthentication } from "@/core/lib/authentication.js"; // extensions import { getExtensions } from "@/core/extensions/index.js"; -import { - DocumentCollaborativeEvents, - TDocumentEventsServer, -} from "@plane/editor/lib"; +import { DocumentCollaborativeEvents, TDocumentEventsServer } from "@plane/editor/lib"; // editor types import { TUserDetails } from "@plane/editor"; // types @@ -61,8 +58,7 @@ export const getHocusPocusServer = async () => { }, async onStateless({ payload, document }) { // broadcast the client event (derived from the server event) to all the clients so that they can update their state - const response = - DocumentCollaborativeEvents[payload as TDocumentEventsServer].client; + const response = DocumentCollaborativeEvents[payload as TDocumentEventsServer].client; if (response) { document.broadcastStateless(response); } diff --git a/apps/live/src/core/lib/page.ts b/apps/live/src/core/lib/page.ts index c2110a2b8d3..7d23d8b195f 100644 --- a/apps/live/src/core/lib/page.ts +++ b/apps/live/src/core/lib/page.ts @@ -1,8 +1,5 @@ // helpers -import { - getAllDocumentFormatsFromBinaryData, - getBinaryDataFromHTMLString, -} from "@/core/helpers/page.js"; +import { getAllDocumentFormatsFromBinaryData, getBinaryDataFromHTMLString } from "@/core/helpers/page.js"; // services import { PageService } from "@/core/services/page.service.js"; import { manualLogger } from "../helpers/logger.js"; @@ -12,20 +9,17 @@ export const updatePageDescription = async ( params: URLSearchParams, pageId: string, updatedDescription: Uint8Array, - cookie: string | undefined, + cookie: string | undefined ) => { if (!(updatedDescription instanceof Uint8Array)) { - throw new Error( - "Invalid updatedDescription: must be an instance of Uint8Array", - ); + throw new Error("Invalid updatedDescription: must be an instance of Uint8Array"); } const workspaceSlug = params.get("workspaceSlug")?.toString(); const projectId = params.get("projectId")?.toString(); if (!workspaceSlug || !projectId || !cookie) return; - const { contentBinaryEncoded, contentHTML, contentJSON } = - getAllDocumentFormatsFromBinaryData(updatedDescription); + const { contentBinaryEncoded, contentHTML, contentJSON } = getAllDocumentFormatsFromBinaryData(updatedDescription); try { const payload = { description_binary: contentBinaryEncoded, @@ -33,13 +27,7 @@ export const updatePageDescription = async ( description: contentJSON, }; - await pageService.updateDescription( - workspaceSlug, - projectId, - pageId, - payload, - cookie, - ); + await pageService.updateDescription(workspaceSlug, projectId, pageId, payload, cookie); } catch (error) { manualLogger.error("Update error:", error); throw error; @@ -50,26 +38,16 @@ const fetchDescriptionHTMLAndTransform = async ( workspaceSlug: string, projectId: string, pageId: string, - cookie: string, + cookie: string ) => { if (!workspaceSlug || !projectId || !cookie) return; try { - const pageDetails = await pageService.fetchDetails( - workspaceSlug, - projectId, - pageId, - cookie, - ); - const { contentBinary } = getBinaryDataFromHTMLString( - pageDetails.description_html ?? "

    ", - ); + const pageDetails = await pageService.fetchDetails(workspaceSlug, projectId, pageId, cookie); + const { contentBinary } = getBinaryDataFromHTMLString(pageDetails.description_html ?? "

    "); return contentBinary; } catch (error) { - manualLogger.error( - "Error while transforming from HTML to Uint8Array", - error, - ); + manualLogger.error("Error while transforming from HTML to Uint8Array", error); throw error; } }; @@ -77,28 +55,18 @@ const fetchDescriptionHTMLAndTransform = async ( export const fetchPageDescriptionBinary = async ( params: URLSearchParams, pageId: string, - cookie: string | undefined, + cookie: string | undefined ) => { const workspaceSlug = params.get("workspaceSlug")?.toString(); const projectId = params.get("projectId")?.toString(); if (!workspaceSlug || !projectId || !cookie) return null; try { - const response = await pageService.fetchDescriptionBinary( - workspaceSlug, - projectId, - pageId, - cookie, - ); + const response = await pageService.fetchDescriptionBinary(workspaceSlug, projectId, pageId, cookie); const binaryData = new Uint8Array(response); if (binaryData.byteLength === 0) { - const binary = await fetchDescriptionHTMLAndTransform( - workspaceSlug, - projectId, - pageId, - cookie, - ); + const binary = await fetchDescriptionHTMLAndTransform(workspaceSlug, projectId, pageId, cookie); if (binary) { return binary; } diff --git a/apps/live/src/core/services/page.service.ts b/apps/live/src/core/services/page.service.ts index 7218ee003d4..9c1ed823777 100644 --- a/apps/live/src/core/services/page.service.ts +++ b/apps/live/src/core/services/page.service.ts @@ -8,42 +8,26 @@ export class PageService extends APIService { super(API_BASE_URL); } - async fetchDetails( - workspaceSlug: string, - projectId: string, - pageId: string, - cookie: string - ): Promise { - return this.get( - `/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/`, - { - headers: { - Cookie: cookie, - }, - } - ) + async fetchDetails(workspaceSlug: string, projectId: string, pageId: string, cookie: string): Promise { + return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/`, { + headers: { + Cookie: cookie, + }, + }) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } - async fetchDescriptionBinary( - workspaceSlug: string, - projectId: string, - pageId: string, - cookie: string - ): Promise { - return this.get( - `/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/description/`, - { - headers: { - "Content-Type": "application/octet-stream", - Cookie: cookie, - }, - responseType: "arraybuffer", - } - ) + async fetchDescriptionBinary(workspaceSlug: string, projectId: string, pageId: string, cookie: string): Promise { + return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/description/`, { + headers: { + "Content-Type": "application/octet-stream", + Cookie: cookie, + }, + responseType: "arraybuffer", + }) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; @@ -61,15 +45,11 @@ export class PageService extends APIService { }, cookie: string ): Promise { - return this.patch( - `/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/description/`, - data, - { - headers: { - Cookie: cookie, - }, - } - ) + return this.patch(`/api/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/description/`, data, { + headers: { + Cookie: cookie, + }, + }) .then((response) => response?.data) .catch((error) => { throw error; diff --git a/apps/live/src/ee/lib/fetch-document.ts b/apps/live/src/ee/lib/fetch-document.ts index 9c9516937c8..33aa90bba37 100644 --- a/apps/live/src/ee/lib/fetch-document.ts +++ b/apps/live/src/ee/lib/fetch-document.ts @@ -1 +1 @@ -export * from "../../ce/lib/fetch-document.js" \ No newline at end of file +export * from "../../ce/lib/fetch-document.js"; diff --git a/apps/live/src/ee/types/common.d.ts b/apps/live/src/ee/types/common.d.ts index 8ebedf3814e..4f11c54d02a 100644 --- a/apps/live/src/ee/types/common.d.ts +++ b/apps/live/src/ee/types/common.d.ts @@ -1 +1 @@ -export * from "../../ce/types/common.js" \ No newline at end of file +export * from "../../ce/types/common.js"; diff --git a/apps/space/core/components/issues/filters/applied-filters/root.tsx b/apps/space/core/components/issues/filters/applied-filters/root.tsx index 6bed9007699..af7be085d4c 100644 --- a/apps/space/core/components/issues/filters/applied-filters/root.tsx +++ b/apps/space/core/components/issues/filters/applied-filters/root.tsx @@ -35,9 +35,9 @@ export const IssueAppliedFilters: FC = observer((props) => const updateRouteParams = useCallback( (key: keyof TIssueQueryFilters, value: string[]) => { - const state = key === "state" ? value : issueFilters?.filters?.state ?? []; - const priority = key === "priority" ? value : issueFilters?.filters?.priority ?? []; - const labels = key === "labels" ? value : issueFilters?.filters?.labels ?? []; + const state = key === "state" ? value : (issueFilters?.filters?.state ?? []); + const priority = key === "priority" ? value : (issueFilters?.filters?.priority ?? []); + const labels = key === "labels" ? value : (issueFilters?.filters?.labels ?? []); let params: any = { board: activeLayout || "list" }; if (priority.length > 0) params = { ...params, priority: priority.join(",") }; diff --git a/apps/space/core/components/issues/issue-layouts/kanban/kanban-group.tsx b/apps/space/core/components/issues/issue-layouts/kanban/kanban-group.tsx index 50e6ba7740c..e6090a938e5 100644 --- a/apps/space/core/components/issues/issue-layouts/kanban/kanban-group.tsx +++ b/apps/space/core/components/issues/issue-layouts/kanban/kanban-group.tsx @@ -76,8 +76,8 @@ export const KanbanGroup = observer((props: IKanbanGroup) => { const isSubGroup = !!subGroupId && subGroupId !== "null"; const issueIds = isSubGroup - ? (groupedIssueIds as TSubGroupedIssues)?.[groupId]?.[subGroupId] ?? [] - : (groupedIssueIds as TGroupedIssues)?.[groupId] ?? []; + ? ((groupedIssueIds as TSubGroupedIssues)?.[groupId]?.[subGroupId] ?? []) + : ((groupedIssueIds as TGroupedIssues)?.[groupId] ?? []); const groupIssueCount = getGroupIssueCount(groupId, subGroupId, false) ?? 0; const nextPageResults = getPaginationData(groupId, subGroupId)?.nextPageResults; diff --git a/apps/space/core/components/issues/issue-layouts/kanban/swimlanes.tsx b/apps/space/core/components/issues/issue-layouts/kanban/swimlanes.tsx index 48dd4047c34..8860e739585 100644 --- a/apps/space/core/components/issues/issue-layouts/kanban/swimlanes.tsx +++ b/apps/space/core/components/issues/issue-layouts/kanban/swimlanes.tsx @@ -133,12 +133,7 @@ const SubGroupSwimlaneHeader: React.FC = observer( if (subGroupByVisibilityToggle === false) return <>; return (
    - +
    ); })} diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/page.tsx index 7bc67af5b50..b7f59441f4b 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/cycles/page.tsx @@ -28,4 +28,4 @@ const ProjectArchivedCyclesPage = observer(() => { ); }); -export default ProjectArchivedCyclesPage; \ No newline at end of file +export default ProjectArchivedCyclesPage; diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/page.tsx index afa6c0d7241..a52b3596f30 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/archives/issues/(list)/page.tsx @@ -28,4 +28,4 @@ const ProjectArchivedIssuesPage = observer(() => { ); }); -export default ProjectArchivedIssuesPage; \ No newline at end of file +export default ProjectArchivedIssuesPage; diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx index 0f346f5d9a6..08ad0f72fa9 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/sidebar.tsx @@ -1,6 +1,12 @@ import { useParams, usePathname } from "next/navigation"; import { ArrowUpToLine, Building, CreditCard, Users, Webhook } from "lucide-react"; -import { EUserPermissionsLevel, GROUPED_WORKSPACE_SETTINGS, WORKSPACE_SETTINGS_CATEGORIES, EUserPermissions, WORKSPACE_SETTINGS_CATEGORY } from "@plane/constants"; +import { + EUserPermissionsLevel, + GROUPED_WORKSPACE_SETTINGS, + WORKSPACE_SETTINGS_CATEGORIES, + EUserPermissions, + WORKSPACE_SETTINGS_CATEGORY, +} from "@plane/constants"; import { EUserWorkspaceRoles } from "@plane/types"; import { SettingsSidebar } from "@/components/settings"; import { useUserPermissions } from "@/hooks/store/user"; diff --git a/apps/web/app/(all)/layout.preload.tsx b/apps/web/app/(all)/layout.preload.tsx index 18ca3b4b38b..fb72b72a5c0 100644 --- a/apps/web/app/(all)/layout.preload.tsx +++ b/apps/web/app/(all)/layout.preload.tsx @@ -18,7 +18,7 @@ export const usePreloadResources = () => { `${process.env.NEXT_PUBLIC_API_BASE_URL}/api/users/me/workspaces/?v=${Date.now()}`, ]; - urls.forEach(url => preloadItem(url)); + urls.forEach((url) => preloadItem(url)); }, []); }; diff --git a/apps/web/app/(all)/sign-up/layout.tsx b/apps/web/app/(all)/sign-up/layout.tsx index 3ae09772197..9e259b304ac 100644 --- a/apps/web/app/(all)/sign-up/layout.tsx +++ b/apps/web/app/(all)/sign-up/layout.tsx @@ -5,7 +5,7 @@ export const metadata: Metadata = { robots: { index: true, follow: false, - } + }, }; export default function SignUpLayout({ children }: { children: React.ReactNode }) { diff --git a/apps/web/app/(home)/layout.tsx b/apps/web/app/(home)/layout.tsx index 0ed40f86b2a..af7645f3c78 100644 --- a/apps/web/app/(home)/layout.tsx +++ b/apps/web/app/(home)/layout.tsx @@ -15,7 +15,5 @@ export const viewport: Viewport = { }; export default function HomeLayout({ children }: { children: React.ReactNode }) { - return ( - <>{children} - ); + return <>{children}; } diff --git a/apps/web/ce/components/common/subscription/index.ts b/apps/web/ce/components/common/subscription/index.ts index beb26e1d975..cfd65903d4a 100644 --- a/apps/web/ce/components/common/subscription/index.ts +++ b/apps/web/ce/components/common/subscription/index.ts @@ -1 +1 @@ -export * from "./subscription-pill"; \ No newline at end of file +export * from "./subscription-pill"; diff --git a/apps/web/ce/components/global/product-updates-header.tsx b/apps/web/ce/components/global/product-updates-header.tsx index 8a2a94c5b42..776d9667dd7 100644 --- a/apps/web/ce/components/global/product-updates-header.tsx +++ b/apps/web/ce/components/global/product-updates-header.tsx @@ -14,7 +14,7 @@ export const ProductUpdatesHeader = observer(() => {
    {t("whats_new")}
    -
    { const { t } = useTranslation(); - return {t("version")}: v{packageJson.version}; + return ( + + {t("version")}: v{packageJson.version} + + ); }; diff --git a/apps/web/ce/components/issues/bulk-operations/index.ts b/apps/web/ce/components/issues/bulk-operations/index.ts index 50a9c47c01f..1efe34c51ec 100644 --- a/apps/web/ce/components/issues/bulk-operations/index.ts +++ b/apps/web/ce/components/issues/bulk-operations/index.ts @@ -1 +1 @@ -export * from "./root"; \ No newline at end of file +export * from "./root"; diff --git a/apps/web/ce/components/issues/issue-modal/index.ts b/apps/web/ce/components/issues/issue-modal/index.ts index b35c5de10da..f63453ba3e1 100644 --- a/apps/web/ce/components/issues/issue-modal/index.ts +++ b/apps/web/ce/components/issues/issue-modal/index.ts @@ -2,4 +2,3 @@ export * from "./provider"; export * from "./issue-type-select"; export * from "./additional-properties"; export * from "./template-select"; - diff --git a/apps/web/ce/components/relations/activity.ts b/apps/web/ce/components/relations/activity.ts index 30f08cb7492..3b39ae5fe7c 100644 --- a/apps/web/ce/components/relations/activity.ts +++ b/apps/web/ce/components/relations/activity.ts @@ -5,13 +5,17 @@ export const getRelationActivityContent = (activity: TIssueActivity | undefined) switch (activity.field) { case "blocking": - return activity.old_value === "" ? `marked this work item is blocking work item ` : `removed the blocking work item `; + return activity.old_value === "" + ? `marked this work item is blocking work item ` + : `removed the blocking work item `; case "blocked_by": return activity.old_value === "" ? `marked this work item is being blocked by ` : `removed this work item being blocked by work item `; case "duplicate": - return activity.old_value === "" ? `marked this work item as duplicate of ` : `removed this work item as a duplicate of `; + return activity.old_value === "" + ? `marked this work item as duplicate of ` + : `removed this work item as a duplicate of `; case "relates_to": return activity.old_value === "" ? `marked that this work item relates to ` : `removed the relation from `; } diff --git a/apps/web/ce/helpers/workspace.helper.ts b/apps/web/ce/helpers/workspace.helper.ts index 7f223f12f41..5e4bf3e4641 100644 --- a/apps/web/ce/helpers/workspace.helper.ts +++ b/apps/web/ce/helpers/workspace.helper.ts @@ -1,2 +1,2 @@ export type TRenderSettingsLink = (workspaceSlug: string, settingKey: string) => boolean; -export const shouldRenderSettingLink: TRenderSettingsLink = (workspaceSlug, settingKey) => true; \ No newline at end of file +export const shouldRenderSettingLink: TRenderSettingsLink = (workspaceSlug, settingKey) => true; diff --git a/apps/web/ce/services/project/index.ts b/apps/web/ce/services/project/index.ts index 6c0fc3df4ba..15e12c5fd3a 100644 --- a/apps/web/ce/services/project/index.ts +++ b/apps/web/ce/services/project/index.ts @@ -1,2 +1,2 @@ export * from "./estimate.service"; -export * from "./view.service"; \ No newline at end of file +export * from "./view.service"; diff --git a/apps/web/ce/types/projects/projects.ts b/apps/web/ce/types/projects/projects.ts index 92c32b65d36..462192e262c 100644 --- a/apps/web/ce/types/projects/projects.ts +++ b/apps/web/ce/types/projects/projects.ts @@ -2,4 +2,4 @@ import { IPartialProject, IProject } from "@plane/types"; export type TPartialProject = IPartialProject; -export type TProject = TPartialProject & IProject; +export type TProject = TPartialProject & IProject; diff --git a/apps/web/core/components/account/oauth/oauth-options.tsx b/apps/web/core/components/account/oauth/oauth-options.tsx index eb4ec48518b..c4b6ff647a0 100644 --- a/apps/web/core/components/account/oauth/oauth-options.tsx +++ b/apps/web/core/components/account/oauth/oauth-options.tsx @@ -12,7 +12,8 @@ export const OAuthOptions: React.FC = observer(() => { // hooks const { config } = useInstance(); - const isOAuthEnabled = (config && (config?.is_google_enabled || config?.is_github_enabled || config?.is_gitlab_enabled)) || false; + const isOAuthEnabled = + (config && (config?.is_google_enabled || config?.is_github_enabled || config?.is_gitlab_enabled)) || false; if (!isOAuthEnabled) return null; diff --git a/apps/web/core/components/analytics/select/project.tsx b/apps/web/core/components/analytics/select/project.tsx index 61a9942081e..fa03d56dfe1 100644 --- a/apps/web/core/components/analytics/select/project.tsx +++ b/apps/web/core/components/analytics/select/project.tsx @@ -47,11 +47,11 @@ export const ProjectSelect: React.FC = observer((props) => { {value && value.length > 3 ? `3+ projects` : value && value.length > 0 - ? projectIds - ?.filter((p) => value.includes(p)) - .map((p) => getProjectById(p)?.name) - .join(", ") - : "All projects"} + ? projectIds + ?.filter((p) => value.includes(p)) + .map((p) => getProjectById(p)?.name) + .join(", ") + : "All projects"}
    } multiple diff --git a/apps/web/core/components/analytics/work-items/workitems-insight-table.tsx b/apps/web/core/components/analytics/work-items/workitems-insight-table.tsx index 480c72b6c5f..d0b6262fdd3 100644 --- a/apps/web/core/components/analytics/work-items/workitems-insight-table.tsx +++ b/apps/web/core/components/analytics/work-items/workitems-insight-table.tsx @@ -21,7 +21,6 @@ import { InsightTable } from "../insight-table"; const analyticsService = new AnalyticsService(); - declare module "@tanstack/react-table" { interface ColumnMeta { export: { diff --git a/apps/web/core/components/api-token/modal/form.tsx b/apps/web/core/components/api-token/modal/form.tsx index eafd3e82102..279722cfdd2 100644 --- a/apps/web/core/components/api-token/modal/form.tsx +++ b/apps/web/core/components/api-token/modal/form.tsx @@ -251,4 +251,4 @@ export const CreateApiTokenForm: React.FC = (props) => {
    ); -}; \ No newline at end of file +}; diff --git a/apps/web/core/components/api-token/token-list-item.tsx b/apps/web/core/components/api-token/token-list-item.tsx index 37b3549608f..f1ec2ff4590 100644 --- a/apps/web/core/components/api-token/token-list-item.tsx +++ b/apps/web/core/components/api-token/token-list-item.tsx @@ -60,4 +60,4 @@ export const ApiTokenListItem: React.FC = (props) => {
    ); -}; \ No newline at end of file +}; diff --git a/apps/web/core/components/automation/auto-archive-automation.tsx b/apps/web/core/components/automation/auto-archive-automation.tsx index c1a8c0b7501..719b0b8c759 100644 --- a/apps/web/core/components/automation/auto-archive-automation.tsx +++ b/apps/web/core/components/automation/auto-archive-automation.tsx @@ -39,7 +39,7 @@ export const AutoArchiveAutomation: React.FC = observer((props) => { EUserPermissionsLevel.PROJECT, workspaceSlug?.toString(), currentProjectDetails?.id -); + ); return ( <> diff --git a/apps/web/core/components/chart/utils.ts b/apps/web/core/components/chart/utils.ts index bbdc06f4751..6d6895e0677 100644 --- a/apps/web/core/components/chart/utils.ts +++ b/apps/web/core/components/chart/utils.ts @@ -1,7 +1,13 @@ import { getWeekOfMonth, isValid } from "date-fns"; import { CHART_X_AXIS_DATE_PROPERTIES, ChartXAxisDateGrouping, TO_CAPITALIZE_PROPERTIES } from "@plane/constants"; import { ChartXAxisProperty, TChart, TChartDatum } from "@plane/types"; -import { capitalizeFirstLetter, hexToHsl, hslToHex, renderFormattedDate, renderFormattedDateWithoutYear } from "@plane/utils"; +import { + capitalizeFirstLetter, + hexToHsl, + hslToHex, + renderFormattedDate, + renderFormattedDateWithoutYear, +} from "@plane/utils"; // const getDateGroupingName = (date: string, dateGrouping: ChartXAxisDateGrouping): string => { @@ -61,7 +67,7 @@ export const parseChartData = ( const updatedWidgetData: TChartDatum[] = widgetData.map((datum) => { const keys = Object.keys(datum); const missingKeys = allKeys.filter((key) => !keys.includes(key)); - const missingValues: Record = Object.fromEntries(missingKeys.map(key => [key, 0])); + const missingValues: Record = Object.fromEntries(missingKeys.map((key) => [key, 0])); if (xAxisProperty) { // capitalize first letter if xAxisProperty is in TO_CAPITALIZE_PROPERTIES and no groupByProperty is set @@ -163,4 +169,4 @@ export const generateExtendedColors = (baseColorSet: string[], targetCount: numb } return colors.slice(0, targetCount); -}; \ No newline at end of file +}; diff --git a/apps/web/core/components/global/product-updates/footer.tsx b/apps/web/core/components/global/product-updates/footer.tsx index 84966e6370d..c6ef12036d8 100644 --- a/apps/web/core/components/global/product-updates/footer.tsx +++ b/apps/web/core/components/global/product-updates/footer.tsx @@ -13,51 +13,51 @@ export const ProductUpdatesFooter = () => { - Plane {t("powered_by_plane_pages")} diff --git a/apps/web/core/components/issues/archived-issues-header.tsx b/apps/web/core/components/issues/archived-issues-header.tsx index 41929b564cd..d9504e3218b 100644 --- a/apps/web/core/components/issues/archived-issues-header.tsx +++ b/apps/web/core/components/issues/archived-issues-header.tsx @@ -6,7 +6,12 @@ import { EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constant // i18n import { useTranslation } from "@plane/i18n"; // types -import { EIssuesStoreType, IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; +import { + EIssuesStoreType, + IIssueDisplayFilterOptions, + IIssueDisplayProperties, + IIssueFilterOptions, +} from "@plane/types"; // components import { isIssueFilterActive } from "@plane/utils"; import { ArchiveTabsList } from "@/components/archives"; @@ -74,7 +79,11 @@ export const ArchivedIssuesHeader: FC = observer(() => {
    {/* filter options */}
    - + = observer((props) => { /> ) : ( -
    +
    {t("labels")}
    diff --git a/apps/web/core/components/issues/workspace-draft/empty-state.tsx b/apps/web/core/components/issues/workspace-draft/empty-state.tsx index cc637321e83..3cd990d07ae 100644 --- a/apps/web/core/components/issues/workspace-draft/empty-state.tsx +++ b/apps/web/core/components/issues/workspace-draft/empty-state.tsx @@ -43,7 +43,7 @@ export const WorkspaceDraftEmptyState: FC = observer(() => { onClick: () => { setIsDraftIssueModalOpen(true); }, - disabled: !canPerformEmptyStateActions + disabled: !canPerformEmptyStateActions, }} />
    diff --git a/apps/web/core/components/modules/gantt-chart/modules-list-layout.tsx b/apps/web/core/components/modules/gantt-chart/modules-list-layout.tsx index c87f1c4d5f3..1260d5621a3 100644 --- a/apps/web/core/components/modules/gantt-chart/modules-list-layout.tsx +++ b/apps/web/core/components/modules/gantt-chart/modules-list-layout.tsx @@ -3,10 +3,7 @@ import { useParams } from "next/navigation"; // PLane import { IBlockUpdateData, IBlockUpdateDependencyData, IModule } from "@plane/types"; // components -import { - GanttChartRoot, - ModuleGanttSidebar, -} from "@/components/gantt-chart"; +import { GanttChartRoot, ModuleGanttSidebar } from "@/components/gantt-chart"; import { ETimeLineTypeType, TimeLineTypeContext } from "@/components/gantt-chart/contexts"; import { ModuleGanttBlock } from "@/components/modules"; // hooks diff --git a/apps/web/core/components/profile/overview/activity.tsx b/apps/web/core/components/profile/overview/activity.tsx index 10313ef923b..002286c770d 100644 --- a/apps/web/core/components/profile/overview/activity.tsx +++ b/apps/web/core/components/profile/overview/activity.tsx @@ -63,7 +63,9 @@ export const ProfileActivity = observer(() => {

    - {currentUser?.id === activity.actor_detail?.id ? "You" : activity.actor_detail?.display_name}{" "} + {currentUser?.id === activity.actor_detail?.id + ? "You" + : activity.actor_detail?.display_name}{" "} {activity.field ? ( diff --git a/apps/web/core/components/profile/profile-issues-filter.tsx b/apps/web/core/components/profile/profile-issues-filter.tsx index 7a44b9911ec..7339ebdc4a1 100644 --- a/apps/web/core/components/profile/profile-issues-filter.tsx +++ b/apps/web/core/components/profile/profile-issues-filter.tsx @@ -6,7 +6,12 @@ import { EIssueLayoutTypes, EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_PAGE } fr // i18n import { useTranslation } from "@plane/i18n"; // types -import { EIssuesStoreType, IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; +import { + EIssuesStoreType, + IIssueDisplayFilterOptions, + IIssueDisplayProperties, + IIssueFilterOptions, +} from "@plane/types"; // components import { isIssueFilterActive } from "@plane/utils"; import { DisplayFiltersSelection, FilterSelection, FiltersDropdown, LayoutSelection } from "@/components/issues"; @@ -107,7 +112,11 @@ export const ProfileIssuesFilter = observer(() => { selectedLayout={activeLayout} /> - + { ))} - {currentWorkspaceViews?.map((viewId) => )} + {currentWorkspaceViews?.map((viewId) => ( + + ))}

    {isAuthorizedUser ? ( diff --git a/apps/web/core/lib/n-progress/index.tsx b/apps/web/core/lib/n-progress/index.tsx index ed7ad04b746..316628e545a 100644 --- a/apps/web/core/lib/n-progress/index.tsx +++ b/apps/web/core/lib/n-progress/index.tsx @@ -1,9 +1,6 @@ -import { start, done } from 'nprogress'; -import { - AppProgressBar as AppProgressBarComponent, - useRouter, -} from './AppProgressBar'; -import withSuspense from './withSuspense'; +import { start, done } from "nprogress"; +import { AppProgressBar as AppProgressBarComponent, useRouter } from "./AppProgressBar"; +import withSuspense from "./withSuspense"; export interface NProgressOptions { minimum?: number; diff --git a/apps/web/core/lib/n-progress/utils/sameURL.ts b/apps/web/core/lib/n-progress/utils/sameURL.ts index 14c689f756c..46f8adbb173 100644 --- a/apps/web/core/lib/n-progress/utils/sameURL.ts +++ b/apps/web/core/lib/n-progress/utils/sameURL.ts @@ -1,16 +1,13 @@ export function isSameURL(target: URL, current: URL) { - const cleanTarget = - target.protocol + '//' + target.host + target.pathname + target.search; - const cleanCurrent = - current.protocol + '//' + current.host + current.pathname + current.search; + const cleanTarget = target.protocol + "//" + target.host + target.pathname + target.search; + const cleanCurrent = current.protocol + "//" + current.host + current.pathname + current.search; return cleanTarget === cleanCurrent; } export function isSameURLWithoutSearch(target: URL, current: URL) { - const cleanTarget = target.protocol + '//' + target.host + target.pathname; - const cleanCurrent = - current.protocol + '//' + current.host + current.pathname; + const cleanTarget = target.protocol + "//" + target.host + target.pathname; + const cleanCurrent = current.protocol + "//" + current.host + current.pathname; return cleanTarget === cleanCurrent; } diff --git a/apps/web/core/lib/posthog-view.tsx b/apps/web/core/lib/posthog-view.tsx index 5ec20b970f7..4192e8930e7 100644 --- a/apps/web/core/lib/posthog-view.tsx +++ b/apps/web/core/lib/posthog-view.tsx @@ -1,9 +1,9 @@ -'use client' +"use client"; import { useEffect } from "react"; import { usePathname, useSearchParams } from "next/navigation"; // posthog -import { usePostHog } from 'posthog-js/react'; +import { usePostHog } from "posthog-js/react"; export default function PostHogPageView(): null { const pathname = usePathname(); @@ -12,18 +12,15 @@ export default function PostHogPageView(): null { useEffect(() => { // Track pageviews if (pathname && posthog) { - let url = window.origin + pathname + let url = window.origin + pathname; if (searchParams.toString()) { - url = url + `?${searchParams.toString()}` + url = url + `?${searchParams.toString()}`; } - posthog.capture( - '$pageview', - { - '$current_url': url, - } - ) + posthog.capture("$pageview", { + $current_url: url, + }); } - }, [pathname, searchParams, posthog]) + }, [pathname, searchParams, posthog]); - return null + return null; } diff --git a/apps/web/core/lib/store-context.tsx b/apps/web/core/lib/store-context.tsx index f06dfb4d838..89fc33a4796 100644 --- a/apps/web/core/lib/store-context.tsx +++ b/apps/web/core/lib/store-context.tsx @@ -17,4 +17,6 @@ const initializeStore = () => { export const store = initializeStore(); -export const StoreProvider = ({ children }: { children: ReactElement }) => {children}; +export const StoreProvider = ({ children }: { children: ReactElement }) => ( + {children} +); diff --git a/apps/web/core/local-db/worker/wa-sqlite/src/types/globals.d.ts b/apps/web/core/local-db/worker/wa-sqlite/src/types/globals.d.ts index f7c883b460d..e32bd32c80b 100644 --- a/apps/web/core/local-db/worker/wa-sqlite/src/types/globals.d.ts +++ b/apps/web/core/local-db/worker/wa-sqlite/src/types/globals.d.ts @@ -59,4 +59,4 @@ declare var _modRename; declare var _jsAuth; -declare var _jsProgress; \ No newline at end of file +declare var _jsProgress; diff --git a/apps/web/core/local-db/worker/wa-sqlite/src/types/index.d.ts b/apps/web/core/local-db/worker/wa-sqlite/src/types/index.d.ts index e693a646bb5..0f522f6e167 100644 --- a/apps/web/core/local-db/worker/wa-sqlite/src/types/index.d.ts +++ b/apps/web/core/local-db/worker/wa-sqlite/src/types/index.d.ts @@ -15,7 +15,7 @@ * each element converted to a byte); SQLite always returns blob data as * `Uint8Array` */ -type SQLiteCompatibleType = number|string|Uint8Array|Array|bigint|null; +type SQLiteCompatibleType = number | string | Uint8Array | Array | bigint | null; /** * SQLite Virtual File System object @@ -37,83 +37,50 @@ declare interface SQLiteVFS { /** Maximum length of a file path in UTF-8 bytes (default 64) */ mxPathName?: number; - close(): void|Promise; - isReady(): boolean|Promise; + close(): void | Promise; + isReady(): boolean | Promise; /** @see https://sqlite.org/c3ref/io_methods.html */ - xClose(fileId: number): number|Promise; + xClose(fileId: number): number | Promise; /** @see https://sqlite.org/c3ref/io_methods.html */ - xRead( - fileId: number, - pData: number, - iAmt: number, - iOffsetLo: number, - iOffsetHi: number - ): number|Promise; + xRead(fileId: number, pData: number, iAmt: number, iOffsetLo: number, iOffsetHi: number): number | Promise; /** @see https://sqlite.org/c3ref/io_methods.html */ - xWrite( - fileId: number, - pData: number, - iAmt: number, - iOffsetLo: number, - iOffsetHi: number - ): number|Promise; + xWrite(fileId: number, pData: number, iAmt: number, iOffsetLo: number, iOffsetHi: number): number | Promise; /** @see https://sqlite.org/c3ref/io_methods.html */ - xTruncate(fileId: number, iSizeLo: number, iSizeHi): number|Promise; + xTruncate(fileId: number, iSizeLo: number, iSizeHi): number | Promise; /** @see https://sqlite.org/c3ref/io_methods.html */ - xSync(fileId: number, flags: number): number|Promise; + xSync(fileId: number, flags: number): number | Promise; /** @see https://sqlite.org/c3ref/io_methods.html */ - xFileSize( - fileId: number, - pSize64: number - ): number|Promise; + xFileSize(fileId: number, pSize64: number): number | Promise; /** @see https://sqlite.org/c3ref/io_methods.html */ - xLock(fileId: number, flags: number): number|Promise; + xLock(fileId: number, flags: number): number | Promise; /** @see https://sqlite.org/c3ref/io_methods.html */ - xUnlock(fileId: number, flags: number): number|Promise; + xUnlock(fileId: number, flags: number): number | Promise; /** @see https://sqlite.org/c3ref/io_methods.html */ - xCheckReservedLock( - fileId: number, - pResOut: number - ): number|Promise; + xCheckReservedLock(fileId: number, pResOut: number): number | Promise; /** @see https://sqlite.org/c3ref/io_methods.html */ - xFileControl( - fileId: number, - flags: number, - pOut: number - ): number|Promise; + xFileControl(fileId: number, flags: number, pOut: number): number | Promise; /** @see https://sqlite.org/c3ref/io_methods.html */ - xDeviceCharacteristics(fileId: number): number|Promise; + xDeviceCharacteristics(fileId: number): number | Promise; /** @see https://sqlite.org/c3ref/vfs.html */ - xOpen( - pVfs: number, - zName: number, - pFile: number, - flags: number, - pOutFlags: number - ): number|Promise; + xOpen(pVfs: number, zName: number, pFile: number, flags: number, pOutFlags: number): number | Promise; /** @see https://sqlite.org/c3ref/vfs.html */ - xDelete(pVfs: number, zName: number, syncDir: number): number|Promise; + xDelete(pVfs: number, zName: number, syncDir: number): number | Promise; /** @see https://sqlite.org/c3ref/vfs.html */ - xAccess( - pVfs: number, - zName: number, - flags: number, - pResOut: number - ): number|Promise; + xAccess(pVfs: number, zName: number, flags: number, pResOut: number): number | Promise; } /** @@ -217,7 +184,7 @@ declare interface SQLiteAPI { */ bind_collection( stmt: number, - bindings: {[index: string]: SQLiteCompatibleType|null}|Array + bindings: { [index: string]: SQLiteCompatibleType | null } | Array ): number; /** @@ -230,7 +197,7 @@ declare interface SQLiteAPI { * @param value * @returns `SQLITE_OK` (throws exception on error) */ - bind(stmt: number, i: number, value: SQLiteCompatibleType|null): number; + bind(stmt: number, i: number, value: SQLiteCompatibleType | null): number; /** * Bind blob to prepared statement parameter @@ -242,7 +209,7 @@ declare interface SQLiteAPI { * @param value * @returns `SQLITE_OK` (throws exception on error) */ - bind_blob(stmt: number, i: number, value: Uint8Array|Array): number; + bind_blob(stmt: number, i: number, value: Uint8Array | Array): number; /** * Bind number to prepared statement parameter @@ -254,9 +221,9 @@ declare interface SQLiteAPI { * @param value * @returns `SQLITE_OK` (throws exception on error) */ - bind_double(stmt: number, i: number, value: number): number; + bind_double(stmt: number, i: number, value: number): number; - /** + /** * Bind number to prepared statement parameter * * Note that binding indices begin with 1. @@ -268,7 +235,7 @@ declare interface SQLiteAPI { */ bind_int(stmt: number, i: number, value: number): number; - /** + /** * Bind number to prepared statement parameter * * Note that binding indices begin with 1. @@ -278,9 +245,9 @@ declare interface SQLiteAPI { * @param value * @returns `SQLITE_OK` (throws exception on error) */ - bind_int64(stmt: number, i: number, value: bigint): number; + bind_int64(stmt: number, i: number, value: bigint): number; - /** + /** * Bind null to prepared statement * * Note that binding indices begin with 1. @@ -310,7 +277,7 @@ declare interface SQLiteAPI { */ bind_parameter_name(stmt: number, i: number): string; - /** + /** * Bind string to prepared statement * * Note that binding indices begin with 1. @@ -419,7 +386,7 @@ declare interface SQLiteAPI { */ column_int64(stmt: number, i: number): bigint; - /** + /** * Get a column name for a prepared statement * @see https://www.sqlite.org/c3ref/column_blob.html * @param stmt prepared statement pointer @@ -482,9 +449,10 @@ declare interface SQLiteAPI { nArg: number, eTextRep: number, pApp: number, - xFunc?: (context: number, values: Uint32Array) => void|Promise, - xStep?: (context: number, values: Uint32Array) => void|Promise, - xFinal?: (context: number) => void|Promise): number; + xFunc?: (context: number, values: Uint32Array) => void | Promise, + xStep?: (context: number, values: Uint32Array) => void | Promise, + xFinal?: (context: number) => void | Promise + ): number; /** * Get number of columns in current row of a prepared statement @@ -509,7 +477,7 @@ declare interface SQLiteAPI { exec( db: number, zSQL: string, - callback?: (row: Array, columns: string[]) => void + callback?: (row: Array, columns: string[]) => void ): Promise; /** @@ -543,7 +511,7 @@ declare interface SQLiteAPI { * @see https://www.sqlite.org/c3ref/libversion.html * @returns version number, e.g. 3035005 */ - libversion_number(): number + libversion_number(): number; /** * Set a usage limit on a connection. @@ -553,10 +521,7 @@ declare interface SQLiteAPI { * @param newVal * @returns previous setting */ - limit( - db: number, - id: number, - newVal: number): number; + limit(db: number, id: number, newVal: number): number; /** * Opening a new database connection. @@ -570,11 +535,7 @@ declare interface SQLiteAPI { * @param zVfs VFS name * @returns Promise-wrapped database pointer. */ - open_v2( - zFilename: string, - iFlags?: number, - zVfs?: string - ): Promise; + open_v2(zFilename: string, iFlags?: number, zVfs?: string): Promise; /** * Specify callback to be invoked between long-running queries @@ -588,7 +549,7 @@ declare interface SQLiteAPI { * @param handler * @param userData */ - progress_handler(db: number, nProgressOps: number, handler: (userData: any) => number|Promise, userData); + progress_handler(db: number, nProgressOps: number, handler: (userData: any) => number | Promise, userData); /** * Reset a prepared statement object @@ -603,7 +564,7 @@ declare interface SQLiteAPI { * @param context context pointer * @param value */ - result(context: number, value: (SQLiteCompatibleType|number[])|null): void; + result(context: number, value: (SQLiteCompatibleType | number[]) | null): void; /** * Set the result of a function or vtable column @@ -611,7 +572,7 @@ declare interface SQLiteAPI { * @param context context pointer * @param value */ - result_blob(context: number, value: Uint8Array|number[]): void; + result_blob(context: number, value: Uint8Array | number[]): void; /** * Set the result of a function or vtable column @@ -650,19 +611,19 @@ declare interface SQLiteAPI { * @param context context pointer * @param value */ - result_text(context: number, value: string): void; - - /** - * Get all column data for a row from a prepared statement step - * - * This convenience function will return a copy of any blob, unlike - * {@link column_blob} which returns a value referencing volatile WASM - * memory with short validity. Like {@link column}, it will return a - * BigInt for integers outside the safe integer bounds for Number. - * @param stmt prepared statement pointer - * @returns row data - */ - row(stmt: number): Array; + result_text(context: number, value: string): void; + + /** + * Get all column data for a row from a prepared statement step + * + * This convenience function will return a copy of any blob, unlike + * {@link column_blob} which returns a value referencing volatile WASM + * memory with short validity. Like {@link column}, it will return a + * BigInt for integers outside the safe integer bounds for Number. + * @param stmt prepared statement pointer + * @returns row data + */ + row(stmt: number): Array; /** * Register a callback function that is invoked to authorize certain SQL statement actions. @@ -673,8 +634,16 @@ declare interface SQLiteAPI { */ set_authorizer( db: number, - authFunction: (userData: any, iActionCode: number, param3: string|null, param4: string|null, param5: string|null, param6: string|null) => number|Promise, - userData: any): number; + authFunction: ( + userData: any, + iActionCode: number, + param3: string | null, + param4: string | null, + param5: string | null, + param6: string | null + ) => number | Promise, + userData: any + ): number; /** * Get statement SQL @@ -733,7 +702,7 @@ declare interface SQLiteAPI { */ step(stmt: number): Promise; - /** + /** * Register an update hook * * The callback is invoked whenever a row is updated, inserted, or deleted @@ -749,9 +718,10 @@ declare interface SQLiteAPI { * @param db database pointer * @param callback */ - update_hook( + update_hook( db: number, - callback: (updateType: number, dbName: string|null, tblName: string|null, rowid: bigint) => void): void; + callback: (updateType: number, dbName: string | null, tblName: string | null, rowid: bigint) => void + ): void; /** * Extract a value from `sqlite3_value` @@ -809,7 +779,7 @@ declare interface SQLiteAPI { * @param pValue `sqlite3_value` pointer * @returns value */ - value_int64(pValue: number): bigint; + value_int64(pValue: number): bigint; /** * Extract a value from `sqlite3_value` @@ -839,7 +809,7 @@ declare interface SQLiteAPI { } /** @ignore */ -declare module 'wa-sqlite/src/sqlite-constants.js' { +declare module "wa-sqlite/src/sqlite-constants.js" { export const SQLITE_OK: 0; export const SQLITE_ERROR: 1; export const SQLITE_INTERNAL: 2; @@ -1074,8 +1044,8 @@ declare module 'wa-sqlite/src/sqlite-constants.js' { export const SQLITE_PREPARE_NO_VTAB: 0x04; } -declare module 'wa-sqlite' { - export * from 'wa-sqlite/src/sqlite-constants.js'; +declare module "wa-sqlite" { + export * from "wa-sqlite/src/sqlite-constants.js"; /** * @ignore @@ -1088,26 +1058,26 @@ declare module 'wa-sqlite' { export function Factory(Module: any): SQLiteAPI; export class SQLiteError extends Error { - constructor(message: any, code: any); - code: any; + constructor(message: any, code: any); + code: any; } } /** @ignore */ -declare module 'wa-sqlite/dist/wa-sqlite.mjs' { +declare module "wa-sqlite/dist/wa-sqlite.mjs" { function ModuleFactory(config?: object): Promise; export = ModuleFactory; } /** @ignore */ -declare module 'wa-sqlite/dist/wa-sqlite-async.mjs' { +declare module "wa-sqlite/dist/wa-sqlite-async.mjs" { function ModuleFactory(config?: object): Promise; export = ModuleFactory; } /** @ignore */ -declare module 'wa-sqlite/src/VFS.js' { - export * from 'wa-sqlite/src/sqlite-constants.js'; +declare module "wa-sqlite/src/VFS.js" { + export * from "wa-sqlite/src/sqlite-constants.js"; export class Base { mxPathName: number; @@ -1122,20 +1092,28 @@ declare module 'wa-sqlite/src/VFS.js' { * @param {number} iOffset * @returns {number} */ - xRead(fileId: number, pData: { + xRead( + fileId: number, + pData: { size: number; value: Uint8Array; - }, iOffset: number): number; + }, + iOffset: number + ): number; /** * @param {number} fileId * @param {Uint8Array} pData * @param {number} iOffset * @returns {number} */ - xWrite(fileId: number, pData: { + xWrite( + fileId: number, + pData: { size: number; value: Uint8Array; - }, iOffset: number): number; + }, + iOffset: number + ): number; /** * @param {number} fileId * @param {number} iSize @@ -1222,7 +1200,7 @@ declare module 'wa-sqlite/src/VFS.js' { } /** @ignore */ -declare module 'wa-sqlite/src/examples/IndexedDbVFS.js' { +declare module "wa-sqlite/src/examples/IndexedDbVFS.js" { import * as VFS from "wa-sqlite/src/VFS.js"; export class IndexedDbVFS extends VFS.Base { /** @@ -1275,7 +1253,7 @@ declare module 'wa-sqlite/src/examples/IndexedDbVFS.js' { } /** @ignore */ -declare module 'wa-sqlite/src/examples/MemoryVFS.js' { +declare module "wa-sqlite/src/examples/MemoryVFS.js" { // eslint-disable-next-line no-duplicate-imports import * as VFS from "wa-sqlite/src/VFS.js"; /** @ignore */ @@ -1287,14 +1265,13 @@ declare module 'wa-sqlite/src/examples/MemoryVFS.js' { } /** @ignore */ -declare module 'wa-sqlite/src/examples/MemoryAsyncVFS.js' { +declare module "wa-sqlite/src/examples/MemoryAsyncVFS.js" { import { MemoryVFS } from "wa-sqlite/src/examples/MemoryVFS.js"; - export class MemoryAsyncVFS extends MemoryVFS { - } + export class MemoryAsyncVFS extends MemoryVFS {} } /** @ignore */ -declare module 'wa-sqlite/src/examples/tag.js' { +declare module "wa-sqlite/src/examples/tag.js" { /** * @ignore * Template tag builder. This function creates a tag with an API and diff --git a/apps/web/core/store/issue/draft/issue.store.ts b/apps/web/core/store/issue/draft/issue.store.ts index 6dfbeac80a1..c1ccc98a7b2 100644 --- a/apps/web/core/store/issue/draft/issue.store.ts +++ b/apps/web/core/store/issue/draft/issue.store.ts @@ -2,7 +2,14 @@ import { action, makeObservable, runInAction } from "mobx"; // base class // services // types -import { TIssue, TLoader, ViewFlags, IssuePaginationOptions, TIssuesResponse, TBulkOperationsPayload } from "@plane/types"; +import { + TIssue, + TLoader, + ViewFlags, + IssuePaginationOptions, + TIssuesResponse, + TBulkOperationsPayload, +} from "@plane/types"; import { BaseIssuesStore, IBaseIssuesStore } from "../helpers/base-issues.store"; import { IIssueRootStore } from "../root.store"; import { IDraftIssuesFilter } from "./filter.store"; diff --git a/apps/web/core/store/issue/helpers/base-issues.store.ts b/apps/web/core/store/issue/helpers/base-issues.store.ts index ef6323af29f..263c1081ae0 100644 --- a/apps/web/core/store/issue/helpers/base-issues.store.ts +++ b/apps/web/core/store/issue/helpers/base-issues.store.ts @@ -830,7 +830,7 @@ export abstract class BaseIssuesStore implements IBaseIssuesStore { updates: { id: string; start_date?: string; target_date?: string }[], projectId?: string ) { - if(!projectId) return; + if (!projectId) return; const issueDatesBeforeChange: { id: string; start_date?: string; target_date?: string }[] = []; try { const getIssueById = this.rootIssueStore.issues.getIssueById; diff --git a/apps/web/core/store/issue/profile/issue.store.ts b/apps/web/core/store/issue/profile/issue.store.ts index d8728a93585..b26dda529ab 100644 --- a/apps/web/core/store/issue/profile/issue.store.ts +++ b/apps/web/core/store/issue/profile/issue.store.ts @@ -1,6 +1,13 @@ import { action, observable, makeObservable, computed, runInAction } from "mobx"; // base class -import { TIssue, TLoader, IssuePaginationOptions, TIssuesResponse, ViewFlags, TBulkOperationsPayload } from "@plane/types"; +import { + TIssue, + TLoader, + IssuePaginationOptions, + TIssuesResponse, + ViewFlags, + TBulkOperationsPayload, +} from "@plane/types"; import { UserService } from "@/services/user.service"; // services diff --git a/apps/web/core/store/issue/root.store.ts b/apps/web/core/store/issue/root.store.ts index 112f3b41f5b..5178f2cd54f 100644 --- a/apps/web/core/store/issue/root.store.ts +++ b/apps/web/core/store/issue/root.store.ts @@ -1,7 +1,16 @@ import isEmpty from "lodash/isEmpty"; import { autorun, makeObservable, observable } from "mobx"; // types -import { EIssueServiceType, ICycle, IIssueLabel, IModule, IProject, IState, IUserLite, TIssueServiceType } from "@plane/types"; +import { + EIssueServiceType, + ICycle, + IIssueLabel, + IModule, + IProject, + IState, + IUserLite, + TIssueServiceType, +} from "@plane/types"; // plane web store import { IProjectEpics, IProjectEpicsFilter, ProjectEpics, ProjectEpicsFilter } from "@/plane-web/store/issue/epic"; import { IIssueDetail, IssueDetail } from "@/plane-web/store/issue/issue-details/root.store"; diff --git a/apps/web/core/store/issue/workspace-draft/filter.store.ts b/apps/web/core/store/issue/workspace-draft/filter.store.ts index 922931291fe..8c6a557a5df 100644 --- a/apps/web/core/store/issue/workspace-draft/filter.store.ts +++ b/apps/web/core/store/issue/workspace-draft/filter.store.ts @@ -1,5 +1,4 @@ -import -isEmpty from "lodash/isEmpty"; +import isEmpty from "lodash/isEmpty"; import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class diff --git a/apps/web/core/store/user/profile.store.ts b/apps/web/core/store/user/profile.store.ts index b478f100253..6c7d12545d3 100644 --- a/apps/web/core/store/user/profile.store.ts +++ b/apps/web/core/store/user/profile.store.ts @@ -171,7 +171,6 @@ export class ProfileStore implements IUserProfileStore { runInAction(() => { this.mutateUserProfile({ ...dataToUpdate, is_onboarded: true }); }); - } catch (error) { runInAction(() => { this.error = { @@ -181,7 +180,7 @@ export class ProfileStore implements IUserProfileStore { }); throw error; } - } + }; /** * @description updates the user tour completed status diff --git a/apps/web/core/store/workspace/home.ts b/apps/web/core/store/workspace/home.ts index 109132fb66a..551ef7a237d 100644 --- a/apps/web/core/store/workspace/home.ts +++ b/apps/web/core/store/workspace/home.ts @@ -20,7 +20,12 @@ export interface IHomeStore { // actions toggleWidgetSettings: (value?: boolean) => void; fetchWidgets: (workspaceSlug: string) => Promise; - reorderWidget: (workspaceSlug: string, widgetKey: string, destinationId: string, edge: string | undefined) => Promise; + reorderWidget: ( + workspaceSlug: string, + widgetKey: string, + destinationId: string, + edge: string | undefined + ) => Promise; toggleWidget: (workspaceSlug: string, widgetKey: string, is_enabled: boolean) => void; } diff --git a/apps/web/ee/components/active-cycles/workspace-active-cycles-upgrade.tsx b/apps/web/ee/components/active-cycles/workspace-active-cycles-upgrade.tsx index c7734868782..f35c1f84824 100644 --- a/apps/web/ee/components/active-cycles/workspace-active-cycles-upgrade.tsx +++ b/apps/web/ee/components/active-cycles/workspace-active-cycles-upgrade.tsx @@ -1 +1 @@ -export * from "ce/components/active-cycles/workspace-active-cycles-upgrade"; \ No newline at end of file +export * from "ce/components/active-cycles/workspace-active-cycles-upgrade"; diff --git a/apps/web/ee/components/breadcrumbs/index.ts b/apps/web/ee/components/breadcrumbs/index.ts index ae95faf6bd8..eecd3efb09e 100644 --- a/apps/web/ee/components/breadcrumbs/index.ts +++ b/apps/web/ee/components/breadcrumbs/index.ts @@ -1 +1 @@ -export * from "ce/components/breadcrumbs"; \ No newline at end of file +export * from "ce/components/breadcrumbs"; diff --git a/apps/web/ee/components/issues/bulk-operations/index.ts b/apps/web/ee/components/issues/bulk-operations/index.ts index 5470941b5ad..9427e2fa203 100644 --- a/apps/web/ee/components/issues/bulk-operations/index.ts +++ b/apps/web/ee/components/issues/bulk-operations/index.ts @@ -1 +1 @@ -export * from "ce/components/issues/bulk-operations/index"; \ No newline at end of file +export * from "ce/components/issues/bulk-operations/index"; diff --git a/apps/web/ee/components/issues/issue-layouts/quick-action-dropdowns/index.ts b/apps/web/ee/components/issues/issue-layouts/quick-action-dropdowns/index.ts index 5100afc5a70..2538e79a739 100644 --- a/apps/web/ee/components/issues/issue-layouts/quick-action-dropdowns/index.ts +++ b/apps/web/ee/components/issues/issue-layouts/quick-action-dropdowns/index.ts @@ -1 +1 @@ -export * from "ce/components/issues/issue-layouts/quick-action-dropdowns" \ No newline at end of file +export * from "ce/components/issues/issue-layouts/quick-action-dropdowns"; diff --git a/apps/web/ee/components/sidebar/index.ts b/apps/web/ee/components/sidebar/index.ts index ffc5f14cf7e..144cfa2c2a6 100644 --- a/apps/web/ee/components/sidebar/index.ts +++ b/apps/web/ee/components/sidebar/index.ts @@ -1 +1 @@ -export * from "ce/components/sidebar"; \ No newline at end of file +export * from "ce/components/sidebar"; diff --git a/apps/web/ee/components/workspace/billing/index.ts b/apps/web/ee/components/workspace/billing/index.ts index 50a9c47c01f..1efe34c51ec 100644 --- a/apps/web/ee/components/workspace/billing/index.ts +++ b/apps/web/ee/components/workspace/billing/index.ts @@ -1 +1 @@ -export * from "./root"; \ No newline at end of file +export * from "./root"; diff --git a/apps/web/public/animated-icons/uploading.json b/apps/web/public/animated-icons/uploading.json index 1560fd40ef0..2258e72bc43 100644 --- a/apps/web/public/animated-icons/uploading.json +++ b/apps/web/public/animated-icons/uploading.json @@ -1 +1,742 @@ -{"v":"5.3.4","fr":60,"ip":0,"op":84,"w":678,"h":896,"nm":"share","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Слой 18","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.347,"y":1},"o":{"x":0.333,"y":0},"n":"0p347_1_0p333_0","t":64,"s":[338,1288,0],"e":[338,492,0],"to":[0,-132.66667175293,0],"ti":[0,132.66667175293,0]},{"t":76}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.354,"y":1},"o":{"x":0.333,"y":0},"n":"0p354_1_0p333_0","t":65,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.125,-433.461],[0.223,-433.488],[0,-433.488],[0.229,-433.33],[0,-433.488],[0.25,-433.262]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[177,-256.711],[0.223,-433.488],[0,-433.488],[-176.777,-256.711],[0,-433.488],[0,169.488]],"c":false}]},{"t":79}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":2,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":65,"op":84,"st":63,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Слой 15","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.393,"y":1},"o":{"x":0.333,"y":0},"n":"0p393_1_0p333_0","t":5,"s":[338,492,0],"e":[338,482,0],"to":[0,-1.66666662693024,0],"ti":[0,-22.1666660308838,0]},{"i":{"x":0.418,"y":1},"o":{"x":0.333,"y":0},"n":"0p418_1_0p333_0","t":15,"s":[338,482,0],"e":[338,625,0],"to":[0,22.1666660308838,0],"ti":[0,-1.66666662693024,0]},{"i":{"x":0.362,"y":1},"o":{"x":0.333,"y":0},"n":"0p362_1_0p333_0","t":26,"s":[338,625,0],"e":[338,492,0],"to":[0,1.66666662693024,0],"ti":[0,22.1666660308838,0]},{"t":35}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.338,"y":1},"o":{"x":0.333,"y":0},"n":"0p338_1_0p333_0","t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[177,-256.711],[0.223,-433.488],[0,-433.488],[-176.777,-256.711],[0,-433.488],[0,169.488]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[169,-252.711],[0.223,-433.488],[0,-433.488],[-168.777,-252.711],[0,-433.488],[0,169.488]],"c":false}]},{"i":{"x":0.368,"y":1},"o":{"x":0.333,"y":0},"n":"0p368_1_0p333_0","t":10,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[169,-252.711],[0.223,-433.488],[0,-433.488],[-168.777,-252.711],[0,-433.488],[0,169.488]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[189,-181.274],[0.223,-273],[0,-273],[-198.777,-181.274],[0,-273],[0,169.488]],"c":false}]},{"i":{"x":0.301,"y":1},"o":{"x":0.333,"y":0},"n":"0p301_1_0p333_0","t":21,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[189,-181.274],[0.223,-273],[0,-273],[-198.777,-181.274],[0,-273],[0,169.488]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[177,-256.711],[0.223,-433.488],[0,-433.488],[-176.777,-256.711],[0,-433.488],[0,169.488]],"c":false}]},{"i":{"x":0.338,"y":1},"o":{"x":0.333,"y":0},"n":"0p338_1_0p333_0","t":30,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[177,-256.711],[0.223,-433.488],[0,-433.488],[-176.777,-256.711],[0,-433.488],[0,169.488]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[55,-331.686],[0.223,-433.488],[0,-433.488],[-52.777,-331.843],[0,-433.488],[0,-78.512]],"c":false}]},{"i":{"x":0.301,"y":1},"o":{"x":0.333,"y":0},"n":"0p301_1_0p333_0","t":36,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[55,-331.686],[0.223,-433.488],[0,-433.488],[-52.777,-331.843],[0,-433.488],[0,-78.512]],"c":false}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.25,-432.593],[0.223,-433.488],[0,-433.488],[-0.027,-433.093],[0,-433.488],[0,-432.512]],"c":false}]},{"t":42}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":2,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":39,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Слой 17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[338,492,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[48,-30.133],[32.954,0],[0,0],[25.447,15.225],[0,61.848],[0,0]],"o":[[0,0],[0,60.546],[-26.126,16.401],[0,0],[-31.652,0],[-49.724,-29.75],[0,0],[0,0]],"v":[[301.777,0],[301.777,196],[221.699,340.096],[131.777,366],[-131.777,366],[-218.579,342.008],[-301.777,196],[-301.777,0]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":2,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.473],"y":[-0.005]},"n":["0p833_1_0p473_-0p005"],"t":8,"s":[0],"e":[10]},{"i":{"x":[0.411],"y":[0.948]},"o":{"x":[0.167],"y":[0]},"n":["0p411_0p948_0p167_0"],"t":19,"s":[10],"e":[0]},{"t":40}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.473],"y":[0.005]},"n":["0p833_1_0p473_0p005"],"t":8,"s":[100],"e":[90]},{"i":{"x":[0.411],"y":[1.052]},"o":{"x":[0.167],"y":[0]},"n":["0p411_1p052_0p167_0"],"t":19,"s":[90],"e":[100]},{"t":40}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":84,"st":0,"bm":0}],"markers":[]} \ No newline at end of file +{ + "v": "5.3.4", + "fr": 60, + "ip": 0, + "op": 84, + "w": 678, + "h": 896, + "nm": "share", + "ddd": 0, + "assets": [], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Слой 18", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.347, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "n": "0p347_1_0p333_0", + "t": 64, + "s": [338, 1288, 0], + "e": [338, 492, 0], + "to": [0, -132.66667175293, 0], + "ti": [0, 132.66667175293, 0] + }, + { "t": 76 } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { "x": 0.354, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "n": "0p354_1_0p333_0", + "t": 65, + "s": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.125, -433.461], + [0.223, -433.488], + [0, -433.488], + [0.229, -433.33], + [0, -433.488], + [0.25, -433.262] + ], + "c": false + } + ], + "e": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [177, -256.711], + [0.223, -433.488], + [0, -433.488], + [-176.777, -256.711], + [0, -433.488], + [0, 169.488] + ], + "c": false + } + ] + }, + { "t": 79 } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0, 0, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 50, "ix": 5 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 65, + "op": 84, + "st": 63, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Слой 15", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.393, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "n": "0p393_1_0p333_0", + "t": 5, + "s": [338, 492, 0], + "e": [338, 482, 0], + "to": [0, -1.66666662693024, 0], + "ti": [0, -22.1666660308838, 0] + }, + { + "i": { "x": 0.418, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "n": "0p418_1_0p333_0", + "t": 15, + "s": [338, 482, 0], + "e": [338, 625, 0], + "to": [0, 22.1666660308838, 0], + "ti": [0, -1.66666662693024, 0] + }, + { + "i": { "x": 0.362, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "n": "0p362_1_0p333_0", + "t": 26, + "s": [338, 625, 0], + "e": [338, 492, 0], + "to": [0, 1.66666662693024, 0], + "ti": [0, 22.1666660308838, 0] + }, + { "t": 35 } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { "x": 0.338, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "n": "0p338_1_0p333_0", + "t": 0, + "s": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [177, -256.711], + [0.223, -433.488], + [0, -433.488], + [-176.777, -256.711], + [0, -433.488], + [0, 169.488] + ], + "c": false + } + ], + "e": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [169, -252.711], + [0.223, -433.488], + [0, -433.488], + [-168.777, -252.711], + [0, -433.488], + [0, 169.488] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.368, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "n": "0p368_1_0p333_0", + "t": 10, + "s": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [169, -252.711], + [0.223, -433.488], + [0, -433.488], + [-168.777, -252.711], + [0, -433.488], + [0, 169.488] + ], + "c": false + } + ], + "e": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [189, -181.274], + [0.223, -273], + [0, -273], + [-198.777, -181.274], + [0, -273], + [0, 169.488] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.301, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "n": "0p301_1_0p333_0", + "t": 21, + "s": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [189, -181.274], + [0.223, -273], + [0, -273], + [-198.777, -181.274], + [0, -273], + [0, 169.488] + ], + "c": false + } + ], + "e": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [177, -256.711], + [0.223, -433.488], + [0, -433.488], + [-176.777, -256.711], + [0, -433.488], + [0, 169.488] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.338, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "n": "0p338_1_0p333_0", + "t": 30, + "s": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [177, -256.711], + [0.223, -433.488], + [0, -433.488], + [-176.777, -256.711], + [0, -433.488], + [0, 169.488] + ], + "c": false + } + ], + "e": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [55, -331.686], + [0.223, -433.488], + [0, -433.488], + [-52.777, -331.843], + [0, -433.488], + [0, -78.512] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.301, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "n": "0p301_1_0p333_0", + "t": 36, + "s": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [55, -331.686], + [0.223, -433.488], + [0, -433.488], + [-52.777, -331.843], + [0, -433.488], + [0, -78.512] + ], + "c": false + } + ], + "e": [ + { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.25, -432.593], + [0.223, -433.488], + [0, -433.488], + [-0.027, -433.093], + [0, -433.488], + [0, -432.512] + ], + "c": false + } + ] + }, + { "t": 42 } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0, 0, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 50, "ix": 5 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 39, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Слой 17", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [338, 492, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [48, -30.133], + [32.954, 0], + [0, 0], + [25.447, 15.225], + [0, 61.848], + [0, 0] + ], + "o": [ + [0, 0], + [0, 60.546], + [-26.126, 16.401], + [0, 0], + [-31.652, 0], + [-49.724, -29.75], + [0, 0], + [0, 0] + ], + "v": [ + [301.777, 0], + [301.777, 196], + [221.699, 340.096], + [131.777, 366], + [-131.777, 366], + [-218.579, 342.008], + [-301.777, 196], + [-301.777, 0] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0, 0, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 50, "ix": 5 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.473], "y": [-0.005] }, + "n": ["0p833_1_0p473_-0p005"], + "t": 8, + "s": [0], + "e": [10] + }, + { + "i": { "x": [0.411], "y": [0.948] }, + "o": { "x": [0.167], "y": [0] }, + "n": ["0p411_0p948_0p167_0"], + "t": 19, + "s": [10], + "e": [0] + }, + { "t": 40 } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.473], "y": [0.005] }, + "n": ["0p833_1_0p473_0p005"], + "t": 8, + "s": [100], + "e": [90] + }, + { + "i": { "x": [0.411], "y": [1.052] }, + "o": { "x": [0.167], "y": [0] }, + "n": ["0p411_1p052_0p167_0"], + "t": 19, + "s": [90], + "e": [100] + }, + { "t": 40 } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 84, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} diff --git a/apps/web/styles/nprogress.css b/apps/web/styles/nprogress.css index 338d24189ea..772360a82ed 100644 --- a/apps/web/styles/nprogress.css +++ b/apps/web/styles/nprogress.css @@ -21,7 +21,9 @@ right: 0px; width: 100px; height: 100%; - box-shadow: 0 0 10px #3f76ff, 0 0 5px #3f76ff; + box-shadow: + 0 0 10px #3f76ff, + 0 0 5px #3f76ff; opacity: 1; -webkit-transform: rotate(3deg) translate(0px, -4px); diff --git a/packages/constants/src/analytics/index.ts b/packages/constants/src/analytics/index.ts index 3e2372da34e..6b571608924 100644 --- a/packages/constants/src/analytics/index.ts +++ b/packages/constants/src/analytics/index.ts @@ -1 +1 @@ -export * from "./common" \ No newline at end of file +export * from "./common"; diff --git a/packages/constants/src/auth.ts b/packages/constants/src/auth.ts index 1b6cb9111a7..16ee1f3e748 100644 --- a/packages/constants/src/auth.ts +++ b/packages/constants/src/auth.ts @@ -11,8 +11,7 @@ export const SPACE_PASSWORD_CRITERIA = [ { key: "min_8_char", label: "Min 8 characters", - isCriteriaValid: (password: string) => - password.length >= PASSWORD_MIN_LENGTH, + isCriteriaValid: (password: string) => password.length >= PASSWORD_MIN_LENGTH, }, // { // key: "min_1_upper_case", diff --git a/packages/constants/src/chart.ts b/packages/constants/src/chart.ts index 42f7f96eae3..8bffef4d64b 100644 --- a/packages/constants/src/chart.ts +++ b/packages/constants/src/chart.ts @@ -3,7 +3,6 @@ import { ChartXAxisProperty, TChartColorScheme } from "@plane/types"; export const LABEL_CLASSNAME = "uppercase text-custom-text-300/60 text-sm tracking-wide"; export const AXIS_LABEL_CLASSNAME = "uppercase text-custom-text-300/60 text-sm tracking-wide"; - export enum ChartXAxisDateGrouping { DAY = "DAY", WEEK = "WEEK", @@ -23,7 +22,6 @@ export const CHART_X_AXIS_DATE_PROPERTIES: ChartXAxisProperty[] = [ ChartXAxisProperty.COMPLETED_AT, ]; - export enum EChartModels { BASIC = "BASIC", STACKED = "STACKED", @@ -39,88 +37,88 @@ export const CHART_COLOR_PALETTES: { light: string[]; dark: string[]; }[] = [ - { - key: "modern", - i18n_label: "dashboards.widget.color_palettes.modern", - light: [ - "#6172E8", - "#8B6EDB", - "#E05F99", - "#29A383", - "#CB8A37", - "#3AA7C1", - "#F1B24A", - "#E84855", - "#50C799", - "#B35F9E", - ], - dark: [ - "#6B7CDE", - "#8E9DE6", - "#D45D9E", - "#2EAF85", - "#D4A246", - "#29A7C1", - "#B89F6A", - "#D15D64", - "#4ED079", - "#A169A4", - ], - }, - { - key: "horizon", - i18n_label: "dashboards.widget.color_palettes.horizon", - light: [ - "#E76E50", - "#289D90", - "#F3A362", - "#E9C368", - "#264753", - "#8A6FA0", - "#5B9EE5", - "#7CC474", - "#BA7DB5", - "#CF8640", - ], - dark: [ - "#E05A3A", - "#1D8A7E", - "#D98B4D", - "#D1AC50", - "#3A6B7C", - "#7D6297", - "#4D8ACD", - "#569C64", - "#C16A8C", - "#B77436", - ], - }, - { - key: "earthen", - i18n_label: "dashboards.widget.color_palettes.earthen", - light: [ - "#386641", - "#6A994E", - "#A7C957", - "#E97F4E", - "#BC4749", - "#9E2A2B", - "#80CED1", - "#5C3E79", - "#526EAB", - "#6B5B95", - ], - dark: [ - "#497752", - "#7BAA5F", - "#B8DA68", - "#FA905F", - "#CD585A", - "#AF3B3C", - "#91DFE2", - "#6D4F8A", - "#637FBC", - "#7C6CA6", - ], - }, - ]; + { + key: "modern", + i18n_label: "dashboards.widget.color_palettes.modern", + light: [ + "#6172E8", + "#8B6EDB", + "#E05F99", + "#29A383", + "#CB8A37", + "#3AA7C1", + "#F1B24A", + "#E84855", + "#50C799", + "#B35F9E", + ], + dark: [ + "#6B7CDE", + "#8E9DE6", + "#D45D9E", + "#2EAF85", + "#D4A246", + "#29A7C1", + "#B89F6A", + "#D15D64", + "#4ED079", + "#A169A4", + ], + }, + { + key: "horizon", + i18n_label: "dashboards.widget.color_palettes.horizon", + light: [ + "#E76E50", + "#289D90", + "#F3A362", + "#E9C368", + "#264753", + "#8A6FA0", + "#5B9EE5", + "#7CC474", + "#BA7DB5", + "#CF8640", + ], + dark: [ + "#E05A3A", + "#1D8A7E", + "#D98B4D", + "#D1AC50", + "#3A6B7C", + "#7D6297", + "#4D8ACD", + "#569C64", + "#C16A8C", + "#B77436", + ], + }, + { + key: "earthen", + i18n_label: "dashboards.widget.color_palettes.earthen", + light: [ + "#386641", + "#6A994E", + "#A7C957", + "#E97F4E", + "#BC4749", + "#9E2A2B", + "#80CED1", + "#5C3E79", + "#526EAB", + "#6B5B95", + ], + dark: [ + "#497752", + "#7BAA5F", + "#B8DA68", + "#FA905F", + "#CD585A", + "#AF3B3C", + "#91DFE2", + "#6D4F8A", + "#637FBC", + "#7C6CA6", + ], + }, +]; diff --git a/packages/constants/src/issue/layout.ts b/packages/constants/src/issue/layout.ts index 6dd62fd177d..7319a532b6a 100644 --- a/packages/constants/src/issue/layout.ts +++ b/packages/constants/src/issue/layout.ts @@ -1,9 +1,4 @@ -export type TIssueLayout = - | "list" - | "kanban" - | "calendar" - | "spreadsheet" - | "gantt"; +export type TIssueLayout = "list" | "kanban" | "calendar" | "spreadsheet" | "gantt"; export enum EIssueLayoutTypes { LIST = "list", diff --git a/packages/constants/src/metadata.ts b/packages/constants/src/metadata.ts index 017cc84c252..5bd6e36b4e0 100644 --- a/packages/constants/src/metadata.ts +++ b/packages/constants/src/metadata.ts @@ -1,22 +1,16 @@ -export const SITE_NAME = - "Plane | Simple, extensible, open-source project management tool."; -export const SITE_TITLE = - "Plane | Simple, extensible, open-source project management tool."; +export const SITE_NAME = "Plane | Simple, extensible, open-source project management tool."; +export const SITE_TITLE = "Plane | Simple, extensible, open-source project management tool."; export const SITE_DESCRIPTION = "Open-source project management tool to manage work items, cycles, and product roadmaps easily"; export const SITE_KEYWORDS = "software development, plan, ship, software, accelerate, code management, release management, project management, work items tracking, agile, scrum, kanban, collaboration"; export const SITE_URL = "https://app.plane.so/"; -export const TWITTER_USER_NAME = - "Plane | Simple, extensible, open-source project management tool."; +export const TWITTER_USER_NAME = "Plane | Simple, extensible, open-source project management tool."; // Plane Sites Metadata -export const SPACE_SITE_NAME = - "Plane Publish | Make your Plane boards and roadmaps pubic with just one-click. "; -export const SPACE_SITE_TITLE = - "Plane Publish | Make your Plane boards public with one-click"; -export const SPACE_SITE_DESCRIPTION = - "Plane Publish is a customer feedback management tool built on top of plane.so"; +export const SPACE_SITE_NAME = "Plane Publish | Make your Plane boards and roadmaps pubic with just one-click. "; +export const SPACE_SITE_TITLE = "Plane Publish | Make your Plane boards public with one-click"; +export const SPACE_SITE_DESCRIPTION = "Plane Publish is a customer feedback management tool built on top of plane.so"; export const SPACE_SITE_KEYWORDS = "software development, customer feedback, software, accelerate, code management, release management, project management, work items tracking, agile, scrum, kanban, collaboration"; export const SPACE_SITE_URL = "https://app.plane.so/"; diff --git a/packages/constants/src/notification.ts b/packages/constants/src/notification.ts index cb267c4ad1f..793a1fa9283 100644 --- a/packages/constants/src/notification.ts +++ b/packages/constants/src/notification.ts @@ -31,8 +31,7 @@ export const NOTIFICATION_TABS = [ { i18n_label: "notification.tabs.all", value: ENotificationTab.ALL, - count: (unReadNotification: TUnreadNotificationsCount) => - unReadNotification?.total_unread_notifications_count || 0, + count: (unReadNotification: TUnreadNotificationsCount) => unReadNotification?.total_unread_notifications_count || 0, }, { i18n_label: "notification.tabs.mentions", diff --git a/packages/constants/src/tab-indices.ts b/packages/constants/src/tab-indices.ts index 0382b67f3fa..82958413161 100644 --- a/packages/constants/src/tab-indices.ts +++ b/packages/constants/src/tab-indices.ts @@ -53,14 +53,7 @@ export const PROJECT_CREATE_TAB_INDICES = [ "logo_props", ]; -export const PROJECT_CYCLE_TAB_INDICES = [ - "name", - "description", - "date_range", - "cancel", - "submit", - "project_id", -]; +export const PROJECT_CYCLE_TAB_INDICES = ["name", "description", "date_range", "cancel", "submit", "project_id"]; export const PROJECT_MODULE_TAB_INDICES = [ "name", @@ -73,21 +66,9 @@ export const PROJECT_MODULE_TAB_INDICES = [ "submit", ]; -export const PROJECT_VIEW_TAB_INDICES = [ - "name", - "description", - "filters", - "cancel", - "submit", -]; +export const PROJECT_VIEW_TAB_INDICES = ["name", "description", "filters", "cancel", "submit"]; -export const PROJECT_PAGE_TAB_INDICES = [ - "name", - "public", - "private", - "cancel", - "submit", -]; +export const PROJECT_PAGE_TAB_INDICES = ["name", "public", "private", "cancel", "submit"]; export enum ETabIndices { ISSUE_FORM = "issue-form", diff --git a/packages/constants/src/themes.ts b/packages/constants/src/themes.ts index 84e8c0d0b70..bd5d9ba2d34 100644 --- a/packages/constants/src/themes.ts +++ b/packages/constants/src/themes.ts @@ -1,10 +1,4 @@ -export const THEMES = [ - "light", - "dark", - "light-contrast", - "dark-contrast", - "custom", -]; +export const THEMES = ["light", "dark", "light-contrast", "dark-contrast", "custom"]; export interface I_THEME_OPTION { key: string; diff --git a/packages/constants/src/user.ts b/packages/constants/src/user.ts index 2e2f3b162ad..b13c953116d 100644 --- a/packages/constants/src/user.ts +++ b/packages/constants/src/user.ts @@ -52,11 +52,7 @@ export type TUserAllowedPermissions = { export const USER_ALLOWED_PERMISSIONS: TUserAllowedPermissions = { workspace: { dashboard: { - read: [ - EUserPermissions.ADMIN, - EUserPermissions.MEMBER, - EUserPermissions.GUEST, - ], + read: [EUserPermissions.ADMIN, EUserPermissions.MEMBER, EUserPermissions.GUEST], }, }, project: {}, diff --git a/packages/decorators/src/index.ts b/packages/decorators/src/index.ts index ef71360595b..4050664c3fa 100644 --- a/packages/decorators/src/index.ts +++ b/packages/decorators/src/index.ts @@ -12,4 +12,3 @@ import * as WebSocketDecorators from "./websocket"; // Named namespace exports export const Rest = RestDecorators; export const WebSocketNS = WebSocketDecorators; - diff --git a/packages/decorators/src/rest.ts b/packages/decorators/src/rest.ts index 68c0fba5457..e643e26a931 100644 --- a/packages/decorators/src/rest.ts +++ b/packages/decorators/src/rest.ts @@ -21,13 +21,13 @@ export function Controller(baseRoute: string = ""): ClassDecorator { * @returns Method decorator */ function createHttpMethodDecorator( - method: RestMethod + method: RestMethod, ): (route: string) => MethodDecorator { return function (route: string): MethodDecorator { return function ( target: object, propertyKey: string | symbol, - descriptor: PropertyDescriptor + descriptor: PropertyDescriptor, ) { Reflect.defineMetadata("method", method, target, propertyKey); Reflect.defineMetadata("route", route, target, propertyKey); diff --git a/packages/decorators/tsconfig.json b/packages/decorators/tsconfig.json index 02b459b9f66..72638244b80 100644 --- a/packages/decorators/tsconfig.json +++ b/packages/decorators/tsconfig.json @@ -10,12 +10,6 @@ "@/*": ["./src/*"] } }, - "include": [ - "./src" - ], - "exclude": [ - "dist", - "build", - "node_modules" - ] + "include": ["./src"], + "exclude": ["dist", "build", "node_modules"] } diff --git a/packages/decorators/tsup.config.ts b/packages/decorators/tsup.config.ts index 757dd8ba38c..f89f983283e 100644 --- a/packages/decorators/tsup.config.ts +++ b/packages/decorators/tsup.config.ts @@ -1,12 +1,12 @@ -import { defineConfig } from 'tsup'; +import { defineConfig } from "tsup"; export default defineConfig({ - entry: ['src/index.ts'], - format: ['esm', 'cjs'], + entry: ["src/index.ts"], + format: ["esm", "cjs"], dts: true, splitting: false, sourcemap: true, clean: true, - external: ['express', 'ws'], + external: ["express", "ws"], treeshake: true, -}); \ No newline at end of file +}); diff --git a/packages/editor/src/ce/types/utils.ts b/packages/editor/src/ce/types/utils.ts index 25a666b9382..1f4efd8b746 100644 --- a/packages/editor/src/ce/types/utils.ts +++ b/packages/editor/src/ce/types/utils.ts @@ -1 +1 @@ -export type TAdditionalActiveDropbarExtensions = never; \ No newline at end of file +export type TAdditionalActiveDropbarExtensions = never; diff --git a/packages/editor/src/core/components/editors/editor-container.tsx b/packages/editor/src/core/components/editors/editor-container.tsx index 3553f07fd82..f189bde9850 100644 --- a/packages/editor/src/core/components/editors/editor-container.tsx +++ b/packages/editor/src/core/components/editors/editor-container.tsx @@ -55,7 +55,8 @@ export const EditorContainer: FC = (props) => { // Check if its last node and add new node if (lastNode) { - const isLastNodeEmptyParagraph = lastNode.type.name === CORE_EXTENSIONS.PARAGRAPH && lastNode.content.size === 0; + const isLastNodeEmptyParagraph = + lastNode.type.name === CORE_EXTENSIONS.PARAGRAPH && lastNode.content.size === 0; // Only insert a new paragraph if the last node is not an empty paragraph and not a doc node if (!isLastNodeEmptyParagraph && lastNode.type.name !== "doc") { const endPosition = editor?.state.doc.content.size; diff --git a/packages/editor/src/core/components/menus/bubble-menu/root.tsx b/packages/editor/src/core/components/menus/bubble-menu/root.tsx index a3fa3e2d7d7..fa5427c3b44 100644 --- a/packages/editor/src/core/components/menus/bubble-menu/root.tsx +++ b/packages/editor/src/core/components/menus/bubble-menu/root.tsx @@ -39,13 +39,13 @@ export interface EditorStateType { center: boolean; color: { key: string; label: string; textColor: string; backgroundColor: string } | undefined; backgroundColor: - | { - key: string; - label: string; - textColor: string; - backgroundColor: string; - } - | undefined; + | { + key: string; + label: string; + textColor: string; + backgroundColor: string; + } + | undefined; } export const EditorBubbleMenu: FC = (props: { editor: Editor }) => { diff --git a/packages/hooks/src/use-local-storage.tsx b/packages/hooks/src/use-local-storage.tsx index f04e0e71ba7..0aa8bfcc594 100644 --- a/packages/hooks/src/use-local-storage.tsx +++ b/packages/hooks/src/use-local-storage.tsx @@ -1,8 +1,7 @@ import { useState, useEffect, useCallback } from "react"; export const getValueFromLocalStorage = (key: string, defaultValue: any) => { - if (typeof window === undefined || typeof window === "undefined") - return defaultValue; + if (typeof window === undefined || typeof window === "undefined") return defaultValue; try { const item = window.localStorage.getItem(key); return item ? JSON.parse(item) : defaultValue; @@ -13,8 +12,7 @@ export const getValueFromLocalStorage = (key: string, defaultValue: any) => { }; export const setValueIntoLocalStorage = (key: string, value: any) => { - if (typeof window === undefined || typeof window === "undefined") - return false; + if (typeof window === undefined || typeof window === "undefined") return false; try { window.localStorage.setItem(key, JSON.stringify(value)); return true; @@ -24,9 +22,7 @@ export const setValueIntoLocalStorage = (key: string, value: any) => { }; export const useLocalStorage = (key: string, initialValue: T) => { - const [storedValue, setStoredValue] = useState(() => - getValueFromLocalStorage(key, initialValue) - ); + const [storedValue, setStoredValue] = useState(() => getValueFromLocalStorage(key, initialValue)); const setValue = useCallback( (value: T) => { diff --git a/packages/logger/README.md b/packages/logger/README.md index 6b83eb52bb7..4391b898ae3 100644 --- a/packages/logger/README.md +++ b/packages/logger/README.md @@ -3,6 +3,7 @@ This package provides a logger and a request logger utility built using [Winston](https://github.com/winstonjs/winston). It offers customizable log levels using env and supports structured logging for general application logs and HTTP requests. ## Features. + - Dynamic log level configuration using env. - Pre-configured winston logger for general usage (`logger`). - Request logger middleware that logs incoming request @@ -10,7 +11,9 @@ This package provides a logger and a request logger utility built using [Winston ## Usage ### Adding as a package + Add this package as a dependency in package.json + ```typescript dependency: { ... @@ -20,11 +23,15 @@ dependency: { ``` ### Importing the Logger + ```typescript -import { logger, requestLogger } from '@plane/logger' +import { logger, requestLogger } from "@plane/logger"; ``` + ### Usage + ### `logger`: General Logger + Use this for general application logs. ```typescript @@ -34,14 +41,16 @@ logger.error("This is an error"); ``` ### `requestLogger`: Request Logger Middleware + Use this as a middleware for incoming requests ```typescript -const app = express() -app.use(requestLogger) +const app = express(); +app.use(requestLogger); ``` ## Available Log Levels + - `error` - `warn` - `info` (default) @@ -51,9 +60,11 @@ app.use(requestLogger) - `silly` ## Log file -- Log files are stored in logs folder of current working directory. Error logs are stored in files with format `error-%DATE%.log` and combined logs are stored with format `combined-%DATE%.log`. + +- Log files are stored in logs folder of current working directory. Error logs are stored in files with format `error-%DATE%.log` and combined logs are stored with format `combined-%DATE%.log`. - Log files have a 7 day rotation period defined. ## Configuration -- By default, the log level is set to `info`. -- You can specify a log level by adding a LOG_LEVEL in .env. \ No newline at end of file + +- By default, the log level is set to `info`. +- You can specify a log level by adding a LOG_LEVEL in .env. diff --git a/packages/propel/src/charts/components/legend.tsx b/packages/propel/src/charts/components/legend.tsx index 3c455812083..94ca2a2bfe9 100644 --- a/packages/propel/src/charts/components/legend.tsx +++ b/packages/propel/src/charts/components/legend.tsx @@ -15,16 +15,16 @@ export const getLegendProps = (args: TChartLegend): LegendProps => { overflow: "hidden", ...(layout === "vertical" ? { - top: 0, - alignItems: "center", - height: "100%", - } + top: 0, + alignItems: "center", + height: "100%", + } : { - left: 0, - bottom: 0, - width: "100%", - justifyContent: "center", - }), + left: 0, + bottom: 0, + width: "100%", + justifyContent: "center", + }), ...args.wrapperStyles, }, content: , @@ -34,8 +34,8 @@ export const getLegendProps = (args: TChartLegend): LegendProps => { const CustomLegend = React.forwardRef< HTMLDivElement, React.ComponentProps<"div"> & - Pick & - TChartLegend + Pick & + TChartLegend >((props, ref) => { const { formatter, layout, onClick, onMouseEnter, onMouseLeave, payload } = props; diff --git a/packages/propel/src/charts/components/tick.tsx b/packages/propel/src/charts/components/tick.tsx index 4b64e83736c..1a79ca33404 100644 --- a/packages/propel/src/charts/components/tick.tsx +++ b/packages/propel/src/charts/components/tick.tsx @@ -23,25 +23,23 @@ export const CustomYAxisTick = React.memo(({ x, y, payload }: any) => ( CustomYAxisTick.displayName = "CustomYAxisTick"; -export const CustomRadarAxisTick = React.memo( - ({ x, y, payload, getLabel, cx, cy, offset = 16 }: any) => { - // Calculate direction vector from center to tick - const dx = x - cx; - const dy = y - cy; - // Normalize and apply offset - const length = Math.sqrt(dx * dx + dy * dy); - const normX = dx / length; - const normY = dy / length; - const labelX = x + normX * offset; - const labelY = y + normY * offset; +export const CustomRadarAxisTick = React.memo(({ x, y, payload, getLabel, cx, cy, offset = 16 }: any) => { + // Calculate direction vector from center to tick + const dx = x - cx; + const dy = y - cy; + // Normalize and apply offset + const length = Math.sqrt(dx * dx + dy * dy); + const normX = dx / length; + const normY = dy / length; + const labelX = x + normX * offset; + const labelY = y + normY * offset; - return ( - - - {getLabel ? getLabel(payload.value) : payload.value} - - - ); - } -); + return ( + + + {getLabel ? getLabel(payload.value) : payload.value} + + + ); +}); CustomRadarAxisTick.displayName = "CustomRadarAxisTick"; diff --git a/packages/propel/src/charts/radar-chart/index.ts b/packages/propel/src/charts/radar-chart/index.ts index 50a9c47c01f..1efe34c51ec 100644 --- a/packages/propel/src/charts/radar-chart/index.ts +++ b/packages/propel/src/charts/radar-chart/index.ts @@ -1 +1 @@ -export * from "./root"; \ No newline at end of file +export * from "./root"; diff --git a/packages/propel/src/charts/scatter-chart/index.ts b/packages/propel/src/charts/scatter-chart/index.ts index 50a9c47c01f..1efe34c51ec 100644 --- a/packages/propel/src/charts/scatter-chart/index.ts +++ b/packages/propel/src/charts/scatter-chart/index.ts @@ -1 +1 @@ -export * from "./root"; \ No newline at end of file +export * from "./root"; diff --git a/packages/propel/src/charts/scatter-chart/root.tsx b/packages/propel/src/charts/scatter-chart/root.tsx index 5187d131bbd..25d7b84b476 100644 --- a/packages/propel/src/charts/scatter-chart/root.tsx +++ b/packages/propel/src/charts/scatter-chart/root.tsx @@ -156,4 +156,4 @@ export const ScatterChart = React.memo((prop
    ); }); -ScatterChart.displayName = "ScatterChart"; \ No newline at end of file +ScatterChart.displayName = "ScatterChart"; diff --git a/packages/propel/src/charts/tree-map/map-content.tsx b/packages/propel/src/charts/tree-map/map-content.tsx index f3b062cb08c..0e4a6e2f352 100644 --- a/packages/propel/src/charts/tree-map/map-content.tsx +++ b/packages/propel/src/charts/tree-map/map-content.tsx @@ -252,8 +252,8 @@ export const CustomTreeMapContent: React.FC = ({ {bottom.labelTruncated ? truncateText( label, - availableTextWidth - calculateContentWidth(value, LAYOUT.TEXT.FONT_SIZES.SM) - 4, - LAYOUT.TEXT.FONT_SIZES.SM + availableTextWidth - calculateContentWidth(value, LAYOUT.TEXT.FONT_SIZES.SM) - 4, + LAYOUT.TEXT.FONT_SIZES.SM ) : label} diff --git a/packages/propel/src/table/index.ts b/packages/propel/src/table/index.ts index 8b83d73fe97..8d119dee813 100644 --- a/packages/propel/src/table/index.ts +++ b/packages/propel/src/table/index.ts @@ -1 +1 @@ -export * from "./core"; \ No newline at end of file +export * from "./core"; diff --git a/packages/services/src/file/file-upload.service.ts b/packages/services/src/file/file-upload.service.ts index a2e5ce5e6ea..6613cf1d522 100644 --- a/packages/services/src/file/file-upload.service.ts +++ b/packages/services/src/file/file-upload.service.ts @@ -21,10 +21,7 @@ export class FileUploadService extends APIService { * @returns {Promise} Promise resolving to void * @throws {Error} If the request fails */ - async uploadFile( - url: string, - data: FormData, - ): Promise { + async uploadFile(url: string, data: FormData): Promise { this.cancelSource = axios.CancelToken.source(); return this.post(url, data, { headers: { @@ -49,4 +46,4 @@ export class FileUploadService extends APIService { cancelUpload() { this.cancelSource.cancel("Upload canceled"); } -} \ No newline at end of file +} diff --git a/packages/services/tsconfig.json b/packages/services/tsconfig.json index efce2a9fe8b..e8af9092ad7 100644 --- a/packages/services/tsconfig.json +++ b/packages/services/tsconfig.json @@ -2,7 +2,7 @@ "extends": "@plane/typescript-config/react-library.json", "compilerOptions": { "jsx": "react", - "lib": ["esnext", "dom"], + "lib": ["esnext", "dom"] }, "include": ["./src"], "exclude": ["dist", "build", "node_modules"] diff --git a/packages/types/src/activity.ts b/packages/types/src/activity.ts index 98d54dabc44..957a2028dbd 100644 --- a/packages/types/src/activity.ts +++ b/packages/types/src/activity.ts @@ -1,7 +1,4 @@ -export type TBaseActivity< - TFieldKey extends string = string, - TVerbKey extends string = string, -> = { +export type TBaseActivity = { id: string; field: TFieldKey | undefined; epoch: number; @@ -19,17 +16,14 @@ export type TBaseActivity< updated_at: string; }; -export type TWorkspaceBaseActivity< - K extends string = string, - V extends string = string, -> = TBaseActivity & { +export type TWorkspaceBaseActivity = TBaseActivity & { workspace: string; }; -export type TProjectBaseActivity< - K extends string = string, - V extends string = string, -> = TWorkspaceBaseActivity & { +export type TProjectBaseActivity = TWorkspaceBaseActivity< + K, + V +> & { project: string; }; diff --git a/packages/types/src/analytics.ts b/packages/types/src/analytics.ts index c40f7e7fdb7..e66794f7c34 100644 --- a/packages/types/src/analytics.ts +++ b/packages/types/src/analytics.ts @@ -30,7 +30,6 @@ export enum ChartYAxisMetric { BLOCKED_WORK_ITEM_COUNT = "BLOCKED_WORK_ITEM_COUNT", } - export type TAnalyticsTabsBase = "overview" | "work-items"; export type TAnalyticsGraphsBase = "projects" | "work-items" | "custom-work-items"; export interface AnalyticsTab { diff --git a/packages/types/src/charts/common.ts b/packages/types/src/charts/common.ts index 85034c2fe71..08270213829 100644 --- a/packages/types/src/charts/common.ts +++ b/packages/types/src/charts/common.ts @@ -1,5 +1,3 @@ - - export type TChartColorScheme = "modern" | "horizon" | "earthen"; export type TChartDatum = { @@ -12,5 +10,3 @@ export type TChart = { data: TChartDatum[]; schema: Record; }; - - diff --git a/packages/types/src/command-palette.ts b/packages/types/src/command-palette.ts index 6e072ab8fb8..c773c2d36ca 100644 --- a/packages/types/src/command-palette.ts +++ b/packages/types/src/command-palette.ts @@ -1,7 +1,4 @@ -export type TCommandPaletteActionList = Record< - string, - { title: string; description: string; action: () => void } ->; +export type TCommandPaletteActionList = Record void }>; export type TCommandPaletteShortcutList = { key: string; diff --git a/packages/types/src/instance/auth.ts b/packages/types/src/instance/auth.ts index 33c2c754767..274c5a29cd2 100644 --- a/packages/types/src/instance/auth.ts +++ b/packages/types/src/instance/auth.ts @@ -15,9 +15,7 @@ export type TInstanceAuthenticationMethodKeys = | "IS_GITHUB_ENABLED" | "IS_GITLAB_ENABLED"; -export type TInstanceGoogleAuthenticationConfigurationKeys = - | "GOOGLE_CLIENT_ID" - | "GOOGLE_CLIENT_SECRET"; +export type TInstanceGoogleAuthenticationConfigurationKeys = "GOOGLE_CLIENT_ID" | "GOOGLE_CLIENT_SECRET"; export type TInstanceGithubAuthenticationConfigurationKeys = | "GITHUB_CLIENT_ID" @@ -34,9 +32,7 @@ export type TInstanceAuthenticationConfigurationKeys = | TInstanceGithubAuthenticationConfigurationKeys | TInstanceGitlabAuthenticationConfigurationKeys; -export type TInstanceAuthenticationKeys = - | TInstanceAuthenticationMethodKeys - | TInstanceAuthenticationConfigurationKeys; +export type TInstanceAuthenticationKeys = TInstanceAuthenticationMethodKeys | TInstanceAuthenticationConfigurationKeys; export type TGetBaseAuthenticationModeProps = { disabled: boolean; diff --git a/packages/types/src/instance/image.ts b/packages/types/src/instance/image.ts index 7eee3bf91d5..9660a8559d7 100644 --- a/packages/types/src/instance/image.ts +++ b/packages/types/src/instance/image.ts @@ -1 +1 @@ -export type TInstanceImageConfigurationKeys = "UNSPLASH_ACCESS_KEY"; \ No newline at end of file +export type TInstanceImageConfigurationKeys = "UNSPLASH_ACCESS_KEY"; diff --git a/packages/types/src/issues/base.ts b/packages/types/src/issues/base.ts index b01bd3b7c08..26054bf1343 100644 --- a/packages/types/src/issues/base.ts +++ b/packages/types/src/issues/base.ts @@ -7,13 +7,7 @@ export * from "./issue_relation"; export * from "./issue_sub_issues"; export * from "./activity/base"; - -export type TLoader = - | "init-loader" - | "mutation" - | "pagination" - | "loaded" - | undefined; +export type TLoader = "init-loader" | "mutation" | "pagination" | "loaded" | undefined; export type TGroupedIssues = { [group_id: string]: string[]; diff --git a/packages/types/src/issues/issue.ts b/packages/types/src/issues/issue.ts index 6b5cc0638d3..3047ebd6507 100644 --- a/packages/types/src/issues/issue.ts +++ b/packages/types/src/issues/issue.ts @@ -207,4 +207,4 @@ export interface IWorkItemPeekOverview { embedRemoveCurrentNotification?: () => void; is_draft?: boolean; storeType?: EIssuesStoreType; -} \ No newline at end of file +} diff --git a/packages/types/src/issues/issue_attachment.ts b/packages/types/src/issues/issue_attachment.ts index f7503b9d20a..d118568afd2 100644 --- a/packages/types/src/issues/issue_attachment.ts +++ b/packages/types/src/issues/issue_attachment.ts @@ -15,7 +15,7 @@ export type TIssueAttachment = { }; export type TIssueAttachmentUploadResponse = TFileSignedURLResponse & { - attachment: TIssueAttachment + attachment: TIssueAttachment; }; export type TIssueAttachmentMap = { diff --git a/packages/types/src/module/modules.ts b/packages/types/src/module/modules.ts index b428fc8b638..50e9e8af0df 100644 --- a/packages/types/src/module/modules.ts +++ b/packages/types/src/module/modules.ts @@ -2,13 +2,7 @@ import type { TIssue } from "../issues/issue"; import type { IIssueFilterOptions } from "../view-props"; import type { ILinkDetails } from "../issues"; -export type TModuleStatus = - | "backlog" - | "planned" - | "in-progress" - | "paused" - | "completed" - | "cancelled"; +export type TModuleStatus = "backlog" | "planned" | "in-progress" | "paused" | "completed" | "cancelled"; export type TModuleCompletionChartDistribution = { [key: string]: number | null; @@ -114,9 +108,7 @@ export type ModuleLink = { url: string; }; -export type SelectModuleType = - | (IModule & { actionType: "edit" | "delete" | "create-issue" }) - | undefined; +export type SelectModuleType = (IModule & { actionType: "edit" | "delete" | "create-issue" }) | undefined; export type TModulePlotType = "burndown" | "points"; diff --git a/packages/types/src/pragmatic.ts b/packages/types/src/pragmatic.ts index 439e2b54fb7..bd0969ce2b1 100644 --- a/packages/types/src/pragmatic.ts +++ b/packages/types/src/pragmatic.ts @@ -26,9 +26,4 @@ export interface IPragmaticDropPayload { self: TDropTarget & TDropTargetMiscellaneousData; } -export type InstructionType = - | "reparent" - | "reorder-above" - | "reorder-below" - | "make-child" - | "instruction-blocked"; \ No newline at end of file +export type InstructionType = "reparent" | "reorder-above" | "reorder-below" | "make-child" | "instruction-blocked"; diff --git a/packages/types/src/project/project_filters.ts b/packages/types/src/project/project_filters.ts index 77da7365fb8..4c21488ab9e 100644 --- a/packages/types/src/project/project_filters.ts +++ b/packages/types/src/project/project_filters.ts @@ -13,9 +13,7 @@ export type TProjectDisplayFilters = { order_by?: TProjectOrderByOptions; }; -export type TProjectAppliedDisplayFilterKeys = - | "my_projects" - | "archived_projects"; +export type TProjectAppliedDisplayFilterKeys = "my_projects" | "archived_projects"; export type TProjectFilters = { access?: string[] | null; diff --git a/packages/types/src/project/projects.ts b/packages/types/src/project/projects.ts index 3de3c71ab91..6927688752d 100644 --- a/packages/types/src/project/projects.ts +++ b/packages/types/src/project/projects.ts @@ -152,4 +152,4 @@ export interface ISearchIssueResponse { export type TPartialProject = IPartialProject; -export type TProject = TPartialProject & IProject; +export type TProject = TPartialProject & IProject; diff --git a/packages/types/src/views.ts b/packages/types/src/views.ts index f7630422b60..79af8b73911 100644 --- a/packages/types/src/views.ts +++ b/packages/types/src/views.ts @@ -1,9 +1,5 @@ import { TLogoProps } from "./common"; -import { - IIssueDisplayFilterOptions, - IIssueDisplayProperties, - IIssueFilterOptions, -} from "./view-props"; +import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "./view-props"; export enum EViewAccess { PRIVATE, diff --git a/packages/types/src/workspace-views.ts b/packages/types/src/workspace-views.ts index 2554d63056e..00c07aec5a9 100644 --- a/packages/types/src/workspace-views.ts +++ b/packages/types/src/workspace-views.ts @@ -32,8 +32,4 @@ export interface IWorkspaceView { }; } -export type TStaticViewTypes = - | "all-issues" - | "assigned" - | "created" - | "subscribed"; +export type TStaticViewTypes = "all-issues" | "assigned" | "created" | "subscribed"; diff --git a/packages/ui/.storybook/main.ts b/packages/ui/.storybook/main.ts index 06442d65f02..4fe51da88be 100644 --- a/packages/ui/.storybook/main.ts +++ b/packages/ui/.storybook/main.ts @@ -18,7 +18,7 @@ const config: StorybookConfig = { getAbsolutePath("@storybook/addon-essentials"), getAbsolutePath("@chromatic-com/storybook"), getAbsolutePath("@storybook/addon-interactions"), - "@storybook/addon-styling-webpack" + "@storybook/addon-styling-webpack", ], framework: { name: getAbsolutePath("@storybook/react-webpack5"), diff --git a/packages/ui/src/dropdown/Readme.md b/packages/ui/src/dropdown/Readme.md index 314347b1e6a..4c9bad817c1 100644 --- a/packages/ui/src/dropdown/Readme.md +++ b/packages/ui/src/dropdown/Readme.md @@ -1,6 +1,7 @@ Below is a detailed list of the props included: ### Root Props + - value: string | string[]; - Current selected value. - onChange: (value: string | string []) => void; - Callback function for handling value changes. - options: TDropdownOption[] | undefined; - Array of options. @@ -14,6 +15,7 @@ Below is a detailed list of the props included: --- ### Button Props + - buttonContent?: (isOpen: boolean) => React.ReactNode; - Function to render the content of the button based on the open state. - buttonContainerClassName?: string; - Class name for the button container. - buttonClassName?: string; - Class name for the button itself. @@ -21,6 +23,7 @@ Below is a detailed list of the props included: --- ### Input Props + - disableSearch?: boolean; - Disables the search input if set to true. - inputPlaceholder?: string; - Placeholder text for the search input. - inputClassName?: string; - Class name for the search input. @@ -30,6 +33,7 @@ Below is a detailed list of the props included: --- ### Options Props + - keyExtractor: (option: TDropdownOption) => string; - Function to extract the key from each option. - optionsContainerClassName?: string; - Class name for the options container. - queryArray: string[]; - Array of strings to be used for querying the options. @@ -41,4 +45,4 @@ Below is a detailed list of the props included: --- -These properties offer extensive control over the dropdown's behavior and presentation, making it a highly versatile component suitable for various scenarios. \ No newline at end of file +These properties offer extensive control over the dropdown's behavior and presentation, making it a highly versatile component suitable for various scenarios. diff --git a/packages/ui/styles/globals.css b/packages/ui/styles/globals.css index 43338b7a9a2..1901c930698 100644 --- a/packages/ui/styles/globals.css +++ b/packages/ui/styles/globals.css @@ -57,23 +57,31 @@ --color-border-300: 212, 212, 212; /* strong border- 1 */ --color-border-400: 185, 185, 185; /* strong border- 2 */ - --color-shadow-2xs: 0px 0px 1px 0px rgba(23, 23, 23, 0.06), 0px 1px 2px 0px rgba(23, 23, 23, 0.06), + --color-shadow-2xs: + 0px 0px 1px 0px rgba(23, 23, 23, 0.06), 0px 1px 2px 0px rgba(23, 23, 23, 0.06), 0px 1px 2px 0px rgba(23, 23, 23, 0.14); - --color-shadow-xs: 0px 1px 2px 0px rgba(0, 0, 0, 0.16), 0px 2px 4px 0px rgba(16, 24, 40, 0.12), + --color-shadow-xs: + 0px 1px 2px 0px rgba(0, 0, 0, 0.16), 0px 2px 4px 0px rgba(16, 24, 40, 0.12), 0px 1px 8px -1px rgba(16, 24, 40, 0.1); - --color-shadow-sm: 0px 1px 4px 0px rgba(0, 0, 0, 0.01), 0px 4px 8px 0px rgba(0, 0, 0, 0.02), - 0px 1px 12px 0px rgba(0, 0, 0, 0.12); - --color-shadow-rg: 0px 3px 6px 0px rgba(0, 0, 0, 0.1), 0px 4px 4px 0px rgba(16, 24, 40, 0.08), + --color-shadow-sm: + 0px 1px 4px 0px rgba(0, 0, 0, 0.01), 0px 4px 8px 0px rgba(0, 0, 0, 0.02), 0px 1px 12px 0px rgba(0, 0, 0, 0.12); + --color-shadow-rg: + 0px 3px 6px 0px rgba(0, 0, 0, 0.1), 0px 4px 4px 0px rgba(16, 24, 40, 0.08), 0px 1px 12px 0px rgba(16, 24, 40, 0.04); - --color-shadow-md: 0px 4px 8px 0px rgba(0, 0, 0, 0.12), 0px 6px 12px 0px rgba(16, 24, 40, 0.12), + --color-shadow-md: + 0px 4px 8px 0px rgba(0, 0, 0, 0.12), 0px 6px 12px 0px rgba(16, 24, 40, 0.12), 0px 1px 16px 0px rgba(16, 24, 40, 0.12); - --color-shadow-lg: 0px 6px 12px 0px rgba(0, 0, 0, 0.12), 0px 8px 16px 0px rgba(0, 0, 0, 0.12), + --color-shadow-lg: + 0px 6px 12px 0px rgba(0, 0, 0, 0.12), 0px 8px 16px 0px rgba(0, 0, 0, 0.12), 0px 1px 24px 0px rgba(16, 24, 40, 0.12); - --color-shadow-xl: 0px 0px 18px 0px rgba(0, 0, 0, 0.16), 0px 0px 24px 0px rgba(16, 24, 40, 0.16), + --color-shadow-xl: + 0px 0px 18px 0px rgba(0, 0, 0, 0.16), 0px 0px 24px 0px rgba(16, 24, 40, 0.16), 0px 0px 52px 0px rgba(16, 24, 40, 0.16); - --color-shadow-2xl: 0px 8px 16px 0px rgba(0, 0, 0, 0.12), 0px 12px 24px 0px rgba(16, 24, 40, 0.12), + --color-shadow-2xl: + 0px 8px 16px 0px rgba(0, 0, 0, 0.12), 0px 12px 24px 0px rgba(16, 24, 40, 0.12), 0px 1px 32px 0px rgba(16, 24, 40, 0.12); - --color-shadow-3xl: 0px 12px 24px 0px rgba(0, 0, 0, 0.12), 0px 16px 32px 0px rgba(0, 0, 0, 0.12), + --color-shadow-3xl: + 0px 12px 24px 0px rgba(0, 0, 0, 0.12), 0px 16px 32px 0px rgba(0, 0, 0, 0.12), 0px 1px 48px 0px rgba(16, 24, 40, 0.12); --color-shadow-4xl: 0px 8px 40px 0px rgba(0, 0, 61, 0.05), 0px 12px 32px -16px rgba(0, 0, 0, 0.05); diff --git a/packages/utils/src/array.ts b/packages/utils/src/array.ts index 12727d3a005..5d1791c72a4 100644 --- a/packages/utils/src/array.ts +++ b/packages/utils/src/array.ts @@ -96,7 +96,6 @@ export const checkIfArraysHaveSameElements = (arr1: any[] | null, arr2: any[] | return arr1.length === arr2.length && arr1.every((e) => arr2.includes(e)); }; - type GroupedItems = { [key: string]: T[] }; /** diff --git a/packages/utils/src/calendar.ts b/packages/utils/src/calendar.ts index c982ff91cc9..a8038ec5ef5 100644 --- a/packages/utils/src/calendar.ts +++ b/packages/utils/src/calendar.ts @@ -1,7 +1,7 @@ // plane imports import { EStartOfTheWeek, ICalendarDate, ICalendarPayload } from "@plane/types"; // local imports -import { getWeekNumberOfDate, renderFormattedPayloadDate } from "./datetime"; +import { getWeekNumberOfDate, renderFormattedPayloadDate } from "./datetime"; /** * @returns {ICalendarPayload} calendar payload to render the calendar @@ -66,8 +66,9 @@ export const getOrderedDays = ( items: T[], getDayIndex: (item: T) => number, startOfWeek: EStartOfTheWeek = EStartOfTheWeek.SUNDAY -): T[] => [...items].sort((a, b) => { +): T[] => + [...items].sort((a, b) => { const dayA = (7 + getDayIndex(a) - startOfWeek) % 7; const dayB = (7 + getDayIndex(b) - startOfWeek) % 7; return dayA - dayB; - }) + }); diff --git a/packages/utils/src/cycle.ts b/packages/utils/src/cycle.ts index 66002c740e3..133db159582 100644 --- a/packages/utils/src/cycle.ts +++ b/packages/utils/src/cycle.ts @@ -6,8 +6,8 @@ import uniqBy from "lodash/uniqBy"; // plane imports import { ICycle, TCycleFilters } from "@plane/types"; // local imports -import { findTotalDaysInRange, generateDateArray, getDate } from "./datetime"; -import { satisfiesDateFilter } from "./filter"; +import { findTotalDaysInRange, generateDateArray, getDate } from "./datetime"; +import { satisfiesDateFilter } from "./filter"; /** * Orders cycles based on their status diff --git a/packages/utils/src/module.ts b/packages/utils/src/module.ts index b1e9f314db5..37108b9304c 100644 --- a/packages/utils/src/module.ts +++ b/packages/utils/src/module.ts @@ -2,8 +2,8 @@ import sortBy from "lodash/sortBy"; // plane imports import { IModule, TModuleDisplayFilters, TModuleFilters, TModuleOrderByOptions } from "@plane/types"; // local imports -import { getDate } from "./datetime"; -import { satisfiesDateFilter } from "./filter"; +import { getDate } from "./datetime"; +import { satisfiesDateFilter } from "./filter"; /** * @description orders modules based on their status diff --git a/packages/utils/src/page.ts b/packages/utils/src/page.ts index 2501bc5226f..3016bc0b63c 100644 --- a/packages/utils/src/page.ts +++ b/packages/utils/src/page.ts @@ -2,8 +2,8 @@ import sortBy from "lodash/sortBy"; // plane imports import { TPage, TPageFilterProps, TPageFiltersSortBy, TPageFiltersSortKey, TPageNavigationTabs } from "@plane/types"; // local imports -import { getDate } from "./datetime"; -import { satisfiesDateFilter } from "./filter"; +import { getDate } from "./datetime"; +import { satisfiesDateFilter } from "./filter"; /** * @description filters pages based on the page type @@ -84,4 +84,3 @@ export const getPageName = (name: string | undefined) => { if (!name || name.trim() === "") return "Untitled"; return name; }; - diff --git a/packages/utils/src/project-views.ts b/packages/utils/src/project-views.ts index 5263d709888..aa11f4de079 100644 --- a/packages/utils/src/project-views.ts +++ b/packages/utils/src/project-views.ts @@ -4,7 +4,7 @@ import orderBy from "lodash/orderBy"; import { SPACE_BASE_PATH, SPACE_BASE_URL } from "@plane/constants"; import { IProjectView, TViewFilterProps, TViewFiltersSortBy, TViewFiltersSortKey } from "@plane/types"; // local imports -import { getDate } from "./datetime"; +import { getDate } from "./datetime"; import { satisfiesDateFilter } from "./filter"; /** diff --git a/packages/utils/src/string.ts b/packages/utils/src/string.ts index 58822e1e909..302bf304116 100644 --- a/packages/utils/src/string.ts +++ b/packages/utils/src/string.ts @@ -319,7 +319,6 @@ export const copyTextToClipboard = async (text: string): Promise => { await navigator.clipboard.writeText(text); }; - /** * @description Joins URL path segments properly, removing duplicate slashes using URL encoding * @param {...string} segments - URL path segments to join @@ -371,4 +370,4 @@ export const joinUrlPath = (...segments: string[]): string => { const pathParts = joined.split("/").filter((part) => part !== ""); return pathParts.length > 0 ? `/${pathParts.join("/")}` : ""; } -}; \ No newline at end of file +}; diff --git a/packages/utils/src/work-item/modal.ts b/packages/utils/src/work-item/modal.ts index 74bb1063bbb..f39f87eda0f 100644 --- a/packages/utils/src/work-item/modal.ts +++ b/packages/utils/src/work-item/modal.ts @@ -33,7 +33,6 @@ export const convertWorkItemDataToSearchResponse = ( workspace__slug: workspaceSlug, }); - export function getChangedIssuefields(formData: Partial, dirtyFields: { [key: string]: boolean | undefined }) { const changedFields = {}; From dadd76b3edce86175209103fdf1f1a84c8c402b8 Mon Sep 17 00:00:00 2001 From: "M. Palanikannan" <73993394+Palanikannan1437@users.noreply.github.com> Date: Wed, 9 Jul 2025 13:37:17 +0530 Subject: [PATCH 048/130] [WIKI-534] fix: save title input on closing (#7366) * fix: save title input on closing * fix: title input updatioin --- .../core/components/issues/title-input.tsx | 41 +++++++++++++++++-- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/apps/web/core/components/issues/title-input.tsx b/apps/web/core/components/issues/title-input.tsx index bc04dbbb4d6..e2b4be88142 100644 --- a/apps/web/core/components/issues/title-input.tsx +++ b/apps/web/core/components/issues/title-input.tsx @@ -1,6 +1,6 @@ "use client"; -import { FC, useState, useEffect, useCallback } from "react"; +import { FC, useState, useEffect, useCallback, useRef } from "react"; import { observer } from "mobx-react"; import { useTranslation } from "@plane/i18n"; import { TNameDescriptionLoader } from "@plane/types"; @@ -42,11 +42,20 @@ export const IssueTitleInput: FC = observer((props) => { // states const [title, setTitle] = useState(""); const [isLengthVisible, setIsLengthVisible] = useState(false); + // ref to track if there are unsaved changes + const hasUnsavedChanges = useRef(false); + // ref to store current title value for cleanup function + const currentTitleRef = useRef(title); // hooks const debouncedValue = useDebounce(title, 1500); useEffect(() => { - if (value) setTitle(value); + if (value) { + setTitle(value); + currentTitleRef.current = value; + // Reset unsaved changes flag when value is set from props + hasUnsavedChanges.current = false; + } }, [value]); useEffect(() => { @@ -55,6 +64,7 @@ export const IssueTitleInput: FC = observer((props) => { if (debouncedValue.trim().length > 0) { issueOperations.update(workspaceSlug, projectId, issueId, { name: debouncedValue }).finally(() => { setIsSubmitting("saved"); + hasUnsavedChanges.current = false; if (textarea && !textarea.matches(":focus")) { const trimmedTitle = debouncedValue.trim(); if (trimmedTitle !== title) setTitle(trimmedTitle); @@ -63,6 +73,7 @@ export const IssueTitleInput: FC = observer((props) => { } else { setTitle(value || ""); setIsSubmitting("saved"); + hasUnsavedChanges.current = false; } } // DO NOT Add more dependencies here. It will cause multiple requests to be sent. @@ -76,9 +87,11 @@ export const IssueTitleInput: FC = observer((props) => { if (trimmedTitle.length > 0) { setTitle(trimmedTitle); setIsSubmitting("submitting"); + hasUnsavedChanges.current = true; } else { setTitle(value || ""); setIsSubmitting("saved"); + hasUnsavedChanges.current = false; } } }; @@ -95,10 +108,32 @@ export const IssueTitleInput: FC = observer((props) => { }; }, [title, isSubmitting, setIsSubmitting]); + // Save on unmount if there are unsaved changes + useEffect( + () => () => { + if (hasUnsavedChanges.current && currentTitleRef.current.trim().length > 0) { + issueOperations + .update(workspaceSlug, projectId, issueId, { name: currentTitleRef.current.trim() }) + .catch((error) => { + console.error("Failed to save title on unmount:", error); + }) + .finally(() => { + setIsSubmitting("saved"); + hasUnsavedChanges.current = false; + }); + } + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [] + ); + const handleTitleChange = useCallback( (e: React.ChangeEvent) => { setIsSubmitting("submitting"); - setTitle(e.target.value); + const titleFromEvent = e.target.value; + setTitle(titleFromEvent); + currentTitleRef.current = titleFromEvent; + hasUnsavedChanges.current = true; }, [setIsSubmitting] ); From 9d88fc999c3537fd24640293b13f844009a5c8a2 Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Date: Wed, 9 Jul 2025 13:52:17 +0530 Subject: [PATCH 049/130] [WEB-4464] fix: content wrapper overflow (#7367) --- apps/web/ce/components/workspace/content-wrapper.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/ce/components/workspace/content-wrapper.tsx b/apps/web/ce/components/workspace/content-wrapper.tsx index 242db454206..79a74f56fdb 100644 --- a/apps/web/ce/components/workspace/content-wrapper.tsx +++ b/apps/web/ce/components/workspace/content-wrapper.tsx @@ -4,6 +4,6 @@ import { observer } from "mobx-react"; export const WorkspaceContentWrapper = observer(({ children }: { children: React.ReactNode }) => (
    -
    {children}
    +
    {children}
    )); From 853423608c884f38fedbf6cf66672528f29dce45 Mon Sep 17 00:00:00 2001 From: Akshat Jain Date: Wed, 9 Jul 2025 16:00:16 +0530 Subject: [PATCH 050/130] [INFRA-206] fix: update build context and dockerfile paths in build.yml in deploy/selfhost (#7368) * chore: update build context and dockerfile paths in build.yml for self-hosted deployment * fix: build context --------- Co-authored-by: sriramveeraghanta --- deploy/selfhost/build.yml | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/deploy/selfhost/build.yml b/deploy/selfhost/build.yml index aa5306fb464..4a9d3d11a9e 100644 --- a/deploy/selfhost/build.yml +++ b/deploy/selfhost/build.yml @@ -2,29 +2,35 @@ services: web: image: ${DOCKERHUB_USER:-local}/plane-frontend:${APP_RELEASE:-latest} build: - context: . - dockerfile: ./web/Dockerfile.web + context: ../../ + dockerfile: apps/web/Dockerfile.web space: image: ${DOCKERHUB_USER:-local}/plane-space:${APP_RELEASE:-latest} build: - context: ./ - dockerfile: ./space/Dockerfile.space + context: ../../ + dockerfile: apps/space/Dockerfile.space admin: image: ${DOCKERHUB_USER:-local}/plane-admin:${APP_RELEASE:-latest} build: - context: ./ - dockerfile: ./admin/Dockerfile.admin + context: ../../ + dockerfile: apps/admin/Dockerfile.admin + + live: + image: ${DOCKERHUB_USER:-local}/plane-live:${APP_RELEASE:-latest} + build: + context: ../../ + dockerfile: apps/live/Dockerfile.live api: image: ${DOCKERHUB_USER:-local}/plane-backend:${APP_RELEASE:-latest} build: - context: ./apps/server - dockerfile: ./Dockerfile.api + context: ../../apps/api + dockerfile: Dockerfile.api proxy: image: ${DOCKERHUB_USER:-local}/plane-proxy:${APP_RELEASE:-latest} build: - context: ./nginx - dockerfile: ./Dockerfile + context: ../../nginx + dockerfile: Dockerfile From fcb6e269a0a5ceca2f4b2951e3cccdbd6c312f3a Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com> Date: Wed, 9 Jul 2025 17:59:04 +0530 Subject: [PATCH 051/130] [WIKI-497] feat: table insert column and row handles (#7286) * refactor: tables width and selection UI * fix: drag handle position * refactor: selection decorator logic * refactor: adjacent cells logic * refactor: folder structure * chore: default column width for new columns * refactor: plugin location * feat: table insert handlers * refactor: css rules * refactor: plugins folder structure * chore: add aria labels --- .../table/plugins/insert-handlers/plugin.ts | 87 ++++ .../table/plugins/insert-handlers/utils.ts | 430 ++++++++++++++++++ .../table/plugins/selection-outline/plugin.ts | 58 +++ .../table/plugins/selection-outline/utils.ts | 75 +++ .../src/core/extensions/table/table-cell.ts | 2 +- .../src/core/extensions/table/table/table.ts | 2 + packages/editor/src/styles/table.css | 73 ++- 7 files changed, 724 insertions(+), 3 deletions(-) create mode 100644 packages/editor/src/core/extensions/table/plugins/insert-handlers/plugin.ts create mode 100644 packages/editor/src/core/extensions/table/plugins/insert-handlers/utils.ts create mode 100644 packages/editor/src/core/extensions/table/plugins/selection-outline/plugin.ts create mode 100644 packages/editor/src/core/extensions/table/plugins/selection-outline/utils.ts diff --git a/packages/editor/src/core/extensions/table/plugins/insert-handlers/plugin.ts b/packages/editor/src/core/extensions/table/plugins/insert-handlers/plugin.ts new file mode 100644 index 00000000000..97cd2d09f7a --- /dev/null +++ b/packages/editor/src/core/extensions/table/plugins/insert-handlers/plugin.ts @@ -0,0 +1,87 @@ +import { type Editor } from "@tiptap/core"; +import { Plugin, PluginKey } from "@tiptap/pm/state"; +// local imports +import { createColumnInsertButton, createRowInsertButton, findAllTables, TableInfo } from "./utils"; + +const TABLE_INSERT_PLUGIN_KEY = new PluginKey("table-insert"); + +export const TableInsertPlugin = (editor: Editor): Plugin => { + const tableMap = new Map(); + + const setupTable = (tableInfo: TableInfo) => { + const { tableElement } = tableInfo; + + // Create and add column button if it doesn't exist + if (!tableInfo.columnButtonElement) { + const columnButton = createColumnInsertButton(editor, tableInfo); + tableElement.appendChild(columnButton); + tableInfo.columnButtonElement = columnButton; + } + + // Create and add row button if it doesn't exist + if (!tableInfo.rowButtonElement) { + const rowButton = createRowInsertButton(editor, tableInfo); + tableElement.appendChild(rowButton); + tableInfo.rowButtonElement = rowButton; + } + + tableMap.set(tableElement, tableInfo); + }; + + const cleanupTable = (tableElement: HTMLElement) => { + const tableInfo = tableMap.get(tableElement); + tableInfo?.columnButtonElement?.remove(); + tableInfo?.rowButtonElement?.remove(); + tableMap.delete(tableElement); + }; + + const updateAllTables = () => { + if (!editor.isEditable) { + // Clean up all tables if editor is not editable + tableMap.forEach((_, tableElement) => { + cleanupTable(tableElement); + }); + return; + } + + const currentTables = findAllTables(editor); + const currentTableElements = new Set(currentTables.map((t) => t.tableElement)); + + // Remove buttons from tables that no longer exist + tableMap.forEach((_, tableElement) => { + if (!currentTableElements.has(tableElement)) { + cleanupTable(tableElement); + } + }); + + // Add buttons to new tables + currentTables.forEach((tableInfo) => { + if (!tableMap.has(tableInfo.tableElement)) { + setupTable(tableInfo); + } + }); + }; + + return new Plugin({ + key: TABLE_INSERT_PLUGIN_KEY, + view() { + setTimeout(updateAllTables, 0); + + return { + update(view, prevState) { + // Update when document changes + if (!prevState.doc.eq(view.state.doc)) { + updateAllTables(); + } + }, + destroy() { + // Clean up all tables + tableMap.forEach((_, tableElement) => { + cleanupTable(tableElement); + }); + tableMap.clear(); + }, + }; + }, + }); +}; diff --git a/packages/editor/src/core/extensions/table/plugins/insert-handlers/utils.ts b/packages/editor/src/core/extensions/table/plugins/insert-handlers/utils.ts new file mode 100644 index 00000000000..1306e7919a1 --- /dev/null +++ b/packages/editor/src/core/extensions/table/plugins/insert-handlers/utils.ts @@ -0,0 +1,430 @@ +import type { Editor } from "@tiptap/core"; +import type { Node as ProseMirrorNode } from "@tiptap/pm/model"; +import { addColumn, removeColumn, addRow, removeRow, TableMap } from "@tiptap/pm/tables"; + +const addSvg = ` + +`; + +export type TableInfo = { + tableElement: HTMLElement; + tableNode: ProseMirrorNode; + tablePos: number; + columnButtonElement?: HTMLElement; + rowButtonElement?: HTMLElement; +}; + +export const createColumnInsertButton = (editor: Editor, tableInfo: TableInfo): HTMLElement => { + const button = document.createElement("button"); + button.type = "button"; + button.className = "table-column-insert-button"; + button.title = "Insert columns"; + button.ariaLabel = "Insert columns"; + + const icon = document.createElement("span"); + icon.innerHTML = addSvg; + button.appendChild(icon); + + let mouseDownX = 0; + let isDragging = false; + let dragStarted = false; + let lastActionX = 0; + const DRAG_THRESHOLD = 5; // pixels to start drag + const ACTION_THRESHOLD = 150; // pixels total distance to trigger action + + const onMouseDown = (e: MouseEvent) => { + if (e.button !== 0) return; // Only left mouse button + + e.preventDefault(); + e.stopPropagation(); + + mouseDownX = e.clientX; + lastActionX = e.clientX; + isDragging = false; + dragStarted = false; + + document.addEventListener("mousemove", onMouseMove); + document.addEventListener("mouseup", onMouseUp); + }; + + const onMouseMove = (e: MouseEvent) => { + const deltaX = e.clientX - mouseDownX; + const distance = Math.abs(deltaX); + + // Start dragging if moved more than threshold + if (!isDragging && distance > DRAG_THRESHOLD) { + isDragging = true; + dragStarted = true; + + // Visual feedback + button.classList.add("dragging"); + document.body.style.userSelect = "none"; + } + + if (isDragging) { + const totalDistance = Math.abs(e.clientX - lastActionX); + + // Only trigger action when total distance reaches threshold + if (totalDistance >= ACTION_THRESHOLD) { + // Determine direction based on current movement relative to last action point + const directionFromLastAction = e.clientX - lastActionX; + + // Right direction - add columns + if (directionFromLastAction > 0) { + insertColumnAfterLast(editor, tableInfo); + lastActionX = e.clientX; // Reset action point + } + // Left direction - delete empty columns + else if (directionFromLastAction < 0) { + const deleted = removeLastColumn(editor, tableInfo); + if (deleted) { + lastActionX = e.clientX; // Reset action point + } + } + } + } + }; + + const onMouseUp = () => { + document.removeEventListener("mousemove", onMouseMove); + document.removeEventListener("mouseup", onMouseUp); + + if (isDragging) { + // Clean up drag state + button.classList.remove("dragging"); + document.body.style.cursor = ""; + document.body.style.userSelect = ""; + } else if (!dragStarted) { + // Handle as click if no dragging occurred + insertColumnAfterLast(editor, tableInfo); + } + + isDragging = false; + dragStarted = false; + }; + + button.addEventListener("mousedown", onMouseDown); + + // Prevent context menu and text selection + button.addEventListener("contextmenu", (e) => e.preventDefault()); + button.addEventListener("selectstart", (e) => e.preventDefault()); + + return button; +}; + +export const createRowInsertButton = (editor: Editor, tableInfo: TableInfo): HTMLElement => { + const button = document.createElement("button"); + button.type = "button"; + button.className = "table-row-insert-button"; + button.title = "Insert rows"; + button.ariaLabel = "Insert rows"; + + const icon = document.createElement("span"); + icon.innerHTML = addSvg; + button.appendChild(icon); + + let mouseDownY = 0; + let isDragging = false; + let dragStarted = false; + let lastActionY = 0; + const DRAG_THRESHOLD = 5; // pixels to start drag + const ACTION_THRESHOLD = 40; // pixels total distance to trigger action + + const onMouseDown = (e: MouseEvent) => { + if (e.button !== 0) return; // Only left mouse button + + e.preventDefault(); + e.stopPropagation(); + + mouseDownY = e.clientY; + lastActionY = e.clientY; + isDragging = false; + dragStarted = false; + + document.addEventListener("mousemove", onMouseMove); + document.addEventListener("mouseup", onMouseUp); + }; + + const onMouseMove = (e: MouseEvent) => { + const deltaY = e.clientY - mouseDownY; + const distance = Math.abs(deltaY); + + // Start dragging if moved more than threshold + if (!isDragging && distance > DRAG_THRESHOLD) { + isDragging = true; + dragStarted = true; + + // Visual feedback + button.classList.add("dragging"); + document.body.style.userSelect = "none"; + } + + if (isDragging) { + const totalDistance = Math.abs(e.clientY - lastActionY); + + // Only trigger action when total distance reaches threshold + if (totalDistance >= ACTION_THRESHOLD) { + // Determine direction based on current movement relative to last action point + const directionFromLastAction = e.clientY - lastActionY; + + // Down direction - add rows + if (directionFromLastAction > 0) { + insertRowAfterLast(editor, tableInfo); + lastActionY = e.clientY; // Reset action point + } + // Up direction - delete empty rows + else if (directionFromLastAction < 0) { + const deleted = removeLastRow(editor, tableInfo); + if (deleted) { + lastActionY = e.clientY; // Reset action point + } + } + } + } + }; + + const onMouseUp = () => { + document.removeEventListener("mousemove", onMouseMove); + document.removeEventListener("mouseup", onMouseUp); + + if (isDragging) { + // Clean up drag state + button.classList.remove("dragging"); + document.body.style.cursor = ""; + document.body.style.userSelect = ""; + } else if (!dragStarted) { + // Handle as click if no dragging occurred + insertRowAfterLast(editor, tableInfo); + } + + isDragging = false; + dragStarted = false; + }; + + button.addEventListener("mousedown", onMouseDown); + + // Prevent context menu and text selection + button.addEventListener("contextmenu", (e) => e.preventDefault()); + button.addEventListener("selectstart", (e) => e.preventDefault()); + + return button; +}; + +export const findAllTables = (editor: Editor): TableInfo[] => { + const tables: TableInfo[] = []; + const tableElements = editor.view.dom.querySelectorAll("table"); + + tableElements.forEach((tableElement) => { + // Find the table's ProseMirror position + let tablePos = -1; + let tableNode: ProseMirrorNode | null = null; + + // Walk through the document to find matching table nodes + editor.state.doc.descendants((node, pos) => { + if (node.type.spec.tableRole === "table") { + const domAtPos = editor.view.domAtPos(pos + 1); + let domTable = domAtPos.node; + + // Navigate to find the table element + while (domTable && domTable.parentNode && domTable.nodeType !== Node.ELEMENT_NODE) { + domTable = domTable.parentNode; + } + + while (domTable && domTable.parentNode && (domTable as HTMLElement).tagName !== "TABLE") { + domTable = domTable.parentNode; + } + + if (domTable === tableElement) { + tablePos = pos; + tableNode = node; + return false; // Stop iteration + } + } + }); + + if (tablePos !== -1 && tableNode) { + tables.push({ + tableElement, + tableNode, + tablePos, + }); + } + }); + + return tables; +}; + +const getCurrentTableInfo = (editor: Editor, tableInfo: TableInfo): TableInfo => { + // Refresh table info to get latest state + const tables = findAllTables(editor); + const updated = tables.find((t) => t.tableElement === tableInfo.tableElement); + return updated || tableInfo; +}; + +// Column functions +const insertColumnAfterLast = (editor: Editor, tableInfo: TableInfo) => { + const currentTableInfo = getCurrentTableInfo(editor, tableInfo); + const { tableNode, tablePos } = currentTableInfo; + const tableMapData = TableMap.get(tableNode); + const lastColumnIndex = tableMapData.width; + + const tr = editor.state.tr; + const rect = { + map: tableMapData, + tableStart: tablePos, + table: tableNode, + top: 0, + left: 0, + bottom: tableMapData.height - 1, + right: tableMapData.width - 1, + }; + + const newTr = addColumn(tr, rect, lastColumnIndex); + editor.view.dispatch(newTr); +}; + +const removeLastColumn = (editor: Editor, tableInfo: TableInfo): boolean => { + const currentTableInfo = getCurrentTableInfo(editor, tableInfo); + const { tableNode, tablePos } = currentTableInfo; + const tableMapData = TableMap.get(tableNode); + + // Don't delete if only one column left + if (tableMapData.width <= 1) { + return false; + } + + const lastColumnIndex = tableMapData.width - 1; + + // Check if last column is empty + if (!isColumnEmpty(currentTableInfo, lastColumnIndex)) { + return false; + } + + const tr = editor.state.tr; + const rect = { + map: tableMapData, + tableStart: tablePos, + table: tableNode, + top: 0, + left: 0, + bottom: tableMapData.height - 1, + right: tableMapData.width - 1, + }; + + removeColumn(tr, rect, lastColumnIndex); + editor.view.dispatch(tr); + return true; +}; + +// Helper function to check if a single cell is empty +const isCellEmpty = (cell: ProseMirrorNode | null | undefined): boolean => { + if (!cell || cell.content.size === 0) { + return true; + } + + // Check if cell has any non-empty content + let hasContent = false; + cell.content.forEach((node) => { + if (node.type.name === "paragraph") { + if (node.content.size > 0) { + hasContent = true; + } + } else if (node.content.size > 0 || node.isText) { + hasContent = true; + } + }); + + return !hasContent; +}; + +const isColumnEmpty = (tableInfo: TableInfo, columnIndex: number): boolean => { + const { tableNode } = tableInfo; + const tableMapData = TableMap.get(tableNode); + + // Check each cell in the column + for (let row = 0; row < tableMapData.height; row++) { + const cellIndex = row * tableMapData.width + columnIndex; + const cellPos = tableMapData.map[cellIndex]; + const cell = tableNode.nodeAt(cellPos); + + if (!isCellEmpty(cell)) { + return false; + } + } + return true; +}; + +// Row functions +const insertRowAfterLast = (editor: Editor, tableInfo: TableInfo) => { + const currentTableInfo = getCurrentTableInfo(editor, tableInfo); + const { tableNode, tablePos } = currentTableInfo; + const tableMapData = TableMap.get(tableNode); + const lastRowIndex = tableMapData.height; + + const tr = editor.state.tr; + const rect = { + map: tableMapData, + tableStart: tablePos, + table: tableNode, + top: 0, + left: 0, + bottom: tableMapData.height - 1, + right: tableMapData.width - 1, + }; + + const newTr = addRow(tr, rect, lastRowIndex); + editor.view.dispatch(newTr); +}; + +const removeLastRow = (editor: Editor, tableInfo: TableInfo): boolean => { + const currentTableInfo = getCurrentTableInfo(editor, tableInfo); + const { tableNode, tablePos } = currentTableInfo; + const tableMapData = TableMap.get(tableNode); + + // Don't delete if only one row left + if (tableMapData.height <= 1) { + return false; + } + + const lastRowIndex = tableMapData.height - 1; + + // Check if last row is empty + if (!isRowEmpty(currentTableInfo, lastRowIndex)) { + return false; + } + + const tr = editor.state.tr; + const rect = { + map: tableMapData, + tableStart: tablePos, + table: tableNode, + top: 0, + left: 0, + bottom: tableMapData.height - 1, + right: tableMapData.width - 1, + }; + + removeRow(tr, rect, lastRowIndex); + editor.view.dispatch(tr); + return true; +}; + +const isRowEmpty = (tableInfo: TableInfo, rowIndex: number): boolean => { + const { tableNode } = tableInfo; + const tableMapData = TableMap.get(tableNode); + + // Check each cell in the row + for (let col = 0; col < tableMapData.width; col++) { + const cellIndex = rowIndex * tableMapData.width + col; + const cellPos = tableMapData.map[cellIndex]; + const cell = tableNode.nodeAt(cellPos); + + if (!isCellEmpty(cell)) { + return false; + } + } + return true; +}; diff --git a/packages/editor/src/core/extensions/table/plugins/selection-outline/plugin.ts b/packages/editor/src/core/extensions/table/plugins/selection-outline/plugin.ts new file mode 100644 index 00000000000..0e88d8c7797 --- /dev/null +++ b/packages/editor/src/core/extensions/table/plugins/selection-outline/plugin.ts @@ -0,0 +1,58 @@ +import { findParentNode, type Editor } from "@tiptap/core"; +import { Plugin, PluginKey } from "@tiptap/pm/state"; +import { CellSelection, TableMap } from "@tiptap/pm/tables"; +import { Decoration, DecorationSet } from "@tiptap/pm/view"; +// local imports +import { getCellBorderClasses } from "./utils"; + +type TableCellSelectionOutlinePluginState = { + decorations?: DecorationSet; +}; + +const TABLE_SELECTION_OUTLINE_PLUGIN_KEY = new PluginKey("table-cell-selection-outline"); + +export const TableCellSelectionOutlinePlugin = (editor: Editor): Plugin => + new Plugin({ + key: TABLE_SELECTION_OUTLINE_PLUGIN_KEY, + state: { + init: () => ({}), + apply(tr, prev, oldState, newState) { + if (!editor.isEditable) return {}; + const table = findParentNode((node) => node.type.spec.tableRole === "table")(newState.selection); + const hasDocChanged = tr.docChanged || !newState.selection.eq(oldState.selection); + if (!table || !hasDocChanged) { + return table === undefined ? {} : prev; + } + + const { selection } = newState; + if (!(selection instanceof CellSelection)) return {}; + + const decorations: Decoration[] = []; + const tableMap = TableMap.get(table.node); + const selectedCells: number[] = []; + + // First, collect all selected cell positions + selection.forEachCell((_node, pos) => { + const start = pos - table.pos - 1; + selectedCells.push(start); + }); + + // Then, add decorations with appropriate border classes + selection.forEachCell((node, pos) => { + const start = pos - table.pos - 1; + const classes = getCellBorderClasses(start, selectedCells, tableMap); + + decorations.push(Decoration.node(pos, pos + node.nodeSize, { class: classes.join(" ") })); + }); + + return { + decorations: DecorationSet.create(newState.doc, decorations), + }; + }, + }, + props: { + decorations(state) { + return TABLE_SELECTION_OUTLINE_PLUGIN_KEY.getState(state).decorations; + }, + }, + }); diff --git a/packages/editor/src/core/extensions/table/plugins/selection-outline/utils.ts b/packages/editor/src/core/extensions/table/plugins/selection-outline/utils.ts new file mode 100644 index 00000000000..f4c43e77ee6 --- /dev/null +++ b/packages/editor/src/core/extensions/table/plugins/selection-outline/utils.ts @@ -0,0 +1,75 @@ +import type { TableMap } from "@tiptap/pm/tables"; + +/** + * Calculates the positions of cells adjacent to a given cell in a table + * @param cellStart - The start position of the current cell in the document + * @param tableMap - ProseMirror's table mapping structure containing cell positions and dimensions + * @returns Object with positions of adjacent cells (undefined if cell doesn't exist at table edge) + */ +const getAdjacentCellPositions = ( + cellStart: number, + tableMap: TableMap +): { top?: number; bottom?: number; left?: number; right?: number } => { + // Extract table dimensions + // width -> number of columns in the table + // height -> number of rows in the table + const { width, height } = tableMap; + + // Find the index of our cell in the flat tableMap.map array + // tableMap.map contains start positions of all cells in row-by-row order + const cellIndex = tableMap.map.indexOf(cellStart); + + // Safety check: if cell position not found in table map, return empty object + if (cellIndex === -1) return {}; + + // Convert flat array index to 2D grid coordinates + // row = which row the cell is in (0-based from top) + // col = which column the cell is in (0-based from left) + const row = Math.floor(cellIndex / width); // Integer division gives row number + const col = cellIndex % width; // Remainder gives column number + + return { + // Top cell: same column, one row up + // Check if we're not in the first row (row > 0) before calculating + top: row > 0 ? tableMap.map[(row - 1) * width + col] : undefined, + + // Bottom cell: same column, one row down + // Check if we're not in the last row (row < height - 1) before calculating + bottom: row < height - 1 ? tableMap.map[(row + 1) * width + col] : undefined, + + // Left cell: same row, one column left + // Check if we're not in the first column (col > 0) before calculating + left: col > 0 ? tableMap.map[row * width + (col - 1)] : undefined, + + // Right cell: same row, one column right + // Check if we're not in the last column (col < width - 1) before calculating + right: col < width - 1 ? tableMap.map[row * width + (col + 1)] : undefined, + }; +}; + +export const getCellBorderClasses = (cellStart: number, selectedCells: number[], tableMap: TableMap): string[] => { + const adjacent = getAdjacentCellPositions(cellStart, tableMap); + const classes: string[] = []; + + // Add border-right if right cell is not selected or doesn't exist + if (adjacent.right === undefined || !selectedCells.includes(adjacent.right)) { + classes.push("selectedCell-border-right"); + } + + // Add border-left if left cell is not selected or doesn't exist + if (adjacent.left === undefined || !selectedCells.includes(adjacent.left)) { + classes.push("selectedCell-border-left"); + } + + // Add border-top if top cell is not selected or doesn't exist + if (adjacent.top === undefined || !selectedCells.includes(adjacent.top)) { + classes.push("selectedCell-border-top"); + } + + // Add border-bottom if bottom cell is not selected or doesn't exist + if (adjacent.bottom === undefined || !selectedCells.includes(adjacent.bottom)) { + classes.push("selectedCell-border-bottom"); + } + + return classes; +}; diff --git a/packages/editor/src/core/extensions/table/table-cell.ts b/packages/editor/src/core/extensions/table/table-cell.ts index 988fcbb14d2..a9c98717bef 100644 --- a/packages/editor/src/core/extensions/table/table-cell.ts +++ b/packages/editor/src/core/extensions/table/table-cell.ts @@ -2,7 +2,7 @@ import { mergeAttributes, Node } from "@tiptap/core"; // constants import { CORE_EXTENSIONS } from "@/constants/extension"; // local imports -import { TableCellSelectionOutlinePlugin } from "./plugins/table-selection-outline/plugin"; +import { TableCellSelectionOutlinePlugin } from "./plugins/selection-outline/plugin"; import { DEFAULT_COLUMN_WIDTH } from "./table"; export interface TableCellOptions { diff --git a/packages/editor/src/core/extensions/table/table/table.ts b/packages/editor/src/core/extensions/table/table/table.ts index aa2c79aaf3d..66e54adcdaf 100644 --- a/packages/editor/src/core/extensions/table/table/table.ts +++ b/packages/editor/src/core/extensions/table/table/table.ts @@ -23,6 +23,7 @@ import { Decoration } from "@tiptap/pm/view"; // constants import { CORE_EXTENSIONS } from "@/constants/extension"; // local imports +import { TableInsertPlugin } from "../plugins/insert-handlers/plugin"; import { tableControls } from "./table-controls"; import { TableView } from "./table-view"; import { createTable } from "./utilities/create-table"; @@ -266,6 +267,7 @@ export const Table = Node.create({ allowTableNodeSelection: this.options.allowTableNodeSelection, }), tableControls(), + TableInsertPlugin(this.editor), ]; if (isResizable) { diff --git a/packages/editor/src/styles/table.css b/packages/editor/src/styles/table.css index 8c0b1786af7..e9556c9fdba 100644 --- a/packages/editor/src/styles/table.css +++ b/packages/editor/src/styles/table.css @@ -1,10 +1,12 @@ .table-wrapper { overflow-x: auto; + padding-bottom: 30px; table { + position: relative; border-collapse: collapse; table-layout: fixed; - margin: 0.5rem 0 1rem 0; + margin: 0.5rem 0 0 0; border: 1px solid rgba(var(--color-border-200)); width: 100%; @@ -22,6 +24,7 @@ margin-bottom: 0; } + /* Selected cell outline */ &.selectedCell { user-select: none; @@ -50,6 +53,7 @@ border-right: 2px solid rgba(var(--color-primary-100)); } } + /* End selected cell outline */ } th { @@ -65,14 +69,16 @@ } } + /* Selected status */ &.ProseMirror-selectednode { table { background-color: rgba(var(--color-primary-100), 0.2); } } + /* End selected status */ } -/* table dropdown */ +/* Column resizer */ .table-wrapper table .column-resize-handle { position: absolute; right: -1px; @@ -83,6 +89,7 @@ background-color: rgba(var(--color-primary-100)); pointer-events: none; } +/* End column resizer */ .table-wrapper .table-controls { position: absolute; @@ -146,3 +153,65 @@ opacity: 0; pointer-events: none; } + +/* Insert buttons */ +.table-wrapper { + .table-column-insert-button, + .table-row-insert-button { + position: absolute; + background-color: rgba(var(--color-background-90)); + color: rgba(var(--color-text-300)); + border: 1px solid rgba(var(--color-border-200)); + border-radius: 4px; + display: grid; + place-items: center; + opacity: 0; + pointer-events: none; + outline: none; + z-index: 1000; + transition: all 0.2s ease; + + &:hover { + background-color: rgba(var(--color-background-80)); + color: rgba(var(--color-text-100)); + } + + &.dragging { + opacity: 1; + pointer-events: auto; + background-color: rgba(var(--color-primary-100), 0.2); + color: rgba(var(--color-text-100)); + } + + svg { + width: 12px; + height: 12px; + } + } + + .table-column-insert-button { + top: 0; + right: -20px; + width: 20px; + height: 100%; + transform: translateX(50%); + } + + .table-row-insert-button { + bottom: -20px; + left: 0; + width: 100%; + height: 20px; + transform: translateY(50%); + } + + /* Show buttons on table hover */ + &:hover { + .table-column-insert-button, + .table-row-insert-button { + opacity: 1; + pointer-events: auto; + } + } +} +/* End insert buttons */ From 3618ffc2c38eb793a0b6c04e6fbac6d6b1f14eef Mon Sep 17 00:00:00 2001 From: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com> Date: Thu, 10 Jul 2025 14:23:08 +0530 Subject: [PATCH 052/130] [WEB-4469] fix: full screen mode visibility for Gnatt and Analytics --- apps/web/core/components/analytics/work-items/modal/index.tsx | 2 +- apps/web/core/components/gantt-chart/chart/root.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/web/core/components/analytics/work-items/modal/index.tsx b/apps/web/core/components/analytics/work-items/modal/index.tsx index 292dc1be5e0..78b07161ec4 100644 --- a/apps/web/core/components/analytics/work-items/modal/index.tsx +++ b/apps/web/core/components/analytics/work-items/modal/index.tsx @@ -32,7 +32,7 @@ export const WorkItemsModal: React.FC = observer((props) => { return ( - + = observer((props) => { return (
    From 1cb49cacaee6b7b8cb8ee5da48672a5d59ffb27d Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Thu, 10 Jul 2025 15:26:43 +0530 Subject: [PATCH 053/130] fix: packages dev command failing due to missing dependency mapping (#7381) * fix: packages dev command failing due to missing dependency mapping * fix: typescript version to match with other packages --- packages/logger/package.json | 1 + packages/types/package.json | 3 ++- packages/ui/package.json | 5 +++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/logger/package.json b/packages/logger/package.json index 05715d2deac..82666bb5a14 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -30,6 +30,7 @@ "@plane/eslint-config": "*", "@plane/typescript-config": "*", "@types/node": "^22.5.4", + "tsup": "8.4.0", "typescript": "5.8.3" } } diff --git a/packages/types/package.json b/packages/types/package.json index 0c6b0185d7b..6965ddf66dc 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -30,6 +30,7 @@ "devDependencies": { "@plane/eslint-config": "*", "@plane/typescript-config": "*", - "tsup": "8.4.0" + "tsup": "8.4.0", + "typescript": "5.8.3" } } diff --git a/packages/ui/package.json b/packages/ui/package.json index df13b6dc999..39fd039cc70 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -12,8 +12,8 @@ "dist/**" ], "scripts": { - "build": "tsup src/index.ts --format esm,cjs --dts --external react --minify", - "dev": "tsup src/index.ts --format esm,cjs --watch --dts --external react", + "build": "tsup --minify", + "dev": "tsup --watch", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build", "postcss": "postcss styles/globals.css -o styles/output.css --watch", @@ -34,6 +34,7 @@ "@blueprintjs/core": "^4.16.3", "@blueprintjs/popover2": "^1.13.3", "@headlessui/react": "^1.7.3", + "@plane/constants": "*", "@plane/hooks": "*", "@plane/utils": "*", "@popperjs/core": "^2.11.8", From 4d0a7e4658da89b943cfc0cdae3f20acc67b4c42 Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Date: Thu, 10 Jul 2025 15:35:13 +0530 Subject: [PATCH 054/130] [WEB-4470] fix: sidebar custom theme bg (#7379) --- .../[workspaceSlug]/(projects)/extended-sidebar-wrapper.tsx | 2 +- apps/web/core/components/sidebar/resizable-sidebar.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/extended-sidebar-wrapper.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/extended-sidebar-wrapper.tsx index 22d2b2c48a8..bf5fdb4e205 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/extended-sidebar-wrapper.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/extended-sidebar-wrapper.tsx @@ -29,7 +29,7 @@ export const ExtendedSidebarWrapper: FC = observer((props) => { id={excludedElementId} ref={extendedSidebarRef} className={cn( - `absolute h-full z-[19] flex flex-col py-2 transform transition-all duration-300 ease-in-out bg-custom-background-100 border-r border-custom-sidebar-border-200 p-4 shadow-sm`, + `absolute h-full z-[19] flex flex-col py-2 transform transition-all duration-300 ease-in-out bg-custom-sidebar-background-100 border-r border-custom-sidebar-border-200 p-4 shadow-sm`, { "translate-x-0 opacity-100": isExtendedSidebarOpened, [`-translate-x-[${EXTENDED_SIDEBAR_WIDTH}px] opacity-0 hidden`]: !isExtendedSidebarOpened, diff --git a/apps/web/core/components/sidebar/resizable-sidebar.tsx b/apps/web/core/components/sidebar/resizable-sidebar.tsx index 9f0741297b4..64ae3f56fdb 100644 --- a/apps/web/core/components/sidebar/resizable-sidebar.tsx +++ b/apps/web/core/components/sidebar/resizable-sidebar.tsx @@ -257,7 +257,7 @@ export function ResizableSidebar({ >
    diff --git a/apps/web/ce/components/workspace/billing/comparison/plan-detail.tsx b/apps/web/ce/components/workspace/billing/comparison/plan-detail.tsx index 38715972b43..2eeb134d529 100644 --- a/apps/web/ce/components/workspace/billing/comparison/plan-detail.tsx +++ b/apps/web/ce/components/workspace/billing/comparison/plan-detail.tsx @@ -5,6 +5,8 @@ import { SUBSCRIPTION_REDIRECTION_URLS, SUBSCRIPTION_WITH_BILLING_FREQUENCY, TALK_TO_SALES_URL, + WORKSPACE_SETTINGS_TRACKER_ELEMENTS, + WORKSPACE_SETTINGS_TRACKER_EVENTS, } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { EProductSubscriptionEnum, TBillingFrequency } from "@plane/types"; @@ -16,6 +18,7 @@ import { DiscountInfo } from "@/components/license/modal/card/discount-info"; import { getUpgradeButtonStyle } from "@/components/workspace/billing/subscription"; import { TPlanDetail } from "@/constants/plans"; // local imports +import { captureSuccess } from "@/helpers/event-tracker.helper"; import { PlanFrequencyToggle } from "./frequency-toggle"; type TPlanDetailProps = { @@ -49,6 +52,12 @@ export const PlanDetail: FC = observer((props) => { const frequency = billingFrequency ?? "year"; // Get the redirection URL based on the subscription type and billing frequency const redirectUrl = SUBSCRIPTION_REDIRECTION_URLS[subscriptionType][frequency] ?? TALK_TO_SALES_URL; + captureSuccess({ + eventName: WORKSPACE_SETTINGS_TRACKER_EVENTS.upgrade_plan_redirected, + payload: { + subscriptionType, + }, + }); // Open the URL in a new tab window.open(redirectUrl, "_blank"); }; @@ -101,7 +110,15 @@ export const PlanDetail: FC = observer((props) => { {/* Subscription button */}
    -
    diff --git a/apps/web/core/components/exporter/export-form.tsx b/apps/web/core/components/exporter/export-form.tsx index b108d2e4c5e..0b097aeb667 100644 --- a/apps/web/core/components/exporter/export-form.tsx +++ b/apps/web/core/components/exporter/export-form.tsx @@ -1,9 +1,16 @@ import { useState } from "react"; import { intersection } from "lodash"; import { Controller, useForm } from "react-hook-form"; -import { EUserPermissions, EUserPermissionsLevel, EXPORTERS_LIST } from "@plane/constants"; +import { + EUserPermissions, + EUserPermissionsLevel, + EXPORTERS_LIST, + WORKSPACE_SETTINGS_TRACKER_EVENTS, + WORKSPACE_SETTINGS_TRACKER_ELEMENTS, +} from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { Button, CustomSearchSelect, CustomSelect, TOAST_TYPE, setToast } from "@plane/ui"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; import { useProject, useUser, useUserPermissions } from "@/hooks/store"; import { ProjectExportService } from "@/services/project/project-export.service"; @@ -73,6 +80,12 @@ export const ExportForm = (props: Props) => { .then(() => { mutateServices(); setExportLoading(false); + captureSuccess({ + eventName: WORKSPACE_SETTINGS_TRACKER_EVENTS.csv_exported, + payload: { + provider: formData.provider.provider, + }, + }); setToast({ type: TOAST_TYPE.SUCCESS, title: t("workspace_settings.settings.exports.modal.toasts.success.title"), @@ -88,8 +101,15 @@ export const ExportForm = (props: Props) => { }), }); }) - .catch(() => { + .catch((error) => { setExportLoading(false); + captureError({ + eventName: WORKSPACE_SETTINGS_TRACKER_EVENTS.csv_exported, + payload: { + provider: formData.provider.provider, + }, + error: error as Error, + }); setToast({ type: TOAST_TYPE.ERROR, title: t("error"), @@ -163,7 +183,12 @@ export const ExportForm = (props: Props) => {
    -
    diff --git a/apps/web/core/components/web-hooks/create-webhook-modal.tsx b/apps/web/core/components/web-hooks/create-webhook-modal.tsx index 838916a6935..a7cb43ab74d 100644 --- a/apps/web/core/components/web-hooks/create-webhook-modal.tsx +++ b/apps/web/core/components/web-hooks/create-webhook-modal.tsx @@ -3,6 +3,7 @@ import React, { useState } from "react"; import { useParams } from "next/navigation"; // types +import { WORKSPACE_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IWebhook, IWorkspace, TWebhookEventTypes } from "@plane/types"; // ui @@ -10,6 +11,7 @@ import { EModalPosition, EModalWidth, ModalCore, TOAST_TYPE, setToast } from "@p // helpers import { csvDownload } from "@plane/utils"; // hooks +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; import useKeypress from "@/hooks/use-keypress"; // components import { WebhookForm } from "./form"; @@ -67,6 +69,12 @@ export const CreateWebhookModal: React.FC = (props) => { await createWebhook(workspaceSlug.toString(), payload) .then(({ webHook, secretKey }) => { + captureSuccess({ + eventName: WORKSPACE_SETTINGS_TRACKER_EVENTS.webhook_created, + payload: { + webhook: formData?.url, + }, + }); setToast({ type: TOAST_TYPE.SUCCESS, title: t("workspace_settings.settings.webhooks.toasts.created.title"), @@ -79,6 +87,13 @@ export const CreateWebhookModal: React.FC = (props) => { csvDownload(csvData, `webhook-secret-key-${Date.now()}`); }) .catch((error) => { + captureError({ + eventName: WORKSPACE_SETTINGS_TRACKER_EVENTS.webhook_created, + payload: { + webhook: formData?.url, + }, + error: error as Error, + }); setToast({ type: TOAST_TYPE.ERROR, title: t("workspace_settings.settings.webhooks.toasts.not_created.title"), diff --git a/apps/web/core/components/web-hooks/delete-webhook-modal.tsx b/apps/web/core/components/web-hooks/delete-webhook-modal.tsx index 615c50f6809..6e32d9f66a6 100644 --- a/apps/web/core/components/web-hooks/delete-webhook-modal.tsx +++ b/apps/web/core/components/web-hooks/delete-webhook-modal.tsx @@ -3,8 +3,10 @@ import React, { FC, useState } from "react"; import { useParams } from "next/navigation"; // ui +import { WORKSPACE_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { AlertModalCore, TOAST_TYPE, setToast } from "@plane/ui"; // hooks +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; import { useWebhook } from "@/hooks/store"; import { useAppRouter } from "@/hooks/use-app-router"; @@ -35,6 +37,12 @@ export const DeleteWebhookModal: FC = (props) => { removeWebhook(workspaceSlug.toString(), webhookId.toString()) .then(() => { + captureSuccess({ + eventName: WORKSPACE_SETTINGS_TRACKER_EVENTS.webhook_deleted, + payload: { + webhook: webhookId, + }, + }); setToast({ type: TOAST_TYPE.SUCCESS, title: "Success!", @@ -42,13 +50,20 @@ export const DeleteWebhookModal: FC = (props) => { }); router.replace(`/${workspaceSlug}/settings/webhooks/`); }) - .catch((error) => + .catch((error) => { + captureError({ + eventName: WORKSPACE_SETTINGS_TRACKER_EVENTS.webhook_deleted, + payload: { + webhook: webhookId, + }, + error: error as Error, + }); setToast({ type: TOAST_TYPE.ERROR, title: "Error!", message: error?.error ?? "Something went wrong. Please try again.", - }) - ) + }); + }) .finally(() => setIsDeleting(false)); }; diff --git a/apps/web/core/components/web-hooks/form/delete-section.tsx b/apps/web/core/components/web-hooks/form/delete-section.tsx index 1029d792f6d..8201804a13f 100644 --- a/apps/web/core/components/web-hooks/form/delete-section.tsx +++ b/apps/web/core/components/web-hooks/form/delete-section.tsx @@ -2,6 +2,7 @@ import { ChevronDown, ChevronUp } from "lucide-react"; import { Disclosure, Transition } from "@headlessui/react"; +import { WORKSPACE_SETTINGS_TRACKER_ELEMENTS } from "@plane/constants"; import { Button } from "@plane/ui"; type Props = { @@ -36,7 +37,11 @@ export const WebhookDeleteSection: React.FC = (props) => { webhook.
    -
    diff --git a/apps/web/core/components/web-hooks/form/form.tsx b/apps/web/core/components/web-hooks/form/form.tsx index 5ecd7ff8e17..804b708e8c3 100644 --- a/apps/web/core/components/web-hooks/form/form.tsx +++ b/apps/web/core/components/web-hooks/form/form.tsx @@ -3,6 +3,7 @@ import React, { FC, useEffect, useState } from "react"; import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; +import { WORKSPACE_SETTINGS_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IWebhook, TWebhookEventTypes } from "@plane/types"; // hooks @@ -93,7 +94,11 @@ export const WebhookForm: FC = observer((props) => { {data ? (
    -
    diff --git a/apps/web/core/components/web-hooks/form/toggle.tsx b/apps/web/core/components/web-hooks/form/toggle.tsx index ca240435b55..76dfca3ed9c 100644 --- a/apps/web/core/components/web-hooks/form/toggle.tsx +++ b/apps/web/core/components/web-hooks/form/toggle.tsx @@ -1,10 +1,13 @@ "use client"; import { Control, Controller } from "react-hook-form"; +// constants +import { WORKSPACE_SETTINGS_TRACKER_ELEMENTS } from "@plane/constants"; import { IWebhook } from "@plane/types"; // ui import { ToggleSwitch } from "@plane/ui"; -// types +// hooks +import { captureClick } from "@/helpers/event-tracker.helper"; interface IWebHookToggle { control: Control; @@ -20,6 +23,9 @@ export const WebhookToggle = ({ control }: IWebHookToggle) => ( { + captureClick({ + elementName: WORKSPACE_SETTINGS_TRACKER_ELEMENTS.WEBHOOK_DETAILS_PAGE_TOGGLE_SWITCH, + }); onChange(val); }} size="sm" diff --git a/apps/web/core/components/web-hooks/webhooks-list-item.tsx b/apps/web/core/components/web-hooks/webhooks-list-item.tsx index 0c5d0ea8ea1..5419207d89d 100644 --- a/apps/web/core/components/web-hooks/webhooks-list-item.tsx +++ b/apps/web/core/components/web-hooks/webhooks-list-item.tsx @@ -3,9 +3,11 @@ import { FC } from "react"; import Link from "next/link"; import { useParams } from "next/navigation"; +import { WORKSPACE_SETTINGS_TRACKER_ELEMENTS, WORKSPACE_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { IWebhook } from "@plane/types"; // hooks import { ToggleSwitch } from "@plane/ui"; +import { captureElementAndEvent } from "@/helpers/event-tracker.helper"; import { useWebhook } from "@/hooks/store"; // ui // types @@ -23,8 +25,35 @@ export const WebhooksListItem: FC = (props) => { const handleToggle = () => { if (!workspaceSlug || !webhook.id) return; - - updateWebhook(workspaceSlug.toString(), webhook.id, { is_active: !webhook.is_active }); + updateWebhook(workspaceSlug.toString(), webhook.id, { is_active: !webhook.is_active }) + .then(() => { + captureElementAndEvent({ + element: { + elementName: WORKSPACE_SETTINGS_TRACKER_ELEMENTS.WEBHOOK_LIST_ITEM_TOGGLE_SWITCH, + }, + event: { + eventName: WORKSPACE_SETTINGS_TRACKER_EVENTS.webhook_toggled, + state: "SUCCESS", + payload: { + webhook: webhook.url, + }, + }, + }); + }) + .catch(() => { + captureElementAndEvent({ + element: { + elementName: WORKSPACE_SETTINGS_TRACKER_ELEMENTS.WEBHOOK_LIST_ITEM_TOGGLE_SWITCH, + }, + event: { + eventName: WORKSPACE_SETTINGS_TRACKER_EVENTS.webhook_toggled, + state: "ERROR", + payload: { + webhook: webhook.url, + }, + }, + }); + }); }; return ( diff --git a/packages/constants/src/event-tracker/core.ts b/packages/constants/src/event-tracker/core.ts index dd40d345933..83650319f2d 100644 --- a/packages/constants/src/event-tracker/core.ts +++ b/packages/constants/src/event-tracker/core.ts @@ -1,3 +1,5 @@ +import { EProductSubscriptionEnum } from "@plane/types"; + // Dashboard Events export const GITHUB_REDIRECTED_TRACKER_EVENT = "github_redirected"; export const HEADER_GITHUB_ICON = "header_github_icon"; @@ -268,3 +270,31 @@ export const SIDEBAR_TRACKER_ELEMENTS = { USER_MENU_ITEM: "sidenav_user_menu_item", CREATE_WORK_ITEM_BUTTON: "sidebar_create_work_item_button", }; + +export const WORKSPACE_SETTINGS_TRACKER_EVENTS = { + // Billing + upgrade_plan_redirected: "upgrade_plan_redirected", + // Exports + csv_exported: "csv_exported", + // Webhooks + webhook_created: "webhook_created", + webhook_deleted: "webhook_deleted", + webhook_toggled: "webhook_toggled", + webhook_details_page_toggled: "webhook_details_page_toggled", + webhook_updated: "webhook_updated", +}; +export const WORKSPACE_SETTINGS_TRACKER_ELEMENTS = { + // Billing + BILLING_UPGRADE_BUTTON: (subscriptionType: EProductSubscriptionEnum) => `billing_upgrade_${subscriptionType}_button`, + BILLING_TALK_TO_SALES_BUTTON: "billing_talk_to_sales_button", + // Exports + EXPORT_BUTTON: "export_button", + // Webhooks + HEADER_ADD_WEBHOOK_BUTTON: "header_add_webhook_button", + EMPTY_STATE_ADD_WEBHOOK_BUTTON: "empty_state_add_webhook_button", + LIST_ITEM_DELETE_BUTTON: "list_item_delete_button", + WEBHOOK_LIST_ITEM_TOGGLE_SWITCH: "webhook_list_item_toggle_switch", + WEBHOOK_DETAILS_PAGE_TOGGLE_SWITCH: "webhook_details_page_toggle_switch", + WEBHOOK_DELETE_BUTTON: "webhook_delete_button", + WEBHOOK_UPDATE_BUTTON: "webhook_update_button", +}; From eb4239417a776f02e69c5063c1c0e634ef5adc6f Mon Sep 17 00:00:00 2001 From: Akshita Goyal <36129505+gakshita@users.noreply.github.com> Date: Thu, 10 Jul 2025 17:02:06 +0530 Subject: [PATCH 056/130] [WEB-4405] chore: profile settings events (#7313) * feat: event tracker helper * feat: track click events for `data-ph-element` * fix: handled click events * fix: handled name * chore: tracker element updates * chore: remove export * chore: tracker element type * chore: track element and event helper. * chore: minor improvements * chore: minor refactors * fix: workspace events * fix: added slug * fix: changes nomenclature * fix: nomenclature * chore: update event tracker helper types * fix: data id * refactor: cycle events (#7290) * chore: update event tracker helper types * refactor: cycle events * refactor: cycle events * refactor: cycle event tracker * chore: update tracker elements * chore: check for closest element with data-ph-element attribute --------- Co-authored-by: Prateek Shourya * Refactor module events (#7291) * chore: update event tracker helper types * refactor: cycle events * refactor: cycle events * refactor: cycle event tracker * refactor: module tracker event and element * chore: update tracker element * chore: revert unnecessary changes --------- Co-authored-by: Prateek Shourya * refactor: global views, product tour, notifications, onboarding, users and sidebar related events * chore: member tracker events (#7302) * chore: member-tracker-events * fix: constants * refactor: update event tracker constants * refactor: auth related event trackers (#7306) * Chore: state events (#7307) * chore: state events * fix: refactor * chore: project events (#7305) * chore: project-events * fix: refactor * fix: removed hardcoded values * fix: github redirection event * chore: project page tracker events (#7304) * added events for most page events * refactor: simplify lock button event handling in PageLockControl --------- Co-authored-by: Palanikannan M Co-authored-by: M. Palanikannan <73993394+Palanikannan1437@users.noreply.github.com> * chore: minor cleanup and import fixes * refactor: added tracker elements for buttons (#7308) Co-authored-by: Prateek Shourya * fix: event type * refactor: posthog group event * chore: removed instances of event tracker (#7309) * refactor: remove event tracker stores and hooks * refactor: remove event tracker store * fix: build errors * clean up event tracker payloads * chore: profile settings events * fix: refactor --------- Co-authored-by: Prateek Shourya Co-authored-by: Prateek Shourya Co-authored-by: Palanikannan M Co-authored-by: M. Palanikannan <73993394+Palanikannan1437@users.noreply.github.com> Co-authored-by: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com> Co-authored-by: sriramveeraghanta --- .../settings/account/api-tokens/page.tsx | 23 ++- .../account/deactivate-account-modal.tsx | 14 +- .../api-token/delete-token-modal.tsx | 17 ++ .../api-token/modal/create-token-modal.tsx | 12 ++ .../components/api-token/token-list-item.tsx | 2 + .../core/theme/custom-theme-selector.tsx | 31 ++++ apps/web/core/components/profile/form.tsx | 26 +++- .../notification/email-notification-form.tsx | 26 ++++ .../profile/preferences/language-timezone.tsx | 44 ++++++ .../profile/start-of-week-preference.tsx | 28 +++- packages/constants/src/event-tracker/core.ts | 147 +++++++++++++++++- 11 files changed, 356 insertions(+), 14 deletions(-) diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx index 9a1883255db..ecbc2f9aa58 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/account/api-tokens/page.tsx @@ -4,6 +4,7 @@ import React, { useState } from "react"; import { observer } from "mobx-react"; import useSWR from "swr"; // plane imports +import { PROFILE_SETTINGS_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; // component import { APITokenService } from "@plane/services"; @@ -14,6 +15,7 @@ import { SettingsHeading } from "@/components/settings"; import { APITokenSettingsLoader } from "@/components/ui"; import { API_TOKENS_LIST } from "@/constants/fetch-keys"; // store hooks +import { captureClick } from "@/helpers/event-tracker.helper"; import { useWorkspace } from "@/hooks/store"; import { useResolvedAssetPath } from "@/hooks/use-resolved-asset-path"; // services @@ -53,7 +55,12 @@ const ApiTokensPage = observer(() => { description={t("account_settings.api_tokens.description")} button={{ label: t("workspace_settings.settings.api_tokens.add_token"), - onClick: () => setIsCreateTokenModalOpen(true), + onClick: () => { + captureClick({ + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.HEADER_ADD_PAT_BUTTON, + }); + setIsCreateTokenModalOpen(true); + }, }} />
    @@ -69,7 +76,12 @@ const ApiTokensPage = observer(() => { description={t("account_settings.api_tokens.description")} button={{ label: t("workspace_settings.settings.api_tokens.add_token"), - onClick: () => setIsCreateTokenModalOpen(true), + onClick: () => { + captureClick({ + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.HEADER_ADD_PAT_BUTTON, + }); + setIsCreateTokenModalOpen(true); + }, }} />
    @@ -81,7 +93,12 @@ const ApiTokensPage = observer(() => { size="md" primaryButton={{ text: t("workspace_settings.settings.api_tokens.add_token"), - onClick: () => setIsCreateTokenModalOpen(true), + onClick: () => { + captureClick({ + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.EMPTY_STATE_ADD_PAT_BUTTON, + }); + setIsCreateTokenModalOpen(true); + }, }} />
    diff --git a/apps/web/core/components/account/deactivate-account-modal.tsx b/apps/web/core/components/account/deactivate-account-modal.tsx index 1132a8d74cb..684416184b2 100644 --- a/apps/web/core/components/account/deactivate-account-modal.tsx +++ b/apps/web/core/components/account/deactivate-account-modal.tsx @@ -3,10 +3,12 @@ import React, { useState } from "react"; import { Trash2 } from "lucide-react"; import { Dialog, Transition } from "@headlessui/react"; +import { PROFILE_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; // ui import { Button, TOAST_TYPE, setToast } from "@plane/ui"; // hooks +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; import { useUser } from "@/hooks/store"; import { useAppRouter } from "@/hooks/use-app-router"; @@ -35,6 +37,9 @@ export const DeactivateAccountModal: React.FC = (props) => { await deactivateAccount() .then(() => { + captureSuccess({ + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.deactivate_account, + }); setToast({ type: TOAST_TYPE.SUCCESS, title: "Success!", @@ -44,13 +49,16 @@ export const DeactivateAccountModal: React.FC = (props) => { router.push("/"); handleClose(); }) - .catch((err: any) => + .catch((err: any) => { + captureError({ + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.deactivate_account, + }); setToast({ type: TOAST_TYPE.ERROR, title: "Error!", message: err?.error, - }) - ) + }); + }) .finally(() => setIsDeactivating(false)); }; diff --git a/apps/web/core/components/api-token/delete-token-modal.tsx b/apps/web/core/components/api-token/delete-token-modal.tsx index eed0ecdb90c..f139a278317 100644 --- a/apps/web/core/components/api-token/delete-token-modal.tsx +++ b/apps/web/core/components/api-token/delete-token-modal.tsx @@ -3,6 +3,7 @@ import { useState, FC } from "react"; import { mutate } from "swr"; // types +import { PROFILE_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { APITokenService } from "@plane/services"; import { IApiToken } from "@plane/types"; @@ -10,6 +11,7 @@ import { IApiToken } from "@plane/types"; import { AlertModalCore, TOAST_TYPE, setToast } from "@plane/ui"; // fetch-keys import { API_TOKENS_LIST } from "@/constants/fetch-keys"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; type Props = { isOpen: boolean; @@ -48,6 +50,12 @@ export const DeleteApiTokenModal: FC = (props) => { (prevData) => (prevData ?? []).filter((token) => token.id !== tokenId), false ); + captureSuccess({ + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.pat_deleted, + payload: { + token: tokenId, + }, + }); handleClose(); }) @@ -58,6 +66,15 @@ export const DeleteApiTokenModal: FC = (props) => { message: err?.message ?? t("workspace_settings.settings.api_tokens.delete.error.message"), }) ) + .catch((err) => { + captureError({ + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.pat_deleted, + payload: { + token: tokenId, + }, + error: err as Error, + }); + }) .finally(() => setDeleteLoading(false)); }; diff --git a/apps/web/core/components/api-token/modal/create-token-modal.tsx b/apps/web/core/components/api-token/modal/create-token-modal.tsx index 94d72c56d17..d7d6e14d376 100644 --- a/apps/web/core/components/api-token/modal/create-token-modal.tsx +++ b/apps/web/core/components/api-token/modal/create-token-modal.tsx @@ -3,6 +3,7 @@ import React, { useState } from "react"; import { mutate } from "swr"; // types +import { PROFILE_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { APITokenService } from "@plane/services"; import { IApiToken } from "@plane/types"; // ui @@ -12,6 +13,7 @@ import { renderFormattedDate, csvDownload } from "@plane/utils"; import { CreateApiTokenForm, GeneratedTokenDetails } from "@/components/api-token"; // fetch-keys import { API_TOKENS_LIST } from "@/constants/fetch-keys"; +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; // helpers // services @@ -66,6 +68,12 @@ export const CreateApiTokenModal: React.FC = (props) => { }, false ); + captureSuccess({ + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.pat_created, + payload: { + token: res.id, + }, + }); }) .catch((err) => { setToast({ @@ -74,6 +82,10 @@ export const CreateApiTokenModal: React.FC = (props) => { message: err.message || err.detail, }); + captureError({ + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.pat_created, + }); + throw err; }); }; diff --git a/apps/web/core/components/api-token/token-list-item.tsx b/apps/web/core/components/api-token/token-list-item.tsx index f1ec2ff4590..f5fe9fbd80c 100644 --- a/apps/web/core/components/api-token/token-list-item.tsx +++ b/apps/web/core/components/api-token/token-list-item.tsx @@ -2,6 +2,7 @@ import { useState } from "react"; import { XCircle } from "lucide-react"; +import { PROFILE_SETTINGS_TRACKER_ELEMENTS } from "@plane/constants"; import { IApiToken } from "@plane/types"; // components import { Tooltip } from "@plane/ui"; @@ -31,6 +32,7 @@ export const ApiTokenListItem: React.FC = (props) => { diff --git a/apps/web/core/components/core/theme/custom-theme-selector.tsx b/apps/web/core/components/core/theme/custom-theme-selector.tsx index d66fbe82f83..3cc5469afe5 100644 --- a/apps/web/core/components/core/theme/custom-theme-selector.tsx +++ b/apps/web/core/components/core/theme/custom-theme-selector.tsx @@ -4,11 +4,13 @@ import { useMemo } from "react"; import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; // types +import { PROFILE_SETTINGS_TRACKER_ELEMENTS, PROFILE_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IUserTheme } from "@plane/types"; // ui import { Button, InputColorPicker, setPromiseToast } from "@plane/ui"; // hooks +import { captureElementAndEvent } from "@/helpers/event-tracker.helper"; import { useUserProfile } from "@/hooks/store"; type TCustomThemeSelector = { @@ -81,6 +83,35 @@ export const CustomThemeSelector: React.FC = observer((pro message: () => t("failed_to_update_the_theme"), }, }); + updateCurrentUserThemePromise + .then(() => { + captureElementAndEvent({ + element: { + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.THEME_DROPDOWN, + }, + event: { + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.theme_updated, + payload: { + theme: payload.theme, + }, + state: "SUCCESS", + }, + }); + }) + .catch(() => { + captureElementAndEvent({ + element: { + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.THEME_DROPDOWN, + }, + event: { + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.theme_updated, + payload: { + theme: payload.theme, + }, + state: "ERROR", + }, + }); + }); return; }; diff --git a/apps/web/core/components/profile/form.tsx b/apps/web/core/components/profile/form.tsx index 0cd08d75d01..ffc74e5fc05 100644 --- a/apps/web/core/components/profile/form.tsx +++ b/apps/web/core/components/profile/form.tsx @@ -6,6 +6,7 @@ import { Controller, useForm } from "react-hook-form"; import { ChevronDown, CircleUserRound, InfoIcon } from "lucide-react"; import { Disclosure, Transition } from "@headlessui/react"; // plane imports +import { PROFILE_SETTINGS_TRACKER_ELEMENTS, PROFILE_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import type { IUser, TUserProfile } from "@plane/types"; import { Button, Input, TOAST_TYPE, setPromiseToast, setToast } from "@plane/ui"; @@ -16,6 +17,7 @@ import { DeactivateAccountModal } from "@/components/account"; import { ImagePickerPopover, UserImageUploadModal } from "@/components/core"; // helpers // hooks +import { captureSuccess, captureError } from "@/helpers/event-tracker.helper"; import { useUser, useUserProfile } from "@/hooks/store"; type TUserProfileForm = { @@ -135,6 +137,17 @@ export const ProfileForm = observer((props: TProfileFormProps) => { message: () => `There was some error in updating your profile. Please try again.`, }, }); + updateUserAndProfile + .then(() => { + captureSuccess({ + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.update_profile, + }); + }) + .catch(() => { + captureError({ + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.update_profile, + }); + }); }; return ( @@ -344,7 +357,12 @@ export const ProfileForm = observer((props: TProfileFormProps) => {
    -
    @@ -371,7 +389,11 @@ export const ProfileForm = observer((props: TProfileFormProps) => {
    {t("deactivate_account_description")}
    -
    diff --git a/apps/web/core/components/profile/notification/email-notification-form.tsx b/apps/web/core/components/profile/notification/email-notification-form.tsx index 9aab9a92fea..d0ec45ae5bf 100644 --- a/apps/web/core/components/profile/notification/email-notification-form.tsx +++ b/apps/web/core/components/profile/notification/email-notification-form.tsx @@ -2,11 +2,13 @@ import React, { FC, useEffect } from "react"; import { Controller, useForm } from "react-hook-form"; +import { PROFILE_SETTINGS_TRACKER_ELEMENTS, PROFILE_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IUserEmailNotificationSettings } from "@plane/types"; // ui import { ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui"; // services +import { captureClick, captureError, captureSuccess } from "@/helpers/event-tracker.helper"; import { UserService } from "@/services/user.service"; // types interface IEmailNotificationFormProps { @@ -31,6 +33,12 @@ export const EmailNotificationForm: FC = (props) => await userService.updateCurrentUserEmailNotificationSettings({ [key]: value, }); + captureSuccess({ + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.notifications_updated, + payload: { + [key]: value, + }, + }); setToast({ title: t("success"), type: TOAST_TYPE.SUCCESS, @@ -38,6 +46,12 @@ export const EmailNotificationForm: FC = (props) => }); } catch (err) { console.error(err); + captureError({ + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.notifications_updated, + payload: { + [key]: value, + }, + }); setToast({ title: t("error"), type: TOAST_TYPE.ERROR, @@ -68,6 +82,9 @@ export const EmailNotificationForm: FC = (props) => value={value} onChange={(newValue) => { onChange(newValue); + captureClick({ + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.PROPERTY_CHANGES_TOGGLE, + }); handleSettingChange("property_change", newValue); }} size="sm" @@ -90,6 +107,9 @@ export const EmailNotificationForm: FC = (props) => value={value} onChange={(newValue) => { onChange(newValue); + captureClick({ + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.STATE_CHANGES_TOGGLE, + }); handleSettingChange("state_change", newValue); }} size="sm" @@ -134,6 +154,9 @@ export const EmailNotificationForm: FC = (props) => value={value} onChange={(newValue) => { onChange(newValue); + captureClick({ + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.COMMENTS_TOGGLE, + }); handleSettingChange("comment", newValue); }} size="sm" @@ -156,6 +179,9 @@ export const EmailNotificationForm: FC = (props) => value={value} onChange={(newValue) => { onChange(newValue); + captureClick({ + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.MENTIONS_TOGGLE, + }); handleSettingChange("mention", newValue); }} size="sm" diff --git a/apps/web/core/components/profile/preferences/language-timezone.tsx b/apps/web/core/components/profile/preferences/language-timezone.tsx index 9a40cb880c9..8d171ee36c8 100644 --- a/apps/web/core/components/profile/preferences/language-timezone.tsx +++ b/apps/web/core/components/profile/preferences/language-timezone.tsx @@ -1,7 +1,9 @@ import { observer } from "mobx-react"; +import { PROFILE_SETTINGS_TRACKER_ELEMENTS, PROFILE_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { SUPPORTED_LANGUAGES, useTranslation } from "@plane/i18n"; import { CustomSelect, TOAST_TYPE, setToast } from "@plane/ui"; import { TimezoneSelect } from "@/components/global"; +import { captureElementAndEvent } from "@/helpers/event-tracker.helper"; import { useUser, useUserProfile } from "@/hooks/store"; export const LanguageTimezone = observer(() => { @@ -17,6 +19,18 @@ export const LanguageTimezone = observer(() => { const handleTimezoneChange = (value: string) => { updateCurrentUser({ user_timezone: value }) .then(() => { + captureElementAndEvent({ + element: { + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.TIMEZONE_DROPDOWN, + }, + event: { + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.timezone_updated, + payload: { + timezone: value, + }, + state: "SUCCESS", + }, + }); setToast({ title: "Success!", message: "Timezone updated successfully", @@ -24,6 +38,15 @@ export const LanguageTimezone = observer(() => { }); }) .catch(() => { + captureElementAndEvent({ + element: { + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.TIMEZONE_DROPDOWN, + }, + event: { + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.timezone_updated, + state: "ERROR", + }, + }); setToast({ title: "Error!", message: "Failed to update timezone", @@ -34,6 +57,18 @@ export const LanguageTimezone = observer(() => { const handleLanguageChange = (value: string) => { updateUserProfile({ language: value }) .then(() => { + captureElementAndEvent({ + element: { + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.LANGUAGE_DROPDOWN, + }, + event: { + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.language_updated, + payload: { + language: value, + }, + state: "SUCCESS", + }, + }); setToast({ title: "Success!", message: "Language updated successfully", @@ -41,6 +76,15 @@ export const LanguageTimezone = observer(() => { }); }) .catch(() => { + captureElementAndEvent({ + element: { + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.LANGUAGE_DROPDOWN, + }, + event: { + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.language_updated, + state: "ERROR", + }, + }); setToast({ title: "Error!", message: "Failed to update language", diff --git a/apps/web/core/components/profile/start-of-week-preference.tsx b/apps/web/core/components/profile/start-of-week-preference.tsx index 06ed171035b..580126d97a4 100644 --- a/apps/web/core/components/profile/start-of-week-preference.tsx +++ b/apps/web/core/components/profile/start-of-week-preference.tsx @@ -3,10 +3,15 @@ import React from "react"; import { observer } from "mobx-react"; // plane imports -import { START_OF_THE_WEEK_OPTIONS } from "@plane/constants"; +import { + PROFILE_SETTINGS_TRACKER_ELEMENTS, + PROFILE_SETTINGS_TRACKER_EVENTS, + START_OF_THE_WEEK_OPTIONS, +} from "@plane/constants"; import { EStartOfTheWeek } from "@plane/types"; import { CustomSelect, setToast, TOAST_TYPE } from "@plane/ui"; // hooks +import { captureElementAndEvent } from "@/helpers/event-tracker.helper"; import { useUserProfile } from "@/hooks/store"; import { PreferencesSection } from "../preferences/section"; @@ -29,6 +34,18 @@ export const StartOfWeekPreference = observer((props: { option: { title: string; onChange={(val: number) => { updateUserProfile({ start_of_the_week: val }) .then(() => { + captureElementAndEvent({ + element: { + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.FIRST_DAY_OF_WEEK_DROPDOWN, + }, + event: { + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.first_day_updated, + payload: { + start_of_the_week: val, + }, + state: "SUCCESS", + }, + }); setToast({ type: TOAST_TYPE.SUCCESS, title: "Success", @@ -36,6 +53,15 @@ export const StartOfWeekPreference = observer((props: { option: { title: string; }); }) .catch(() => { + captureElementAndEvent({ + element: { + elementName: PROFILE_SETTINGS_TRACKER_ELEMENTS.FIRST_DAY_OF_WEEK_DROPDOWN, + }, + event: { + eventName: PROFILE_SETTINGS_TRACKER_EVENTS.first_day_updated, + state: "ERROR", + }, + }); setToast({ type: TOAST_TYPE.ERROR, title: "Update failed", message: "Please try again later." }); }); }} diff --git a/packages/constants/src/event-tracker/core.ts b/packages/constants/src/event-tracker/core.ts index 83650319f2d..905834c1eaf 100644 --- a/packages/constants/src/event-tracker/core.ts +++ b/packages/constants/src/event-tracker/core.ts @@ -1,22 +1,34 @@ import { EProductSubscriptionEnum } from "@plane/types"; -// Dashboard Events +/** + * =========================================================================== + * Event Groups + * =========================================================================== + */ +export const GROUP_WORKSPACE_TRACKER_EVENT = "workspace_metrics"; export const GITHUB_REDIRECTED_TRACKER_EVENT = "github_redirected"; export const HEADER_GITHUB_ICON = "header_github_icon"; -// Groups -export const GROUP_WORKSPACE_TRACKER_EVENT = "workspace_metrics"; - -// Command palette tracker +/** + * =========================================================================== + * Command palette tracker + * =========================================================================== + */ export const COMMAND_PALETTE_TRACKER_ELEMENTS = { COMMAND_PALETTE_SHORTCUT_KEY: "command_palette_shortcut_key", }; +/** + * =========================================================================== + * Workspace Events and Elements + * =========================================================================== + */ export const WORKSPACE_TRACKER_EVENTS = { create: "workspace_created", update: "workspace_updated", delete: "workspace_deleted", }; + export const WORKSPACE_TRACKER_ELEMENTS = { DELETE_WORKSPACE_BUTTON: "delete_workspace_button", ONBOARDING_CREATE_WORKSPACE_BUTTON: "onboarding_create_workspace_button", @@ -24,11 +36,17 @@ export const WORKSPACE_TRACKER_ELEMENTS = { UPDATE_WORKSPACE_BUTTON: "update_workspace_button", }; +/** + * =========================================================================== + * Project Events and Elements + * =========================================================================== + */ export const PROJECT_TRACKER_EVENTS = { create: "project_created", update: "project_updated", delete: "project_deleted", }; + export const PROJECT_TRACKER_ELEMENTS = { EXTENDED_SIDEBAR_ADD_BUTTON: "extended_sidebar_add_project_button", SIDEBAR_CREATE_PROJECT_BUTTON: "sidebar_create_project_button", @@ -44,6 +62,11 @@ export const PROJECT_TRACKER_ELEMENTS = { TOGGLE_FEATURE: "toggle_project_feature", }; +/** + * =========================================================================== + * Cycle Events and Elements + * =========================================================================== + */ export const CYCLE_TRACKER_EVENTS = { create: "cycle_created", update: "cycle_updated", @@ -53,6 +76,7 @@ export const CYCLE_TRACKER_EVENTS = { archive: "cycle_archived", restore: "cycle_restored", }; + export const CYCLE_TRACKER_ELEMENTS = { RIGHT_HEADER_ADD_BUTTON: "right_header_add_cycle_button", EMPTY_STATE_ADD_BUTTON: "empty_state_add_cycle_button", @@ -63,6 +87,11 @@ export const CYCLE_TRACKER_ELEMENTS = { LIST_ITEM: "cycle_list_item", } as const; +/** + * =========================================================================== + * Module Events and Elements + * =========================================================================== + */ export const MODULE_TRACKER_EVENTS = { create: "module_created", update: "module_updated", @@ -77,6 +106,7 @@ export const MODULE_TRACKER_EVENTS = { delete: "module_link_deleted", }, }; + export const MODULE_TRACKER_ELEMENTS = { RIGHT_HEADER_ADD_BUTTON: "right_header_add_module_button", EMPTY_STATE_ADD_BUTTON: "empty_state_add_module_button", @@ -88,6 +118,11 @@ export const MODULE_TRACKER_ELEMENTS = { CARD_ITEM: "module_card_item", } as const; +/** + * =========================================================================== + * Work Item Events and Elements + * =========================================================================== + */ export const WORK_ITEM_TRACKER_EVENTS = { create: "work_item_created", add_existing: "work_item_add_existing", @@ -145,6 +180,11 @@ export const WORK_ITEM_TRACKER_ELEMENTS = { }, } as const; +/** + * =========================================================================== + * State Events and Elements + * =========================================================================== + */ export const STATE_TRACKER_EVENTS = { create: "state_created", update: "state_updated", @@ -156,6 +196,11 @@ export const STATE_TRACKER_ELEMENTS = { STATE_LIST_EDIT_BUTTON: "state_list_edit_button", }; +/** + * =========================================================================== + * Project Page Events and Elements + * =========================================================================== + */ export const PROJECT_PAGE_TRACKER_EVENTS = { create: "project_page_created", update: "project_page_updated", @@ -184,6 +229,11 @@ export const PROJECT_PAGE_TRACKER_ELEMENTS = { DUPLICATE_BUTTON: "page_duplicate_button", } as const; +/** + * =========================================================================== + * Member Events and Elements + * =========================================================================== + */ export const MEMBER_TRACKER_EVENTS = { invite: "member_invited", accept: "member_accepted", @@ -206,6 +256,11 @@ export const MEMBER_TRACKER_ELEMENTS = { WORKSPACE_INVITATIONS_LIST_CONTEXT_MENU: "workspace_invitations_list_context_menu", } as const; +/** + * =========================================================================== + * Auth Events and Elements + * =========================================================================== + */ export const AUTH_TRACKER_EVENTS = { code_verify: "code_verified", sign_up_with_password: "sign_up_with_password", @@ -213,6 +268,7 @@ export const AUTH_TRACKER_EVENTS = { forgot_password: "forgot_password_clicked", new_code_requested: "new_code_requested", }; + export const AUTH_TRACKER_ELEMENTS = { NAVIGATE_TO_SIGN_UP: "navigate_to_sign_up", FORGOT_PASSWORD_FROM_SIGNIN: "forgot_password_from_signin", @@ -223,12 +279,18 @@ export const AUTH_TRACKER_ELEMENTS = { VERIFY_CODE: "verify_code", }; +/** + * =========================================================================== + * Global View Events and Elements + * =========================================================================== + */ export const GLOBAL_VIEW_TRACKER_EVENTS = { create: "global_view_created", update: "global_view_updated", delete: "global_view_deleted", open: "global_view_opened", }; + export const GLOBAL_VIEW_TRACKER_ELEMENTS = { RIGHT_HEADER_ADD_BUTTON: "global_view_right_header_add_button", HEADER_SAVE_VIEW_BUTTON: "global_view_header_save_view_button", @@ -236,15 +298,26 @@ export const GLOBAL_VIEW_TRACKER_ELEMENTS = { LIST_ITEM: "global_view_list_item", }; +/** + * =========================================================================== + * Product Tour Events and Elements + * =========================================================================== + */ export const PRODUCT_TOUR_TRACKER_EVENTS = { complete: "product_tour_completed", }; + export const PRODUCT_TOUR_TRACKER_ELEMENTS = { START_BUTTON: "product_tour_start_button", SKIP_BUTTON: "product_tour_skip_button", CREATE_PROJECT_BUTTON: "product_tour_create_project_button", }; +/** + * =========================================================================== + * Notification Events and Elements + * =========================================================================== + */ export const NOTIFICATION_TRACKER_EVENTS = { archive: "notification_archived", unarchive: "notification_unarchived", @@ -252,25 +325,88 @@ export const NOTIFICATION_TRACKER_EVENTS = { mark_unread: "notification_marked_unread", all_marked_read: "all_notifications_marked_read", }; + export const NOTIFICATION_TRACKER_ELEMENTS = { MARK_ALL_AS_READ_BUTTON: "mark_all_as_read_button", ARCHIVE_UNARCHIVE_BUTTON: "archive_unarchive_button", MARK_READ_UNREAD_BUTTON: "mark_read_unread_button", }; +/** + * =========================================================================== + * User Events + * =========================================================================== + */ export const USER_TRACKER_EVENTS = { add_details: "user_details_added", onboarding_complete: "user_onboarding_completed", }; + +/** + * =========================================================================== + * Onboarding Events and Elements + * =========================================================================== + */ export const ONBOARDING_TRACKER_ELEMENTS = { PROFILE_SETUP_FORM: "onboarding_profile_setup_form", }; +/** + * =========================================================================== + * Sidebar Events + * =========================================================================== + */ export const SIDEBAR_TRACKER_ELEMENTS = { USER_MENU_ITEM: "sidenav_user_menu_item", CREATE_WORK_ITEM_BUTTON: "sidebar_create_work_item_button", }; +/** + * =========================================================================== + * Profile Settings Events and Elements + * =========================================================================== + */ +export const PROFILE_SETTINGS_TRACKER_EVENTS = { + // Account + deactivate_account: "deactivate_account", + update_profile: "update_profile", + // Preferences + first_day_updated: "first_day_updated", + language_updated: "language_updated", + timezone_updated: "timezone_updated", + theme_updated: "theme_updated", + // Notifications + notifications_updated: "notifications_updated", + // PAT + pat_created: "pat_created", + pat_deleted: "pat_deleted", +}; + +export const PROFILE_SETTINGS_TRACKER_ELEMENTS = { + // Account + SAVE_CHANGES_BUTTON: "save_changes_button", + DEACTIVATE_ACCOUNT_BUTTON: "deactivate_account_button", + // Preferences + THEME_DROPDOWN: "preferences_theme_dropdown", + FIRST_DAY_OF_WEEK_DROPDOWN: "preferences_first_day_of_week_dropdown", + LANGUAGE_DROPDOWN: "preferences_language_dropdown", + TIMEZONE_DROPDOWN: "preferences_timezone_dropdown", + // Notifications + PROPERTY_CHANGES_TOGGLE: "notifications_property_changes_toggle", + STATE_CHANGES_TOGGLE: "notifications_state_changes_toggle", + COMMENTS_TOGGLE: "notifications_comments_toggle", + MENTIONS_TOGGLE: "notifications_mentions_toggle", + // PAT + HEADER_ADD_PAT_BUTTON: "header_add_pat_button", + EMPTY_STATE_ADD_PAT_BUTTON: "empty_state_add_pat_button", + LIST_ITEM_DELETE_ICON: "list_item_delete_icon", +}; + +/** + * =========================================================================== + * Workspace Settings Events and Elements + * =========================================================================== + */ export const WORKSPACE_SETTINGS_TRACKER_EVENTS = { // Billing upgrade_plan_redirected: "upgrade_plan_redirected", @@ -283,6 +419,7 @@ export const WORKSPACE_SETTINGS_TRACKER_EVENTS = { webhook_details_page_toggled: "webhook_details_page_toggled", webhook_updated: "webhook_updated", }; + export const WORKSPACE_SETTINGS_TRACKER_ELEMENTS = { // Billing BILLING_UPGRADE_BUTTON: (subscriptionType: EProductSubscriptionEnum) => `billing_upgrade_${subscriptionType}_button`, From 2e75ff7f1c0a5ad8be15126f2c8eb668f0371ba6 Mon Sep 17 00:00:00 2001 From: Akshita Goyal <36129505+gakshita@users.noreply.github.com> Date: Thu, 10 Jul 2025 17:05:30 +0530 Subject: [PATCH 057/130] [WEB-4405] chore: project settings events (#7362) * chore: workspace events * fix: refactor --------- Co-authored-by: sriramveeraghanta --- .../estimates/estimate-list-item-buttons.tsx | 7 +++- .../automation/auto-archive-automation.tsx | 30 +++++++++++++---- .../automation/auto-close-automation.tsx | 31 +++++++++++++---- .../components/estimates/delete/modal.tsx | 14 ++++++++ .../components/estimates/empty-screen.tsx | 15 ++++++++- .../estimates/estimate-disable-switch.tsx | 20 +++++++++++ .../labels/label-block/label-item-block.tsx | 6 +++- .../labels/project-setting-label-item.tsx | 5 +++ .../labels/project-setting-label-list.tsx | 19 ++++++++--- .../project/settings/features-list.tsx | 12 ++++++- packages/constants/src/event-tracker/core.ts | 33 +++++++++++++++++++ 11 files changed, 172 insertions(+), 20 deletions(-) diff --git a/apps/web/ce/components/estimates/estimate-list-item-buttons.tsx b/apps/web/ce/components/estimates/estimate-list-item-buttons.tsx index 72acb4dfc56..58bae9b746d 100644 --- a/apps/web/ce/components/estimates/estimate-list-item-buttons.tsx +++ b/apps/web/ce/components/estimates/estimate-list-item-buttons.tsx @@ -1,6 +1,7 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { Pen, Trash } from "lucide-react"; +import { PROJECT_SETTINGS_TRACKER_ELEMENTS } from "@plane/constants"; import { Tooltip } from "@plane/ui"; // components import { ProIcon } from "@/components/common"; @@ -29,13 +30,17 @@ export const EstimateListItemButtons: FC = observer((props) = } position="top" > - diff --git a/apps/web/core/components/automation/auto-archive-automation.tsx b/apps/web/core/components/automation/auto-archive-automation.tsx index 719b0b8c759..91c7bd62cb1 100644 --- a/apps/web/core/components/automation/auto-archive-automation.tsx +++ b/apps/web/core/components/automation/auto-archive-automation.tsx @@ -5,7 +5,13 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; import { ArchiveRestore } from "lucide-react"; // types -import { PROJECT_AUTOMATION_MONTHS, EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { + PROJECT_AUTOMATION_MONTHS, + EUserPermissions, + EUserPermissionsLevel, + PROJECT_SETTINGS_TRACKER_ELEMENTS, + PROJECT_SETTINGS_TRACKER_EVENTS, +} from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IProject } from "@plane/types"; // ui @@ -14,6 +20,7 @@ import { CustomSelect, Loader, ToggleSwitch } from "@plane/ui"; import { SelectMonthModal } from "@/components/automation"; // constants // hooks +import { captureElementAndEvent } from "@/helpers/event-tracker.helper"; import { useProject, useUserPermissions } from "@/hooks/store"; type Props = { @@ -65,11 +72,22 @@ export const AutoArchiveAutomation: React.FC = observer((props) => {
    - currentProjectDetails?.archive_in === 0 - ? handleChange({ archive_in: 1 }) - : handleChange({ archive_in: 0 }) - } + onChange={async () => { + if (currentProjectDetails?.archive_in === 0) { + await handleChange({ archive_in: 1 }); + } else { + await handleChange({ archive_in: 0 }); + } + captureElementAndEvent({ + element: { + elementName: PROJECT_SETTINGS_TRACKER_ELEMENTS.AUTOMATIONS_ARCHIVE_TOGGLE_BUTTON, + }, + event: { + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.auto_archive_workitems, + state: "SUCCESS", + }, + }); + }} size="sm" disabled={!isAdmin} /> diff --git a/apps/web/core/components/automation/auto-close-automation.tsx b/apps/web/core/components/automation/auto-close-automation.tsx index 7aef61d1318..170e5e655c4 100644 --- a/apps/web/core/components/automation/auto-close-automation.tsx +++ b/apps/web/core/components/automation/auto-close-automation.tsx @@ -6,7 +6,14 @@ import { useParams } from "next/navigation"; // icons import { ArchiveX } from "lucide-react"; // types -import { PROJECT_AUTOMATION_MONTHS, EUserPermissions, EUserPermissionsLevel, EIconSize } from "@plane/constants"; +import { + PROJECT_AUTOMATION_MONTHS, + EUserPermissions, + EUserPermissionsLevel, + EIconSize, + PROJECT_SETTINGS_TRACKER_ELEMENTS, + PROJECT_SETTINGS_TRACKER_EVENTS, +} from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IProject } from "@plane/types"; // ui @@ -15,6 +22,7 @@ import { CustomSelect, CustomSearchSelect, ToggleSwitch, StateGroupIcon, DoubleC import { SelectMonthModal } from "@/components/automation"; // constants // hooks +import { captureElementAndEvent } from "@/helpers/event-tracker.helper"; import { useProject, useProjectState, useUserPermissions } from "@/hooks/store"; type Props = { @@ -91,11 +99,22 @@ export const AutoCloseAutomation: React.FC = observer((props) => {
    - currentProjectDetails?.close_in === 0 - ? handleChange({ close_in: 1, default_state: defaultState }) - : handleChange({ close_in: 0, default_state: null }) - } + onChange={async () => { + if (currentProjectDetails?.close_in === 0) { + await handleChange({ close_in: 1, default_state: defaultState }); + } else { + await handleChange({ close_in: 0, default_state: null }); + } + captureElementAndEvent({ + element: { + elementName: PROJECT_SETTINGS_TRACKER_ELEMENTS.AUTOMATIONS_CLOSE_TOGGLE_BUTTON, + }, + event: { + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.auto_close_workitems, + state: "SUCCESS", + }, + }); + }} size="sm" disabled={!isAdmin} /> diff --git a/apps/web/core/components/estimates/delete/modal.tsx b/apps/web/core/components/estimates/delete/modal.tsx index 0ab68d8ce3b..8f9c17dd762 100644 --- a/apps/web/core/components/estimates/delete/modal.tsx +++ b/apps/web/core/components/estimates/delete/modal.tsx @@ -3,8 +3,10 @@ import { FC, useState } from "react"; import { observer } from "mobx-react"; // ui +import { PROJECT_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { Button, EModalPosition, EModalWidth, ModalCore, TOAST_TYPE, setToast } from "@plane/ui"; // hooks +import { captureError, captureSuccess } from "@/helpers/event-tracker.helper"; import { useEstimate, useProject, useProjectEstimates } from "@/hooks/store"; type TDeleteEstimateModal = { @@ -35,6 +37,12 @@ export const DeleteEstimateModal: FC = observer((props) => await updateProject(workspaceSlug, projectId, { estimate: null }); } setButtonLoader(false); + captureSuccess({ + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.estimate_deleted, + payload: { + id: estimateId, + }, + }); setToast({ type: TOAST_TYPE.SUCCESS, title: "Estimate deleted", @@ -43,6 +51,12 @@ export const DeleteEstimateModal: FC = observer((props) => handleClose(); } catch (error) { setButtonLoader(false); + captureError({ + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.estimate_deleted, + payload: { + id: estimateId, + }, + }); setToast({ type: TOAST_TYPE.ERROR, title: "Estimate creation failed", diff --git a/apps/web/core/components/estimates/empty-screen.tsx b/apps/web/core/components/estimates/empty-screen.tsx index 83bc30a0bff..9dcd863f02f 100644 --- a/apps/web/core/components/estimates/empty-screen.tsx +++ b/apps/web/core/components/estimates/empty-screen.tsx @@ -2,8 +2,10 @@ import { FC } from "react"; import { useTheme } from "next-themes"; +import { PROJECT_SETTINGS_TRACKER_ELEMENTS, PROJECT_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; // public images +import { captureElementAndEvent } from "@/helpers/event-tracker.helper"; import { DetailedEmptyState } from "../empty-state"; type TEstimateEmptyScreen = { @@ -26,7 +28,18 @@ export const EstimateEmptyScreen: FC = (props) => { className="w-full !px-0 !py-0" primaryButton={{ text: t("project_settings.empty_state.estimates.primary_button"), - onClick: onButtonClick, + onClick: () => { + onButtonClick(); + captureElementAndEvent({ + element: { + elementName: PROJECT_SETTINGS_TRACKER_ELEMENTS.ESTIMATES_EMPTY_STATE_CREATE_BUTTON, + }, + event: { + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.estimate_created, + state: "SUCCESS", + }, + }); + }, }} /> ); diff --git a/apps/web/core/components/estimates/estimate-disable-switch.tsx b/apps/web/core/components/estimates/estimate-disable-switch.tsx index 59491b27907..a64864ea56c 100644 --- a/apps/web/core/components/estimates/estimate-disable-switch.tsx +++ b/apps/web/core/components/estimates/estimate-disable-switch.tsx @@ -2,9 +2,11 @@ import { FC } from "react"; import { observer } from "mobx-react"; +import { PROJECT_SETTINGS_TRACKER_ELEMENTS, PROJECT_SETTINGS_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { TOAST_TYPE, ToggleSwitch, setToast } from "@plane/ui"; // hooks +import { captureElementAndEvent } from "@/helpers/event-tracker.helper"; import { useProject, useProjectEstimates } from "@/hooks/store"; // i18n type TEstimateDisableSwitch = { @@ -30,6 +32,15 @@ export const EstimateDisableSwitch: FC = observer((props await updateProject(workspaceSlug, projectId, { estimate: currentProjectActiveEstimate ? null : currentActiveEstimateId, }); + captureElementAndEvent({ + element: { + elementName: PROJECT_SETTINGS_TRACKER_ELEMENTS.ESTIMATES_TOGGLE_BUTTON, + }, + event: { + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.estimates_toggle, + state: "SUCCESS", + }, + }); setToast({ type: TOAST_TYPE.SUCCESS, title: currentProjectActiveEstimate @@ -40,6 +51,15 @@ export const EstimateDisableSwitch: FC = observer((props : t("project_settings.estimates.toasts.enabled.success.message"), }); } catch (err) { + captureElementAndEvent({ + element: { + elementName: PROJECT_SETTINGS_TRACKER_ELEMENTS.ESTIMATES_TOGGLE_BUTTON, + }, + event: { + eventName: PROJECT_SETTINGS_TRACKER_EVENTS.estimates_toggle, + state: "ERROR", + }, + }); setToast({ type: TOAST_TYPE.ERROR, title: t("project_settings.estimates.toasts.disabled.error.title"), diff --git a/apps/web/core/components/labels/label-block/label-item-block.tsx b/apps/web/core/components/labels/label-block/label-item-block.tsx index d74fabc76cb..06350275a55 100644 --- a/apps/web/core/components/labels/label-block/label-item-block.tsx +++ b/apps/web/core/components/labels/label-block/label-item-block.tsx @@ -3,6 +3,7 @@ import { MutableRefObject, useRef, useState } from "react"; import { LucideIcon, X } from "lucide-react"; // plane helpers +import { PROJECT_SETTINGS_TRACKER_ELEMENTS } from "@plane/constants"; import { useOutsideClickDetector } from "@plane/hooks"; // types import { IIssueLabel } from "@plane/types"; @@ -90,7 +91,10 @@ export const LabelItemBlock = (props: ILabelItemBlock) => {
    diff --git a/apps/web/core/components/labels/project-setting-label-item.tsx b/apps/web/core/components/labels/project-setting-label-item.tsx index 5eabffd772a..897b756a9ee 100644 --- a/apps/web/core/components/labels/project-setting-label-item.tsx +++ b/apps/web/core/components/labels/project-setting-label-item.tsx @@ -2,8 +2,10 @@ import React, { Dispatch, SetStateAction, useState } from "react"; import { useParams } from "next/navigation"; import { X, Pencil } from "lucide-react"; // types +import { PROJECT_SETTINGS_TRACKER_ELEMENTS } from "@plane/constants"; import { IIssueLabel } from "@plane/types"; // hooks +import { captureClick } from "@/helpers/event-tracker.helper"; import { useLabel } from "@/hooks/store"; // components import { CreateUpdateLabelInline, TLabelOperationsCallbacks } from "./create-update-label-inline"; @@ -67,6 +69,9 @@ export const ProjectSettingLabelItem: React.FC = (props) => { onClick: () => { setEditLabelForm(true); setIsUpdating(true); + captureClick({ + elementName: PROJECT_SETTINGS_TRACKER_ELEMENTS.LABELS_CONTEXT_MENU, + }); }, isVisible: true, text: "Edit label", diff --git a/apps/web/core/components/labels/project-setting-label-list.tsx b/apps/web/core/components/labels/project-setting-label-list.tsx index 86f82579c6f..088e7440ebe 100644 --- a/apps/web/core/components/labels/project-setting-label-list.tsx +++ b/apps/web/core/components/labels/project-setting-label-list.tsx @@ -4,10 +4,10 @@ import React, { useState, useRef } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane imports -import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { EUserPermissions, EUserPermissionsLevel, PROJECT_SETTINGS_TRACKER_ELEMENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IIssueLabel } from "@plane/types"; -import { Button, Loader } from "@plane/ui"; +import { Loader } from "@plane/ui"; import { DetailedEmptyState } from "@/components/empty-state"; import { CreateUpdateLabelInline, @@ -17,6 +17,7 @@ import { TLabelOperationsCallbacks, } from "@/components/labels"; // hooks +import { captureClick } from "@/helpers/event-tracker.helper"; import { useLabel, useUserPermissions } from "@/hooks/store"; import { useResolvedAssetPath } from "@/hooks/use-resolved-asset-path"; import { SettingsHeading } from "../settings"; @@ -81,7 +82,12 @@ export const ProjectSettingsLabelList: React.FC = observer(() => { description={t("project_settings.labels.description")} button={{ label: t("common.add_label"), - onClick: newLabel, + onClick: () => { + newLabel(); + captureClick({ + elementName: PROJECT_SETTINGS_TRACKER_ELEMENTS.LABELS_HEADER_CREATE_BUTTON, + }); + }, }} showButton={isEditable} /> @@ -110,7 +116,12 @@ export const ProjectSettingsLabelList: React.FC = observer(() => { description={""} primaryButton={{ text: "Create your first label", - onClick: newLabel, + onClick: () => { + newLabel(); + captureClick({ + elementName: PROJECT_SETTINGS_TRACKER_ELEMENTS.LABELS_EMPTY_STATE_CREATE_BUTTON, + }); + }, }} assetPath={resolvedPath} className="w-full !px-0 !py-0" diff --git a/apps/web/core/components/project/settings/features-list.tsx b/apps/web/core/components/project/settings/features-list.tsx index b2b8c2c0bd5..48b1fcac93c 100644 --- a/apps/web/core/components/project/settings/features-list.tsx +++ b/apps/web/core/components/project/settings/features-list.tsx @@ -2,12 +2,13 @@ import { FC } from "react"; import { observer } from "mobx-react"; -import { PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; +import { PROJECT_TRACKER_ELEMENTS, PROJECT_TRACKER_EVENTS } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { IProject } from "@plane/types"; import { ToggleSwitch, Tooltip, setPromiseToast } from "@plane/ui"; // hooks import { SettingsHeading } from "@/components/settings"; +import { captureSuccess } from "@/helpers/event-tracker.helper"; import { useProject, useUser } from "@/hooks/store"; // plane web components import { UpgradeBadge } from "@/plane-web/components/workspace"; @@ -37,6 +38,7 @@ export const ProjectFeaturesList: FC = observer((props) => { [featureProperty]: !currentProjectDetails?.[featureProperty as keyof IProject], }; const updateProjectPromise = updateProject(workspaceSlug, projectId, settingsPayload); + setPromiseToast(updateProjectPromise, { loading: "Updating project feature...", success: { @@ -48,6 +50,14 @@ export const ProjectFeaturesList: FC = observer((props) => { message: () => "Something went wrong while updating project feature. Please try again.", }, }); + updateProjectPromise.then(() => { + captureSuccess({ + eventName: PROJECT_TRACKER_EVENTS.feature_toggled, + payload: { + feature_key: featureKey, + }, + }); + }); }; if (!currentUser) return <>; diff --git a/packages/constants/src/event-tracker/core.ts b/packages/constants/src/event-tracker/core.ts index 905834c1eaf..dafbf0e7ec6 100644 --- a/packages/constants/src/event-tracker/core.ts +++ b/packages/constants/src/event-tracker/core.ts @@ -45,6 +45,7 @@ export const PROJECT_TRACKER_EVENTS = { create: "project_created", update: "project_updated", delete: "project_deleted", + feature_toggled: "feature_toggled", }; export const PROJECT_TRACKER_ELEMENTS = { @@ -361,6 +362,38 @@ export const SIDEBAR_TRACKER_ELEMENTS = { CREATE_WORK_ITEM_BUTTON: "sidebar_create_work_item_button", }; +/** + * =========================================================================== + * Project Settings Events and Elements + * =========================================================================== + */ +export const PROJECT_SETTINGS_TRACKER_ELEMENTS = { + LABELS_EMPTY_STATE_CREATE_BUTTON: "labels_empty_state_create_button", + LABELS_HEADER_CREATE_BUTTON: "labels_header_create_button", + LABELS_CONTEXT_MENU: "labels_context_menu", + LABELS_DELETE_BUTTON: "labels_delete_button", + ESTIMATES_TOGGLE_BUTTON: "estimates_toggle_button", + ESTIMATES_EMPTY_STATE_CREATE_BUTTON: "estimates_empty_state_create_button", + ESTIMATES_LIST_ITEM: "estimates_list_item", + AUTOMATIONS_ARCHIVE_TOGGLE_BUTTON: "automations_archive_toggle_button", + AUTOMATIONS_CLOSE_TOGGLE_BUTTON: "automations_close_toggle_button", +}; + +export const PROJECT_SETTINGS_TRACKER_EVENTS = { + // labels + label_created: "label_created", + label_updated: "label_updated", + label_deleted: "label_deleted", + // estimates + estimate_created: "estimate_created", + estimate_updated: "estimate_updated", + estimate_deleted: "estimate_deleted", + estimates_toggle: "estimates_toggled", + // automations + auto_close_workitems: "auto_close_workitems", + auto_archive_workitems: "auto_archive_workitems", +}; + /** * =========================================================================== * Profile Settings Events and Elements From 5fbe411e04c00df7fb24f44d05277ac6cf4ec1dd Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Thu, 10 Jul 2025 18:32:17 +0530 Subject: [PATCH 058/130] [WEB-4475] fix: add default theme for subscription colors (#7382) --- apps/web/styles/globals.css | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/apps/web/styles/globals.css b/apps/web/styles/globals.css index c6e4654d077..e40dd9bbbca 100644 --- a/apps/web/styles/globals.css +++ b/apps/web/styles/globals.css @@ -159,6 +159,22 @@ --color-pi-800: 57, 56, 149; --color-pi-900: 30, 29, 78; --color-pi-950: 14, 14, 37; + + /* Plane subscriptions */ + --color-subscription-free-200: 69, 80, 104; + --color-subscription-free-400: 51, 59, 77; + + --color-subscription-one-200: 101, 42, 14; + --color-subscription-one-400: 90, 37, 12; + + --color-subscription-pro-200: 32, 128, 138; + --color-subscription-pro-400: 24, 96, 104; + + --color-subscription-business-200: 142, 33, 87; + --color-subscription-business-400: 103, 24, 63; + + --color-subscription-enterprise-200: 86, 5, 145; + --color-subscription-enterprise-400: 73, 4, 123; } [data-theme="light"], From bb48250467e17a8762e8580f541615e5983dc868 Mon Sep 17 00:00:00 2001 From: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Date: Fri, 11 Jul 2025 04:16:36 +0530 Subject: [PATCH 059/130] [WEB-4477] fix: sidebar resize behaviour #7386 --- .../components/sidebar/resizable-sidebar.tsx | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/apps/web/core/components/sidebar/resizable-sidebar.tsx b/apps/web/core/components/sidebar/resizable-sidebar.tsx index 64ae3f56fdb..ddfd2ef9f2a 100644 --- a/apps/web/core/components/sidebar/resizable-sidebar.tsx +++ b/apps/web/core/components/sidebar/resizable-sidebar.tsx @@ -50,6 +50,8 @@ export function ResizableSidebar({ const [isHoveringTrigger, setIsHoveringTrigger] = useState(false); // refs const peekTimeoutRef = useRef>(); + const initialWidthRef = useRef(0); + const initialMouseXRef = useRef(0); // handlers const setShowPeek = useCallback( @@ -62,15 +64,22 @@ export function ResizableSidebar({ const handleResize = useCallback( (e: MouseEvent) => { if (!isResizing) return; - const newWidth = Math.min(Math.max(e.clientX, minWidth), maxWidth); + + const deltaX = e.clientX - initialMouseXRef.current; + const newWidth = Math.min(Math.max(initialWidthRef.current + deltaX, minWidth), maxWidth); setWidth(newWidth); }, [isResizing, minWidth, maxWidth, setWidth] ); - const startResizing = useCallback(() => { - setIsResizing(true); - }, []); + const startResizing = useCallback( + (e: React.MouseEvent) => { + setIsResizing(true); + initialWidthRef.current = width; + initialMouseXRef.current = e.clientX; + }, + [width] + ); const stopResizing = useCallback(() => { setIsResizing(false); @@ -199,7 +208,7 @@ export function ResizableSidebar({ >