* feat: Cal.diy — community-driven MIT-licensed fork of Cal.com This squashed commit contains all Cal.diy changes applied on top of calcom/cal.com main: - Rebrand Cal.com to Cal.diy across the entire codebase - Remove Enterprise Edition (EE) features, license checks, and AGPL restrictions - Switch license from AGPL-3.0 to MIT - Remove docs/ directory (migrated to Nextra at cal.diy) - Remove dead code: org tests, EE tips, platform nav, premium username, SAML/SSO, etc. - Clean up .env.example for self-hosted Cal.diy - Update Docker image references to calcom/cal.diy - Update README, CONTRIBUTING.md, and issue templates for Cal.diy community fork - Add PR welcome bot for Cal.diy contributors - Fix API v2 breaking changes oasdiff ignore entries - Replace Blacksmith CI runners with default GitHub Actions 3893 files changed, 20789 insertions(+), 411020 deletions(-) Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: remove org-specific /organizations/:orgId endpoints from API v2 atoms controllers (#1701) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: revert Cal.diy Inc to Cal.com, Inc. in license files, copyright notices, and package metadata (#1702) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * rip out org related comments in api v2 --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
114 lines
4.1 KiB
TypeScript
114 lines
4.1 KiB
TypeScript
"use client";
|
|
|
|
import { APP_NAME } from "@calcom/lib/constants";
|
|
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
|
import { Button } from "@calcom/ui/components/button";
|
|
import { Dialog, DialogContent } from "@calcom/ui/components/dialog";
|
|
import { Logo } from "@calcom/ui/components/logo";
|
|
import { CheckIcon, UserIcon } from "@coss/ui/icons";
|
|
|
|
import { useWelcomeToCalcomModal } from "../hooks/useWelcomeToCalcomModal";
|
|
|
|
const features = [
|
|
"unlimited_calendars",
|
|
"unlimited_event_types",
|
|
"integrate_with_favorite_apps",
|
|
"accept_payments_via_stripe",
|
|
"html_react_embed",
|
|
"cal_ai_phone_agent",
|
|
"cal_video",
|
|
];
|
|
|
|
export function WelcomeToCalcomModal() {
|
|
const { t } = useLocale();
|
|
const { isOpen, closeModal } = useWelcomeToCalcomModal();
|
|
|
|
const LARGE = { outer: 48, icon: 24 };
|
|
const RINGS = [60, 95, 130]; // Ring radii in px
|
|
const RING_STROKE = 1;
|
|
|
|
return (
|
|
<Dialog open={isOpen} onOpenChange={(open) => !open && closeModal()}>
|
|
<DialogContent size="default" className="p-0!">
|
|
<div className="flex max-h-[80vh] flex-col gap-4 overflow-y-auto p-6">
|
|
<div className="flex flex-col items-center gap-1">
|
|
<Logo className="h-10 w-auto" />
|
|
</div>
|
|
|
|
{/* User illustration with rings */}
|
|
<div
|
|
className="relative mx-auto"
|
|
style={{
|
|
width: 320,
|
|
height: 220,
|
|
maskImage: "radial-gradient(ellipse 100% 60% at center, black 30%, transparent 85%)",
|
|
WebkitMaskImage: "radial-gradient(ellipse 100% 60% at center, black 30%, transparent 85%)",
|
|
}}>
|
|
{/* Center origin */}
|
|
<div className="absolute left-1/2 top-1/2" style={{ transform: "translate(-50%, -50%)" }}>
|
|
{/* Rings */}
|
|
{RINGS.map((r, i) => (
|
|
<div
|
|
key={i}
|
|
className="pointer-events-none absolute rounded-full border"
|
|
style={{
|
|
width: 2 * r,
|
|
height: 2 * r,
|
|
left: `calc(50% - ${r}px)`,
|
|
top: `calc(50% - ${r}px)`,
|
|
borderWidth: RING_STROKE,
|
|
borderColor: "var(--cal-border-subtle)",
|
|
}}
|
|
/>
|
|
))}
|
|
|
|
{/* Central user icon */}
|
|
<div
|
|
className="from-default to-muted border-subtle absolute flex items-center justify-center rounded-full border bg-gradient-to-b shadow-sm"
|
|
style={{
|
|
width: LARGE.outer,
|
|
height: LARGE.outer,
|
|
left: "50%",
|
|
top: "50%",
|
|
transform: "translate(-50%, -50%)",
|
|
}}>
|
|
<UserIcon className="text-emphasis opacity-70" size={LARGE.icon} />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="mb-2 flex flex-col gap-2 text-center">
|
|
<h2 className="font-cal text-emphasis text-2xl leading-none">
|
|
{t("welcome_to_calcom", { appName: APP_NAME })}
|
|
</h2>
|
|
<p className="text-default text-sm leading-normal">{t("personal_welcome_description")}</p>
|
|
</div>
|
|
|
|
<div className="mb-2 flex flex-col gap-3">
|
|
{features.map((feature) => (
|
|
<div key={feature} className="flex items-start gap-2">
|
|
<CheckIcon className="text-muted mt-0.5 h-4 w-4 shrink-0" />
|
|
<span className="text-default text-sm font-medium leading-tight">{t(feature)}</span>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</div>
|
|
|
|
<div className="bg-muted border-subtle flex shrink-0 items-center justify-between rounded-b-2xl border-t px-8 py-6">
|
|
<Button
|
|
color="minimal"
|
|
href="https://cal.diy"
|
|
target="_blank"
|
|
EndIcon="external-link"
|
|
className="pointer-events-none opacity-0">
|
|
{t("learn_more")}
|
|
</Button>
|
|
<Button color="primary" onClick={closeModal}>
|
|
{t("continue")}
|
|
</Button>
|
|
</div>
|
|
</DialogContent>
|
|
</Dialog>
|
|
);
|
|
}
|