diff --git a/packages/features/shell/TeamInviteBadge.tsx b/apps/web/modules/shell/TeamInviteBadge.tsx
similarity index 82%
rename from packages/features/shell/TeamInviteBadge.tsx
rename to apps/web/modules/shell/TeamInviteBadge.tsx
index dcbec3f99f..50c080cdce 100644
--- a/packages/features/shell/TeamInviteBadge.tsx
+++ b/apps/web/modules/shell/TeamInviteBadge.tsx
@@ -1,6 +1,6 @@
-import { useTeamInvites } from "@calcom/features/billing/hooks/useHasPaidPlan";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Badge } from "@calcom/ui/components/badge";
+import { useTeamInvites } from "@calcom/web/modules/billing/hooks/useHasPaidPlan";
export function TeamInviteBadge() {
const { isPending, listInvites } = useTeamInvites();
diff --git a/packages/features/tips/Tips.tsx b/apps/web/modules/shell/Tips.tsx
similarity index 91%
rename from packages/features/tips/Tips.tsx
rename to apps/web/modules/shell/Tips.tsx
index fc899fdf94..a087c63ecc 100644
--- a/packages/features/tips/Tips.tsx
+++ b/apps/web/modules/shell/Tips.tsx
@@ -1,13 +1,13 @@
-
import shuffle from "lodash/shuffle";
-import { useState, memo } from "react";
import posthog from "posthog-js";
+import { useState, memo } from "react";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { localStorage } from "@calcom/lib/webstorage";
import { Card } from "@calcom/ui/components/card";
-import { GatedFeatures } from "@calcom/features/shell/stores/gatedFeaturesStore";
-import { useGatedFeaturesStore } from "@calcom/features/shell/stores/gatedFeaturesStore";
+
+import { GatedFeatures } from "./stores/gatedFeaturesStore";
+import { useGatedFeaturesStore } from "./stores/gatedFeaturesStore";
type Tip = {
id: number;
@@ -242,9 +242,9 @@ function Tips() {
mediaLinkOnClick={
isTopTip
? () => {
- posthog.capture("tip_video_clicked", tip);
- if (tip.onClick) tip.onClick();
- }
+ posthog.capture("tip_video_clicked", tip);
+ if (tip.onClick) tip.onClick();
+ }
: undefined
}
title={t(tip.title)}
@@ -252,24 +252,24 @@ function Tips() {
learnMore={
isTopTip
? {
- href: tip.href,
- text: t("learn_more"),
- onClick: () => {
- posthog.capture("tip_learn_more_clicked", tip);
- if (tip.onClick) tip.onClick();
+ href: tip.href,
+ text: t("learn_more"),
+ onClick: () => {
+ posthog.capture("tip_learn_more_clicked", tip);
+ if (tip.onClick) tip.onClick();
+ },
}
- }
: undefined
}
actionButton={
isTopTip
? {
- onClick: () => {
- posthog.capture("tip_dismiss_clicked", tip);
- handleRemoveItem(tip.id);
- },
- child: t("dismiss"),
- }
+ onClick: () => {
+ posthog.capture("tip_dismiss_clicked", tip);
+ handleRemoveItem(tip.id);
+ },
+ child: t("dismiss"),
+ }
: undefined
}
containerProps={{
diff --git a/packages/features/shell/TopNav.tsx b/apps/web/modules/shell/TopNav.tsx
similarity index 96%
rename from packages/features/shell/TopNav.tsx
rename to apps/web/modules/shell/TopNav.tsx
index 53fff2e424..5e7930ebb8 100644
--- a/packages/features/shell/TopNav.tsx
+++ b/apps/web/modules/shell/TopNav.tsx
@@ -2,11 +2,11 @@ import { useSession } from "next-auth/react";
import Link from "next/link";
import { useIsEmbed } from "@calcom/embed-core/embed-iframe";
-import { KBarTrigger } from "@calcom/features/kbar/Kbar";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Icon } from "@calcom/ui/components/icon";
import { Logo } from "@calcom/ui/components/logo";
+import { KBarTrigger } from "./Kbar";
import { UserDropdown } from "./user-dropdown/UserDropdown";
export function TopNavContainer() {
diff --git a/packages/features/tips/UpgradeTip.tsx b/apps/web/modules/shell/UpgradeTip.tsx
similarity index 96%
rename from packages/features/tips/UpgradeTip.tsx
rename to apps/web/modules/shell/UpgradeTip.tsx
index d0ab6c9051..87a34353f9 100644
--- a/packages/features/tips/UpgradeTip.tsx
+++ b/apps/web/modules/shell/UpgradeTip.tsx
@@ -1,9 +1,9 @@
import type { ReactNode } from "react";
-import { useHasTeamPlan } from "@calcom/features/billing/hooks/useHasPaidPlan";
import { useGetTheme } from "@calcom/lib/hooks/useTheme";
import { trpc } from "@calcom/trpc/react";
import classNames from "@calcom/ui/classNames";
+import { useHasTeamPlan } from "@calcom/web/modules/billing/hooks/useHasPaidPlan";
export function UpgradeTip({
title,
diff --git a/packages/features/shell/banners/LayoutBanner.tsx b/apps/web/modules/shell/banners/LayoutBanner.tsx
similarity index 89%
rename from packages/features/shell/banners/LayoutBanner.tsx
rename to apps/web/modules/shell/banners/LayoutBanner.tsx
index 6c9539a228..a782a59a32 100644
--- a/packages/features/shell/banners/LayoutBanner.tsx
+++ b/apps/web/modules/shell/banners/LayoutBanner.tsx
@@ -5,20 +5,23 @@ import {
OrgUpgradeBanner,
type OrgUpgradeBannerProps,
} from "@calcom/features/ee/organizations/components/OrgUpgradeBanner";
-import { TeamsUpgradeBanner, type TeamsUpgradeBannerProps } from "@calcom/features/ee/teams/components";
+import {
+ TeamsUpgradeBanner,
+ type TeamsUpgradeBannerProps,
+} from "@calcom/web/modules/ee/teams/components/TeamsUpgradeBanner";
import AdminPasswordBanner, {
type AdminPasswordBannerProps,
-} from "@calcom/features/users/components/AdminPasswordBanner";
+} from "@calcom/web/modules/users/components/AdminPasswordBanner";
import CalendarCredentialBanner, {
type CalendarCredentialBannerProps,
-} from "@calcom/features/users/components/CalendarCredentialBanner";
+} from "@calcom/web/modules/users/components/CalendarCredentialBanner";
import {
InvalidAppCredentialBanners,
type InvalidAppCredentialBannersProps,
-} from "@calcom/features/users/components/InvalidAppCredentialsBanner";
+} from "@calcom/web/modules/users/components/InvalidAppCredentialsBanner";
import VerifyEmailBanner, {
type VerifyEmailBannerProps,
-} from "@calcom/features/users/components/VerifyEmailBanner";
+} from "@calcom/web/modules/users/components/VerifyEmailBanner";
type BannerTypeProps = {
teamUpgradeBanner: TeamsUpgradeBannerProps;
diff --git a/packages/features/shell/banners/useBanners.ts b/apps/web/modules/shell/banners/useBanners.ts
similarity index 100%
rename from packages/features/shell/banners/useBanners.ts
rename to apps/web/modules/shell/banners/useBanners.ts
diff --git a/packages/features/shell/components/GatedFeaturesModal.tsx b/apps/web/modules/shell/components/GatedFeaturesModal.tsx
similarity index 100%
rename from packages/features/shell/components/GatedFeaturesModal.tsx
rename to apps/web/modules/shell/components/GatedFeaturesModal.tsx
diff --git a/packages/features/shell/components/WelcomeToCalcomModal.tsx b/apps/web/modules/shell/components/WelcomeToCalcomModal.tsx
similarity index 100%
rename from packages/features/shell/components/WelcomeToCalcomModal.tsx
rename to apps/web/modules/shell/components/WelcomeToCalcomModal.tsx
diff --git a/packages/features/shell/hooks/useWelcomeToCalcomModal.ts b/apps/web/modules/shell/hooks/useWelcomeToCalcomModal.ts
similarity index 100%
rename from packages/features/shell/hooks/useWelcomeToCalcomModal.ts
rename to apps/web/modules/shell/hooks/useWelcomeToCalcomModal.ts
diff --git a/packages/features/shell/navigation/Navigation.tsx b/apps/web/modules/shell/navigation/Navigation.tsx
similarity index 94%
rename from packages/features/shell/navigation/Navigation.tsx
rename to apps/web/modules/shell/navigation/Navigation.tsx
index 20091813c8..6d918fd3a4 100644
--- a/packages/features/shell/navigation/Navigation.tsx
+++ b/apps/web/modules/shell/navigation/Navigation.tsx
@@ -2,34 +2,25 @@ import { useSession } from "next-auth/react";
import { useMemo } from "react";
import { useIsEmbed } from "@calcom/embed-core/embed-iframe";
-import UnconfirmedBookingBadge from "@calcom/features/bookings/UnconfirmedBookingBadge";
-import { useHasPaidPlan } from "@calcom/features/billing/hooks/useHasPaidPlan";
import {
useOrgBranding,
type OrganizationBranding,
} from "@calcom/features/ee/organizations/context/provider";
-import { KBarTrigger } from "@calcom/features/kbar/Kbar";
import classNames from "@calcom/ui/classNames";
+import { useHasPaidPlan } from "@calcom/web/modules/billing/hooks/useHasPaidPlan";
+import UnconfirmedBookingBadge from "../../bookings/components/UnconfirmedBookingBadge";
+import { KBarTrigger } from "../Kbar";
import { TeamInviteBadge } from "../TeamInviteBadge";
import type { NavigationItemType } from "./NavigationItem";
import { NavigationItem, MobileNavigationItem, MobileNavigationMoreItem } from "./NavigationItem";
export const MORE_SEPARATOR_NAME = "more";
-const preserveBookingsQueryParams = ({
- prevPathname,
- nextPathname,
-}: {
- prevPathname: string | null;
- nextPathname: string;
-}) => Boolean(prevPathname?.startsWith("/bookings/")) && nextPathname.startsWith("/bookings/");
-
const getNavigationItems = (
orgBranding: OrganizationBranding,
hasInsightsAccess: boolean
): NavigationItemType[] => [
-
{
name: "event_types_page_title",
href: "/event-types",
diff --git a/packages/features/shell/navigation/NavigationItem.tsx b/apps/web/modules/shell/navigation/NavigationItem.tsx
similarity index 100%
rename from packages/features/shell/navigation/NavigationItem.tsx
rename to apps/web/modules/shell/navigation/NavigationItem.tsx
diff --git a/packages/features/shell/navigation/useShouldDisplayNavigationItem.ts b/apps/web/modules/shell/navigation/useShouldDisplayNavigationItem.ts
similarity index 100%
rename from packages/features/shell/navigation/useShouldDisplayNavigationItem.ts
rename to apps/web/modules/shell/navigation/useShouldDisplayNavigationItem.ts
diff --git a/packages/features/shell/stores/gatedFeaturesStore.ts b/apps/web/modules/shell/stores/gatedFeaturesStore.ts
similarity index 100%
rename from packages/features/shell/stores/gatedFeaturesStore.ts
rename to apps/web/modules/shell/stores/gatedFeaturesStore.ts
diff --git a/packages/features/shell/useAppTheme.ts b/apps/web/modules/shell/useAppTheme.ts
similarity index 100%
rename from packages/features/shell/useAppTheme.ts
rename to apps/web/modules/shell/useAppTheme.ts
diff --git a/packages/features/shell/useBottomNavItems.ts b/apps/web/modules/shell/useBottomNavItems.ts
similarity index 73%
rename from packages/features/shell/useBottomNavItems.ts
rename to apps/web/modules/shell/useBottomNavItems.ts
index 489c77db33..25d1be103f 100644
--- a/packages/features/shell/useBottomNavItems.ts
+++ b/apps/web/modules/shell/useBottomNavItems.ts
@@ -1,11 +1,11 @@
import type { User as UserAuth } from "next-auth";
import posthog from "posthog-js";
-import { useHasActiveTeamPlanAsOwner } from "@calcom/features/billing/hooks/useHasPaidPlan";
import { IS_DUB_REFERRALS_ENABLED } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import { showToast } from "@calcom/ui/components/toast";
+import { useHasActiveTeamPlanAsOwner } from "@calcom/web/modules/billing/hooks/useHasPaidPlan";
import { type NavigationItemType } from "./navigation/NavigationItem";
@@ -38,15 +38,15 @@ export function useBottomNavItems({
// Render above to prevent layout shift as much as possible
isTrial
? {
- name: "skip_trial",
- href: "",
- isLoading: skipTeamTrialsMutation.isPending,
- icon: "clock",
- onClick: (e: { preventDefault: () => void }) => {
- e.preventDefault();
- skipTeamTrialsMutation.mutate({});
- },
- }
+ name: "skip_trial",
+ href: "",
+ isLoading: skipTeamTrialsMutation.isPending,
+ icon: "clock",
+ onClick: (e: { preventDefault: () => void }) => {
+ e.preventDefault();
+ skipTeamTrialsMutation.mutate({});
+ },
+ }
: null,
{
name: "view_public_page",
@@ -66,21 +66,21 @@ export function useBottomNavItems({
},
IS_DUB_REFERRALS_ENABLED
? {
- name: "referral_text",
- href: "/refer",
- icon: "gift",
- onClick: () => {
- posthog.capture("refer_and_earn_clicked")
+ name: "referral_text",
+ href: "/refer",
+ icon: "gift",
+ onClick: () => {
+ posthog.capture("refer_and_earn_clicked");
+ },
}
- }
: null,
isAdmin
? {
- name: "impersonation",
- href: "/settings/admin/impersonation",
- icon: "lock",
- }
+ name: "impersonation",
+ href: "/settings/admin/impersonation",
+ icon: "lock",
+ }
: null,
{
name: "settings",
diff --git a/packages/features/shell/user-dropdown/ProfileDropdown.tsx b/apps/web/modules/shell/user-dropdown/ProfileDropdown.tsx
similarity index 100%
rename from packages/features/shell/user-dropdown/ProfileDropdown.tsx
rename to apps/web/modules/shell/user-dropdown/ProfileDropdown.tsx
diff --git a/packages/features/shell/user-dropdown/UserDropdown.tsx b/apps/web/modules/shell/user-dropdown/UserDropdown.tsx
similarity index 98%
rename from packages/features/shell/user-dropdown/UserDropdown.tsx
rename to apps/web/modules/shell/user-dropdown/UserDropdown.tsx
index a2debbf6c6..a83386c3d8 100644
--- a/packages/features/shell/user-dropdown/UserDropdown.tsx
+++ b/apps/web/modules/shell/user-dropdown/UserDropdown.tsx
@@ -20,8 +20,7 @@ import {
import { Icon } from "@calcom/ui/components/icon";
// TODO (Platform): we shouldnt be importing from web here
import { useGetUserAttributes } from "@calcom/web/components/settings/platform/hooks/useGetUserAttributes";
-
-import FreshChatProvider from "../../ee/support/lib/freshchat/FreshChatProvider";
+import FreshChatProvider from "@calcom/web/modules/ee/support/lib/freshchat/FreshChatProvider";
declare global {
interface Window {
diff --git a/apps/web/modules/test-setup.ts b/apps/web/modules/test-setup.ts
index 8b05766057..32e2d4438b 100644
--- a/apps/web/modules/test-setup.ts
+++ b/apps/web/modules/test-setup.ts
@@ -1,7 +1,11 @@
+import matchers from "@testing-library/jest-dom/matchers";
import React from "react";
-import { vi, afterEach } from "vitest";
+import ResizeObserver from "resize-observer-polyfill";
+import { vi, afterEach, expect } from "vitest";
global.React = React;
+global.ResizeObserver = ResizeObserver;
+expect.extend(matchers);
afterEach(() => {
vi.resetAllMocks();
@@ -90,10 +94,8 @@ vi.mock("@calcom/lib/hooks/useCompatSearchParams", () => {
vi.mock("@calcom/lib/hooks/useLocale", () => {
return {
- useLocale: vi.fn().mockReturnValue({
- t: vi.fn().mockImplementation((text: string) => {
- return text;
- }),
+ useLocale: () => ({
+ t: (text: string) => text,
i18n: {
language: "en",
},
@@ -168,6 +170,7 @@ vi.mock("@calcom/ui/components/unpublished-entity", () => ({
vi.mock("@calcom/ui/components/avatar", () => ({
UserAvatar: vi.fn(),
+ Avatar: () => null,
}));
vi.mock("@calcom/web/components/PageWrapper", () => ({
diff --git a/packages/features/timezone-buddy/components/AvailabilityEditSheet.tsx b/apps/web/modules/timezone-buddy/components/AvailabilityEditSheet.tsx
similarity index 100%
rename from packages/features/timezone-buddy/components/AvailabilityEditSheet.tsx
rename to apps/web/modules/timezone-buddy/components/AvailabilityEditSheet.tsx
diff --git a/packages/features/timezone-buddy/components/AvailabilitySliderTable.tsx b/apps/web/modules/timezone-buddy/components/AvailabilitySliderTable.tsx
similarity index 99%
rename from packages/features/timezone-buddy/components/AvailabilitySliderTable.tsx
rename to apps/web/modules/timezone-buddy/components/AvailabilitySliderTable.tsx
index 767aad9ca4..effc2a404f 100644
--- a/packages/features/timezone-buddy/components/AvailabilitySliderTable.tsx
+++ b/apps/web/modules/timezone-buddy/components/AvailabilitySliderTable.tsx
@@ -21,7 +21,8 @@ import { UserAvatar } from "@calcom/ui/components/avatar";
import { Button } from "@calcom/ui/components/button";
import { ButtonGroup } from "@calcom/ui/components/buttonGroup";
-import { UpgradeTip } from "../../tips/UpgradeTip";
+import { UpgradeTip } from "~/shell/UpgradeTip";
+
import { createTimezoneBuddyStore, TBContext } from "../store";
import { AvailabilityEditSheet } from "./AvailabilityEditSheet";
import { CellHighlightContainer } from "./CellHighlightContainer";
diff --git a/packages/features/timezone-buddy/components/CellHighlightContainer.tsx b/apps/web/modules/timezone-buddy/components/CellHighlightContainer.tsx
similarity index 100%
rename from packages/features/timezone-buddy/components/CellHighlightContainer.tsx
rename to apps/web/modules/timezone-buddy/components/CellHighlightContainer.tsx
diff --git a/packages/features/timezone-buddy/components/HoverOverview.tsx b/apps/web/modules/timezone-buddy/components/HoverOverview.tsx
similarity index 100%
rename from packages/features/timezone-buddy/components/HoverOverview.tsx
rename to apps/web/modules/timezone-buddy/components/HoverOverview.tsx
diff --git a/packages/features/timezone-buddy/components/TimeDial.tsx b/apps/web/modules/timezone-buddy/components/TimeDial.tsx
similarity index 100%
rename from packages/features/timezone-buddy/components/TimeDial.tsx
rename to apps/web/modules/timezone-buddy/components/TimeDial.tsx
diff --git a/packages/features/timezone-buddy/constants.ts b/apps/web/modules/timezone-buddy/constants.ts
similarity index 100%
rename from packages/features/timezone-buddy/constants.ts
rename to apps/web/modules/timezone-buddy/constants.ts
diff --git a/packages/features/timezone-buddy/store.ts b/apps/web/modules/timezone-buddy/store.ts
similarity index 100%
rename from packages/features/timezone-buddy/store.ts
rename to apps/web/modules/timezone-buddy/store.ts
diff --git a/apps/web/modules/upgrade/upgrade-view.tsx b/apps/web/modules/upgrade/upgrade-view.tsx
index e6d2745d43..5fde2729f5 100644
--- a/apps/web/modules/upgrade/upgrade-view.tsx
+++ b/apps/web/modules/upgrade/upgrade-view.tsx
@@ -2,7 +2,6 @@
import { useRouter } from "next/navigation";
-import Shell from "@calcom/features/shell/Shell";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import type { RouterOutputs } from "@calcom/trpc/react";
import { trpc } from "@calcom/trpc/react";
@@ -10,6 +9,8 @@ import { Button } from "@calcom/ui/components/button";
import { EmptyScreen } from "@calcom/ui/components/empty-screen";
import { showToast } from "@calcom/ui/components/toast";
+import Shell from "~/shell/Shell";
+
export type OrgUpgradeBannerProps = {
data: RouterOutputs["viewer"]["me"]["getUserTopBanners"]["orgUpgradeBanner"];
};
diff --git a/packages/features/users/components/AdminPasswordBanner.tsx b/apps/web/modules/users/components/AdminPasswordBanner.tsx
similarity index 100%
rename from packages/features/users/components/AdminPasswordBanner.tsx
rename to apps/web/modules/users/components/AdminPasswordBanner.tsx
diff --git a/packages/features/users/components/CalendarCredentialBanner.tsx b/apps/web/modules/users/components/CalendarCredentialBanner.tsx
similarity index 100%
rename from packages/features/users/components/CalendarCredentialBanner.tsx
rename to apps/web/modules/users/components/CalendarCredentialBanner.tsx
diff --git a/packages/features/users/components/InvalidAppCredentialsBanner.tsx b/apps/web/modules/users/components/InvalidAppCredentialsBanner.tsx
similarity index 92%
rename from packages/features/users/components/InvalidAppCredentialsBanner.tsx
rename to apps/web/modules/users/components/InvalidAppCredentialsBanner.tsx
index 3a8ec7c880..9b43854803 100644
--- a/packages/features/users/components/InvalidAppCredentialsBanner.tsx
+++ b/apps/web/modules/users/components/InvalidAppCredentialsBanner.tsx
@@ -1,11 +1,10 @@
import { useRouter } from "next/navigation";
+import { type InvalidAppCredentialBannerProps } from "@calcom/features/users/types/invalidAppCredentials";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { type RouterOutputs } from "@calcom/trpc/react";
import { TopBanner } from "@calcom/ui/components/top-banner";
-import { type InvalidAppCredentialBannerProps } from "../types/invalidAppCredentials";
-
export type InvalidAppCredentialBannersProps = {
data: RouterOutputs["viewer"]["me"]["getUserTopBanners"]["invalidAppCredentialBanners"];
};
diff --git a/packages/features/users/components/UserTable/BulkActions/DeleteBulkUsers.tsx b/apps/web/modules/users/components/UserTable/BulkActions/DeleteBulkUsers.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/BulkActions/DeleteBulkUsers.tsx
rename to apps/web/modules/users/components/UserTable/BulkActions/DeleteBulkUsers.tsx
diff --git a/packages/features/users/components/UserTable/BulkActions/DynamicLink.tsx b/apps/web/modules/users/components/UserTable/BulkActions/DynamicLink.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/BulkActions/DynamicLink.tsx
rename to apps/web/modules/users/components/UserTable/BulkActions/DynamicLink.tsx
diff --git a/packages/features/users/components/UserTable/BulkActions/EventTypesList.tsx b/apps/web/modules/users/components/UserTable/BulkActions/EventTypesList.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/BulkActions/EventTypesList.tsx
rename to apps/web/modules/users/components/UserTable/BulkActions/EventTypesList.tsx
diff --git a/packages/features/users/components/UserTable/BulkActions/MassAssignAttributes.tsx b/apps/web/modules/users/components/UserTable/BulkActions/MassAssignAttributes.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/BulkActions/MassAssignAttributes.tsx
rename to apps/web/modules/users/components/UserTable/BulkActions/MassAssignAttributes.tsx
diff --git a/packages/features/users/components/UserTable/BulkActions/TeamList.tsx b/apps/web/modules/users/components/UserTable/BulkActions/TeamList.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/BulkActions/TeamList.tsx
rename to apps/web/modules/users/components/UserTable/BulkActions/TeamList.tsx
diff --git a/packages/features/users/components/UserTable/ChangeUserRoleModal.tsx b/apps/web/modules/users/components/UserTable/ChangeUserRoleModal.tsx
similarity index 88%
rename from packages/features/users/components/UserTable/ChangeUserRoleModal.tsx
rename to apps/web/modules/users/components/UserTable/ChangeUserRoleModal.tsx
index d3d223e3ec..54447709b4 100644
--- a/packages/features/users/components/UserTable/ChangeUserRoleModal.tsx
+++ b/apps/web/modules/users/components/UserTable/ChangeUserRoleModal.tsx
@@ -1,7 +1,7 @@
import { useSession } from "next-auth/react";
import type { Dispatch } from "react";
-import MemberChangeRoleModal from "@calcom/features/ee/teams/components/MemberChangeRoleModal";
+import MemberChangeRoleModal from "@calcom/web/modules/ee/teams/components/MemberChangeRoleModal";
import type { UserTableAction, UserTableState } from "./types";
diff --git a/packages/features/users/components/UserTable/DeleteMemberModal.tsx b/apps/web/modules/users/components/UserTable/DeleteMemberModal.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/DeleteMemberModal.tsx
rename to apps/web/modules/users/components/UserTable/DeleteMemberModal.tsx
diff --git a/packages/features/users/components/UserTable/EditSheet/DisplayInfo.tsx b/apps/web/modules/users/components/UserTable/EditSheet/DisplayInfo.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/EditSheet/DisplayInfo.tsx
rename to apps/web/modules/users/components/UserTable/EditSheet/DisplayInfo.tsx
diff --git a/packages/features/users/components/UserTable/EditSheet/EditUserForm.tsx b/apps/web/modules/users/components/UserTable/EditSheet/EditUserForm.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/EditSheet/EditUserForm.tsx
rename to apps/web/modules/users/components/UserTable/EditSheet/EditUserForm.tsx
diff --git a/packages/features/users/components/UserTable/EditSheet/EditUserSheet.tsx b/apps/web/modules/users/components/UserTable/EditSheet/EditUserSheet.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/EditSheet/EditUserSheet.tsx
rename to apps/web/modules/users/components/UserTable/EditSheet/EditUserSheet.tsx
diff --git a/packages/features/users/components/UserTable/EditSheet/OrganizationBanner.tsx b/apps/web/modules/users/components/UserTable/EditSheet/OrganizationBanner.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/EditSheet/OrganizationBanner.tsx
rename to apps/web/modules/users/components/UserTable/EditSheet/OrganizationBanner.tsx
diff --git a/packages/features/users/components/UserTable/EditSheet/SheetFooterControls.tsx b/apps/web/modules/users/components/UserTable/EditSheet/SheetFooterControls.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/EditSheet/SheetFooterControls.tsx
rename to apps/web/modules/users/components/UserTable/EditSheet/SheetFooterControls.tsx
diff --git a/packages/features/users/components/UserTable/EditSheet/store.ts b/apps/web/modules/users/components/UserTable/EditSheet/store.ts
similarity index 100%
rename from packages/features/users/components/UserTable/EditSheet/store.ts
rename to apps/web/modules/users/components/UserTable/EditSheet/store.ts
diff --git a/packages/features/users/components/UserTable/ImpersonationMemberModal.tsx b/apps/web/modules/users/components/UserTable/ImpersonationMemberModal.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/ImpersonationMemberModal.tsx
rename to apps/web/modules/users/components/UserTable/ImpersonationMemberModal.tsx
diff --git a/packages/features/users/components/UserTable/InviteMemberModal.tsx b/apps/web/modules/users/components/UserTable/InviteMemberModal.tsx
similarity index 96%
rename from packages/features/users/components/UserTable/InviteMemberModal.tsx
rename to apps/web/modules/users/components/UserTable/InviteMemberModal.tsx
index 931e84429b..6c96dcc126 100644
--- a/packages/features/users/components/UserTable/InviteMemberModal.tsx
+++ b/apps/web/modules/users/components/UserTable/InviteMemberModal.tsx
@@ -1,13 +1,14 @@
import { useSession } from "next-auth/react";
import type { Dispatch } from "react";
-import MemberInvitationModal from "@calcom/features/ee/teams/components/MemberInvitationModal";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { CreationSource } from "@calcom/prisma/enums";
import { trpc } from "@calcom/trpc/react";
import { showToast } from "@calcom/ui/components/toast";
import usePlatformMe from "@calcom/web/components/settings/platform/hooks/usePlatformMe";
+import MemberInvitationModal from "~/ee/teams/components/MemberInvitationModal";
+
import type { UserTableAction } from "./types";
interface Props {
diff --git a/packages/features/users/components/UserTable/PlatformManagedUsersTable.tsx b/apps/web/modules/users/components/UserTable/PlatformManagedUsersTable.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/PlatformManagedUsersTable.tsx
rename to apps/web/modules/users/components/UserTable/PlatformManagedUsersTable.tsx
diff --git a/packages/features/users/components/UserTable/UserListTable.tsx b/apps/web/modules/users/components/UserTable/UserListTable.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/UserListTable.tsx
rename to apps/web/modules/users/components/UserTable/UserListTable.tsx
diff --git a/packages/features/users/components/UserTable/UserListTableSkeleton.tsx b/apps/web/modules/users/components/UserTable/UserListTableSkeleton.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/UserListTableSkeleton.tsx
rename to apps/web/modules/users/components/UserTable/UserListTableSkeleton.tsx
diff --git a/packages/features/users/components/UserTable/UserTableActions.tsx b/apps/web/modules/users/components/UserTable/UserTableActions.tsx
similarity index 100%
rename from packages/features/users/components/UserTable/UserTableActions.tsx
rename to apps/web/modules/users/components/UserTable/UserTableActions.tsx
diff --git a/packages/features/users/components/UserTable/types.ts b/apps/web/modules/users/components/UserTable/types.ts
similarity index 100%
rename from packages/features/users/components/UserTable/types.ts
rename to apps/web/modules/users/components/UserTable/types.ts
diff --git a/packages/features/users/components/VerifyEmailBanner.tsx b/apps/web/modules/users/components/VerifyEmailBanner.tsx
similarity index 93%
rename from packages/features/users/components/VerifyEmailBanner.tsx
rename to apps/web/modules/users/components/VerifyEmailBanner.tsx
index f75d73be49..e74180c098 100644
--- a/packages/features/users/components/VerifyEmailBanner.tsx
+++ b/apps/web/modules/users/components/VerifyEmailBanner.tsx
@@ -1,10 +1,9 @@
+import { useFlagMap } from "@calcom/features/flags/context/provider";
import { APP_NAME } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
-import { TopBanner } from "@calcom/ui/components/top-banner";
import { showToast } from "@calcom/ui/components/toast";
-
-import { useFlagMap } from "../../flags/context/provider";
+import { TopBanner } from "@calcom/ui/components/top-banner";
export type VerifyEmailBannerProps = {
data: boolean;
diff --git a/packages/features/webhooks/components/CreateNewWebhookButton.tsx b/apps/web/modules/webhooks/components/CreateNewWebhookButton.tsx
similarity index 88%
rename from packages/features/webhooks/components/CreateNewWebhookButton.tsx
rename to apps/web/modules/webhooks/components/CreateNewWebhookButton.tsx
index f01f856c42..7ab2a5de6f 100644
--- a/packages/features/webhooks/components/CreateNewWebhookButton.tsx
+++ b/apps/web/modules/webhooks/components/CreateNewWebhookButton.tsx
@@ -2,10 +2,11 @@
import { useRouter } from "next/navigation";
-import { CreateButtonWithTeamsList } from "@calcom/features/ee/teams/components/createButton/CreateButtonWithTeamsList";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { MembershipRole } from "@calcom/prisma/enums";
+import { CreateButtonWithTeamsList } from "~/ee/teams/components/createButton/CreateButtonWithTeamsList";
+
export const CreateNewWebhookButton = () => {
const router = useRouter();
const { t } = useLocale();
diff --git a/packages/features/webhooks/components/EventTypeWebhookListItem.tsx b/apps/web/modules/webhooks/components/EventTypeWebhookListItem.tsx
similarity index 100%
rename from packages/features/webhooks/components/EventTypeWebhookListItem.tsx
rename to apps/web/modules/webhooks/components/EventTypeWebhookListItem.tsx
diff --git a/packages/features/webhooks/components/WebhookForm.tsx b/apps/web/modules/webhooks/components/WebhookForm.tsx
similarity index 56%
rename from packages/features/webhooks/components/WebhookForm.tsx
rename to apps/web/modules/webhooks/components/WebhookForm.tsx
index af490d9082..879ccd5674 100644
--- a/packages/features/webhooks/components/WebhookForm.tsx
+++ b/apps/web/modules/webhooks/components/WebhookForm.tsx
@@ -3,12 +3,12 @@
import { useEffect, useState } from "react";
import { Controller, useForm } from "react-hook-form";
-import { TimeTimeUnitInput } from "@calcom/features/ee/workflows/components/TimeTimeUnitInput";
+import SectionBottomActions from "@calcom/features/settings/SectionBottomActions";
+import customTemplate, { hasTemplateIntegration } from "@calcom/features/webhooks/lib/integrationTemplate";
+import { WebhookVersion } from "@calcom/features/webhooks/lib/interface/IWebhookRepository";
import { WEBAPP_URL } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { TimeUnit, WebhookTriggerEvents } from "@calcom/prisma/enums";
-
-import { WebhookVersion } from "../lib/interface/IWebhookRepository";
import type { RouterOutputs } from "@calcom/trpc/react";
import { Button } from "@calcom/ui/components/button";
import { Select } from "@calcom/ui/components/form";
@@ -19,8 +19,8 @@ import { Label } from "@calcom/ui/components/form";
import { TextField } from "@calcom/ui/components/form";
import { Switch } from "@calcom/ui/components/form";
-import SectionBottomActions from "../../settings/SectionBottomActions";
-import customTemplate, { hasTemplateIntegration } from "../lib/integrationTemplate";
+import { TimeTimeUnitInput } from "~/ee/workflows/components/TimeTimeUnitInput";
+
import WebhookTestDisclosure from "./WebhookTestDisclosure";
export type TWebhook = RouterOutputs["viewer"]["webhook"]["list"][number];
@@ -365,264 +365,264 @@ const WebhookForm = (props: {
const formContent = (
+ }>
({
+vi.mock("@calcom/trpc/react", () => ({
trpc: {
useUtils: () => ({
viewer: {
diff --git a/packages/features/eventtypes/components/index.ts b/packages/features/eventtypes/components/index.ts
index b777134e83..060c579d70 100644
--- a/packages/features/eventtypes/components/index.ts
+++ b/packages/features/eventtypes/components/index.ts
@@ -1,7 +1,6 @@
import dynamic from "next/dynamic";
export { default as CheckedTeamSelect } from "./CheckedTeamSelect";
-export { CreateEventTypeDialog } from "./CreateEventTypeDialog";
export { default as EventTypeDescription } from "./EventTypeDescription";
export { LearnMoreLink } from "./LearnMoreLink";
export { MultiplePrivateLinksController } from "./MultiplePrivateLinksController";
diff --git a/packages/features/pbac/lib/team-member-permissions.ts b/packages/features/pbac/lib/team-member-permissions.ts
index ad27cdf276..11baf62bd1 100644
--- a/packages/features/pbac/lib/team-member-permissions.ts
+++ b/packages/features/pbac/lib/team-member-permissions.ts
@@ -1,5 +1,5 @@
-import type { MemberPermissions } from "@calcom/features/users/components/UserTable/types";
import { MembershipRole } from "@calcom/prisma/enums";
+import type { MemberPermissions } from "@calcom/web/modules/users/components/UserTable/types";
import { Resource, CustomAction } from "../domain/types/permission-registry";
import { getSpecificPermissions } from "./resource-permissions";
diff --git a/packages/features/tips/index.ts b/packages/features/tips/index.ts
deleted file mode 100644
index f981162890..0000000000
--- a/packages/features/tips/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { default as Tips } from "./Tips";
-export { UpgradeTip } from "./UpgradeTip";
diff --git a/packages/features/users/lib/UserListTableUtils.ts b/packages/features/users/lib/UserListTableUtils.ts
index 3fed627466..27cc0f4396 100644
--- a/packages/features/users/lib/UserListTableUtils.ts
+++ b/packages/features/users/lib/UserListTableUtils.ts
@@ -1,7 +1,7 @@
import type { Table } from "@tanstack/react-table";
-import type { UserTableUser } from "@calcom/features/users/components/UserTable/types";
import { sanitizeValue } from "@calcom/lib/csvUtils";
+import type { UserTableUser } from "@calcom/web/modules/users/components/UserTable/types";
export const generateHeaderFromReactTable = (table: Table): string[] | null => {
const headerGroups = table.getHeaderGroups();
diff --git a/packages/platform/atoms/availability/AvailabilitySettings.tsx b/packages/platform/atoms/availability/AvailabilitySettings.tsx
index d867001818..e561b0a1a2 100644
--- a/packages/platform/atoms/availability/AvailabilitySettings.tsx
+++ b/packages/platform/atoms/availability/AvailabilitySettings.tsx
@@ -26,7 +26,6 @@ import DateOverrideList from "@calcom/features/schedules/components/DateOverride
import WebSchedule, {
ScheduleComponent as PlatformSchedule,
} from "@calcom/features/schedules/components/Schedule";
-import WebShell from "@calcom/features/shell/Shell";
import { availabilityAsString } from "@calcom/lib/availability";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { sortAvailabilityStrings } from "@calcom/lib/weekstart";
@@ -43,6 +42,7 @@ import { Switch } from "@calcom/ui/components/form";
import { Icon } from "@calcom/ui/components/icon";
import { SkeletonText, SelectSkeletonLoader, Skeleton } from "@calcom/ui/components/skeleton";
import { Tooltip } from "@calcom/ui/components/tooltip";
+import WebShell from "@calcom/web/modules/shell/Shell";
import { Shell as PlatformShell } from "../src/components/ui/shell";
import { cn } from "../src/lib/utils";
diff --git a/packages/platform/atoms/event-types/wrappers/CreateEventTypePlatformWrapper.tsx b/packages/platform/atoms/event-types/wrappers/CreateEventTypePlatformWrapper.tsx
index 2dcd2f6376..51f550043c 100644
--- a/packages/platform/atoms/event-types/wrappers/CreateEventTypePlatformWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/CreateEventTypePlatformWrapper.tsx
@@ -1,11 +1,11 @@
import { AtomsWrapper } from "@/components/atoms-wrapper";
-import { TeamEventTypeForm } from "@calcom/features/ee/teams/components/TeamEventTypeForm";
import CreateEventTypeForm from "@calcom/features/eventtypes/components/CreateEventTypeForm";
import { useCreateEventTypeForm } from "@calcom/features/eventtypes/hooks/useCreateEventType";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import type { EventType } from "@calcom/prisma/client";
import { Button } from "@calcom/ui/components/button";
+import { TeamEventTypeForm } from "@calcom/web/modules/ee/teams/components/TeamEventTypeForm";
import { useCreateEventType } from "../../hooks/event-types/private/useCreateEventType";
import { useCreateTeamEventType } from "../../hooks/event-types/private/useCreateTeamEventType";
diff --git a/packages/platform/atoms/event-types/wrappers/EventAdvancedPlatformWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventAdvancedPlatformWrapper.tsx
index 3968da7397..b292cbfeb7 100644
--- a/packages/platform/atoms/event-types/wrappers/EventAdvancedPlatformWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventAdvancedPlatformWrapper.tsx
@@ -1,5 +1,5 @@
-import type { EventAdvancedBaseProps } from "@calcom/features/eventtypes/components/tabs/advanced/EventAdvancedTab";
-import { EventAdvancedTab } from "@calcom/features/eventtypes/components/tabs/advanced/EventAdvancedTab";
+import type { EventAdvancedBaseProps } from "@calcom/web/modules/event-types/components/tabs/advanced/EventAdvancedTab";
+import { EventAdvancedTab } from "@calcom/web/modules/event-types/components/tabs/advanced/EventAdvancedTab";
import { useConnectedCalendars } from "../../hooks/useConnectedCalendars";
import { useGetVerifiedEmails } from "../hooks/useGetVerifiedEmails";
diff --git a/packages/platform/atoms/event-types/wrappers/EventAdvancedWebWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventAdvancedWebWrapper.tsx
index e262bcdf59..99b51bfad3 100644
--- a/packages/platform/atoms/event-types/wrappers/EventAdvancedWebWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventAdvancedWebWrapper.tsx
@@ -1,7 +1,7 @@
-import type { EventAdvancedBaseProps } from "@calcom/features/eventtypes/components/tabs/advanced/EventAdvancedTab";
-import { EventAdvancedTab } from "@calcom/features/eventtypes/components/tabs/advanced/EventAdvancedTab";
import { localeOptions } from "@calcom/lib/i18n";
import { trpc } from "@calcom/trpc/react";
+import type { EventAdvancedBaseProps } from "@calcom/web/modules/event-types/components/tabs/advanced/EventAdvancedTab";
+import { EventAdvancedTab } from "@calcom/web/modules/event-types/components/tabs/advanced/EventAdvancedTab";
const EventAdvancedWebWrapper = ({ ...props }: EventAdvancedBaseProps) => {
const connectedCalendarsQuery = trpc.viewer.calendars.connectedCalendars.useQuery();
diff --git a/packages/platform/atoms/event-types/wrappers/EventAvailabilityTabPlatformWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventAvailabilityTabPlatformWrapper.tsx
index dd2098bdb3..e5066c1c8f 100644
--- a/packages/platform/atoms/event-types/wrappers/EventAvailabilityTabPlatformWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventAvailabilityTabPlatformWrapper.tsx
@@ -1,10 +1,10 @@
import { useFormContext } from "react-hook-form";
-import type { EventAvailabilityTabCustomClassNames } from "@calcom/features/eventtypes/components/tabs/availability/EventAvailabilityTab";
-import { EventAvailabilityTab } from "@calcom/features/eventtypes/components/tabs/availability/EventAvailabilityTab";
-import type { ScheduleQueryData } from "@calcom/features/eventtypes/components/tabs/availability/EventAvailabilityTab";
import type { EventTypeSetup, FormValues } from "@calcom/features/eventtypes/lib/types";
import type { User } from "@calcom/prisma/client";
+import type { EventAvailabilityTabCustomClassNames } from "@calcom/web/modules/event-types/components/tabs/availability/EventAvailabilityTab";
+import { EventAvailabilityTab } from "@calcom/web/modules/event-types/components/tabs/availability/EventAvailabilityTab";
+import type { ScheduleQueryData } from "@calcom/web/modules/event-types/components/tabs/availability/EventAvailabilityTab";
import { useAtomSchedule } from "../../hooks/schedules/useAtomSchedule";
import { useSchedules } from "../../hooks/schedules/useSchedules";
diff --git a/packages/platform/atoms/event-types/wrappers/EventAvailabilityTabWebWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventAvailabilityTabWebWrapper.tsx
index 2880680abc..56d215a90b 100644
--- a/packages/platform/atoms/event-types/wrappers/EventAvailabilityTabWebWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventAvailabilityTabWebWrapper.tsx
@@ -2,11 +2,11 @@ import { useFormContext } from "react-hook-form";
import useLockedFieldsManager from "@calcom/features/ee/managed-event-types/hooks/useLockedFieldsManager";
import type { TeamMembers } from "@calcom/features/eventtypes/components/EventType";
-import { EventAvailabilityTab } from "@calcom/features/eventtypes/components/tabs/availability/EventAvailabilityTab";
import type { EventTypeSetup, FormValues } from "@calcom/features/eventtypes/lib/types";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import type { RouterOutputs } from "@calcom/trpc/react";
import { trpc } from "@calcom/trpc/react";
+import { EventAvailabilityTab } from "@calcom/web/modules/event-types/components/tabs/availability/EventAvailabilityTab";
export type EventAvailabilityTabWebWrapperProps = {
eventType: EventTypeSetup;
diff --git a/packages/platform/atoms/event-types/wrappers/EventLimitsTabPlatformWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventLimitsTabPlatformWrapper.tsx
index 940333ebc3..5bedadeda9 100644
--- a/packages/platform/atoms/event-types/wrappers/EventLimitsTabPlatformWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventLimitsTabPlatformWrapper.tsx
@@ -1,5 +1,5 @@
-import { EventLimitsTab } from "@calcom/features/eventtypes/components/tabs/limits/EventLimitsTab";
-import type { EventLimitsTabProps } from "@calcom/features/eventtypes/components/tabs/limits/EventLimitsTab";
+import { EventLimitsTab } from "@calcom/web/modules/event-types/components/tabs/limits/EventLimitsTab";
+import type { EventLimitsTabProps } from "@calcom/web/modules/event-types/components/tabs/limits/EventLimitsTab";
const EventLimitsTabPlatformWrapper = (props: EventLimitsTabProps) => {
return ;
diff --git a/packages/platform/atoms/event-types/wrappers/EventLimitsTabWebWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventLimitsTabWebWrapper.tsx
index 70607aeb38..91f9ee4271 100644
--- a/packages/platform/atoms/event-types/wrappers/EventLimitsTabWebWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventLimitsTabWebWrapper.tsx
@@ -1,5 +1,5 @@
-import { EventLimitsTab } from "@calcom/features/eventtypes/components/tabs/limits/EventLimitsTab";
-import type { EventLimitsTabProps } from "@calcom/features/eventtypes/components/tabs/limits/EventLimitsTab";
+import { EventLimitsTab } from "@calcom/web/modules/event-types/components/tabs/limits/EventLimitsTab";
+import type { EventLimitsTabProps } from "@calcom/web/modules/event-types/components/tabs/limits/EventLimitsTab";
const EventLimitsTabWebWrapper = (props: EventLimitsTabProps) => {
return ;
diff --git a/packages/platform/atoms/event-types/wrappers/EventRecurringTabPlatformWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventRecurringTabPlatformWrapper.tsx
index d14f94dd03..c9f4a73576 100644
--- a/packages/platform/atoms/event-types/wrappers/EventRecurringTabPlatformWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventRecurringTabPlatformWrapper.tsx
@@ -1,5 +1,5 @@
-import type { EventRecurringTabProps } from "@calcom/features/eventtypes/components/tabs/recurring/EventRecurringTab";
-import { EventRecurringTab } from "@calcom/features/eventtypes/components/tabs/recurring/EventRecurringTab";
+import type { EventRecurringTabProps } from "@calcom/web/modules/event-types/components/tabs/recurring/EventRecurringTab";
+import { EventRecurringTab } from "@calcom/web/modules/event-types/components/tabs/recurring/EventRecurringTab";
const EventRecurringTabPlatformWrapper = (props: EventRecurringTabProps) => {
return ;
diff --git a/packages/platform/atoms/event-types/wrappers/EventRecurringWebWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventRecurringWebWrapper.tsx
index 846fa74869..37f3c28633 100644
--- a/packages/platform/atoms/event-types/wrappers/EventRecurringWebWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventRecurringWebWrapper.tsx
@@ -1,5 +1,5 @@
-import type { EventRecurringTabProps } from "@calcom/features/eventtypes/components/tabs/recurring/EventRecurringTab";
-import { EventRecurringTab } from "@calcom/features/eventtypes/components/tabs/recurring/EventRecurringTab";
+import type { EventRecurringTabProps } from "@calcom/web/modules/event-types/components/tabs/recurring/EventRecurringTab";
+import { EventRecurringTab } from "@calcom/web/modules/event-types/components/tabs/recurring/EventRecurringTab";
const EventRecurringWebWrapper = (props: EventRecurringTabProps) => {
return ;
diff --git a/packages/platform/atoms/event-types/wrappers/EventSetupTabPlatformWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventSetupTabPlatformWrapper.tsx
index e15b196496..795ab7aef1 100644
--- a/packages/platform/atoms/event-types/wrappers/EventSetupTabPlatformWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventSetupTabPlatformWrapper.tsx
@@ -1,7 +1,7 @@
import React from "react";
-import type { EventSetupTabProps } from "@calcom/features/eventtypes/components/tabs/setup/EventSetupTab";
-import { EventSetupTab } from "@calcom/features/eventtypes/components/tabs/setup/EventSetupTab";
+import type { EventSetupTabProps } from "@calcom/web/modules/event-types/components/tabs/setup/EventSetupTab";
+import { EventSetupTab } from "@calcom/web/modules/event-types/components/tabs/setup/EventSetupTab";
const EventSetupTabPlatformWrapper = (props: EventSetupTabProps) => {
return ;
diff --git a/packages/platform/atoms/event-types/wrappers/EventSetupTabWebWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventSetupTabWebWrapper.tsx
index fb9452a713..26b507d333 100644
--- a/packages/platform/atoms/event-types/wrappers/EventSetupTabWebWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventSetupTabWebWrapper.tsx
@@ -1,10 +1,10 @@
import { useSession } from "next-auth/react";
import { useOrgBranding } from "@calcom/features/ee/organizations/context/provider";
-import type { EventSetupTabProps } from "@calcom/features/eventtypes/components/tabs/setup/EventSetupTab";
-import { EventSetupTab } from "@calcom/features/eventtypes/components/tabs/setup/EventSetupTab";
import { WEBSITE_URL } from "@calcom/lib/constants";
import { localeOptions } from "@calcom/lib/i18n";
+import type { EventSetupTabProps } from "@calcom/web/modules/event-types/components/tabs/setup/EventSetupTab";
+import { EventSetupTab } from "@calcom/web/modules/event-types/components/tabs/setup/EventSetupTab";
const EventSetupTabWebWrapper = (props: EventSetupTabProps) => {
const orgBranding = useOrgBranding();
diff --git a/packages/platform/atoms/event-types/wrappers/EventTeamAssignmentTabPlatformWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventTeamAssignmentTabPlatformWrapper.tsx
index 887cb6f6fc..c7c08aa6f1 100644
--- a/packages/platform/atoms/event-types/wrappers/EventTeamAssignmentTabPlatformWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventTeamAssignmentTabPlatformWrapper.tsx
@@ -1,7 +1,7 @@
import {
EventTeamAssignmentTab,
type EventTeamAssignmentTabBaseProps,
-} from "@calcom/features/eventtypes/components/tabs/assignment/EventTeamAssignmentTab";
+} from "@calcom/web/modules/event-types/components/tabs/assignment/EventTeamAssignmentTab";
const EventTeamAssignmentTabPlatformWrapper = (
props: Omit
diff --git a/packages/platform/atoms/event-types/wrappers/EventTeamAssignmentTabWebWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventTeamAssignmentTabWebWrapper.tsx
index 5ce33984fb..e28d863979 100644
--- a/packages/platform/atoms/event-types/wrappers/EventTeamAssignmentTabWebWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventTeamAssignmentTabWebWrapper.tsx
@@ -1,7 +1,7 @@
import {
EventTeamAssignmentTab,
type EventTeamAssignmentTabBaseProps,
-} from "@calcom/features/eventtypes/components/tabs/assignment/EventTeamAssignmentTab";
+} from "@calcom/web/modules/event-types/components/tabs/assignment/EventTeamAssignmentTab";
const EventTeamAssignmentTabWebWrapper = (
props: Omit
diff --git a/packages/platform/atoms/event-types/wrappers/EventTypePlatformWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventTypePlatformWrapper.tsx
index fc9fa64438..0667ff1413 100644
--- a/packages/platform/atoms/event-types/wrappers/EventTypePlatformWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventTypePlatformWrapper.tsx
@@ -7,12 +7,6 @@ import { BookerStoreProvider } from "@calcom/features/bookings/Booker/BookerStor
import type { ChildrenEventType } from "@calcom/features/eventtypes/components/ChildrenEventTypeSelect";
import { EventType as EventTypeComponent } from "@calcom/features/eventtypes/components/EventType";
import ManagedEventTypeDialog from "@calcom/features/eventtypes/components/dialogs/ManagedEventDialog";
-import type { EventAdvancedTabCustomClassNames } from "@calcom/features/eventtypes/components/tabs/advanced/EventAdvancedTab";
-import type { EventTeamAssignmentTabCustomClassNames } from "@calcom/features/eventtypes/components/tabs/assignment/EventTeamAssignmentTab";
-import type { EventAvailabilityTabCustomClassNames } from "@calcom/features/eventtypes/components/tabs/availability/EventAvailabilityTab";
-import type { EventLimitsTabCustomClassNames } from "@calcom/features/eventtypes/components/tabs/limits/EventLimitsTab";
-import type { EventRecurringTabCustomClassNames } from "@calcom/features/eventtypes/components/tabs/recurring/RecurringEventController";
-import type { EventSetupTabCustomClassNames } from "@calcom/features/eventtypes/components/tabs/setup/EventSetupTab";
import type {
EventTypeSetupProps,
FormValues,
@@ -20,6 +14,12 @@ import type {
} from "@calcom/features/eventtypes/lib/types";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { SchedulingType } from "@calcom/prisma/enums";
+import type { EventAdvancedTabCustomClassNames } from "@calcom/web/modules/event-types/components/tabs/advanced/EventAdvancedTab";
+import type { EventTeamAssignmentTabCustomClassNames } from "@calcom/web/modules/event-types/components/tabs/assignment/EventTeamAssignmentTab";
+import type { EventAvailabilityTabCustomClassNames } from "@calcom/web/modules/event-types/components/tabs/availability/EventAvailabilityTab";
+import type { EventLimitsTabCustomClassNames } from "@calcom/web/modules/event-types/components/tabs/limits/EventLimitsTab";
+import type { EventRecurringTabCustomClassNames } from "@calcom/web/modules/event-types/components/tabs/recurring/RecurringEventController";
+import type { EventSetupTabCustomClassNames } from "@calcom/web/modules/event-types/components/tabs/setup/EventSetupTab";
import { useDeleteEventTypeById } from "../../hooks/event-types/private/useDeleteEventTypeById";
import { useDeleteTeamEventTypeById } from "../../hooks/event-types/private/useDeleteTeamEventTypeById";
diff --git a/packages/platform/atoms/event-types/wrappers/EventTypeWebWrapper.tsx b/packages/platform/atoms/event-types/wrappers/EventTypeWebWrapper.tsx
index 2c95bfa5f7..b02403ae1c 100644
--- a/packages/platform/atoms/event-types/wrappers/EventTypeWebWrapper.tsx
+++ b/packages/platform/atoms/event-types/wrappers/EventTypeWebWrapper.tsx
@@ -52,7 +52,8 @@ const AssignmentWarningDialog = dynamic(
() => import("@calcom/features/eventtypes/components/dialogs/AssignmentWarningDialog")
);
-const EventSetupTab = dynamic(() =>
+const EventSetupTab = dynamic(
+ () =>
// import web wrapper when it's ready
import("./EventSetupTabWebWrapper").then((mod) => mod),
{ loading: () => null }
@@ -76,7 +77,7 @@ const EventAdvancedTab = dynamic(() =>
);
const EventInstantTab = dynamic(() =>
- import("@calcom/features/eventtypes/components/tabs/instant/EventInstantTab").then(
+ import("@calcom/web/modules/event-types/components/tabs/instant/EventInstantTab").then(
(mod) => mod.EventInstantTab
)
);
@@ -87,21 +88,21 @@ const EventRecurringTab = dynamic(() =>
);
const EventAppsTab = dynamic(() =>
- import("@calcom/features/eventtypes/components/tabs/apps/EventAppsTab").then((mod) => mod.EventAppsTab)
+ import("@calcom/web/modules/event-types/components/tabs/apps/EventAppsTab").then((mod) => mod.EventAppsTab)
);
const EventWorkflowsTab = dynamic(
- () => import("@calcom/features/eventtypes/components/tabs/workflows/EventWorkfowsTab")
+ () => import("@calcom/web/modules/event-types/components/tabs/workflows/EventWorkflowsTab")
);
const EventWebhooksTab = dynamic(() =>
- import("@calcom/features/eventtypes/components/tabs/webhooks/EventWebhooksTab").then(
+ import("@calcom/web/modules/event-types/components/tabs/webhooks/EventWebhooksTab").then(
(mod) => mod.EventWebhooksTab
)
);
const EventAITab = dynamic(() =>
- import("@calcom/features/eventtypes/components/tabs/ai/EventAITab").then((mod) => mod.EventAITab)
+ import("@calcom/web/modules/event-types/components/tabs/ai/EventAITab").then((mod) => mod.EventAITab)
);
export type EventTypeWebWrapperProps = {
diff --git a/packages/platform/atoms/src/components/ui/shell.tsx b/packages/platform/atoms/src/components/ui/shell.tsx
index d65dfa17c9..601952a25f 100644
--- a/packages/platform/atoms/src/components/ui/shell.tsx
+++ b/packages/platform/atoms/src/components/ui/shell.tsx
@@ -1,4 +1,4 @@
-import type { LayoutProps } from "@calcom/features/shell/Shell";
+import type { LayoutProps } from "@calcom/web/modules/shell/Shell";
import { cn } from "../../lib/utils";
diff --git a/packages/platform/atoms/tsconfig.json b/packages/platform/atoms/tsconfig.json
index f7cc9faa79..2f5bd6c8c0 100644
--- a/packages/platform/atoms/tsconfig.json
+++ b/packages/platform/atoms/tsconfig.json
@@ -53,7 +53,6 @@
"../../features/ee/payments",
"../../features/ee/round-robin",
"../../features/ee/billing",
- "../../features/shell",
"../../features/components",
"../../features/form-builder",
"../../features/data-table",
diff --git a/packages/trpc/server/routers/viewer/aiVoiceAgent/updateInboundAgentEventType.handler.ts b/packages/trpc/server/routers/viewer/aiVoiceAgent/updateInboundAgentEventType.handler.ts
index fe7013f98e..19ed9a9b5d 100644
--- a/packages/trpc/server/routers/viewer/aiVoiceAgent/updateInboundAgentEventType.handler.ts
+++ b/packages/trpc/server/routers/viewer/aiVoiceAgent/updateInboundAgentEventType.handler.ts
@@ -1,6 +1,6 @@
import { createDefaultAIPhoneServiceProvider } from "@calcom/features/calAIPhone";
+import { replaceEventTypePlaceholders } from "@calcom/features/calAIPhone/providers/retellAI/utils/promptUtils";
import { PrismaAgentRepository } from "@calcom/features/calAIPhone/repositories/PrismaAgentRepository";
-import { replaceEventTypePlaceholders } from "@calcom/features/ee/workflows/components/agent-configuration/utils/promptUtils";
import logger from "@calcom/lib/logger";
import prisma from "@calcom/prisma";
diff --git a/packages/ui/components/badge/UpgradeTeamsBadge.tsx b/packages/ui/components/badge/UpgradeTeamsBadge.tsx
index eda2742d2e..2abe038ad2 100644
--- a/packages/ui/components/badge/UpgradeTeamsBadge.tsx
+++ b/packages/ui/components/badge/UpgradeTeamsBadge.tsx
@@ -1,19 +1,24 @@
import Link from "next/link";
-import { useHasPaidPlan, useHasActiveTeamPlan } from "@calcom/features/billing/hooks/useHasPaidPlan";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Tooltip } from "../tooltip";
import { Badge } from "./Badge";
+export type UpgradeTeamsBadgeProps = {
+ checkForActiveStatus?: boolean;
+ hasPaidPlan?: boolean;
+ hasActiveTeamPlan?: boolean;
+ isTrial?: boolean;
+};
+
export const UpgradeTeamsBadge = function UpgradeTeamsBadge({
checkForActiveStatus,
-}: {
- checkForActiveStatus?: boolean;
-}) {
+ hasPaidPlan = false,
+ hasActiveTeamPlan = false,
+ isTrial = false,
+}: UpgradeTeamsBadgeProps) {
const { t } = useLocale();
- const { hasPaidPlan } = useHasPaidPlan();
- const { hasActiveTeamPlan, isTrial } = useHasActiveTeamPlan();
if (hasPaidPlan) {
if (!checkForActiveStatus || hasActiveTeamPlan) return null;
diff --git a/packages/ui/components/form/select/components.tsx b/packages/ui/components/form/select/components.tsx
index 4afb76c823..8c82c1f0ab 100644
--- a/packages/ui/components/form/select/components.tsx
+++ b/packages/ui/components/form/select/components.tsx
@@ -35,6 +35,11 @@ type ExtendedOption = {
isCalAi?: boolean;
creditsTeamId?: number;
isOrganization?: boolean;
+ upgradeTeamsBadgeProps?: {
+ hasPaidPlan?: boolean;
+ hasActiveTeamPlan?: boolean;
+ isTrial?: boolean;
+ };
};
export const OptionComponent = <
@@ -59,7 +64,10 @@ export const OptionComponent = <
{props.label || <> >}
{(props.data as unknown as ExtendedOption).needsTeamsUpgrade ? (
-
+
) : (props.data as unknown as ExtendedOption).needsCredits ? (