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 ecb3fbec7..680903814 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 56f931adc..ab36fb9f1 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 680903814..a52f84f71 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 ab36fb9f1..037f552c8 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 a52f84f71..03a2b317f 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 dad7aab3f..17ec0c60d 100644 --- a/apiserver/plane/db/models/issue.py +++ b/apiserver/plane/db/models/issue.py @@ -271,15 +271,15 @@ class IssueBlocker(ProjectBaseModel): 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 421f645e8..c848e0b92 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 2d3e4e788..a736f4f64 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 34c3c3a7f..a429bf91c 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} | 61 +- .../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 | 15 +- .../[projectId]/cycles/(list)/page.tsx | 4 +- .../[projectId]/draft-issues/header.tsx | 9 +- .../(detail)/[projectId]/intake/page.tsx | 4 +- .../issues/(list)/mobile-header.tsx | 15 +- .../[projectId]/modules/(detail)/header.tsx | 2 +- .../modules/(detail)/mobile-header.tsx | 15 +- .../[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 | 6368 ++++++++--------- 336 files changed, 3629 insertions(+), 4374 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 0925e9d95..83c01a57e 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 fa0ee452a..000000000 --- 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 7399de761..fe7a45e67 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 cba3f7cd1..07efaea6e 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 1e5d4f58d..ac79b7608 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 4ac899523..4192cef8c 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 be736d807..42f7f96ea 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 be8c6ffe3..6bf211b50 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 c182cb17e..0f47e767c 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 46275d751..7e9059195 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 6fc554a5b..c65043fc0 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 983a787d4..cb90d62d3 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 af7971023..ba7ddd12d 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 996756949..2e2f3b162 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 8ac837de8..7e9e141ec 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 25c942dfc..034932538 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 e9c308e9e..e33086d51 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 c511d554f..fe41a48f4 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 c81c467c2..ca2a0dbe2 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 2249a9cec..b75745e69 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 ce8bcbadb..d1c2d2441 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 80c773fa2..c40f7e7fd 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 685aed214..fb49c7172 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 218219914..4bb66ff9b 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 96efea007..ac2339d1c 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 cd9e31ad2..e9f4218fa 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 e7065c6d0..d439f333a 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 31d3a2582..33c2c7547 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 e2561bd18..a02dc7255 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 fc7c14ed8..de64c3923 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, - TIssueGroupByOptions, - TIssueOrderByOptions, - TIssueGroupingFilters, + IIssueFilterOptions, TIssueExtraOptions, -} from "@plane/types"; + TIssueGroupByOptions, + TIssueGroupingFilters, + 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 7b5653aed..7b6493349 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 7ed0c35d6..15a37a4a7 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 e61b35585..3cb76d39e 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 05f679cce..b01bd3b7c 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 01c0b2f3a..6b5cc0638 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 378470a58..53dc178f4 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 ce845e60d..b428fc8b6 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 bdbab7f32..21e22e631 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 9d6b03ab1..3de3c71ab 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 83d21d90b..358d6e5da 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 38d0abe12..7392606e2 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 55f8b23c5..000000000 --- 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 7694c2406..3258d14dc 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 509ee5495..2a6b9f22b 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 32b5889ca..f7630422b 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 eb207128d..2554d6305 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 0b81e3b91..09b05c62e 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 5b3cab5cd..bf388c8fb 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 255bbbfe8..ca53a18a0 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 f4217ea41..c982ff91c 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 d085aabdb..de9e254cc 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 5e6bf02e1..3b6f73cf4 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 207f387b7..a03dbc292 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 c032efba9..59feb088b 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 6765961f5..510545bd3 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 d57dd84de..ac7549a8a 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 735474cd4..63c6aa2b7 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 92cdfb1c1..84f60e9fc 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 baa41eb9f..4adfa4b8a 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 60ee2c351..7aed027b0 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 5a588457a..40f407d6a 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 5844c661b..ab7cde782 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 fc98e941b..6d8c4ec00 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, - EIssuesStoreType, - ISSUE_LAYOUTS, - ISSUE_DISPLAY_FILTERS_BY_PAGE, -} from "@plane/constants"; +import { EIssueLayoutTypes, EIssueFilterType, ISSUE_LAYOUTS, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; +import { + EIssuesStoreType, + 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 edb4e1bcf..82192f61e 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 3c2796761..2b8b63691 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 48ab4d38b..1e6e2c542 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 27a78ed3a..d3d533b29 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, - EIssuesStoreType, - ISSUE_LAYOUTS, - ISSUE_DISPLAY_FILTERS_BY_PAGE, -} from "@plane/constants"; +import { EIssueLayoutTypes, EIssueFilterType, ISSUE_LAYOUTS, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; +import { + EIssuesStoreType, + 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 4ec808d7a..32603684c 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 71d2b78d4..0d2c2ff2a 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, - EIssuesStoreType, - ISSUE_LAYOUTS, - ISSUE_DISPLAY_FILTERS_BY_PAGE, -} from "@plane/constants"; +import { EIssueLayoutTypes, EIssueFilterType, ISSUE_LAYOUTS, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; +import { + EIssuesStoreType, + 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 1a2980760..f00c7b223 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 270faf985..58b69809b 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 8e69ef888..7169a3d91 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 d9068966c..67895bcb9 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 399f9aab6..d53254f1f 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 bc3e69a7a..011659090 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 8a97c8b05..0f346f5d9 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 f88908f25..9f80727d3 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 6e42f6880..07e721780 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 3250ad4d5..fac54955b 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 788f1ae86..b6e6b33af 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 3b209198a..531925c04 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 622c4d5ce..fdec58a34 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 5b22e79cc..38715972b 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 469b9806d..cf8f3dec5 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 c61b19643..dd4328420 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 b0c18d554..d42999158 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 475cb3124..5ab65a1b6 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 e5e99b65d..d1e175c81 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 93b925aba..377cc6ff9 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 1b90c9c11..717da4659 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 13019063b..3b4014ea1 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 f4ef0d9eb..f3af96a59 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 a655c9a13..1be296ff3 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 931b1976d..4982f8fb0 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 e85c9c68a..258ac11e1 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 657465822..bafd0d8ef 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 5c0069978..61ae19b8c 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 6e0b47a44..37c74ec81 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 98935271f..480c72b6c 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 092cc2c21..bbdc06f47 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 812ffd984..e03d6363a 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 f4a3b0951..d442afde9 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 53bada187..84f8ef287 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 b89264ec1..7abc9326e 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 1dc85e3e2..a0fda7c14 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 642a59bbc..c44885d2d 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 77e36f334..4f31e06d7 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 e0f48869a..447df1eb0 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 3b2c29250..90586d331 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 2899b7ca3..e3276b732 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 33a94bb2e..84dfe99bb 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 bab9ff2f8..1dd0105ad 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 b69254cae..e10a1f73e 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 1871278f8..897af9ebd 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 c7b4ce6f4..a1e2b9db7 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 b8982ce49..74bea07a5 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 33778b641..25fafa059 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 16e4835cf..19e32a822 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 7f6558cbb..cff4211f6 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 990f04dce..d19c80a22 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 730581e5f..98b12fa7d 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 492ee504f..8cf91df0c 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 17e8aefef..7016da40d 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 15c0410f0..d5f05e0be 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 28bc63e08..41929b564 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 5df3f49c2..e5fdd2626 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 e7df230a2..bdae008f4 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 046b90a5d..838c26696 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 8be85a07d..510a6ee85 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 7441ad42f..1a3169104 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 28684ac99..430e4cec9 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 c96b6ffb8..4eb61fabd 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 a80d59cc0..08d694a34 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 6e68be0d4..e42025fd4 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 f1284eb47..32b9318eb 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 6000959f2..00abc3799 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 564e72c05..e6d44d7a8 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 b860646ba..7bee0f513 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 73e5b29f0..cb0a9c75f 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 c99f99086..a95a10fa7 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 e9e4393ed..b01dac11e 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 041f0ca23..c38a398cb 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 b9a1f4bbe..3d2270750 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 4be7686c2..5ba71d962 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 ba31a81d0..89670dbb3 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 509b0a5ca..a2ad09307 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 526336c73..107c6ef43 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 e37f1cadc..4512eb30b 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 175f03f1e..29a22c9c4 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 cbd679045..6a8b35d5f 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 8239d08ac..504b625f6 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 092ac047c..9ca5d12f8 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 428beafc0..3b081cffd 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 ba85fb80f..d10e28b23 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 296b4c5a3..0e1038e2f 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 dc2c9fbcf..d1164d1a5 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 f9aca06f2..73d138fcf 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 a29a4f280..6c5f7b304 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 03d4c62ed..ec81d9684 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 decf0e402..e51fa932d 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 55edda7fe..691df228f 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 109b67c28..d314ee81a 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 dd1760452..9e2c729ab 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 91d720776..b27328a82 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 2628fe41d..d7af6e899 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 a596b4248..b774d2d34 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 6bf8ed361..a0fe5f7b5 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 10820d354..4e43a730a 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 eebf4fd9d..cbd41be9e 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 90652c129..f20c9613f 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 6812c8119..beeecf9bb 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 594bcd2fa..74dea055b 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 d4b29a35d..e1dfe0a95 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 2347df968..f0fe531de 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 0dce7e181..16f0990d9 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 0e46fc505..7944ffc79 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 ceccd87d2..491774006 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 bcb2ef189..ca5c45616 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 67d282753..755d46295 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 2d3eb4a8a..a542537dc 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 257a6be97..c04be1ac1 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 931d0f30c..354567eaf 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 d3524559d..86229ef6c 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 b8b74764d..65b3bd816 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 75bb8633a..993200cf4 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 e3d89f8a2..45634cf8b 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 3ebcc7e70..899861c40 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 e23ff7501..a0f82548f 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 994648544..8b0bb8a80 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 2bebdb96a..ee465d27e 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 86f299ef2..b96afb599 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 a9c9fe0e8..5de2675b9 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 13597c578..8f3703c0d 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 f64f28cc7..9494a4631 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 4007468dc..fbd3550a5 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 fd0a54a31..126804a4a 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 f8d2f32c3..eff96c1a2 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 a645bffe2..8594e72fa 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 caba1176d..216634bdd 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 510fbf5a6..83943f84d 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 494eb80e7..ee34ee3fa 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 addf1917a..f80d091be 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 b87573808..303eac87d 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 dfeedadce..23ad3dbc1 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 bcdf61d67..c30a40fb5 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 eeedabdf9..c09560b46 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 56f00251c..e11ce476f 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 b301c8b1f..fae86a743 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 423231c6c..4c9a9736c 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 1c0b51fbb..cc637321e 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 8f4577e80..0c05ffe65 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 cfbb44fe6..ee9f93ed5 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 71a5bebc9..647d25518 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 27ca78796..3b5695cee 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 ef21459c6..9fdd60456 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 cfd5e7744..947682c60 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 81ee66a80..13a491ab2 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 1664772ee..4f8e6b578 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 660b0b461..26b6cc0c6 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 70a76de95..7a44b9911 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 428ccf8f9..574f134bf 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 163fdf76e..06ed17103 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 c3cec90d6..909f34606 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 15aaee224..8a61883e2 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 393a4012a..ee0f7c61f 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 53ebcc97a..6dcc36fa3 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 47e6e6698..f0cfb865a 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 ce46a800a..d328f61e1 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 bb654338e..18e7c04fd 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 d2a32fb79..9dd7d0a4d 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 2b5e6ab9f..a54010113 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 1dbed08ac..8a0ec89c3 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 29a0c4cb0..6fa5e4b05 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 90b3d709e..a54b6b03a 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 e895d7c98..1853762a9 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 f4add66e6..a6176bed8 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 3f89dd687..4d9208685 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 5e3ee4b0a..762d55a3a 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 3367a2b34..26e0951c9 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 6b06390e4..002f065da 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 57582c6c8..069b781de 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 676182216..8bebf6adc 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 79db73ef7..9adcd4204 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 9afc97018..3946f1c26 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 dd96ddf05..8aabdb92a 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 bdb442c5f..4ea9e54bf 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 c98520c86..e52d6ea9e 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 2f443d129..df419cec9 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 9b980fe32..68d7e2332 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 660627d00..848accc34 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 bccb6b224..2214012d9 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 88df42b89..784a8bdb8 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 4eb5e90b0..0294c159c 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 ae4eefd63..dd3764d59 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 46ef780c2..740843791 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 dc559c69a..f973f017f 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 2cd6e9f7f..67112dfb3 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 84a034124..3e593a412 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 a78c49710..828a131b1 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 9c7273a5f..f9e309814 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 c9840b4c8..76fad2971 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 40421c30c..e35245223 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 33e974e4e..0235445f9 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 3c171add1..f48b8b3a1 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 c335c5a53..239ca2ece 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 45e0855c8..bfde23bc0 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 7c84d848b..ef6323af2 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 6284cfe10..e597725d0 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 16fb7b858..21e879b30 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 a8be50f88..2043db8b1 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 da3b2e6bf..7c33eb72c 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 8516af7f3..58e4f2a1e 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 4938c9c69..65b6ec7a6 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 a8ccbfa3e..63b45c793 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 31dd56612..eeaea4677 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 33710fae1..112f3b41f 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 05e5ea511..922931291 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 71ce319d3..c19c29ecc 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 ceba44c9e..d197851b7 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 4f519a583..02dfda547 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 9e30308d7..4ed4b78cb 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 4d54ce140..a224fbfff 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 d5e796be6..b478f1002 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 8ce430aaf..ef79b2775 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 e8fcdc11c..70ac5e624 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== +"@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: - "@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== - 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== +"@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-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/traverse" "^7.27.1" + "@babel/types" "^7.27.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== +"@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-annotate-as-pure" "^7.25.9" - regexpu-core "^6.2.0" - semver "^6.3.1" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.3" -"@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-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/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-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/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-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/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": +"@babel/helpers@7.26.10", "@babel/helpers@^7.27.4": version "7.26.10" - resolved "https://registry.npmjs.org/@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" "@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== +"@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/types" "^7.26.8" + "@babel/types" "^7.27.3" -"@babel/parser@^7.26.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.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.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== +"@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.26.2" - "@babel/parser" "^7.26.8" - "@babel/types" "^7.26.8" + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" -"@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== +"@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.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/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== +"@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/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== - 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== +"@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.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/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-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== - 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/react-focus-guards@1.1.1": +"@radix-ui/react-direction@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== + 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-focus-scope@1.1.2": +"@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.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.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== - 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" + 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-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-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-use-layout-effect" "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-portal@1.1.4": +"@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.1" + +"@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.1.3" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-presence@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== + 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-primitive" "2.0.2" - "@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-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-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-compose-refs" "1.1.1" - "@radix-ui/react-use-layout-effect" "1.1.0" - -"@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== - 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== + 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/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-compose-refs" "1.1.2" -"@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== +"@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.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-compose-refs" "1.1.1" + "@radix-ui/react-use-effect-event" "0.0.2" + "@radix-ui/react-use-layout-effect" "1.1.1" -"@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-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-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-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-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.0" + "@radix-ui/react-use-callback-ref" "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-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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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== + 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.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" + "@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== +"@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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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-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.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== +"@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.19.2" + 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.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== + 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.24.0" - "@typescript-eslint/types" "8.24.0" - "@typescript-eslint/typescript-estree" "8.24.0" - "@typescript-eslint/visitor-keys" "8.24.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" "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== - 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" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.4.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.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.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + 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== -storybook@^8.1.1: - version "8.5.4" - resolved "https://registry.npmjs.org/storybook/-/storybook-8.5.4.tgz#097e6d39bba43db18c2fa951c8b820a2d445e61f" - integrity sha512-TMXXOprDjkt8GbTCgzZSi0sPYoKMfvN+9gGnU7gRa8s1C0QhqkE0lc6fq9pl8nahXPF5ala4gPOaxjQbuJUvNQ== +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: - "@storybook/core" "8.5.4" + es-errors "^1.3.0" + internal-slot "^1.1.0" + +storybook@^8.1.1: + 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.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.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -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" - -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 | 338 +++++++++--------- .../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 | 147 ++++++-- .../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, 2095 insertions(+), 1888 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 85f2ea6e2..dd40d3459 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 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 PRODUCT_TOUR_TRACKER_EVENTS = { - start: "product_tour_started", - complete: "product_tour_completed", - skip: "product_tour_skipped", -}; - -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 750b52ccd..abf233a29 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 6100bc8d5..829ebdec7 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 0cd87200c..d33acbeb4 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 7169a3d91..242b5902e 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 001c00dd2..e05eb30f0 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 65ea62701..f94ca2141 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 a7e3e7ed4..fa9ff9358 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 5e5f1958f..c3ba0e152 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 078d6fefa..7e7d15a10 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 786b97384..25deaf8f1 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 21e5c12d0..c9f0c4850 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 fac54955b..7460967a5 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 28576735f..1cb04b623 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 4f5074dd9..000000000 --- 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 3c2927418..6e05d0c22 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 157beec74..e37e3c311 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 349b91431..3d16af81b 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 6865b7856..bb7b24f7a 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 68c4d7c05..8fbafd6af 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 90a183e0b..167ee752f 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 606f533f1..d2c1f7dad 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 d5888161e..7c48fb30a 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 27c8ec840..26c96596f 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 e40280373..1abd5a91d 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 114ee3a4f..561dcd6a8 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 d425af53e..540a77f09 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 faa41a0e1..b2b8c2c0b 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 ee0f7c61f..74315bbd5 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 5b3f8c79b..0e7990b50 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 4de953759..f15520ec3 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 0c7c87411..9a03bd711 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 0f51e74b2..d7d54c661 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 c668ad300..14cffe545 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 dc815b52c..1fa1fce2f 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 1e5036fef..edff3f15a 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 978b757b3..db7e7e275 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 e9a83784b..577f5acd0 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 d6f436579..55278b047 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 2ef487468..14419ffe8 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 66652b2db..2c36785bd 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 49ad06b9b..000000000 --- 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 407ee03c4..8ff976571 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 72c9da3d4..e779c618e 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 6c6cb2f6c..ccf07191a 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 000000000..520265106 --- /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 000000000..a2497d385 --- /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 000000000..f770ae7b4 --- /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 000000000..d4c166ddf --- /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 000000000..b301e9cbe --- /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 000000000..77edc24e0 --- /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 000000000..31069299f --- /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 000000000..d563e52eb --- /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 000000000..c9880f0d5 --- /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 000000000..bf4383216 --- /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 8491408ac..1a2c23e28 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 8e04e4de9..5da43e959 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 e94bfefa7..ab05ba256 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 f1dd0248b..64b4f43da 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 c5df2c0d2..000000000 --- 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 bff9c3698..000000000 --- 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 793d7fed9..000000000 --- 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 8b689f0cb..84d65bebb 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 294c370e7..e5ca4e4d5 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 000000000..442b534f3 --- /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 | 197 ++++++++++-------- packages/editor/src/styles/variables.css | 15 +- 14 files changed, 306 insertions(+), 118 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 34e3c45e5..ca139f723 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 000000000..0e88d8c77 --- /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 000000000..f4c43e77e --- /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 2ba06845a..988fcbb14 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 491889eef..315ada5ec 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 8efc43120..328422b73 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 f78d964ed..c3466ba59 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 4810706b3..aa2c79aaf 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 5e9c4ba24..0ba2757db 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 415a42bb3..43543d575 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 e04bbaba4..342da5740 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 7db6ed875..7b9577cc4 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 b4a1ab820..8c0b1786a 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; - } -} - -.table-wrapper table { - th { - font-weight: 500; - text-align: left; - } - - tr[background="none"], - tr:not([background]) { + td, th { - background-color: rgba(var(--color-background-90)); + 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; + + > * { + 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)); + } + } + } + + th { + 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 6d6e2d9b6..8d4e41a3c 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 68fa33dde..3d15de069 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 0d63407a7..3575b2eb4 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 fe41a48f4..f6118c22f 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 da90d529e..666c13534 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 000000000..25a666b93 --- /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 db070cb7b..eaec3e88f 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 d66cae7bd..421f48e0a 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 000000000..86443cc9d --- /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 000000000..362b02449 --- /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 000000000..459d605a5 --- /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 65119425f..e36adde3c 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 cc8882005..1833dec46 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 e75fc9156..e7b6dbe2a 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 d3ca4856e..54d717de3 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 571a66da0..a1b138a6d 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 68d8424ab..129e8cd0b 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 ba910d144..e4aabde9e 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 70ac5e624..2b9ebf489 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 f6118c22f..d1d854336 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 c895d19cc..45c66f428 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 && ( - + {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, + })} + style={{ width: size.width, - height: size.height, - aspectRatio: size.aspectRatio === null ? 1 : size.aspectRatio, - src: resolvedImageSrc, + ...(size.aspectRatio && { aspectRatio: size.aspectRatio }), }} /> - )} - {selected && displayedImageSrc === resolvedImageSrc && ( -
    - )} - {showImageResizer && ( - <> -
    } + {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 74ea2c38c..eb38ab405 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 000000000..3790fa547 --- /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 000000000..2f0a665ae --- /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 000000000..1efe34c51 --- /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 1d2e52ca0..9a30908c2 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 000000000..2108bfeaa --- /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 f9cd28d48..06277fa25 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 ec795da84..3ce93ecd8 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 675d8a221..4ed5cd6ce 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 88d8032c7..10f2bb1e2 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 6dbad2d24..7456e3dfb 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 60ccfa841..7ef685ad0 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 96a192273..d0c7435da 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 fc454e54b..433dea7f9 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 a4961bb96..a95344691 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 96651c6fa..db20d9097 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 fe7a45e67..54899d691 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 16a4fb11e..000000000 --- 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 20aed8fd8..0f9c964e7 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 6a47ef791..8ffa38a60 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); +export class Server { + private app: any; + private router: any; + private hocuspocusServer: any; + private serverInstance: any; -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" }); -}); - -router.ws("/collaboration", (ws, req) => { - try { - HocusPocusServer.handleConnection(ws, req); - } catch (err) { - manualLogger.error("WebSocket connection error:", err); - ws.close(); + 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.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 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); + } + + 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 622dc2232..810a68a5c 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 ac79b7608..05fbe7e86 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 000000000..c9472ec20 --- /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 e007dc10b..f0de91401 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 000000000..f64308b49 --- /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 000000000..4688d2c2c --- /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 b5bd13a3c..c9472ec20 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 13b105323..bf84b2fdb 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 58b8640e6..1bb68d838 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 000000000..c9472ec20 --- /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 b75745e69..f4ae50831 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 ba70ec5c7..ae35062e5 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 000000000..9d48e155e --- /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 000000000..4688d2c2c --- /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 715836946..8eee2f8b5 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 e63ba8834..1b114ea58 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 eacabf8f8..8566b04d2 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 4d2196527..5a1d9eaf4 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 61ae19b8c..ac7704628 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 0634a2312..925e24b89 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 a7693b8da..e411c0234 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 0bebeb653..314702346 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 e3276b732..db3950780 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 4f80d061b..1fe850a77 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 672892178..c7338fd44 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 b2511e5d5..c116d0cef 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 b12a45c50..b8f7b00e9 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 af30a389f..b4332afd1 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 b1bbce5b9..2540756a8 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 39a90227b..499a42c81 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 0465024cf..f3c635748 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 25f93d320..a11732b20 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 bb91bc121..4bc042e1c 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 27a8a7362..09c0f7498 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 2b9ebf489..fcc75cf0d 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 47ab9480e..8b7d036ad 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 d461a626a..42f379649 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 0c6d81ae6..6e5f2a903 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 000000000..373f9340a --- /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 986a5ebd2..75cb84e4a 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 f64158744..888b2533c 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 000000000..fc89e9752 --- /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 7a4d8248e..cdcfcd61b 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 992c7a8a7..6ac4ea09b 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 73a1af174..de7f33f5d 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 2084af1ea..cb3212951 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 4fbd70535..0700c4d0d 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 374257daa..af3000510 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 b97dd7c9e..92bf10210 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 61d2875ed..be77983ec 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 32233e078..7ec0ff54b 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 88f71aa3c..179623783 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 0cde7f551..cdce94f01 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 d77647749..cedc735a9 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 618551ae6..e536a5145 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 05dde0d8a..09dab86ee 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 9f2a63c67..78b0f3c40 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 3ca34b69e..b8f79db04 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 f9882b5e5..7613548b9 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 1be40ea12..19cab04cb 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 000000000..80ea40ee6 --- /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 000000000..12b250a93 --- /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 000000000..ac8fa74e8 --- /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 000000000..ddfba732a --- /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 000000000..7d7938a9b --- /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 17d702627..3a50823dc 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 b10e9186c..e73572369 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 1a274025a..000000000 --- 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 3c7ec111a..c90016702 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 e800fe3c5..000000000 --- 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 337d9baaf..000000000 --- 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 d189a727b..000000000 --- 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 4d664b0a4..000000000 --- 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 56d1933f4..000000000 --- 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 000000000..a21319d9e --- /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 fcc5c6c83..4e771e91b 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 bdeb387f3..000000000 --- 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 553ffe6c5..000000000 --- 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 24950c4f2..000000000 --- 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 cf2edc39f..67ac3bca8 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 bad89cfee..0f07149b1 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 823003144..eaf02862e 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 e3bde92d5..2203ec948 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 d021e3b83..000000000 --- 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 33954fe73..1f690f708 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 df72d07b4..d85abf2cc 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 000000000..40c3d6809 --- /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 543cd131a..a2da66010 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 619a0d4ec..e2b74993e 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 c302b1d4f..339297662 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 832558810..a7d4394e2 100644 --- a/apiserver/plane/tests/conftest.py +++ b/apiserver/plane/tests/conftest.py @@ -4,7 +4,7 @@ from rest_framework.test import APIClient 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 000000000..f7d41e2a2 --- /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 73c8697a1..6faf02651 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 8046bf329..606d19aec 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 03a2b317f..a76334454 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 . +# 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/standalone ./ - -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 037f552c8..40b9bb597 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 6c75af134..9ce5ceed8 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 168c54e62..a1ab06c89 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 b392788a0..e378e220d 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 a6c73e845..2ab869005 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 da650cbbe..176eae758 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 d8a350ce3..44d4e7328 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 a1f4c3cec..0e230167a 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 0f388db39..fa1734a30 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 a6275f53d..5d7629bc5 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 8147451c7..60a76c57d 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 4a984b4c3..e500de010 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 38a564e3e..49cf5b1a0 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 e8fd5ee28..ace7e923b 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 55b4ae2c5..9b66d0e4b 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 bbe979e89..413c0989e 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 5cc3e360f..1e01d86af 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 d088aa835..fabaad1f0 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 04695f9b1..fcfe7c172 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 37ceaeda8..abfc703d1 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 3f08eec17..1d0791c0b 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 df2a4ba4a..d53667df0 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 894daf224..de164c837 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 63320cd2c..7a9178f65 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 dd9d37190..000000000 --- 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 32bcbc9bd..ad79dfde6 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 f185d0054..49fdb69dd 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 fdb5a3bfd..7349bfe48 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 b89804e01..000000000 --- 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 c116d0cef..907f48e70 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 b8f7b00e9..10d0dfac8 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 2540756a8..8e0bc68f5 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 df89521ae..66913057b 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 b2ba8682a..8b1fd904b 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 efad3d6ac..000000000 --- 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 129e8cd0b..d4d572502 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 43b295647..5484d0aff 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 0853595c4..e61975078 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 9e8579526..7ba8cb253 100644 --- a/apps/server/plane/api/views/issue.py +++ b/apps/server/plane/api/views/issue.py @@ -857,6 +857,16 @@ class IssueCommentAPIEndpoint(BaseAPIView): 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 @@ class IssueCommentAPIEndpoint(BaseAPIView): 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 c848b6fcf..3dbe55eb6 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.app.permissions import allow_permission, ROLE 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 @@ class IssueCommentViewSet(BaseViewSet): 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 @@ class IssueCommentViewSet(BaseViewSet): 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 ae9eba9d1..5bec2624c 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 227425c8f..acbd9d26e 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 4a1567520..01a4ff5ad 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 775d6a55f..54e0415a5 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 7ffe3f803..b209ce70e 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 63736e8e8..000000000 --- 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 4937ae149..000000000 --- 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 b65d297e9..aa5306fb4 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 86457615a..257780143 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 861fa9dd8..184b514c1 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 e9d2ac033..000000000 --- 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 c19a29abf..5d87c8446 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 606d19aec..07da8088a 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 5bec2624c..1a22ca18a 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 b0fa44788..9c95f17b1 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 a76334454..ae7afc2c0 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 40b9bb597..a09aa6404 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 6aa37876f..e01c0ef26 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 b9de661bb..df581600d 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 13356047e..8f5794bc8 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 74ab1dde2..244206ec3 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 c29c323a2..9d47cde35 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 f3e176772..c7ba4eb3a 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 566e34827..eee967847 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 ed1794c5c..4b326e019 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 558b8f76e..b11b7bb6d 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 52b57de7e..89f24ac38 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 000000000..c69daf158 --- /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 ce07c6c86..51d1ad71f 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 24dc3c789..05715d2de 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 2a683a1e5..3cb12405c 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 43c44dc95..d3eacd9ce 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 a68adb403..b9096eb6c 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 5fc431692..0c6b0185d 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 720b9e0aa..df13b6dc9 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 558b8f76e..b11b7bb6d 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 f4d329494..86ce63428 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 000000000..b8d2a4b6e --- /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 36e95edbd..308d3d5b3 100644 --- a/turbo.json +++ b/turbo.json @@ -24,23 +24,38 @@ "dependsOn": ["^build"], "outputs": [".next/**", "dist/**"] }, - "develop": { - "cache": false, - "persistent": true, - "dependsOn": ["^build"] - }, "dev": { "cache": false, - "persistent": true, - "dependsOn": ["^build"] + "persistent": true + }, + "check:types": { + "dependsOn": ["^build"], + "cache": false + }, + "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": [] }, - "lint": { - "outputs": [] - }, "start": { "cache": false }, 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 54e0415a5..000000000 --- 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 6b1ab7528..000000000 --- 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 69eb2f1df..000000000 --- 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 2685c3826..000000000 --- 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 9ce5ceed8..3c4125a0f 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 01a4ff5ad..1ff77f449 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 b209ce70e..6406c23d9 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 257780143..01cd07f94 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 184b514c1..e584ac697 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 5d87c8446..986a42616 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 07da8088a..01884206e 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 3bdc71c16..edf82d227 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 9c95f17b1..132514811 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 d893194ca..4d251ee9a 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 1a22ca18a..c3455fdce 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 b7e42dab8..f735e0d84 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 ae7afc2c0..525d72f7b 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 64465755e..8ca879207 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 a09aa6404..ac1da79af 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 d4c166ddf..d0bd1b907 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 31069299f..d1454b12c 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 e20ac3f5f..daaa56177 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 62613b0a1..1316d2d72 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 8d4e41a3c..f03808c1a 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 | 215 +++++++++++------- .../src/core/extensions/emoji/suggestion.ts | 90 +++----- 2 files changed, 164 insertions(+), 141 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 86443cc9d..706dbc685 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(" - "); +
    + {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 459d605a5..a75e93fb0 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, - }; - - 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], + editor = props.editor; + + // Track active dropdown + getExtensionStorage(editor, CORE_EXTENSIONS.UTILITY).activeDropbarExtensions.push(CORE_EXTENSIONS.EMOJI); + + component = new ReactRenderer(EmojiList, { + props: { + items: props.items, + command: props.command, + editor: props.editor, + }, + editor: props.editor, }); + + // 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 bdd91161b..d5554ce2f 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 783a15792..60cfd7f06 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 51c4419b8..c6e4654d0 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 65e4d9475..4292e67ea 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 960f0653c..065723811 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 520265106..fc8595eaa 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 f770ae7b4..357b759ad 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 06056364f..d0e473dfe 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 510545bd3..438b67aeb 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 339297662..c177b1ffd 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 000000000..12fe7e06f --- /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 362b02449..7e35038cc 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 a75e93fb0..caadb483c 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 c99b02312..25541dd3c 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 e01c0ef26..2546c62be 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 8f5794bc8..2e5d2b559 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 244206ec3..66273772e 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 308d3d5b3..09f2a42ad 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 10d0dfac8..1e99de3aa 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 a980b2eac..5cef17448 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 0beb28c93..832f7f39b 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 c681a8cc1..7a8c915ed 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 b2e6f7602..c639b0bac 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 000000000..9f0741297 --- /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 000000000..48d0b0ccf --- /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 000000000..45caea0c6 --- /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 358026806..3a2e9071c 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 7ed9ea528..bd935b665 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 d1d5e5249..e9f3adee0 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 91f8addd8..bc9f1e9d9 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, } - 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 -
    -
    -
    - - - - - )} + )} + 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 +
    +
    + + + + +
    {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 9c3c64b8d..7b9606085 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 49931802e..1b5c9436e 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 d2d30a37d..607e572c9 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 000000000..3a1dc8320 --- /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 73f036cd4..5aff74d56 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 0a1f2a920..8c18ceae6 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 a6176bed8..754f45de5 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 37a1ebb45..714c36eca 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 14419ffe8..1f4a8f71f 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 b553c40a4..878447233 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 89c0f150e..3a2676c81 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 34e056400..5d0b555dc 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 000000000..1dda94995 --- /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 762d55a3a..9826a77b9 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 26e0951c9..0d2a736f3 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 000000000..c6f1d3ec2 --- /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 069b781de..a43224d8d 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 000000000..6fe902cdd --- /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 000000000..5318f80df --- /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 000000000..fd0e74219 --- /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 a11732b20..0bee5655c 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 b37fb0ef5..e788089e1 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 000000000..68889686d --- /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 b0b8ffd3a..4e148736d 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 1c7fcfb64..d12716555 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 d7ccebd31..045538f3a 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 000000000..746859754 --- /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 034932538..24bcd8fa8 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 143c3d79a..500925e3c 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 000000000..f56e8e03e --- /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 000000000..7ef090714 --- /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 | 205 +++-- .../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, 1518 insertions(+), 919 deletions(-) diff --git a/apps/api/plane/api/views/issue.py b/apps/api/plane/api/views/issue.py index 7ba8cb253..6a5016bec 100644 --- a/apps/api/plane/api/views/issue.py +++ b/apps/api/plane/api/views/issue.py @@ -60,6 +60,7 @@ from plane.utils.host import base_host 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 b3b69e375..2aa2ac7b7 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 c2aca4f81..965d78aa2 100644 --- a/apps/api/plane/app/serializers/issue.py +++ b/apps/api/plane/app/serializers/issue.py @@ -726,7 +726,6 @@ class IssueSerializer(DynamicBaseSerializer): 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 8d521e8e8..364090443 100644 --- a/apps/api/plane/app/serializers/project.py +++ b/apps/api/plane/app/serializers/project.py @@ -148,8 +148,8 @@ class ProjectMemberAdminSerializer(BaseSerializer): 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 c5a3d35df..7b5453568 100644 --- a/apps/api/plane/app/serializers/user.py +++ b/apps/api/plane/app/serializers/user.py @@ -110,7 +110,11 @@ class UserMeSettingsSerializer(BaseSerializer): 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 94ff68de3..bf7ff9727 100644 --- a/apps/api/plane/app/serializers/view.py +++ b/apps/api/plane/app/serializers/view.py @@ -8,7 +8,6 @@ from plane.utils.issue_filters import issue_filters 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 8a2aea90b..c690fbe7d 100644 --- a/apps/api/plane/app/views/analytic/advance.py +++ b/apps/api/plane/app/views/analytic/advance.py @@ -160,7 +160,8 @@ class AdvanceAnalyticsStatsEndpoint(AdvanceAnalyticsBaseView): ) 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 @@ class AdvanceAnalyticsStatsEndpoint(AdvanceAnalyticsBaseView): 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 d2aa1a02d..e84cf4d29 100644 --- a/apps/api/plane/app/views/notification/base.py +++ b/apps/api/plane/app/views/notification/base.py @@ -37,7 +37,7 @@ class NotificationViewSet(BaseViewSet, BasePaginator): 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 3eedc390c..0915cd9d8 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 @@ class Command(BaseCommand): 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 a7d4394e2..b70c9352a 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 d2d6a2df5..50022b490 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 0519ecba6..e69de29bb 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 0dc548710..a52882b9d 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 @@ from plane.license.models import Instance @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 @@ class TestMagicLinkGenerate: @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 @@ class TestMagicLinkGenerate: @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 @@ class TestSignInEndpoint: 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 @@ class TestSignInEndpoint: 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 @@ class TestMagicSignIn: 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 @@ class TestMagicSignIn: # 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 @@ class TestMagicSignIn: 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 @@ class TestMagicSignIn: @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 @@ class TestMagicSignIn: # 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 @@ class TestMagicSignIn: @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 @@ class TestMagicSignIn: 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 @@ class TestMagicSignUp: 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 @@ class TestMagicSignUp: """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 @@ class TestMagicSignUp: # 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 @@ class TestMagicSignUp: # 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 @@ class TestMagicSignUp: @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 @@ class TestMagicSignUp: 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 @@ class TestMagicSignUp: 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 71ad1d412..9d4c560e5 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 @@ class TestWorkspaceAPI: @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 @@ class TestWorkspaceAPI: workspace_data = { "name": "Plane", "slug": "pla-ne-test", - "company_name": "Plane Inc." + "company_name": "Plane Inc.", } # Make the request @@ -57,15 +59,13 @@ class TestWorkspaceAPI: 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 @@ class TestWorkspaceAPI: 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 8d95773de..b8cd78361 100644 --- a/apps/api/plane/tests/factories.py +++ b/apps/api/plane/tests/factories.py @@ -2,26 +2,21 @@ import factory 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 UserFactory(factory.django.DjangoModelFactory): 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 WorkspaceFactory(factory.django.DjangoModelFactory): class WorkspaceMemberFactory(factory.django.DjangoModelFactory): """Factory for creating WorkspaceMember instances""" + class Meta: model = WorkspaceMember @@ -56,21 +53,23 @@ class WorkspaceMemberFactory(factory.django.DjangoModelFactory): 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 ProjectMemberFactory(factory.django.DjangoModelFactory): 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 4d6de6c35..85ca476b4 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 @@ class TestAuthSmoke: # 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 @@ class TestHealthCheckSmoke: 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 40380fa0f..aa3c15645 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 @@ class TestWorkspaceModel: """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 @@ class TestWorkspaceModel: """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 19767a7c6..28e6c8d75 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 @@ class TestWorkspaceLiteSerializer: """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 @@ class TestWorkspaceLiteSerializer: """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 @@ class TestWorkspaceLiteSerializer: # 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 81403c5be..5503f2bc3 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 @@ class TestUUIDUtils: 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 @@ class TestUUIDUtils: 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 338d86117..1b7f908c5 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 0793d2a30..ce9c65f64 100644 --- a/apps/api/plane/utils/paginator.py +++ b/apps/api/plane/utils/paginator.py @@ -35,7 +35,7 @@ class Cursor: # 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 f4f0951b1..6f42229c9 100755 --- a/apps/api/run_tests.py +++ b/apps/api/run_tests.py @@ -6,36 +6,20 @@ import sys 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 5a27c2179..f7b4d8ea6 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 b998e154f..cbef54e74 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 4867cad3d..7364169a4 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 6cc46b6dd..fac75f92f 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 4e79afe6b..d4322d1ad 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 51896c23b..072d45cbc 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 c2110a2b8..7d23d8b19 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 7218ee003..9c1ed8237 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 9c9516937..33aa90bba 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 8ebedf381..4f11c54d0 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 6bed90076..af7be085d 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 50e6ba774..e6090a938 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 48dd4047c..8860e7395 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 7bc67af5b..b7f59441f 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 afa6c0d72..a52b3596f 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 0f346f5d9..08ad0f72f 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 18ca3b4b3..fb72b72a5 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 3ae097721..9e259b304 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 0ed40f86b..af7645f3c 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 beb26e1d9..cfd65903d 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 8a2a94c5b..776d9667d 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 50a9c47c0..1efe34c51 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 b35c5de10..f63453ba3 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 30f08cb74..3b39ae5fe 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 7f223f12f..5e4bf3e46 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 6c0fc3df4..15e12c5fd 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 92c32b65d..462192e26 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 eb4ec4851..c4b6ff647 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 61a994208..fa03d56df 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 480c72b6c..d0b6262fd 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 eafd3e821..279722cfd 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 37b354960..f1ec2ff45 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 c1a8c0b75..719b0b8c7 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 bbdc06f47..6d6895e06 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 84966e637..c6ef12036 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 41929b564..d9504e321 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 cc637321e..3cd990d07 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 c87f1c4d5..1260d5621 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 10313ef92..002286c77 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 7a44b9911..7339ebdc4 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 ed7ad04b7..316628e54 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 14c689f75..46f8adbb1 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 5ec20b970..4192e8930 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 f06dfb4d8..89fc33a47 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 f7c883b46..e32bd32c8 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 e693a646b..0f522f6e1 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; + 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; + /** + * 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 6dfbeac80..c1ccc98a7 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 ef6323af2..263c1081a 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 d8728a935..b26dda529 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 112f3b41f..5178f2cd5 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 922931291..8c6a557a5 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 b478f1002..6c7d12545 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 109132fb6..551ef7a23 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 c77348687..f35c1f848 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 ae95faf6b..eecd3efb0 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 5470941b5..9427e2fa2 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 5100afc5a..2538e79a7 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 ffc5f14cf..144cfa2c2 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 50a9c47c0..1efe34c51 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 1560fd40e..2258e72bc 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 338d24189..772360a82 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 3e2372da3..6b5716089 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 1b6cb9111..16ee1f3e7 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 42f7f96ea..8bffef4d6 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 6dd62fd17..7319a532b 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 017cc84c2..5bd6e36b4 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 cb267c4ad..793a1fa92 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 0382b67f3..829584131 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 84e8c0d0b..bd5d9ba2d 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 2e2f3b162..b13c95311 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 ef7136059..4050664c3 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 68c0fba54..e643e26a9 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 02b459b9f..72638244b 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 757dd8ba3..f89f98328 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 25a666b93..1f4efd8b7 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 3553f07fd..f189bde98 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 a3fa3e2d7..fa5427c3b 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 f04e0e71b..0aa8bfcc5 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 6b83eb52b..4391b898a 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 3c4558120..94ca2a2bf 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 4b64e8373..1a79ca334 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 50a9c47c0..1efe34c51 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 50a9c47c0..1efe34c51 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 5187d131b..25d7b84b4 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 f3b062cb0..0e4a6e2f3 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 8b83d73fe..8d119dee8 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 a2e5ce5e6..6613cf1d5 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 efce2a9fe..e8af9092a 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 98d54dabc..957a2028d 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 c40f7e7fd..e66794f7c 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 85034c2fe..082702138 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 6e072ab8f..c773c2d36 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 33c2c7547..274c5a29c 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 7eee3bf91..9660a8559 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 b01bd3b7c..26054bf13 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 6b5cc0638..3047ebd65 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 f7503b9d2..d118568af 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 b428fc8b6..50e9e8af0 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 439e2b54f..bd0969ce2 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 77da7365f..4c21488ab 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 3de3c71ab..692768875 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 f7630422b..79af8b739 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 2554d6305..00c07aec5 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 06442d65f..4fe51da88 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 314347b1e..4c9bad817 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 43338b7a9..1901c9306 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 12727d3a0..5d1791c72 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 c982ff91c..a8038ec5e 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 66002c740..133db1595 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 b1e9f314d..37108b930 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 2501bc522..3016bc0b6 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 5263d7098..aa11f4de0 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 58822e1e9..302bf3041 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 74bb1063b..f39f87eda 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 bc04dbbb4..e2b4be881 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 242db4542..79a74f56f 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 aa5306fb4..4a9d3d11a 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 000000000..97cd2d09f --- /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 000000000..1306e7919 --- /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 000000000..0e88d8c77 --- /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 000000000..f4c43e77e --- /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 988fcbb14..a9c98717b 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 aa2c79aaf..66e54adcd 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 8c0b1786a..e9556c9fd 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 292dc1be5..78b07161e 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 05715d2de..82666bb5a 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 0c6b0185d..6965ddf66 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 df13b6dc9..39fd039cc 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 22d2b2c48..bf5fdb4e2 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 9f0741297..64ae3f56f 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 38715972b..2eeb134d5 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 b108d2e4c..0b097aeb6 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 838916a69..a7cb43ab7 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 615c50f68..6e32d9f66 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 1029d792f..8201804a1 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 5ecd7ff8e..804b708e8 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 ca240435b..76dfca3ed 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 0c5d0ea8e..5419207d8 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 dd40d3459..83650319f 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 9a1883255..ecbc2f9aa 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 1132a8d74..684416184 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 eed0ecdb9..f139a2783 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 94d72c56d..d7d6e14d3 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 f1ec2ff45..f5fe9fbd8 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 d66fbe82f..3cc5469af 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 0cd08d75d..ffc74e5fc 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 9aab9a92f..d0ec45ae5 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 9a40cb880..8d171ee36 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 06ed17103..580126d97 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 83650319f..905834c1e 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 72acb4dfc..58bae9b74 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 719b0b8c7..91c7bd62c 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 7aef61d13..170e5e655 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 0ab68d8ce..8f9c17dd7 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 83bc30a0b..9dcd863f0 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 59491b279..a64864ea5 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 d74fabc76..06350275a 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 5eabffd77..897b756a9 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 86f82579c..088e7440e 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 b2b8c2c0b..48b1fcac9 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 905834c1e..dafbf0e7e 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 c6e4654d0..e40dd9bbb 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 64ae3f56f..ddfd2ef9f 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({ >