diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 546b1617f3..1f3424f531 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -15,7 +15,8 @@
"Website(3001)",
"Embed Core(3100)",
"Embed React(3101)",
- "Prisma Studio(5555)"
+ "Prisma Studio(5555)",
+ "Maildev(587)"
],
// Mark as the default build task so cmd/ctrl+shift+b will create them
"group": {
@@ -65,6 +66,13 @@
"command": "yarn db-studio",
"isBackground": false,
"problemMatcher": []
+ },
+ {
+ "label": "Maildev(587)",
+ "type": "shell",
+ "command": "maildev -s 587",
+ "isBackground": false,
+ "problemMatcher": []
}
]
}
diff --git a/apps/web/components/CustomBranding.tsx b/apps/web/components/CustomBranding.tsx
index 8dd83e2235..5959a6abaa 100644
--- a/apps/web/components/CustomBranding.tsx
+++ b/apps/web/components/CustomBranding.tsx
@@ -1,6 +1,6 @@
import { useEffect } from "react";
-import { useBrandColors } from "@calcom/embed-core";
+import { useBrandColors } from "@calcom/embed-core/embed-iframe";
const brandColor = "#292929";
const brandTextColor = "#ffffff";
diff --git a/apps/web/components/Shell.tsx b/apps/web/components/Shell.tsx
index 72c8c4f102..15bfd4e083 100644
--- a/apps/web/components/Shell.tsx
+++ b/apps/web/components/Shell.tsx
@@ -19,7 +19,7 @@ import { useRouter } from "next/router";
import React, { Fragment, ReactNode, useEffect, useState } from "react";
import { Toaster } from "react-hot-toast";
-import { useIsEmbed } from "@calcom/embed-core";
+import { useIsEmbed } from "@calcom/embed-core/embed-iframe";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import Button from "@calcom/ui/Button";
import Dropdown, {
diff --git a/apps/web/components/booking/DatePicker.tsx b/apps/web/components/booking/DatePicker.tsx
index 74aceb83ed..8a3398a9df 100644
--- a/apps/web/components/booking/DatePicker.tsx
+++ b/apps/web/components/booking/DatePicker.tsx
@@ -7,7 +7,7 @@ import utc from "dayjs/plugin/utc";
import { memoize } from "lodash";
import { useEffect, useRef, useState } from "react";
-import { useEmbedStyles } from "@calcom/embed-core";
+import { useEmbedStyles } from "@calcom/embed-core/embed-iframe";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import classNames from "@lib/classNames";
diff --git a/apps/web/components/booking/pages/AvailabilityPage.tsx b/apps/web/components/booking/pages/AvailabilityPage.tsx
index 2b295d4a06..4a23427d27 100644
--- a/apps/web/components/booking/pages/AvailabilityPage.tsx
+++ b/apps/web/components/booking/pages/AvailabilityPage.tsx
@@ -30,7 +30,7 @@ import {
useIsBackgroundTransparent,
sdkActionManager,
useEmbedNonStylesConfig,
-} from "@calcom/embed-core";
+} from "@calcom/embed-core/embed-iframe";
import classNames from "@calcom/lib/classNames";
import { WEBAPP_URL } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
diff --git a/apps/web/components/booking/pages/BookingPage.tsx b/apps/web/components/booking/pages/BookingPage.tsx
index 22b31977f6..f02c3deda8 100644
--- a/apps/web/components/booking/pages/BookingPage.tsx
+++ b/apps/web/components/booking/pages/BookingPage.tsx
@@ -24,7 +24,11 @@ import { Frequency as RRuleFrequency } from "rrule";
import { v4 as uuidv4 } from "uuid";
import { z } from "zod";
-import { useEmbedNonStylesConfig, useIsBackgroundTransparent, useIsEmbed } from "@calcom/embed-core";
+import {
+ useEmbedNonStylesConfig,
+ useIsBackgroundTransparent,
+ useIsEmbed,
+} from "@calcom/embed-core/embed-iframe";
import classNames from "@calcom/lib/classNames";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { HttpError } from "@calcom/lib/http-error";
diff --git a/apps/web/components/ui/PoweredByCal.tsx b/apps/web/components/ui/PoweredByCal.tsx
index 9aa32166c4..348e8d4a75 100644
--- a/apps/web/components/ui/PoweredByCal.tsx
+++ b/apps/web/components/ui/PoweredByCal.tsx
@@ -1,6 +1,6 @@
import Link from "next/link";
-import { useIsEmbed } from "@calcom/embed-core";
+import { useIsEmbed } from "@calcom/embed-core/embed-iframe";
import { useLocale } from "@lib/hooks/useLocale";
diff --git a/apps/web/ee/components/stripe/PaymentPage.tsx b/apps/web/ee/components/stripe/PaymentPage.tsx
index a30571d7e6..285a82c52e 100644
--- a/apps/web/ee/components/stripe/PaymentPage.tsx
+++ b/apps/web/ee/components/stripe/PaymentPage.tsx
@@ -9,7 +9,7 @@ import Head from "next/head";
import { FC, useEffect, useState } from "react";
import { FormattedNumber, IntlProvider } from "react-intl";
-import { sdkActionManager, useIsEmbed } from "@calcom/embed-core";
+import { sdkActionManager, useIsEmbed } from "@calcom/embed-core/embed-iframe";
import getStripe from "@calcom/stripe/client";
import PaymentComponent from "@ee/components/stripe/Payment";
import { PaymentPageProps } from "@ee/pages/payment/[uid]";
diff --git a/apps/web/lib/hooks/useTheme.tsx b/apps/web/lib/hooks/useTheme.tsx
index 5c93b74623..25d6e511c1 100644
--- a/apps/web/lib/hooks/useTheme.tsx
+++ b/apps/web/lib/hooks/useTheme.tsx
@@ -1,7 +1,7 @@
import Head from "next/head";
import { useEffect, useState } from "react";
-import { useEmbedTheme } from "@calcom/embed-core";
+import { useEmbedTheme } from "@calcom/embed-core/embed-iframe";
import { Maybe } from "@trpc/server";
diff --git a/apps/web/package.json b/apps/web/package.json
index 1a28b1ed3a..1abdebf206 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -30,7 +30,7 @@
"@calcom/app-store": "*",
"@calcom/core": "*",
"@calcom/ee": "*",
- "@calcom/embed-core": "*",
+ "@calcom/embed-core": "^1.1.0-beta.10",
"@calcom/lib": "*",
"@calcom/prisma": "*",
"@calcom/stripe": "*",
diff --git a/apps/web/pages/[user].tsx b/apps/web/pages/[user].tsx
index 6c78cd7a7e..6659e88e02 100644
--- a/apps/web/pages/[user].tsx
+++ b/apps/web/pages/[user].tsx
@@ -10,7 +10,12 @@ import { useEffect, useState } from "react";
import { Toaster } from "react-hot-toast";
import { JSONObject } from "superjson/dist/types";
-import { sdkActionManager, useEmbedNonStylesConfig, useEmbedStyles, useIsEmbed } from "@calcom/embed-core";
+import {
+ sdkActionManager,
+ useEmbedNonStylesConfig,
+ useEmbedStyles,
+ useIsEmbed,
+} from "@calcom/embed-core/embed-iframe";
import defaultEvents, {
getDynamicEventDescription,
getGroupName,
diff --git a/apps/web/pages/success.tsx b/apps/web/pages/success.tsx
index a22dc2e074..0535ce609f 100644
--- a/apps/web/pages/success.tsx
+++ b/apps/web/pages/success.tsx
@@ -22,7 +22,7 @@ import {
useEmbedNonStylesConfig,
useIsBackgroundTransparent,
useIsEmbed,
-} from "@calcom/embed-core";
+} from "@calcom/embed-core/embed-iframe";
import { getDefaultEvent } from "@calcom/lib/defaultEvents";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { localStorage } from "@calcom/lib/webstorage";
diff --git a/apps/web/pages/team/[slug].tsx b/apps/web/pages/team/[slug].tsx
index 90a3ba4d6f..0fd9462de3 100644
--- a/apps/web/pages/team/[slug].tsx
+++ b/apps/web/pages/team/[slug].tsx
@@ -5,7 +5,7 @@ import { GetServerSidePropsContext } from "next";
import Link from "next/link";
import React, { useEffect } from "react";
-import { useIsEmbed } from "@calcom/embed-core";
+import { useIsEmbed } from "@calcom/embed-core/embed-iframe";
import { WEBSITE_URL } from "@calcom/lib/constants";
import Button from "@calcom/ui/Button";
diff --git a/packages/embeds/embed-core/embed-iframe.ts b/packages/embeds/embed-core/embed-iframe.ts
new file mode 100644
index 0000000000..f1811a9314
--- /dev/null
+++ b/packages/embeds/embed-core/embed-iframe.ts
@@ -0,0 +1,2 @@
+export * from "./src/embed-iframe";
+export * from "./src/sdk-event";
diff --git a/packages/embeds/embed-core/env.d.ts b/packages/embeds/embed-core/env.d.ts
index d4685a2c08..f8e62b46a5 100644
--- a/packages/embeds/embed-core/env.d.ts
+++ b/packages/embeds/embed-core/env.d.ts
@@ -1,7 +1,9 @@
///
interface ImportMetaEnv {
- readonly NEXT_PUBLIC_WEBSITE_URL: string;
+ readonly EMBED_PUBLIC_WEBAPP_URL: string;
+ readonly EMBED_PUBLIC_VERCEL_URL: string;
+ readonly EMBED_PUBLIC_EMBED_LIB_URL: string;
}
interface ImportMeta {
diff --git a/packages/embeds/embed-core/index.ts b/packages/embeds/embed-core/index.ts
index f1811a9314..b0ce1fa830 100644
--- a/packages/embeds/embed-core/index.ts
+++ b/packages/embeds/embed-core/index.ts
@@ -1,2 +1,2 @@
-export * from "./src/embed-iframe";
export * from "./src/sdk-event";
+export * from "./src/embed";
diff --git a/packages/embeds/embed-core/package.json b/packages/embeds/embed-core/package.json
index ebd8ec7cd0..0f51cdfb2f 100644
--- a/packages/embeds/embed-core/package.json
+++ b/packages/embeds/embed-core/package.json
@@ -1,10 +1,11 @@
{
"name": "@calcom/embed-core",
- "version": "1.0.0",
+ "version": "1.1.0-beta.10",
"description": "This is the vanilla JS core script that embeds Cal Link",
- "main": "./index.ts",
+ "main": "./dist/embed/embed.js",
+ "types": "./dist/index.d.ts",
"scripts": {
- "__build": "yarn tailwind && vite build",
+ "__build": "yarn tailwind && vite build && yarn tsc --emitDeclarationOnly --declarationDir dist && cp -r ../../../apps/web/public/embed ./dist/",
"__dev": "yarn __build --mode development",
"build": "NEXT_PUBLIC_EMBED_FINGER_PRINT=$(git rev-parse --short HEAD) yarn __build",
"build-preview": "PREVIEW_BUILD=1 yarn __build ",
@@ -16,8 +17,12 @@
"type-check": "tsc --pretty --noEmit",
"lint": "eslint --ext .ts,.js src",
"embed-tests": "yarn playwright test --config=playwright/config/playwright.config.ts",
- "embed-tests-quick": "QUICK=true yarn embed-tests"
+ "embed-tests-quick": "QUICK=true yarn embed-tests",
+ "prepare": "NEXT_PUBLIC_WEBAPP_URL='https://app.cal.com' yarn build"
},
+ "files": [
+ "dist"
+ ],
"postcss": {
"map": false,
"plugins": {
@@ -29,11 +34,10 @@
"autoprefixer": "^10.4.7",
"eslint": "^8.15.0",
"postcss": "^8.4.13",
- "vite": "^2.9.9"
- },
- "dependencies": {
+ "vite": "^2.9.9",
"tailwindcss": "^3.0.24",
"tsc": "^2.0.4",
"typescript": "^4.6.4"
- }
+ },
+ "dependencies": {}
}
diff --git a/packages/embeds/embed-core/playwright/config/playwright.config.ts b/packages/embeds/embed-core/playwright/config/playwright.config.ts
index 7ccb45ffc3..212ee66cdb 100644
--- a/packages/embeds/embed-core/playwright/config/playwright.config.ts
+++ b/packages/embeds/embed-core/playwright/config/playwright.config.ts
@@ -22,7 +22,8 @@ const config: PlaywrightTestConfig = {
expect: {
toMatchSnapshot: {
// Opacity transitions can cause small differences
- maxDiffPixels: 50,
+ // Every month the rendered month changes failing the snapshot tests. So, increase the threshold to catch major bugs only.
+ maxDiffPixelRatio: 0.1,
},
},
webServer: {
@@ -123,7 +124,7 @@ expect.extend({
const searchParams = u.searchParams;
const expectedSearchParams = expectedUrlDetails.searchParams || {};
- for (let [expectedKey, expectedValue] of Object.entries(expectedSearchParams)) {
+ for (const [expectedKey, expectedValue] of Object.entries(expectedSearchParams)) {
const value = searchParams.get(expectedKey);
if (value !== expectedValue) {
return {
diff --git a/packages/embeds/embed-core/playwright/lib/testUtils.ts b/packages/embeds/embed-core/playwright/lib/testUtils.ts
index 1ab43dad74..b39e987b1a 100644
--- a/packages/embeds/embed-core/playwright/lib/testUtils.ts
+++ b/packages/embeds/embed-core/playwright/lib/testUtils.ts
@@ -36,7 +36,7 @@ export const getEmbedIframe = async ({ page, pathname }: { page: Page; pathname:
await new Promise((resolve) => {
setTimeout(resolve, 2000);
});
- let embedIframe = page.frame("cal-embed");
+ const embedIframe = page.frame("cal-embed");
if (!embedIframe) {
return null;
}
@@ -83,7 +83,7 @@ export async function bookFirstEvent(username: string, frame: Frame, page: Page)
const responseObj = await response.json();
const bookingId = responseObj.uid;
// Make sure we're navigated to the success page
- await expect(page.locator("[data-testid=success-page]")).toBeVisible();
+ await expect(frame.locator("[data-testid=success-page]")).toBeVisible();
expect(await page.screenshot()).toMatchSnapshot("success-page.png");
return bookingId;
}
diff --git a/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/availability-page-1-chromium-darwin.png b/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/availability-page-1-chromium-darwin.png
index d269136c12..fba6e75568 100644
Binary files a/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/availability-page-1-chromium-darwin.png and b/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/availability-page-1-chromium-darwin.png differ
diff --git a/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/booking-page-chromium-darwin.png b/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/booking-page-chromium-darwin.png
index 83f9a756f8..fd2bde81e4 100644
Binary files a/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/booking-page-chromium-darwin.png and b/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/booking-page-chromium-darwin.png differ
diff --git a/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/event-types-list-chromium-darwin.png b/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/event-types-list-chromium-darwin.png
index 9a3009653e..5d2f8988a4 100644
Binary files a/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/event-types-list-chromium-darwin.png and b/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/event-types-list-chromium-darwin.png differ
diff --git a/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/success-page-chromium-darwin.png b/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/success-page-chromium-darwin.png
index cce76a43e1..940b540226 100644
Binary files a/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/success-page-chromium-darwin.png and b/packages/embeds/embed-core/playwright/tests/inline.test.ts-snapshots/success-page-chromium-darwin.png differ
diff --git a/packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts b/packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts
index 0c9e9e8e9f..484fa3088b 100644
--- a/packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts
+++ b/packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts
@@ -1,5 +1,4 @@
-import { CalWindow } from "@calcom/embed-snippet";
-
+import { CalWindow } from "../embed";
import getFloatingButtonHtml from "./FloatingButtonHtml";
export class FloatingButton extends HTMLElement {
diff --git a/packages/embeds/embed-core/src/Inline/inline.ts b/packages/embeds/embed-core/src/Inline/inline.ts
index 6cd74ec4a1..a1f1c260d4 100644
--- a/packages/embeds/embed-core/src/Inline/inline.ts
+++ b/packages/embeds/embed-core/src/Inline/inline.ts
@@ -1,5 +1,4 @@
-import { CalWindow } from "@calcom/embed-snippet";
-
+import { CalWindow } from "../embed";
import loaderCss from "../loader.css";
import { getErrorString } from "../utils";
import inlineHtml from "./inlineHtml";
diff --git a/packages/embeds/embed-core/src/ModalBox/ModalBox.ts b/packages/embeds/embed-core/src/ModalBox/ModalBox.ts
index eab4215a8a..8da0e86466 100644
--- a/packages/embeds/embed-core/src/ModalBox/ModalBox.ts
+++ b/packages/embeds/embed-core/src/ModalBox/ModalBox.ts
@@ -1,5 +1,4 @@
-import { CalWindow } from "@calcom/embed-snippet";
-
+import { CalWindow } from "../embed";
import loaderCss from "../loader.css";
import { getErrorString } from "../utils";
import modalBoxHtml from "./ModalBoxHtml";
diff --git a/packages/embeds/embed-core/src/embed.ts b/packages/embeds/embed-core/src/embed.ts
index 7a2ba6371b..709dd1221c 100644
--- a/packages/embeds/embed-core/src/embed.ts
+++ b/packages/embeds/embed-core/src/embed.ts
@@ -1,5 +1,3 @@
-import type { CalWindow } from "@calcom/embed-snippet";
-
import { FloatingButton } from "./FloatingButton/FloatingButton";
import { Inline } from "./Inline/inline";
import { ModalBox } from "./ModalBox/ModalBox";
@@ -11,8 +9,7 @@ import allCss from "./tailwind.generated.css";
// HACK: Redefine and don't import WEBAPP_URL as it causes import statement to be present in built file.
// This is happening because we are not able to generate an App and a lib using single Vite Config.
const WEBAPP_URL =
- (import.meta.env.NEXT_PUBLIC_WEBAPP_URL_TYPO as string) ||
- `https://${import.meta.env.NEXT_PUBLIC_VERCEL_URL}`;
+ import.meta.env.EMBED_PUBLIC_WEBAPP_URL || `https://${import.meta.env.EMBED_PUBLIC_VERCEL_URL}`;
customElements.define("cal-modal-box", ModalBox);
customElements.define("cal-floating-button", FloatingButton);
@@ -33,7 +30,7 @@ if (!globalCal || !globalCal.q) {
// Store Commit Hash to know exactly what version of the code is running
// TODO: Ideally it should be the version as per package.json and then it can be renamed to version.
// But because it is built on local machine right now, it is much more reliable to have the commit hash.
-globalCal.fingerprint = import.meta.env.NEXT_PUBLIC_EMBED_FINGER_PRINT as string;
+globalCal.fingerprint = import.meta.env.EMBED_PUBLIC_EMBED_FINGER_PRINT as string;
globalCal.__css = allCss;
document.head.appendChild(document.createElement("style")).innerHTML = css;
@@ -512,6 +509,24 @@ export class Cal {
}
}
+export interface GlobalCal {
+ (methodName: string, arg?: any): void;
+ /** Marks that the embed.js is loaded. Avoids re-downloading it. */
+ loaded?: boolean;
+ /** Maintains a queue till the time embed.js isn't loaded */
+ q?: InstructionQueue;
+ /** If user registers multiple namespaces, those are available here */
+ ns?: Record;
+ instance?: Cal;
+ __css?: string;
+ fingerprint?: string;
+ __logQueue?: any[];
+}
+
+export interface CalWindow extends Window {
+ Cal?: GlobalCal;
+}
+
globalCal.instance = new Cal("", globalCal.q!);
for (const [ns, api] of Object.entries(globalCal.ns!)) {
diff --git a/packages/embeds/embed-core/src/preview.ts b/packages/embeds/embed-core/src/preview.ts
index b2d2763459..6a9168aafb 100644
--- a/packages/embeds/embed-core/src/preview.ts
+++ b/packages/embeds/embed-core/src/preview.ts
@@ -1,10 +1,10 @@
-import { CalWindow } from "@calcom/embed-snippet";
+import { CalWindow } from "./embed";
const WEBAPP_URL =
- import.meta.env.NEXT_PUBLIC_WEBAPP_URL || `https://${import.meta.env.NEXT_PUBLIC_VERCEL_URL}`;
-const EMBED_LIB_URL = import.meta.env.NEXT_PUBLIC_EMBED_LIB_URL || `${WEBAPP_URL}/embed/embed.js`;
+ import.meta.env.EMBED_PUBLIC_WEBAPP_URL || `https://${import.meta.env.EMBED_PUBLIC_VERCEL_URL}`;
+const EMBED_LIB_URL = import.meta.env.EMBED_PUBLIC_EMBED_LIB_URL || `${WEBAPP_URL}/embed/embed.js`;
-(window as any).fingerprint = import.meta.env.NEXT_PUBLIC_EMBED_FINGER_PRINT as string;
+(window as any).fingerprint = import.meta.env.EMBED_PUBLIC_EMBED_FINGER_PRINT as string;
// Install Cal Embed Code Snippet
(function (C, A, L) {
diff --git a/packages/embeds/embed-core/tsconfig.json b/packages/embeds/embed-core/tsconfig.json
index bd3b3e6f54..5e1617a473 100644
--- a/packages/embeds/embed-core/tsconfig.json
+++ b/packages/embeds/embed-core/tsconfig.json
@@ -8,6 +8,6 @@
"moduleResolution": "Node",
"baseUrl": "."
},
- "include": ["."],
+ "include": ["src", "env.d.ts", "index.ts"],
"exclude": ["dist", "build", "node_modules"]
}
diff --git a/packages/embeds/embed-core/vite.config.js b/packages/embeds/embed-core/vite.config.js
index cfe4c9cd1e..0f94775561 100644
--- a/packages/embeds/embed-core/vite.config.js
+++ b/packages/embeds/embed-core/vite.config.js
@@ -1,12 +1,11 @@
-require("dotenv").config({ path: "../../../.env" });
-
-process.env.NEXT_PUBLIC_VERCEL_URL = process.env.VERCEL_URL;
+import viteBaseConfig from "../vite.config";
const path = require("path");
const { defineConfig } = require("vite");
+
module.exports = defineConfig((configEnv) => {
const config = {
- envPrefix: "NEXT_PUBLIC_",
+ ...viteBaseConfig,
base: "/embed/",
build: {
minify: "terser",
diff --git a/packages/embeds/embed-react/env.d.ts b/packages/embeds/embed-react/env.d.ts
index 11f02fe2a0..f8e62b46a5 100644
--- a/packages/embeds/embed-react/env.d.ts
+++ b/packages/embeds/embed-react/env.d.ts
@@ -1 +1,11 @@
///
+
+interface ImportMetaEnv {
+ readonly EMBED_PUBLIC_WEBAPP_URL: string;
+ readonly EMBED_PUBLIC_VERCEL_URL: string;
+ readonly EMBED_PUBLIC_EMBED_LIB_URL: string;
+}
+
+interface ImportMeta {
+ readonly env: ImportMetaEnv;
+}
diff --git a/packages/embeds/embed-react/package.json b/packages/embeds/embed-react/package.json
index a8e7cfd052..d37a54f6ff 100644
--- a/packages/embeds/embed-react/package.json
+++ b/packages/embeds/embed-react/package.json
@@ -1,13 +1,13 @@
{
"name": "@calcom/embed-react",
- "version": "1.0.5",
+ "version": "1.0.6-beta.10",
"description": "Embed Cal Link as a React Component",
"scripts": {
"dev": "vite --port=3101 --open",
"tsc": "tsc",
"build": "vite build && yarn tsc --emitDeclarationOnly --declarationDir dist",
"preview": "vite preview",
- "prepare": "yarn build",
+ "prepare": "NEXT_PUBLIC_EMBED_LIB_URL='https://app.cal.com/embed/embed.js' NEXT_PUBLIC_WEBAPP_URL='https://app.cal.com' yarn build",
"type-check": "tsc --pretty --noEmit",
"lint": "eslint --ext .ts,.js,.tsx,.jsx ./src",
"embed-tests": "yarn playwright test --config=./playwright/config/playwright.config.ts",
@@ -17,7 +17,7 @@
},
"main": "./dist/Cal.umd.js",
"module": "./dist/Cal.es.js",
- "types": "./dist/src/index.d.ts",
+ "types": "./dist/index.d.ts",
"peerDependencies": {
"react": "^18.1.0",
"react-dom": "^18.1.0"
@@ -32,14 +32,16 @@
}
},
"devDependencies": {
- "@calcom/embed-snippet": "^1.0.0",
"@types/react": "18.0.9",
"@types/react-dom": "18.0.4",
"@vitejs/plugin-react": "^1.3.2",
"eslint": "^8.15.0",
- "vite": "^2.9.9"
+ "vite": "^2.9.9",
+ "playwright": "^1.22.1",
+ "typescript": "^4.6.4"
},
"dependencies": {
- "typescript": "^4.6.4"
+ "@calcom/embed-snippet": "1.0.1-beta.10",
+ "@calcom/embed-core": "1.1.0-beta.10"
}
}
diff --git a/packages/embeds/embed-react/src/index.ts b/packages/embeds/embed-react/src/index.ts
index e5743a0af0..527dc02bcb 100644
--- a/packages/embeds/embed-react/src/index.ts
+++ b/packages/embeds/embed-react/src/index.ts
@@ -1,4 +1,4 @@
-import { CalWindow } from "@calcom/embed-snippet";
+import { CalWindow } from "@calcom/embed-core";
import Cal from "./Cal";
diff --git a/packages/embeds/embed-react/tsconfig.json b/packages/embeds/embed-react/tsconfig.json
index 81f5a963d3..b815d65cf6 100644
--- a/packages/embeds/embed-react/tsconfig.json
+++ b/packages/embeds/embed-react/tsconfig.json
@@ -10,6 +10,6 @@
"@lib/*": ["../../../apps/web/lib/*"]
}
},
- "include": ["."],
+ "include": ["src","env.d.ts"],
"exclude": ["dist", "build", "node_modules", "test-cal.tsx"]
}
diff --git a/packages/embeds/embed-react/vite.config.js b/packages/embeds/embed-react/vite.config.js
index 991b5f4a23..8992bec327 100644
--- a/packages/embeds/embed-react/vite.config.js
+++ b/packages/embeds/embed-react/vite.config.js
@@ -2,10 +2,12 @@ import react from "@vitejs/plugin-react";
import path from "path";
import { defineConfig } from "vite";
+import viteBaseConfig from "../vite.config";
+
// https://vitejs.dev/config/
export default defineConfig({
+ ...viteBaseConfig,
plugins: [react()],
- envPrefix: "NEXT_PUBLIC_",
build: {
lib: {
entry: path.resolve(__dirname, "src/index.ts"),
diff --git a/packages/embeds/embed-snippet/package.json b/packages/embeds/embed-snippet/package.json
index dedb9f1f97..06e9b4df49 100644
--- a/packages/embeds/embed-snippet/package.json
+++ b/packages/embeds/embed-snippet/package.json
@@ -1,14 +1,23 @@
{
"name": "@calcom/embed-snippet",
- "version": "1.0.0",
- "main": "src/index.ts",
+ "version": "1.0.1-beta.10",
+ "main": "./dist/snippet.umd.js",
+ "module": "./dist/snippet.es.js",
"description": "Vanilla JS embed snippet that is responsible to fetch @calcom/embed-core and thus show Cal Link as an embed on a page.",
"scripts": {
- "build": "vite build",
+ "build": "vite build && yarn tsc --emitDeclarationOnly --declarationDir dist",
"type-check": "tsc --pretty --noEmit",
- "lint": "eslint --ext .ts,.js src"
+ "lint": "eslint --ext .ts,.js src",
+ "prepare":"NEXT_PUBLIC_EMBED_LIB_URL='https://app.cal.com/embed/embed.js' NEXT_PUBLIC_WEBAPP_URL='https://app.cal.com' yarn build"
},
+ "files": [
+ "dist"
+ ],
+ "types": "./dist/index.d.ts",
"devDependencies": {
"eslint": "^8.15.0"
+ },
+ "dependencies": {
+ "@calcom/embed-core": "^1.1.0-beta.10"
}
}
diff --git a/packages/embeds/embed-snippet/src/index.ts b/packages/embeds/embed-snippet/src/index.ts
index 9d877a9016..ab9d2a5b1d 100644
--- a/packages/embeds/embed-snippet/src/index.ts
+++ b/packages/embeds/embed-snippet/src/index.ts
@@ -4,30 +4,12 @@
* As we want to keep control on the size of this snippet but we want some portion of it to be still readable.
* So, write the code that you need directly but keep it short.
*/
-import type { Cal as CalClass, InstructionQueue } from "@calcom/embed-core/src/embed";
+import { CalWindow } from "@calcom/embed-core";
const WEBAPP_URL =
- import.meta.env.NEXT_PUBLIC_WEBAPP_URL || `https://${import.meta.env.NEXT_PUBLIC_VERCEL_URL}`;
+ import.meta.env.EMBED_PUBLIC_WEBAPP_URL || `https://${import.meta.env.EMBED_PUBLIC_VERCEL_URL}`;
-const EMBED_LIB_URL = import.meta.env.NEXT_PUBLIC_EMBED_LIB_URL || `${WEBAPP_URL}/embed/embed.js`;
-
-export interface GlobalCal {
- (methodName: string, arg?: any): void;
- /** Marks that the embed.js is loaded. Avoids re-downloading it. */
- loaded?: boolean;
- /** Maintains a queue till the time embed.js isn't loaded */
- q?: InstructionQueue;
- /** If user registers multiple namespaces, those are available here */
- ns?: Record;
- instance?: CalClass;
- __css?: string;
- fingerprint?: string;
- __logQueue?: any[];
-}
-
-export interface CalWindow extends Window {
- Cal?: GlobalCal;
-}
+const EMBED_LIB_URL = import.meta.env.EMBED_PUBLIC_EMBED_LIB_URL || `${WEBAPP_URL}/embed/embed.js`;
export default function EmbedSnippet(url = EMBED_LIB_URL) {
(function (C: CalWindow, A, L) {
diff --git a/packages/embeds/embed-snippet/tsconfig.json b/packages/embeds/embed-snippet/tsconfig.json
index 42b3877672..05d7d4266b 100644
--- a/packages/embeds/embed-snippet/tsconfig.json
+++ b/packages/embeds/embed-snippet/tsconfig.json
@@ -2,7 +2,8 @@
"extends": "@calcom/tsconfig/base.json",
"compilerOptions": {
"baseUrl": ".",
- "module": "esnext"
+ "module": "esnext",
+ "declaration": true
},
"include": ["."],
"exclude": ["dist", "build", "node_modules"]
diff --git a/packages/embeds/embed-snippet/vite.config.js b/packages/embeds/embed-snippet/vite.config.js
index bee01c77ac..b23b88e11d 100644
--- a/packages/embeds/embed-snippet/vite.config.js
+++ b/packages/embeds/embed-snippet/vite.config.js
@@ -1,13 +1,11 @@
-require("dotenv").config({ path: "../../../.env" });
+import viteBaseConfig from "../vite.config";
const path = require("path");
const { defineConfig } = require("vite");
-process.env.NEXT_PUBLIC_VERCEL_URL = process.env.VERCEL_URL;
-
module.exports = defineConfig({
+ ...viteBaseConfig,
build: {
- envPrefix: "NEXT_PUBLIC_",
lib: {
entry: path.resolve(__dirname, "src", "index.ts"),
name: "snippet",
diff --git a/packages/embeds/vite.config.js b/packages/embeds/vite.config.js
new file mode 100644
index 0000000000..17bef332d0
--- /dev/null
+++ b/packages/embeds/vite.config.js
@@ -0,0 +1,9 @@
+require("dotenv").config({ path: "../../.env" });
+process.env.EMBED_PUBLIC_VERCEL_URL = process.env.VERCEL_URL;
+process.env.EMBED_PUBLIC_WEBAPP_URL = process.env.NEXT_PUBLIC_WEBAPP_URL;
+process.env.EMBED_PUBLIC_EMBED_LIB_URL = process.env.NEXT_PUBLIC_EMBED_LIB_URL;
+
+const viteBaseConfig = {
+ envPrefix: "EMBED_PUBLIC_",
+};
+export default viteBaseConfig;
diff --git a/yarn.lock b/yarn.lock
index 7301a7575b..b5b7a41803 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -746,6 +746,18 @@
resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.0.tgz#fe364f025ba74f6de6c837a84ef44bdb1d61e68f"
integrity sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w==
+"@calcom/embed-react@^1.0.2":
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/@calcom/embed-react/-/embed-react-1.0.5.tgz#8c14bd3d89105e5ba6d0720ed74ec76f8a883f89"
+ integrity sha512-d9OXMM8w+F9ztl0g+FOQXtJVgIlZAyEw5lhX1aumFnMxHJJWF361//u5D2hsnnAunRV3444iAvI8++848Tf3Vg==
+ dependencies:
+ "@calcom/embed-snippet" "^1.0.0"
+
+"@calcom/embed-snippet@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@calcom/embed-snippet/-/embed-snippet-1.0.0.tgz#e4cf75e0b217312767287b20db54cab9c8ebf94f"
+ integrity sha512-nMcFkNNhwXqaS55JPeGVj2arDpu1ka6TRC1n1g2cC8G7fLEcWrJbkdiVkoQL8YrEm8t74CgtEE2BLCU4+LTzmg==
+
"@cnakazawa/watch@^1.0.3":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
@@ -1166,7 +1178,7 @@
resolved "https://registry.yarnpkg.com/@glidejs/glide/-/glide-3.5.2.tgz#7012c5920ecf202bbda44d8526fc979984b6dd54"
integrity sha512-7jGciNJ2bQ4eZLSNlSZ+VAyW63kALf420CvkEpK4lEsUfWJq9odqimci0YCiyNyMUFB+pWHwLYyNc57dijYsCg==
-"@headlessui/react@^1.4.1", "@headlessui/react@^1.5.0":
+"@headlessui/react@^1.4.1":
version "1.6.1"
resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.6.1.tgz#d822792e589aac005462491dd62f86095e0c3bef"
integrity sha512-gMd6uIs1U4Oz718Z5gFoV0o/vD43/4zvbyiJN9Dt7PK9Ubxn+TmJwTmYwyNJc5KxxU1t0CmgTNgwZX9+4NjCnQ==
@@ -3092,7 +3104,7 @@
dependencies:
defer-to-connect "^1.0.1"
-"@tailwindcss/forms@^0.5.0", "@tailwindcss/forms@^0.5.1":
+"@tailwindcss/forms@^0.5.1":
version "0.5.1"
resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.5.1.tgz#7fe86b9b67e6d91cb902e2d3f4ebe561cc057a13"
integrity sha512-QSwsFORnC2BAP0lRzQkz1pw+EzIiiPdk4e27vGQjyXkwJPeC7iLIRVndJzf9CJVbcrrIcirb/TfxF3gRTyFEVA==
@@ -4352,7 +4364,7 @@ autolinker@^3.11.0:
dependencies:
tslib "^2.3.0"
-autoprefixer@^10.3.4, autoprefixer@^10.4.2, autoprefixer@^10.4.7:
+autoprefixer@^10.3.4, autoprefixer@^10.4.7:
version "10.4.7"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.7.tgz#1db8d195f41a52ca5069b7593be167618edbbedf"
integrity sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==
@@ -5240,11 +5252,6 @@ chardet@^0.7.0:
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-chart.js@^3.7.1:
- version "3.7.1"
- resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.7.1.tgz#0516f690c6a8680c6c707e31a4c1807a6f400ada"
- integrity sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA==
-
chokidar@^3.5.3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
@@ -6775,7 +6782,7 @@ eslint-visitor-keys@^3.3.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
-eslint@8.15.0, eslint@^8.10.0, eslint@^8.15.0:
+eslint@^8.10.0, eslint@^8.15.0:
version "8.15.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.15.0.tgz#fea1d55a7062da48d82600d2e0974c55612a11e9"
integrity sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==
@@ -11793,7 +11800,7 @@ next-api-middleware@^1.0.1:
dependencies:
debug "^4.3.2"
-next-auth@^4.3.3, next-auth@^4.3.4:
+next-auth@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.3.4.tgz#7b241e34e1f68632768cef8ee289e33256cb2b19"
integrity sha512-8dGkNicbxY2BYsJq4uOJIEsGt39wXj5AViTBsVfbRQqtAFmZmXYHutf90VBmobm8rT2+Xl60HDUTkuVVK+x+xw==
@@ -12863,6 +12870,18 @@ playwright-core@1.22.1:
resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.22.1.tgz#59ddf903546171fdfd9c3dc189630c883619667c"
integrity sha512-H+ZUVYnceWNXrRf3oxTEKAr81QzFsCKu5Fp//fEjQvqgKkfA1iX3E9DBrPJpPNOrgVzcE+IqeI0fDmYJe6Ynnw==
+playwright-core@1.22.2:
+ version "1.22.2"
+ resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.22.2.tgz#ed2963d79d71c2a18d5a6fd25b60b9f0a344661a"
+ integrity sha512-w/hc/Ld0RM4pmsNeE6aL/fPNWw8BWit2tg+TfqJ3+p59c6s3B6C8mXvXrIPmfQEobkcFDc+4KirNzOQ+uBSP1Q==
+
+playwright@^1.22.1:
+ version "1.22.2"
+ resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.22.2.tgz#353a7c29f89ca9600edc7a9a30aed790823c797d"
+ integrity sha512-hUTpg7LytIl3/O4t0AQJS1V6hWsaSY5uZ7w1oCC8r3a1AQN5d6otIdCkiB3cbzgQkcMaRxisinjMFMVqZkybdQ==
+ dependencies:
+ playwright-core "1.22.2"
+
pngjs@^3.0.0, pngjs@^3.3.3:
version "3.4.0"
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
@@ -12922,7 +12941,7 @@ postcss@8.4.5:
picocolors "^1.0.0"
source-map-js "^1.0.1"
-postcss@^8.3.6, postcss@^8.4.13, postcss@^8.4.8:
+postcss@^8.3.6, postcss@^8.4.13:
version "8.4.13"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.13.tgz#7c87bc268e79f7f86524235821dfdf9f73e5d575"
integrity sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==
@@ -13342,11 +13361,6 @@ react-calendar@^3.3.1:
merge-class-names "^1.1.1"
prop-types "^15.6.0"
-react-chartjs-2@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-4.1.0.tgz#2a123df16d3a987c54eb4e810ed766d3c03adf8d"
- integrity sha512-AsUihxEp8Jm1oBhbEovE+w50m9PVNhz1sfwEIT4hZduRC0m14gHWHd0cUaxkFDb8HNkdMIGzsNlmVqKiOpU74g==
-
react-colorful@^5.5.1:
version "5.5.1"
resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.5.1.tgz#29d9c4e496f2ca784dd2bb5053a3a4340cfaf784"
@@ -15135,11 +15149,6 @@ swarm-js@^0.1.40:
tar "^4.0.2"
xhr-request "^1.0.1"
-swr@^1.2.2:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/swr/-/swr-1.3.0.tgz#c6531866a35b4db37b38b72c45a63171faf9f4e8"
- integrity sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==
-
symbol-tree@^3.2.4:
version "3.2.4"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
@@ -17047,6 +17056,11 @@ zod-prisma@^0.5.4:
parenthesis "^3.1.8"
ts-morph "^13.0.2"
+zod@^3.14.4:
+ version "3.17.3"
+ resolved "https://registry.yarnpkg.com/zod/-/zod-3.17.3.tgz#86abbc670ff0063a4588d85a4dcc917d6e4af2ba"
+ integrity sha512-4oKP5zvG6GGbMlqBkI5FESOAweldEhSOZ6LI6cG+JzUT7ofj1ZOC0PJudpQOpT1iqOFpYYtX5Pw0+o403y4bcg==
+
zod@^3.16.0:
version "3.16.0"
resolved "https://registry.yarnpkg.com/zod/-/zod-3.16.0.tgz#edfdbf77fcc9a5af13a2630a44bdda5b90e759b7"