Merge branch 'main' into fix/reusable-wysiwyg

This commit is contained in:
CarinaWolli 2023-01-05 12:31:50 -05:00
commit 034c98bc30
145 changed files with 1757 additions and 1096 deletions

View File

@ -0,0 +1,42 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/docker-outside-of-docker
{
"name": "Docker outside of Docker",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/base:bullseye",
"features": {
"ghcr.io/devcontainers/features/docker-from-docker:1": {
"version": "latest",
"enableNonRootDocker": "true",
"moby": "true"
},
"ghcr.io/devcontainers/features/node:1": {},
"ghcr.io/devcontainers-contrib/features/npm-package:1": {},
"ghcr.io/devcontainers-contrib/features/jest:2": {},
"ghcr.io/devcontainers-contrib/features/prisma:2": {},
"ghcr.io/guiyomh/features/vim:0": {}
},
// Use this environment variable if you need to bind mount your local source code into a new container.
"remoteEnv": {
"LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}"
},
"hostRequirements": {
"cpus": 4,
"memory": "8gb"
},
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "./deploy/install.sh"
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Configure tool-specific properties.
// "customizations": {},
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}

View File

@ -0,0 +1 @@
🚀 Welcome to Cal.com! Try typing 'yarn dx' to get a quick dev envionment.

View File

@ -293,6 +293,10 @@ Currently Vercel Pro Plan is required to be able to Deploy this application with
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fcalcom%2Fcal.com&env=DATABASE_URL,NEXT_PUBLIC_WEBAPP_URL,NEXTAUTH_URL,NEXTAUTH_SECRET,CRON_API_KEY,CALENDSO_ENCRYPTION_KEY&envDescription=See%20all%20available%20env%20vars&envLink=https%3A%2F%2Fgithub.com%2Fcalcom%2Fcal.com%2Fblob%2Fmain%2F.env.example&project-name=cal&repo-name=cal.com&build-command=cd%20../..%20%26%26%20yarn%20build&root-directory=apps%2Fweb%2F)
### Render
[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/calcom/docker)
<!-- ROADMAP -->
## Roadmap
@ -353,7 +357,6 @@ following
5. Use **Application (client) ID** as the **MS_GRAPH_CLIENT_ID** attribute value in .env
6. Click **Certificates & secrets** create a new client secret and use the value as the **MS_GRAPH_CLIENT_SECRET** attribute
### Obtaining Zoom Client ID and Secret
1. Open [Zoom Marketplace](https://marketplace.zoom.us/) and sign in with your Zoom account.

@ -1 +1 @@
Subproject commit 604d937661ed8f8fd50cc645bf7d129b635333e8
Subproject commit 9c23a8e5ab8ceb1af82beaa850609ed7fdc6a86e

View File

@ -1 +1 @@
14.17
v16

View File

@ -11,9 +11,7 @@ import { APP_NAME, COMPANY_NAME, SUPPORT_MAIL_ADDRESS } from "@calcom/lib/consta
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import { App as AppType } from "@calcom/types/App";
import { Button, Icon, Shell, showToast, SkeletonButton, SkeletonText } from "@calcom/ui";
import HeadSeo from "@components/seo/head-seo";
import { Button, Icon, Shell, showToast, SkeletonButton, SkeletonText, HeadSeo } from "@calcom/ui";
const Component = ({
name,

View File

@ -3,11 +3,7 @@ import { useRouter } from "next/router";
import React, { ComponentProps } from "react";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { EmptyScreen, Icon } from "@calcom/ui";
import Shell from "../Shell";
import type { HorizontalTabItemProps } from "../navigation/tabs/HorizontalTabItem";
import HorizontalTabs from "../navigation/tabs/HorizontalTabs";
import { EmptyScreen, Icon, Shell, HorizontalTabs, HorizontalTabItemProps } from "@calcom/ui";
const tabs: HorizontalTabItemProps[] = [
{

View File

@ -3,11 +3,9 @@ import React, { ComponentProps } from "react";
import AppCategoryNavigation from "@calcom/app-store/_components/AppCategoryNavigation";
import { InstalledAppVariants } from "@calcom/app-store/utils";
import { trpc } from "@calcom/trpc/react";
import { Icon } from "../../../components/icon";
import Shell from "../Shell";
import type { HorizontalTabItemProps } from "../navigation/tabs/HorizontalTabItem";
import type { VerticalTabItemProps } from "../navigation/tabs/VerticalTabItem";
import { Icon, Shell } from "@calcom/ui";
import type { HorizontalTabItemProps } from "@calcom/ui/v2/core/navigation/tabs/HorizontalTabItem";
import type { VerticalTabItemProps } from "@calcom/ui/v2/core/navigation/tabs/VerticalTabItem";
const tabs: (VerticalTabItemProps | HorizontalTabItemProps)[] = [
{

View File

@ -2,9 +2,9 @@ import { useSession } from "next-auth/react";
import { useRouter } from "next/router";
import React, { ComponentProps, useEffect } from "react";
import { ErrorBoundary } from "../../..";
import Shell from "../Shell";
import SettingsLayout from "./SettingsLayout";
import SettingsLayout from "@calcom/features/settings/layouts/SettingsLayout";
import { ErrorBoundary, Shell } from "@calcom/ui";
import { UserPermissionRole } from ".prisma/client";
export default function AdminLayout({

View File

@ -1,10 +1,13 @@
import { getEventLocationType, locationKeyToString } from "@calcom/app-store/locations";
import { classNames } from "@calcom/lib";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Icon, Tooltip } from "@calcom/ui";
import { Props } from "./pages/AvailabilityPage";
export function AvailableEventLocations({ locations }: { locations: Props["eventType"]["locations"] }) {
const { t } = useLocale();
return locations.length ? (
<div className="dark:text-darkgray-600 mr-6 flex w-full flex-col space-y-2 break-words text-sm text-gray-600">
{locations.map((location) => {
@ -27,8 +30,8 @@ export function AvailableEventLocations({ locations }: { locations: Props["event
alt={`${eventLocationType.label} icon`}
/>
)}
<Tooltip content={locationKeyToString(location)}>
<p className="truncate">{locationKeyToString(location)}</p>
<Tooltip content={t(locationKeyToString(location) ?? "")}>
<p className="truncate">{t(locationKeyToString(location) ?? "")}</p>
</Tooltip>
</div>
);

View File

@ -28,7 +28,7 @@ import { getRecurringFreq } from "@calcom/lib/recurringStrings";
import { collectPageParameters, telemetryEventTypes, useTelemetry } from "@calcom/lib/telemetry";
import { detectBrowserTimeFormat, setIs24hClockInLocalStorage, TimeFormat } from "@calcom/lib/timeFormat";
import { trpc } from "@calcom/trpc/react";
import { Icon } from "@calcom/ui";
import { Icon, HeadSeo } from "@calcom/ui";
import { timeZone as localStorageTimeZone } from "@lib/clock";
import useRouterQuery from "@lib/hooks/useRouterQuery";
@ -37,7 +37,6 @@ import Gates, { Gate, GateState } from "@components/Gates";
import AvailableTimes from "@components/booking/AvailableTimes";
import BookingDescription from "@components/booking/BookingDescription";
import TimeOptions from "@components/booking/TimeOptions";
import { HeadSeo } from "@components/seo/head-seo";
import PoweredByCal from "@components/ui/PoweredByCal";
import type { AvailabilityPageProps } from "../../../pages/[user]/[type]";

View File

@ -665,7 +665,7 @@ const BookingPage = ({
defaultChecked={i === 0}
/>
<span className="text-sm ltr:ml-2 ltr:mr-2 rtl:ml-2 dark:text-white">
{locationKeyToString(location)}
{t(locationKeyToString(location) ?? "")}
</span>
</label>
);
@ -689,7 +689,7 @@ const BookingPage = ({
{selectedLocationType === LocationType.Phone
? t("phone_number")
: selectedLocationType === LocationType.AttendeeInPerson
? t("Address")
? t("address")
: ""}
</label>
<div className="mt-1">

View File

@ -169,7 +169,7 @@ export const EventSetupTab = (
alt={`${eventLocationType.label} logo`}
/>
<span className="truncate text-sm ltr:ml-1 rtl:mr-1">
{location[eventLocationType.defaultValueVariable] || eventLocationType.label}
{t(location[eventLocationType.defaultValueVariable] || eventLocationType.label)}
</span>
</div>
<div className="flex">
@ -342,7 +342,7 @@ export const EventSetupTab = (
saveLocation={saveLocation}
defaultValues={formMethods.getValues("locations")}
selection={
selectedLocation ? { value: selectedLocation.value, label: selectedLocation.label } : undefined
selectedLocation ? { value: selectedLocation.value, label: t(selectedLocation.label) } : undefined
}
setSelectedLocation={setSelectedLocation}
setEditingLocationType={setEditingLocationType}

View File

@ -3,7 +3,7 @@ import { useRouter } from "next/router";
import React, { useEffect, useState } from "react";
import { Toaster } from "react-hot-toast";
import { StepCard, Steps } from "../../..";
import { StepCard, Steps } from "@calcom/ui";
export default function WizardLayout({
children,

View File

@ -0,0 +1,4 @@
We don't have many layouts currently however, if they are relevant to a features - please put them in their relvant component folder
in `web/components` if you believe they will be reused in other apps please place them in `packages/features/[feature]`
Thanks Sean 🔥

View File

@ -1,11 +1,9 @@
import classNames from "classnames";
import { APP_NAME, LOGO } from "@calcom/lib/constants";
import { Credits, HeadSeo } from "@calcom/ui";
import Loader from "@components/Loader";
import { HeadSeo } from "@components/seo/head-seo";
import Credits from "../../../../packages/ui/v2/core/Credits";
interface Props {
title: string;

View File

@ -1,6 +1,6 @@
{
"name": "@calcom/web",
"version": "2.4.2",
"version": "2.4.3",
"private": true,
"scripts": {
"analyze": "ANALYZE=true next build",

View File

@ -4,12 +4,10 @@ import { useRouter } from "next/router";
import { useEffect, useState } from "react";
import { COMPANY_NAME, DEVELOPER_DOCS, DOCS_URL, JOIN_SLACK, WEBSITE_URL } from "@calcom/lib/constants";
import { Icon } from "@calcom/ui";
import { Icon, HeadSeo } from "@calcom/ui";
import { useLocale } from "@lib/hooks/useLocale";
import { HeadSeo } from "@components/seo/head-seo";
import { ssgInit } from "@server/lib/ssg";
export default function Custom404() {

View File

@ -27,7 +27,7 @@ import { collectPageParameters, telemetryEventTypes, useTelemetry } from "@calco
import prisma from "@calcom/prisma";
import { baseEventTypeSelect } from "@calcom/prisma/selects";
import { EventTypeMetaDataSchema } from "@calcom/prisma/zod-utils";
import { Icon } from "@calcom/ui";
import { Icon, HeadSeo } from "@calcom/ui";
import { inferSSRProps } from "@lib/types/inferSSRProps";
import { EmbedProps } from "@lib/withEmbedSsr";
@ -37,7 +37,6 @@ import { AvatarSSR } from "@components/ui/AvatarSSR";
import { ssrInit } from "@server/lib/ssr";
const HeadSeo = dynamic(() => import("@components/seo/head-seo"));
export default function User(props: inferSSRProps<typeof getServerSideProps> & EmbedProps) {
const { users, profile, eventTypes, isDynamicGroup, dynamicNames, dynamicUsernames, isSingleUser } = props;
const [user] = users; //To be used when we only have a single user, not dynamic group

View File

@ -7,7 +7,9 @@ import { getSession } from "@calcom/lib/auth";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import type { AppCategories } from "@calcom/prisma/client";
import { inferSSRProps } from "@calcom/types/inferSSRProps";
import { AllApps, AppsLayout, AppStoreCategories, Icon, TextField, TrendingAppsSlider } from "@calcom/ui";
import { AllApps, AppStoreCategories, Icon, TextField, TrendingAppsSlider } from "@calcom/ui";
import AppsLayout from "@components/apps/layouts/AppsLayout";
import { ssgInit } from "@server/lib/ssg";

View File

@ -14,7 +14,6 @@ import {
Button,
EmptyScreen,
Icon,
InstalledAppsLayout,
List,
ShellSubHeading,
AppSkeletonLoader as SkeletonLoader,
@ -24,6 +23,7 @@ import { QueryCell } from "@lib/QueryCell";
import { CalendarListContainer } from "@components/apps/CalendarListContainer";
import IntegrationListItem from "@components/apps/IntegrationListItem";
import InstalledAppsLayout from "@components/apps/layouts/InstalledAppsLayout";
function ConnectOrDisconnectIntegrationButton(props: {
credentialIds: number[];
@ -32,7 +32,7 @@ function ConnectOrDisconnectIntegrationButton(props: {
installed?: boolean;
invalidCredentialIds?: number[];
}) {
const { type, credentialIds, isGlobal, installed, invalidCredentialIds } = props;
const { type, credentialIds, isGlobal, installed } = props;
const { t } = useLocale();
const [credentialId] = credentialIds;

View File

@ -6,7 +6,7 @@ import * as React from "react";
import { useEffect, useState, useRef } from "react";
import z from "zod";
import { WEBAPP_URL } from "@calcom/lib/constants";
import { APP_NAME, WEBAPP_URL } from "@calcom/lib/constants";
import { trpc } from "@calcom/trpc/react";
import { Button, showToast } from "@calcom/ui";
@ -110,7 +110,7 @@ export default function Verify() {
? "Your payment failed"
: sessionId
? "Payment successful!"
: "Verify your email" + " | Cal.com"}
: "Verify your email" + " | " + APP_NAME}
</title>
</Head>
<div className="flex min-h-screen flex-col items-center justify-center px-6">

View File

@ -35,14 +35,13 @@ import { localStorage } from "@calcom/lib/webstorage";
import prisma, { baseUserSelect } from "@calcom/prisma";
import { Prisma } from "@calcom/prisma/client";
import { customInputSchema, EventTypeMetaDataSchema } from "@calcom/prisma/zod-utils";
import { Button, EmailInput, Icon } from "@calcom/ui";
import { Button, EmailInput, Icon, HeadSeo } from "@calcom/ui";
import { timeZone } from "@lib/clock";
import { inferSSRProps } from "@lib/types/inferSSRProps";
import CancelBooking from "@components/booking/CancelBooking";
import EventReservationSchema from "@components/schemas/EventReservationSchema";
import { HeadSeo } from "@components/seo/head-seo";
import { ssrInit } from "@server/lib/ssr";

View File

@ -2,7 +2,9 @@ import { GetServerSidePropsContext } from "next";
import AdminAppsList from "@calcom/features/apps/AdminAppsList";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { getAdminLayout as getLayout, Meta } from "@calcom/ui";
import { Meta } from "@calcom/ui";
import { getLayout } from "@components/auth/layouts/AdminLayout";
import { ssrInit } from "@server/lib/ssr";
@ -11,7 +13,7 @@ function AdminAppsView() {
return (
<>
<Meta title={t("apps")} description={t("admin_apps_description")} />
<AdminAppsList baseURL="/settings/admin/apps" className="w-0" />
<AdminAppsList baseURL="/settings/admin/apps" />
</>
);
}

View File

@ -0,0 +1,2 @@
export { getServerSideProps } from "./[category]";
export { default } from "./[category]";

View File

@ -3,7 +3,9 @@ import { signIn } from "next-auth/react";
import { useRef } from "react";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Button, getAdminLayout as getLayout, Meta, TextField } from "@calcom/ui";
import { Button, Meta, TextField } from "@calcom/ui";
import { getLayout } from "@components/auth/layouts/AdminLayout";
import { ssrInit } from "@server/lib/ssr";

View File

@ -1,6 +1,8 @@
import { GetServerSidePropsContext } from "next";
import { getAdminLayout as getLayout, Meta } from "@calcom/ui";
import { Meta } from "@calcom/ui";
import { getLayout } from "@components/auth/layouts/AdminLayout";
import { ssrInit } from "@server/lib/ssr";

View File

@ -1,7 +1,9 @@
import { GetServerSidePropsContext } from "next";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { getAdminLayout as getLayout, Meta } from "@calcom/ui";
import { Meta } from "@calcom/ui";
import { getLayout } from "@components/auth/layouts/AdminLayout";
import { ssrInit } from "@server/lib/ssr";

View File

@ -3,11 +3,12 @@ import { useRouter } from "next/router";
import { useState } from "react";
import { HelpScout, useChat } from "react-live-chat-loader";
import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout";
import { classNames } from "@calcom/lib";
import { WEBAPP_URL } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import { Button, getSettingsLayout as getLayout, Icon, Meta } from "@calcom/ui";
import { Button, Icon, Meta } from "@calcom/ui";
import { ssrInit } from "@server/lib/ssr";

View File

@ -5,6 +5,7 @@ import { TApiKeys } from "@calcom/ee/api-keys/components/ApiKeyListItem";
import LicenseRequired from "@calcom/ee/common/components/v2/LicenseRequired";
import ApiKeyDialogForm from "@calcom/features/ee/api-keys/components/ApiKeyDialogForm";
import ApiKeyListItem from "@calcom/features/ee/api-keys/components/ApiKeyListItem";
import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout";
import { APP_NAME } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
@ -13,7 +14,6 @@ import {
Dialog,
DialogContent,
EmptyScreen,
getSettingsLayout as getLayout,
Icon,
Meta,
AppSkeletonLoader as SkeletonLoader,

View File

@ -2,6 +2,7 @@ import { GetServerSidePropsContext } from "next";
import { useSession } from "next-auth/react";
import { Controller, useForm } from "react-hook-form";
import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout";
import { APP_NAME } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
@ -10,7 +11,6 @@ import {
Button,
ColorPicker,
Form,
getSettingsLayout as getLayout,
Meta,
showToast,
SkeletonButton,

View File

@ -6,6 +6,7 @@ import { Fragment } from "react";
import DisconnectIntegration from "@calcom/features/apps/components/DisconnectIntegration";
import DestinationCalendarSelector from "@calcom/features/calendars/DestinationCalendarSelector";
import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import {
@ -13,7 +14,6 @@ import {
Badge,
Button,
EmptyScreen,
getSettingsLayout as getLayout,
Icon,
List,
ListItem,

View File

@ -1,6 +1,7 @@
import { GetServerSidePropsContext } from "next";
import { useState } from "react";
import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import {
@ -13,7 +14,6 @@ import {
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
getSettingsLayout as getLayout,
Icon,
List,
ListItem,

View File

@ -3,12 +3,12 @@ import { useRouter } from "next/router";
import { useMemo } from "react";
import { Controller, useForm } from "react-hook-form";
import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { RouterOutputs, trpc } from "@calcom/trpc/react";
import {
Button,
Form,
getSettingsLayout as getLayout,
Label,
Meta,
Select,

View File

@ -5,6 +5,7 @@ import { signOut } from "next-auth/react";
import { BaseSyntheticEvent, useRef, useState } from "react";
import { Controller, useForm } from "react-hook-form";
import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout";
import { ErrorCode } from "@calcom/lib/auth";
import { APP_NAME } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
@ -21,7 +22,6 @@ import {
DialogFooter,
DialogTrigger,
Form,
getSettingsLayout as getLayout,
Icon,
ImageUploader,
Label,

View File

@ -1,18 +1,10 @@
import { GetServerSidePropsContext } from "next";
import { useForm } from "react-hook-form";
import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import {
Button,
Form,
getSettingsLayout as getLayout,
Label,
Meta,
showToast,
Skeleton,
Switch,
} from "@calcom/ui";
import { Button, Form, Label, Meta, showToast, Skeleton, Switch } from "@calcom/ui";
import { ssrInit } from "@server/lib/ssr";

View File

@ -3,10 +3,11 @@ import { GetServerSidePropsContext } from "next";
import { Trans } from "next-i18next";
import { useForm } from "react-hook-form";
import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout";
import { identityProviderNameMap } from "@calcom/lib/auth";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import { Button, Form, getSettingsLayout as getLayout, Meta, PasswordField, showToast } from "@calcom/ui";
import { Button, Form, Meta, PasswordField, showToast } from "@calcom/ui";
import { ssrInit } from "@server/lib/ssr";

View File

@ -1,17 +1,10 @@
import { GetServerSidePropsContext } from "next";
import { useState } from "react";
import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import {
Badge,
getSettingsLayout as getLayout,
Meta,
Switch,
SkeletonButton,
SkeletonContainer,
SkeletonText,
} from "@calcom/ui";
import { Badge, Meta, Switch, SkeletonButton, SkeletonContainer, SkeletonText } from "@calcom/ui";
import DisableTwoFactorModal from "@components/settings/DisableTwoFactorModal";
import EnableTwoFactorModal from "@components/settings/EnableTwoFactorModal";

View File

@ -2,7 +2,8 @@ import Head from "next/head";
import AddNewTeamMembers from "@calcom/features/ee/teams/components/AddNewTeamMembers";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { WizardLayout } from "@calcom/ui";
import WizardLayout from "@components/layouts/WizardLayout";
const OnboardTeamMembersPage = () => {
const { t } = useLocale();

View File

@ -3,7 +3,8 @@ import Head from "next/head";
import { CreateANewTeamForm } from "@calcom/features/ee/teams/components";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { getWizardLayout as getLayout } from "@calcom/ui";
import { getLayout } from "@components/layouts/WizardLayout";
import { ssrInit } from "@server/lib/ssr";

View File

@ -8,8 +8,7 @@ import { isSAMLLoginEnabled } from "@calcom/features/ee/sso/lib/saml";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { collectPageParameters, telemetryEventTypes, useTelemetry } from "@calcom/lib/telemetry";
import { inferSSRProps } from "@calcom/types/inferSSRProps";
import { Alert, Button, EmailField, PasswordField, TextField } from "@calcom/ui";
import { HeadSeo } from "@calcom/web/components/seo/head-seo";
import { Alert, Button, EmailField, PasswordField, TextField, HeadSeo } from "@calcom/ui";
import { asStringOrNull } from "@calcom/web/lib/asStringOrNull";
import { WEBAPP_URL } from "@calcom/web/lib/config/constants";
import prisma from "@calcom/web/lib/prisma";

View File

@ -12,12 +12,11 @@ import { useLocale } from "@calcom/lib/hooks/useLocale";
import useTheme from "@calcom/lib/hooks/useTheme";
import { getTeamWithMembers } from "@calcom/lib/server/queries/teams";
import { collectPageParameters, telemetryEventTypes, useTelemetry } from "@calcom/lib/telemetry";
import { Avatar, Button, Icon } from "@calcom/ui";
import { Avatar, Button, Icon, HeadSeo } from "@calcom/ui";
import { useToggleQuery } from "@lib/hooks/useToggleQuery";
import { inferSSRProps } from "@lib/types/inferSSRProps";
import { HeadSeo } from "@components/seo/head-seo";
import Team from "@components/team/screens/Team";
import AvatarGroup from "@components/ui/AvatarGroup";

View File

@ -4,7 +4,7 @@ import { getSession } from "next-auth/react";
import Head from "next/head";
import { useEffect } from "react";
import { SEO_IMG_OGIMG_VIDEO, WEBSITE_URL } from "@calcom/lib/constants";
import { APP_NAME, SEO_IMG_OGIMG_VIDEO, WEBSITE_URL } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import prisma, { bookingMinimalSelect } from "@calcom/prisma";
import { inferSSRProps } from "@calcom/types/inferSSRProps";
@ -48,18 +48,18 @@ export default function JoinCall(props: JoinCallPageProps) {
return (
<>
<Head>
<title>Cal.com Video</title>
<meta name="title" content="Cal.com Video" />
<title>{APP_NAME} Video</title>
<meta name="title" content={APP_NAME + " Video"} />
<meta name="description" content={t("quick_video_meeting")} />
<meta property="og:image" content={SEO_IMG_OGIMG_VIDEO} />
<meta property="og:type" content="website" />
<meta property="og:url" content={`${WEBSITE_URL}/video`} />
<meta property="og:title" content="Cal.com Video" />
<meta property="og:title" content={APP_NAME + " Video"} />
<meta property="og:description" content={t("quick_video_meeting")} />
<meta property="twitter:image" content={SEO_IMG_OGIMG_VIDEO} />
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:url" content={`${WEBSITE_URL}/video`} />
<meta property="twitter:title" content="Cal.com Video" />
<meta property="twitter:title" content={APP_NAME + " Video"} />
<meta property="twitter:description" content={t("quick_video_meeting")} />
</Head>
<div style={{ zIndex: 2, position: "relative" }}>

View File

@ -4,12 +4,10 @@ import dayjs from "@calcom/dayjs";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { detectBrowserTimeFormat } from "@calcom/lib/timeFormat";
import prisma, { bookingMinimalSelect } from "@calcom/prisma";
import { Button, Icon } from "@calcom/ui";
import { Button, Icon, HeadSeo } from "@calcom/ui";
import { inferSSRProps } from "@lib/types/inferSSRProps";
import { HeadSeo } from "@components/seo/head-seo";
export default function MeetingUnavailable(props: inferSSRProps<typeof getServerSideProps>) {
const { t } = useLocale();

View File

@ -5,9 +5,7 @@ import { useLocale } from "@calcom/lib/hooks/useLocale";
import { detectBrowserTimeFormat } from "@calcom/lib/timeFormat";
import prisma, { bookingMinimalSelect } from "@calcom/prisma";
import type { inferSSRProps } from "@calcom/types/inferSSRProps";
import { Button, Icon } from "@calcom/ui";
import { HeadSeo } from "@components/seo/head-seo";
import { Button, Icon, HeadSeo } from "@calcom/ui";
export default function MeetingNotStarted(props: inferSSRProps<typeof getServerSideProps>) {
const { t } = useLocale();

View File

@ -1,7 +1,5 @@
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Button, Icon } from "@calcom/ui";
import { HeadSeo } from "@components/seo/head-seo";
import { Button, Icon, HeadSeo } from "@calcom/ui";
export default function NoMeetingFound() {
const { t } = useLocale();

View File

@ -457,6 +457,7 @@
"email_address": "عنوان البريد الإلكتروني",
"enter_valid_email": "يرجى إدخال بريد إلكتروني صالح",
"location": "الموقع",
"in_person_attendee_address": "شخصيًا (عنوان من سيحضر)",
"yes": "نعم",
"no": "لا",
"additional_notes": "ملاحظات إضافية",

View File

@ -457,6 +457,7 @@
"email_address": "E-mailová adresa",
"enter_valid_email": "Zadejte platný e-mail",
"location": "Místo",
"in_person_attendee_address": "Osobně (adresa účastníka)",
"yes": "ano",
"no": "ne",
"additional_notes": "Doplňující poznámky",

View File

@ -456,6 +456,9 @@
"email_address": "E-Mail Adresse",
"enter_valid_email": "Bitte geben Sie eine gültige Emaildresse ein",
"location": "Ort",
"address": "Adresse",
"enter_address": "Geben Sie eine Adresse ein",
"in_person_attendee_address": "In Person (Adresse von Ihnen)",
"yes": "Ja",
"no": "Nein",
"additional_notes": "Zusätzliche Notizen",

View File

@ -460,6 +460,9 @@
"email_address": "Email address",
"enter_valid_email": "Please enter a valid email",
"location": "Location",
"address": "Address",
"enter_address": "Enter address",
"in_person_attendee_address": "In Person (Attendee Address)",
"yes": "yes",
"no": "no",
"additional_notes": "Additional notes",

View File

@ -457,6 +457,7 @@
"email_address": "Email",
"enter_valid_email": "Ingresa un correo electrónico válido",
"location": "Ubicación",
"in_person_attendee_address": "En persona (dirección del asistente)",
"yes": "Sí",
"no": "No",
"additional_notes": "Notas Adicionales",

View File

@ -457,6 +457,7 @@
"email_address": "Adresse e-mail",
"enter_valid_email": "Veuillez saisir une adresse e-mail valide",
"location": "Localisation",
"in_person_attendee_address": "En personne (adresse du participant)",
"yes": "oui",
"no": "non",
"additional_notes": "Notes additionnelles",

View File

@ -457,6 +457,7 @@
"email_address": "כתובת דוא\"ל",
"enter_valid_email": "יש להזין כתובת דוא״ל תקינה",
"location": "מיקום",
"in_person_attendee_address": "פנים-אל-פנים (הכתובת של המשתתף/ת)",
"yes": "כן",
"no": "לא",
"additional_notes": "הערות נוספות",

View File

@ -457,6 +457,7 @@
"email_address": "Indirizzo email",
"enter_valid_email": "Immettere un indirizzo e-mail valido",
"location": "Luogo",
"in_person_attendee_address": "Di persona (indirizzo del partecipante)",
"yes": "sì",
"no": "no",
"additional_notes": "Note aggiuntive",

View File

@ -457,6 +457,7 @@
"email_address": "メールアドレス",
"enter_valid_email": "有効なメールアドレスを入力してください",
"location": "所在地",
"in_person_attendee_address": "対面(出席者のアドレス)",
"yes": "はい",
"no": "いいえ",
"additional_notes": "追加メモ",

View File

@ -457,6 +457,7 @@
"email_address": "이메일 주소",
"enter_valid_email": "유효한 이메일을 입력하세요",
"location": "위치",
"in_person_attendee_address": "직접 방문(참석자 주소)",
"yes": "네",
"no": "아니요",
"additional_notes": "추가 참고 사항",

View File

@ -457,6 +457,7 @@
"email_address": "E-mail adres",
"enter_valid_email": "Voer een geldig e-mailadres in",
"location": "Locatie",
"in_person_attendee_address": "Persoonlijk (adres deelnemer)",
"yes": "ja",
"no": "nee",
"additional_notes": "Aanvullende notities",

View File

@ -460,6 +460,7 @@
"email_address": "Epost adresse",
"enter_valid_email": "Vennligst skriv inn en gyldig e-postadresse",
"location": "Sted",
"in_person_attendee_address": "Personlig Oppmøte (Deltakers Adresse)",
"yes": "ja",
"no": "nei",
"additional_notes": "Tilleggsinformasjon",

View File

@ -457,6 +457,7 @@
"email_address": "Adres e-mail",
"enter_valid_email": "Wprowadź prawidłowy adres e-mail",
"location": "Lokalizacja",
"in_person_attendee_address": "Osobiście (adres uczestnika)",
"yes": "tak",
"no": "nie",
"additional_notes": "Dotatkowe uwagi",

View File

@ -457,6 +457,7 @@
"email_address": "Endereço de e-mail",
"enter_valid_email": "Insira um e-mail válido",
"location": "Local",
"in_person_attendee_address": "Pessoalmente (endereço do participante)",
"yes": "sim",
"no": "não",
"additional_notes": "Observações adicionais",

View File

@ -457,6 +457,7 @@
"email_address": "Endereço de email",
"enter_valid_email": "Insira um e-mail válido",
"location": "Localização",
"in_person_attendee_address": "Pessoalmente (endereço do participante)",
"yes": "Sim",
"no": "Não",
"additional_notes": "Notas Adicionais",

View File

@ -457,6 +457,7 @@
"email_address": "Adresa de e-mail",
"enter_valid_email": "Introduceți un e-mail valid",
"location": "Locaţie",
"in_person_attendee_address": "În persoană (adresă participant)",
"yes": "da",
"no": "nu",
"additional_notes": "Date suplimentare",

View File

@ -457,6 +457,7 @@
"email_address": "Адрес электронной почты",
"enter_valid_email": "Укажите допустимый адрес электронной почты",
"location": "Местоположение",
"in_person_attendee_address": "Лично (адрес участника)",
"yes": "да",
"no": "нет",
"additional_notes": "Дополнительная информация",

View File

@ -457,6 +457,7 @@
"email_address": "E-pošta",
"enter_valid_email": "Unesite važeću imejl adresu",
"location": "Lokacija",
"in_person_attendee_address": "Lično (adresa polaznika)",
"yes": "da",
"no": "ne",
"additional_notes": "Dodatne beleške",

View File

@ -457,6 +457,7 @@
"email_address": "E-postadress",
"enter_valid_email": "Ange en giltig e-postadress",
"location": "Plats",
"in_person_attendee_address": "Personligen (deltagandeadress)",
"yes": "ja",
"no": "nej",
"additional_notes": "Ytterligare noteringar",

View File

@ -457,6 +457,7 @@
"email_address": "E-posta adresi",
"enter_valid_email": "Lütfen geçerli bir e-posta adresi girin",
"location": "Konum",
"in_person_attendee_address": "Şahsen (Katılımcı Adresi)",
"yes": "evet",
"no": "hayır",
"additional_notes": "Ek notlar",

View File

@ -457,6 +457,7 @@
"email_address": "Електронна адреса",
"enter_valid_email": "Введіть дійсну адресу електронної пошти",
"location": "Розташування",
"in_person_attendee_address": "Особисто (адреса відвідувача)",
"yes": "так",
"no": "ні",
"additional_notes": "Додаткові примітки",

View File

@ -457,6 +457,7 @@
"email_address": "Địa chỉ email",
"enter_valid_email": "Vui lòng điền vào email hợp lệ",
"location": "Vị trí",
"in_person_attendee_address": "Đích thân (địa chỉ người tham gia)",
"yes": "có",
"no": "không",
"additional_notes": "Ghi chú bổ sung",

View File

@ -457,6 +457,7 @@
"email_address": "邮箱地址",
"enter_valid_email": "请输入有效的电子邮件",
"location": "位置",
"in_person_attendee_address": "本人(参与者地址)",
"yes": "是",
"no": "否",
"additional_notes": "附加备注",

View File

@ -457,6 +457,7 @@
"email_address": "電子郵件位址",
"enter_valid_email": "請輸入有效的電子郵件",
"location": "地點",
"in_person_attendee_address": "親自赴會 (與會者地址)",
"yes": "是",
"no": "否",
"additional_notes": "額外提醒",

File diff suppressed because it is too large Load Diff

@ -1 +1 @@
Subproject commit ba98a7c98071a06520e5add215ecd2d360f31b95
Subproject commit ebcc470ae19e41e6bee6d1f31af42379f24eefcb

9
deploy/codespaces/install.sh Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash
set -xeuf -o pipefail
# exit this file if we are not in Codespaces
if [ -z "${CODESPACES}" ]; then
exit 0
fi
echo "echo \"🚀 Welcome to Cal.com! Try typing 'yarn dx' to get a quick dev envionment.\"" >> ~/.bashrc

10
deploy/install.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
set -xeuf -o pipefail
cp .env.example .env
sed -i 's|NEXTAUTH_SECRET=.*|NEXTAUTH_SECRET='"$(openssl rand -base64 32)"'|g' .env
sed -i 's|CALENDSO_ENCRYPTION_KEY=.*|CALENDSO_ENCRYPTION_KEY='"$(openssl rand -base64 32)"'|g' .env
yarn
./deploy/codespaces/install.sh

View File

@ -20,7 +20,7 @@ const AppCategoryNavigation = ({
fromAdmin?: boolean;
}) => {
const [animationRef] = useAutoAnimate<HTMLDivElement>();
const appCategories = useMemo(() => getAppCategories(baseURL, fromAdmin), [baseURL, fromAdmin]);
const appCategories = useMemo(() => getAppCategories(baseURL), [baseURL]);
return (
<div className={classNames("flex flex-col p-2 md:p-0 xl:flex-row", className)}>

View File

@ -1,10 +1,13 @@
import { WEBAPP_URL } from "@calcom/lib/constants";
import { Icon } from "@calcom/ui";
function getHref(baseURL: string, category: string, useQueryParam: boolean) {
return useQueryParam ? `${baseURL}&category=${category}` : `${baseURL}/${category}`;
const baseUrlParsed = new URL(baseURL, WEBAPP_URL);
baseUrlParsed.searchParams.set("category", category);
return useQueryParam ? `${baseUrlParsed.toString()}` : `${baseURL}/${category}`;
}
const getAppCategories = (baseURL: string, useQueryParam = false) => {
const getAppCategories = (baseURL: string, useQueryParam = true) => {
return [
{
name: "calendar",

View File

@ -13,8 +13,8 @@ import {
AppUser,
} from "@calcom/types/AppGetServerSideProps";
import {
Alert,
Button,
Banner,
Badge,
ButtonGroup,
Dialog,
@ -362,14 +362,14 @@ function SingleForm({ form, appUrl, Page }: SingleFormComponentProps) {
</Button>
</div>
{!form._count?.responses && (
<Banner
className="mt-6"
variant="neutral"
title="No Responses yet"
description="Wait for some time for responses to be collected. You can go and submit the form yourself as well."
Icon={Icon.FiInfo}
onDismiss={() => console.log("dismissed")}
/>
<>
<Alert
className="mt-6"
severity="neutral"
title="No responses yet"
message="Wait for some time for responses to be collected. You can go and submit the form yourself as well."
/>
</>
)}
</div>
<div className="w-full rounded-md border border-gray-200 p-8">

View File

@ -64,12 +64,12 @@ export const defaultLocations: DefaultEventLocationType[] = [
{
default: true,
type: DefaultEventLocationTypeEnum.AttendeeInPerson,
label: "In Person (Attendee Address)",
label: "in_person_attendee_address",
variable: "address",
organizerInputType: null,
messageForOrganizer: "Cal will ask your invitee to enter an address before scheduling.",
attendeeInputType: "attendeeAddress",
attendeeInputPlaceholder: `Enter Address`,
attendeeInputPlaceholder: "enter_address",
defaultValueVariable: "attendeeAddress",
iconUrl: "/map-pin.svg",
category: "in person",

View File

@ -1,3 +1,5 @@
import { APP_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import AttendeeScheduledEmail from "./attendee-scheduled-email";
@ -14,7 +16,7 @@ export default class AttendeeRequestEmail extends AttendeeScheduledEmail {
}
return {
from: `Cal.com <${this.getMailerOptions().from}>`,
from: `${APP_NAME} <${this.getMailerOptions().from}>`,
to: toAddresses.join(","),
subject: `${this.calEvent.attendees[0].language.translate("booking_submitted_subject", {
eventType: this.calEvent.type,

View File

@ -2,6 +2,7 @@ import { createEvent, DateArray, Person } from "ics";
import dayjs from "@calcom/dayjs";
import { getManageLink } from "@calcom/lib/CalEventParser";
import { APP_NAME } from "@calcom/lib/constants";
import type { CalendarEvent } from "@calcom/types/Calendar";
import { renderEmail } from "..";
@ -21,7 +22,7 @@ export default class AttendeeWasRequestedToRescheduleEmail extends OrganizerSche
filename: "event.ics",
content: this.getiCalEventAsString(),
},
from: `Cal.com <${this.getMailerOptions().from}>`,
from: `${APP_NAME} <${this.getMailerOptions().from}>`,
to: toAddresses.join(","),
subject: `${this.t("requested_to_reschedule_subject_attendee", {
eventType: this.calEvent.type,

View File

@ -1,3 +1,5 @@
import { APP_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
@ -14,7 +16,7 @@ export default class OrganizerCancelledEmail extends OrganizerScheduledEmail {
}
return {
from: `Cal.com <${this.getMailerOptions().from}>`,
from: `${APP_NAME} <${this.getMailerOptions().from}>`,
to: toAddresses.join(","),
subject: `${this.t("event_cancelled_subject", {
eventType: this.calEvent.type,

View File

@ -1,3 +1,5 @@
import { APP_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
@ -18,7 +20,7 @@ export default class OrganizerLocationChangeEmail extends OrganizerScheduledEmai
filename: "event.ics",
content: this.getiCalEventAsString(),
},
from: `Cal.com <${this.getMailerOptions().from}>`,
from: `${APP_NAME} <${this.getMailerOptions().from}>`,
to: toAddresses.join(","),
subject: `${this.t("location_changed_event_type_subject", {
eventType: this.calEvent.type,

View File

@ -1,3 +1,5 @@
import { APP_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
@ -14,7 +16,7 @@ export default class OrganizerPaymentRefundFailedEmail extends OrganizerSchedule
}
return {
from: `Cal.com <${this.getMailerOptions().from}>`,
from: `${APP_NAME} <${this.getMailerOptions().from}>`,
to: toAddresses.join(","),
subject: `${this.t("refund_failed_subject", {
eventType: this.calEvent.type,

View File

@ -1,3 +1,5 @@
import { APP_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
@ -14,7 +16,7 @@ export default class OrganizerRequestEmail extends OrganizerScheduledEmail {
}
return {
from: `Cal.com <${this.getMailerOptions().from}>`,
from: `${APP_NAME} <${this.getMailerOptions().from}>`,
to: toAddresses.join(","),
subject: `${this.t("event_awaiting_approval_subject", {
eventType: this.calEvent.type,

View File

@ -1,3 +1,5 @@
import { APP_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import OrganizerRequestEmail from "./organizer-request-email";
@ -14,7 +16,7 @@ export default class OrganizerRequestReminderEmail extends OrganizerRequestEmail
}
return {
from: `Cal.com <${this.getMailerOptions().from}>`,
from: `${APP_NAME} <${this.getMailerOptions().from}>`,
to: toAddresses.join(","),
subject: `${this.t("event_awaiting_approval_subject", {
eventType: this.calEvent.type,

View File

@ -2,6 +2,7 @@ import { createEvent, DateArray, Person } from "ics";
import dayjs from "@calcom/dayjs";
import { getRichDescription } from "@calcom/lib/CalEventParser";
import { APP_NAME } from "@calcom/lib/constants";
import type { CalendarEvent } from "@calcom/types/Calendar";
import { renderEmail } from "..";
@ -21,7 +22,7 @@ export default class OrganizerRequestedToRescheduleEmail extends OrganizerSchedu
filename: "event.ics",
content: this.getiCalEventAsString(),
},
from: `Cal.com <${this.getMailerOptions().from}>`,
from: `${APP_NAME} <${this.getMailerOptions().from}>`,
to: toAddresses.join(","),
subject: `${this.t("rescheduled_event_type_subject", {
eventType: this.calEvent.type,

View File

@ -1,3 +1,5 @@
import { APP_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
@ -18,7 +20,7 @@ export default class OrganizerRescheduledEmail extends OrganizerScheduledEmail {
filename: "event.ics",
content: this.getiCalEventAsString(),
},
from: `Cal.com <${this.getMailerOptions().from}>`,
from: `${APP_NAME} <${this.getMailerOptions().from}>`,
to: toAddresses.join(","),
subject: `${this.calEvent.organizer.language.translate("event_type_has_been_rescheduled_on_time_date", {
eventType: this.calEvent.type,

View File

@ -31,7 +31,7 @@ And from another terminal you can run the following command to execute tests:
yarn embed-tests-quick
```
Note: `getEmbedIframe` and `addEmbedListeners` work as a team but they only support opening up embed in a fresh load. Opening an embed closing it and then opening another embed isn't supported yet.
Note: `getEmbedIframe` and `addEmbedListeners` work as a team but they only support opening up embed in a fresh load. Opening an embed closing it and then opening another embed isn't supported yet.
## Shipping to Production

View File

@ -187,7 +187,7 @@ const AdminAppsList = ({ baseURL, className }: { baseURL: string; className?: st
<AppCategoryNavigation
baseURL={baseURL}
fromAdmin
containerClassname="w-full xl:ml-5 max-h-97 overflow-scroll"
containerClassname="w-full xl:mx-5 xl:w-2/3 xl:pr-5"
className={className}>
<AdminAppsListContainer />
</AppCategoryNavigation>

View File

@ -2,8 +2,9 @@ import { useRouter } from "next/router";
import { HOSTED_CAL_FEATURES } from "@calcom/lib/constants";
import { trpc } from "@calcom/trpc/react";
import { getSettingsLayout as getLayout, AppSkeletonLoader } from "@calcom/ui";
import { AppSkeletonLoader as SkeletonLoader } from "@calcom/ui";
import { getLayout } from "../../../settings/layouts/SettingsLayout";
import SAMLConfiguration from "../components/SAMLConfiguration";
const SAMLSSO = () => {
@ -25,7 +26,7 @@ const SAMLSSO = () => {
);
if (isLoading) {
return <AppSkeletonLoader />;
return <SkeletonLoader />;
}
if (!team) {

View File

@ -1,8 +1,8 @@
import { useRouter } from "next/router";
import { HOSTED_CAL_FEATURES } from "@calcom/lib/constants";
import { getSettingsLayout as getLayout } from "@calcom/ui";
import { getLayout } from "../../../settings/layouts/SettingsLayout";
import SAMLConfiguration from "../components/SAMLConfiguration";
const SAMLSSO = () => {

View File

@ -5,7 +5,9 @@ import { Controller, useForm } from "react-hook-form";
import { APP_NAME } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import { Button, Form, getSettingsLayout as getLayout, Meta, showToast, Switch } from "@calcom/ui";
import { Button, Form, Meta, showToast, Switch } from "@calcom/ui";
import { getLayout } from "../../../settings/layouts/SettingsLayout";
interface TeamAppearanceValues {
hideBranding: boolean;

View File

@ -2,7 +2,9 @@ import { useRouter } from "next/router";
import { WEBAPP_URL } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Button, getSettingsLayout as getLayout, Icon, Meta } from "@calcom/ui";
import { Button, Icon, Meta } from "@calcom/ui";
import { getLayout } from "../../../settings/layouts/SettingsLayout";
const BillingView = () => {
const { t } = useLocale();

View File

@ -1,6 +1,7 @@
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { getSettingsLayout as getLayout, Meta } from "@calcom/ui";
import { Meta } from "@calcom/ui";
import { getLayout } from "../../../settings/layouts/SettingsLayout";
import { TeamsListing } from "../components";
const BillingView = () => {

View File

@ -5,8 +5,9 @@ import { useState } from "react";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import { Button, getSettingsLayout as getLayout, Icon, Meta, showToast } from "@calcom/ui";
import { Button, Icon, Meta, showToast } from "@calcom/ui";
import { getLayout } from "../../../settings/layouts/SettingsLayout";
import DisableTeamImpersonation from "../components/DisableTeamImpersonation";
import MemberInvitationModal from "../components/MemberInvitationModal";
import MemberListItem from "../components/MemberListItem";

View File

@ -19,7 +19,6 @@ import {
Dialog,
DialogTrigger,
Form,
getSettingsLayout as getLayout,
Icon,
ImageUploader,
Label,
@ -30,6 +29,8 @@ import {
TextField,
} from "@calcom/ui";
import { getLayout } from "../../../settings/layouts/SettingsLayout";
const regex = new RegExp("^[a-zA-Z0-9-]*$");
const teamProfileFormSchema = z.object({

View File

@ -1,4 +1,5 @@
import dayjs from "@calcom/dayjs";
import { APP_NAME } from "@calcom/lib/constants";
const emailReminderTemplate = (
startTime: string,
@ -32,7 +33,7 @@ const emailReminderTemplate = (
const attendeeHtml = `<div style="font-weight: bold;">Attendees:</div>You & ${attendee}<br><br>`;
const endingHtml = `This reminder was triggered by a Workflow in Cal.<br><br>_<br><br>Scheduling by Cal.com</body>`;
const endingHtml = `This reminder was triggered by a Workflow in Cal.<br><br>_<br><br>Scheduling by ${APP_NAME}</body>`;
const templateBodyHtml = introHtml + eventHtml + dateTimeHtml + attendeeHtml + endingHtml;

View File

@ -8,6 +8,8 @@ const originalVariables = [
"event_time_variable",
"location_variable",
"additional_notes_variable",
"attendee_email_variable",
"meeting_url_variable",
];
export function getTranslatedText(text: string, language: { locale: string; t: TFunction }) {

View File

@ -10,14 +10,17 @@ import { HOSTED_CAL_FEATURES, WEBAPP_URL } from "@calcom/lib/constants";
import { getPlaceholderAvatar } from "@calcom/lib/defaultAvatarImage";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import { Skeleton } from "@calcom/ui";
import { Badge, Button, ErrorBoundary } from "../../..";
import { Icon } from "../../../components/icon";
import { useMeta } from "../Meta";
import Shell from "../Shell";
import { VerticalTabItemProps } from "../navigation/tabs/VerticalTabItem";
import { VerticalTabItem } from "../navigation/tabs/VerticalTabs";
import {
Badge,
Button,
ErrorBoundary,
Icon,
VerticalTabItemProps,
VerticalTabItem,
Shell,
Skeleton,
useMeta,
} from "@calcom/ui";
const tabs: VerticalTabItemProps[] = [
{
@ -164,11 +167,11 @@ const SettingsSidebarContainer = ({
return (
<nav
className={classNames(
"no-scrollbar fixed top-0 bottom-0 z-10 flex max-h-screen w-56 flex-col space-y-1 overflow-x-hidden overflow-y-scroll bg-gray-50 px-2 pb-3 transition-transform ltr:left-0 rtl:right-0 lg:sticky lg:flex",
"no-scrollbar fixed left-0 top-0 z-10 flex max-h-screen w-56 flex-col space-y-1 overflow-x-hidden overflow-y-scroll bg-gray-50 px-2 pb-3 transition-transform lg:sticky lg:flex",
className,
navigationIsOpenedOnMobile
? "translate-x-0 opacity-100"
: "opacity-0 ltr:-translate-x-full rtl:translate-x-full lg:translate-x-0 lg:opacity-100"
? "opacity-0 ltr:-translate-x-full rtl:translate-x-full lg:translate-x-0 lg:opacity-100"
: "-translate-x-full opacity-0 lg:translate-x-0 lg:opacity-100"
)}
aria-label="Tabs">
<>

View File

@ -1,6 +1,7 @@
import { useAutoAnimate } from "@formkit/auto-animate/react";
import { useEffect, useState } from "react";
import { APP_NAME } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { localStorage } from "@calcom/lib/webstorage";
import { Card } from "@calcom/ui";
@ -43,7 +44,7 @@ export const tips = [
thumbnailUrl: "https://img.youtube.com/vi/0v_nQtpxC_4/0.jpg",
mediaLink: "https://go.cal.com/payments-video",
title: "Accept Payments",
description: "Charge for your time with Cal.com's Stripe App",
description: "Charge for your time with " + APP_NAME + "'s Stripe App",
href: "https://app.cal.com/apps/stripe",
},
{

Some files were not shown because too many files have changed in this diff Show More