Fixed merge conflicts

This commit is contained in:
Alex van Andel 2022-09-29 16:26:39 +01:00
commit b49d7d335d
53 changed files with 514 additions and 222 deletions

View File

@ -365,20 +365,8 @@ function BookingListItem(booking: BookingItemProps) {
</div>
)}
</div>
<div className="flex justify-end sm:hidden">
<div className="whitespace-nowrap pt-2 pb-4 text-right text-sm font-medium ltr:pr-4 rtl:pl-4">
{isUpcoming && !isCancelled ? (
<>
{isPending && user?.id === booking.user?.id && <TableActions actions={pendingActions} />}
{isConfirmed && <TableActions actions={bookedActions} />}
{isRejected && <div className="text-sm text-gray-500">{t("rejected")}</div>}
</>
) : null}
{isPast && isPending && !isConfirmed ? <TableActions actions={bookedActions} /> : null}
</div>
</div>
</td>
<td className="hidden whitespace-nowrap py-4 text-right text-sm font-medium ltr:pr-4 rtl:pl-4 sm:block">
<td className="whitespace-nowrap py-4 pl-4 text-right text-sm font-medium ltr:pr-4 rtl:pl-4 sm:pl-0">
{isUpcoming && !isCancelled ? (
<>
{isPending && user?.id === booking.user?.id && <TableActions actions={pendingActions} />}

View File

@ -176,7 +176,7 @@ const SlotPicker = ({
<DatePicker
isLoading={isLoading}
className={classNames(
"mt-8 w-full px-4 sm:mt-0 sm:min-w-[455px] md:px-5",
"mt-8 w-full px-4 pb-4 sm:mt-0 sm:min-w-[455px] md:px-5",
selectedDate
? "sm:dark:border-darkgray-200 border-gray-200 sm:w-1/2 sm:border-r sm:p-4 sm:pr-6 md:w-1/3"
: "sm:p-4"
@ -393,7 +393,9 @@ const AvailabilityPage = ({ profile, eventType }: Props) => {
<div
style={availabilityDatePickerEmbedStyles}
className={classNames(
isBackgroundTransparent ? "" : "dark:bg-darkgray-100 sm:dark:border-darkgray-300 bg-white",
isBackgroundTransparent
? ""
: "dark:bg-darkgray-100 sm:dark:border-darkgray-300 bg-white pb-4 md:pb-0",
"border-bookinglightest overflow-hidden rounded-md md:border",
isEmbed ? "mx-auto" : maxWidth
)}>

View File

@ -445,7 +445,6 @@ const BookingPage = ({
<div
className={classNames(
"main overflow-hidden",
isEmbed ? "" : "border border-gray-200",
isBackgroundTransparent ? "" : "dark:border-1 dark:bg-darkgray-100 bg-white",
"dark:border-darkgray-300 rounded-md sm:border"
)}>

View File

@ -1,50 +1,48 @@
import { useState } from "react";
import classNames from "classnames";
import React, { useState } from "react";
import { ControllerRenderProps } from "react-hook-form";
import { Icon } from "@calcom/ui/Icon";
const EditableHeading = ({
title,
const EditableHeading = function EditableHeading({
value,
onChange,
placeholder = "",
readOnly = false,
isReady,
...passThroughProps
}: {
title: string;
onChange?: (value: string) => void;
placeholder?: string;
readOnly?: boolean;
}) => {
isReady?: boolean;
} & Omit<JSX.IntrinsicElements["input"], "name" | "onChange"> &
ControllerRenderProps) {
const [isEditing, setIsEditing] = useState(false);
const enableEditing = () => !readOnly && setIsEditing(true);
const enableEditing = () => setIsEditing(true);
return (
<div className="group relative cursor-pointer" onClick={enableEditing}>
{!isEditing ? (
<>
<h1
style={{ fontSize: 22, letterSpacing: "-0.0009em" }}
className="inline pl-0 normal-case text-gray-900 focus:text-black group-hover:text-gray-500">
{title}
</h1>
{!readOnly ? (
<Icon.FiEdit2 className="ml-1 -mt-1 inline h-4 w-4 text-gray-700 group-hover:text-gray-500" />
) : null}
</>
) : (
<div style={{ marginBottom: -11 }}>
<div className="flex items-center">
<label className="min-w-8 relative inline-block">
<span className="whitespace-pre text-xl tracking-normal text-transparent">{value}&nbsp;</span>
{!isEditing && isReady && (
<Icon.FiEdit2 className="ml-1 inline h-4 w-4 align-top text-gray-700 group-hover:text-gray-500" />
)}
<input
{...passThroughProps}
type="text"
autoFocus
style={{ top: -6, fontSize: 22 }}
value={value}
required
className="relative h-10 w-full cursor-pointer border-none bg-transparent pl-0 text-gray-900 hover:text-gray-700 focus:text-black focus:outline-none focus:ring-0"
placeholder={placeholder}
defaultValue={title}
className={classNames(
"absolute top-0 left-0 w-full cursor-pointer border-none bg-transparent p-0 align-top text-xl text-gray-900 hover:text-gray-700 focus:text-black focus:outline-none focus:ring-0"
)}
onFocus={(e) => {
setIsEditing(true);
passThroughProps.onFocus && passThroughProps.onFocus(e);
}}
onBlur={(e) => {
setIsEditing(false);
onChange && onChange(e.target.value);
passThroughProps.onBlur && passThroughProps.onBlur(e);
}}
onChange={(e) => onChange && onChange(e.target.value)}
/>
</div>
)}
</label>
</div>
</div>
);
};

View File

@ -66,7 +66,7 @@ const Component = ({
return (
<div className="relative flex-1 flex-col items-start justify-start px-4 md:flex md:px-8 lg:flex-row lg:px-0">
{hasImages && (
<div className="flex-2 mb-4 -ml-4 -mr-4 flex min-h-[450px] w-auto min-w-[672px] snap-x snap-mandatory flex-row overflow-auto whitespace-nowrap bg-gray-100 p-4 md:mb-8 md:-ml-8 md:-mr-8 md:p-8 lg:mx-0 lg:mb-0 lg:max-w-2xl lg:flex-col lg:rounded-md">
<div className="flex-2 mb-4 -ml-4 -mr-4 flex min-h-[450px] w-auto snap-x snap-mandatory flex-row overflow-auto whitespace-nowrap bg-gray-100 p-4 md:mb-8 md:-ml-8 md:-mr-8 md:p-8 lg:mx-0 lg:mb-0 lg:max-w-2xl lg:flex-col lg:rounded-md">
{images ? (
images.map((img) => (
<img

View File

@ -32,7 +32,7 @@ function IntegrationListItem(props: {
<ListItem
expanded={!!props.children}
className={classNames(
"my-0 flex-col rounded-md border transition-colors duration-500",
"my-0 flex-col border transition-colors duration-500 first:rounded-t-md last:rounded-b-md",
highlight ? "bg-yellow-100" : ""
)}>
<div className={classNames("flex w-full flex-1 items-center space-x-2 p-4 rtl:space-x-reverse")}>

View File

@ -1,3 +1,4 @@
import classNames from "classnames";
import React from "react";
import { SkeletonText } from "@calcom/ui/v2";
@ -32,9 +33,13 @@ function SkeletonItem() {
);
}
export const AvailabilitySelectSkeletonLoader = () => {
export const SelectSkeletonLoader = ({ className }: { className?: string }) => {
return (
<li className="group flex w-full items-center justify-between rounded-sm border border-gray-200 px-[10px] py-3">
<li
className={classNames(
"group flex w-full items-center justify-between rounded-sm border border-gray-200 px-[10px] py-3",
className
)}>
<div className="flex-grow truncate text-sm">
<div className="flex justify-between">
<SkeletonText className="h-4 w-32" />

View File

@ -11,7 +11,7 @@ import Button from "@calcom/ui/v2/core/Button";
import Select from "@calcom/ui/v2/core/form/Select";
import { SkeletonText } from "@calcom/ui/v2/core/skeleton";
import { AvailabilitySelectSkeletonLoader } from "@components/v2/availability/SkeletonLoader";
import { SelectSkeletonLoader } from "@components/v2/availability/SkeletonLoader";
type AvailabilityOption = {
label: string;
@ -30,7 +30,7 @@ const AvailabilitySelect = ({
}) => {
const { data, isLoading } = trpc.useQuery(["viewer.availability.list"]);
if (isLoading) {
return <AvailabilitySelectSkeletonLoader />;
return <SelectSkeletonLoader />;
}
const schedules = data?.schedules || [];

View File

@ -157,7 +157,7 @@ function EventTypeSingleLayout({
return (
<Shell
backPath="/event-types"
title={t("event_type_title", { eventTypeTitle: eventType.title })}
title={eventType.title + " | " + t("event_type")}
heading={eventType.title}
subtitle={eventType.description || ""}
CTA={

View File

@ -76,7 +76,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
});
// get user's credentials + their connected integrations
const calendarCredentials = getCalendarCredentials(user.credentials, user.id);
const calendarCredentials = getCalendarCredentials(user.credentials);
// get all the connected integrations' calendars (from third party)
const connectedCalendars = await getConnectedCalendars(calendarCredentials, user.selectedCalendars);
const calendars = connectedCalendars.flatMap((c) => c.calendars).filter(notEmpty);

View File

@ -1,5 +1,6 @@
import { CheckIcon } from "@heroicons/react/solid";
import { zodResolver } from "@hookform/resolvers/zod";
import classNames from "classnames";
import { useRouter } from "next/router";
import { useState } from "react";
import { Controller, FormProvider, useForm } from "react-hook-form";
@ -9,7 +10,7 @@ import { isPasswordValid } from "@calcom/lib/auth";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import prisma from "@calcom/prisma";
import { inferSSRProps } from "@calcom/types/inferSSRProps";
import { TextField, EmailField, PasswordField } from "@calcom/ui/v2";
import { TextField, EmailField, PasswordField, Label } from "@calcom/ui/v2";
import WizardForm from "@calcom/ui/v2/core/WizardForm";
const StepDone = () => {
@ -85,6 +86,8 @@ const SetupFormStep1 = (props: { setIsLoading: (val: boolean) => void }) => {
}
}, onError);
const longWebsiteUrl = process.env.NEXT_PUBLIC_WEBSITE_URL.length > 30;
return (
<FormProvider {...formMethods}>
<form id="setup-step-1" name="setup-step-1" className="space-y-4" onSubmit={onSubmit}>
@ -93,22 +96,36 @@ const SetupFormStep1 = (props: { setIsLoading: (val: boolean) => void }) => {
name="username"
control={formMethods.control}
render={({ field: { onBlur, onChange, value } }) => (
<TextField
addOnLeading={
<span className="items-centerpx-3 inline-flex rounded-none text-sm text-gray-500">
{process.env.NEXT_PUBLIC_WEBSITE_URL}/
</span>
}
value={value || ""}
className="my-0"
onBlur={onBlur}
name="username"
onChange={async (e) => {
onChange(e.target.value);
formMethods.setValue("username", e.target.value);
await formMethods.trigger("username");
}}
/>
<>
<Label htmlFor="username" className={classNames(longWebsiteUrl && "mb-0")}>
<span className="block">{t("username")}</span>
{longWebsiteUrl && (
<small className="items-centerpx-3 mt-2 inline-flex rounded-t-md border border-b-0 border-gray-300 bg-gray-100 py-1 px-3 text-gray-500">
{process.env.NEXT_PUBLIC_WEBSITE_URL}
</small>
)}
</Label>
<TextField
addOnLeading={
!longWebsiteUrl && (
<span className="items-centerpx-3 inline-flex rounded-none text-sm text-gray-500">
{process.env.NEXT_PUBLIC_WEBSITE_URL}/
</span>
)
}
id="username"
labelSrOnly={true}
value={value || ""}
className={classNames("my-0", longWebsiteUrl && "rounded-t-none")}
onBlur={onBlur}
name="username"
onChange={async (e) => {
onChange(e.target.value);
formMethods.setValue("username", e.target.value);
await formMethods.trigger("username");
}}
/>
</>
)}
/>
</div>

View File

@ -1,3 +1,9 @@
/**
* @deprecated modifications to this file should be v2 only
* Use `apps/web/pages/v2/event-types/[type].tsx` instead
*/
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
import { zodResolver } from "@hookform/resolvers/zod";
import { EventTypeCustomInput, MembershipRole, PeriodType, Prisma, SchedulingType } from "@prisma/client";
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@radix-ui/react-collapsible";

View File

@ -91,7 +91,7 @@ interface IntegrationsContainerProps {
const IntegrationsList = ({ data }: { data: inferQueryOutput<"viewer.integrations"> }) => {
return (
<List>
<List noBorderTreatment>
{data.items.map((item) => (
<IntegrationListItem
name={item.name}

View File

@ -30,11 +30,12 @@ import Switch from "@calcom/ui/v2/core/Switch";
import VerticalDivider from "@calcom/ui/v2/core/VerticalDivider";
import { Form, Label } from "@calcom/ui/v2/core/form/fields";
import showToast from "@calcom/ui/v2/core/notifications";
import { SkeletonText } from "@calcom/ui/v2/core/skeleton";
import { Skeleton, SkeletonText } from "@calcom/ui/v2/core/skeleton";
import { HttpError } from "@lib/core/http/error";
import EditableHeading from "@components/ui/EditableHeading";
import { SelectSkeletonLoader } from "@components/v2/availability/SkeletonLoader";
const querySchema = z.object({
schedule: stringOrNumber,
@ -151,7 +152,7 @@ export default function Availability({ schedule }: { schedule: number }) {
const { data, isLoading } = trpc.useQuery(["viewer.availability.schedule", { scheduleId: schedule }]);
const form = useForm<AvailabilityFormValues>();
const { control, reset, setValue } = form;
const { control, reset } = form;
useEffect(() => {
if (!isLoading && data) {
@ -187,22 +188,35 @@ export default function Availability({ schedule }: { schedule: number }) {
return (
<Shell
backPath="/availability"
title={t("availability_title", { availabilityTitle: data?.schedule.name })}
title={data?.schedule.name && data.schedule.name + " | " + t("availability")}
heading={
<EditableHeading title={data?.schedule.name || ""} onChange={(name) => setValue("name", name)} />
<Controller
control={form.control}
name="name"
render={({ field }) => <EditableHeading isReady={!isLoading} {...field} />}
/>
}
subtitle={
data ? (
data.schedule.availability.map((availability) => (
<span key={availability.id}>
{availabilityAsString(availability, { locale: i18n.language })}
<br />
</span>
))
) : (
<SkeletonText className="h-4 w-48" />
)
}
subtitle={data?.schedule.availability.map((availability) => (
<span key={availability.id}>
{availabilityAsString(availability, { locale: i18n.language })}
<br />
</span>
))}
CTA={
<div className="flex items-center justify-end">
<div className="flex items-center rounded-md px-2 sm:hover:bg-gray-100">
<Label htmlFor="hiddenSwitch" className="mt-2 hidden cursor-pointer self-center pr-2 sm:inline">
<Skeleton
as={Label}
htmlFor="hiddenSwitch"
className="mt-2 hidden cursor-pointer self-center pr-2 sm:inline">
{t("set_to_default")}
</Label>
</Skeleton>
<Switch
id="hiddenSwitch"
disabled={isLoading}
@ -256,24 +270,26 @@ export default function Availability({ schedule }: { schedule: number }) {
<div className="min-w-40 col-span-3 space-y-2 lg:col-span-1">
<div className="xl:max-w-80 w-full space-y-4 pr-4 sm:p-0">
<div className="space-y-4">
<div className="sm:w-full md:w-1/2 lg:w-full">
<label htmlFor="timeZone" className="block text-sm font-medium text-gray-700">
{t("timezone")}
</label>
<Controller
name="timeZone"
render={({ field: { onChange, value } }) =>
value ? (
<TimezoneSelect
value={value}
className="focus:border-brand mt-1 block rounded-md border-gray-300 text-sm"
onChange={(timezone) => onChange(timezone.value)}
/>
) : (
<SkeletonText className="h-6 w-full" />
)
}
/>
<div className="xl:max-w-80 w-full pr-4 sm:p-0">
<div>
<label htmlFor="timeZone" className="block text-sm font-medium text-gray-700">
{t("timezone")}
</label>
<Controller
name="timeZone"
render={({ field: { onChange, value } }) =>
value ? (
<TimezoneSelect
value={value}
className="focus:border-brand mt-1 block w-72 rounded-md border-gray-300 text-sm"
onChange={(timezone) => onChange(timezone.value)}
/>
) : (
<SelectSkeletonLoader className="w-72" />
)
}
/>
</div>
</div>
<Label className="mt-1 cursor-pointer space-y-2 sm:w-full md:w-1/2 lg:w-full">
<span>Active on</span>

View File

@ -96,7 +96,8 @@ export type EventTypeSetupInfered = inferSSRProps<typeof getServerSideProps>;
const EventTypePage = (props: inferSSRProps<typeof getServerSideProps>) => {
const { t } = useLocale();
const { eventType, locationOptions, team, teamMembers } = props;
const { eventType: dbEventType, locationOptions, team, teamMembers } = props;
const [eventType, setEventType] = useState(dbEventType);
const animationParentRef = useRef(null);
const router = useRouter();
const { tabName } = querySchema.parse(router.query);
@ -106,7 +107,8 @@ const EventTypePage = (props: inferSSRProps<typeof getServerSideProps>) => {
}, [animationParentRef]);
const updateMutation = trpc.useMutation("viewer.eventTypes.update", {
onSuccess: async ({ eventType }) => {
onSuccess: async ({ eventType: newEventType }) => {
setEventType({ ...eventType, slug: newEventType.slug });
showToast(
t("event_type_updated_successfully", {
eventTypeTitle: eventType.title,

View File

@ -69,10 +69,9 @@ const CreateNewTeamPage = () => {
data-testid="onboarding"
key={router.asPath}>
<Head>
<title>{t("create_new_team")}</title>
<title>Create a new Team</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<div className="mx-auto px-4 py-24">
<div className="relative">
<div className="sm:mx-auto sm:w-full sm:max-w-[600px]">

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "استخدم الرابط أدناه لإعادة تعيين كلمة المرور",
"hey_there": "مرحبًا،",
"forgot_your_password_calcom": "نسيت كلمة المرور الخاصة بك؟ - Cal.com",
"event_type_title": "{{eventTypeTitle}} | نوع الحدث",
"delete_webhook_confirmation_message": "هل أنت متأكد أنك تريد حذف الويب هوك هذا؟ لن تتلقى بعد الآن بيانات اجتماعات Cal.com على عنوان URL محدد، وفي الوقت الفعلي، عندما تتم جدولة حدث أو يتم إلغاؤه.",
"confirm_delete_webhook": "نعم، قم بحذف الويبهوك",
"edit_webhook": "تعديل الويبهوك",
@ -633,7 +632,6 @@
"billing": "الفوترة",
"manage_your_billing_info": "قم بإدارة معلومات الفوترة لديك وإلغاء اشتراكك.",
"availability": "الأوقات المتاحة",
"availability_title": "{{availabilityTitle}} | توفر",
"edit_availability": "تعديل التوفر",
"configure_availability": "اضبط الأوقات التي تكون متاحًا فيها للحجز.",
"copy_times_to": "نسخ الأوقات إلى",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Pro obnovení hesla použijte odkaz níž",
"hey_there": "Zdravíme,",
"forgot_your_password_calcom": "Zapomněli jste heslo? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Typ události",
"delete_webhook_confirmation_message": "Opravdu chcete smazat tento webhook? Přestanete v reálném čase dostávat Cal.com data o schůzce na dané URL, pokud bude událost naplánována nebo zrušena.",
"confirm_delete_webhook": "Ano, smazat webhook",
"edit_webhook": "Upravit webhook",
@ -633,7 +632,6 @@
"billing": "Fakturace",
"manage_your_billing_info": "Spravujte své fakturační údaje a zrušte své předplatné.",
"availability": "Dostupnost",
"availability_title": "{{availabilityTitle}} | Dostupnost",
"edit_availability": "Upravit dostupnost",
"configure_availability": "Nastavit časy, kdy jste dostupní pro rezervace.",
"copy_times_to": "Kopírovat časy do",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Benutzen Sie den Link, um Ihr Passwort zurückzusetzen",
"hey_there": "Hallo,",
"forgot_your_password_calcom": "Passwort vergessen? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Event-Typ",
"delete_webhook_confirmation_message": "Sind Sie sicher, dass Sie diesen Webhook löschen möchten? Sie werden keine Cal.com Termindaten mehr erhalten.",
"confirm_delete_webhook": "Ja, Webhook löschen",
"edit_webhook": "Webhook bearbeiten",
@ -255,7 +254,7 @@
"user_needs_to_confirm_or_reject_booking_recurring": "{{user}} muss noch die Terminreihe des wiederkehrenden Termins bestätigen oder ablehnen.",
"meeting_is_scheduled": "Dieser Termin ist geplant",
"meeting_is_scheduled_recurring": "Ihr wiederkehrender Termin wurde geplant",
"submitted": "Ihr Termin wurde gebuhct",
"submitted": "Ihr Termin wurde gebucht",
"submitted_recurring": "Ihr wiederkehrender Termin wurde gebucht",
"booking_submitted": "Ihre Buchung wurde versandt",
"booking_submitted_recurring": "Ihre wiederkehrende Buchung wurde versandt",
@ -633,7 +632,6 @@
"billing": "Abrechnung",
"manage_your_billing_info": "Verwalten Sie Ihre Rechnungsinformationen und kündigen Sie Ihr Abonnement.",
"availability": "Verfügbarkeit",
"availability_title": "{{availabilityTitle}} | Verfügbarkeit",
"edit_availability": "Verfügbarkeit editieren",
"configure_availability": "Konfigurieren Sie die Zeiten, in denen Sie für Buchungen zur Verfügung stehen.",
"copy_times_to": "Zeiten kopieren in",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Use the link below to reset your password",
"hey_there": "Hey there,",
"forgot_your_password_calcom": "Forgot your password? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Event Type",
"delete_webhook_confirmation_message": "Are you sure you want to delete this webhook? You will no longer receive Cal.com meeting data at a specified URL, in real-time, when an event is scheduled or canceled.",
"confirm_delete_webhook": "Yes, delete webhook",
"edit_webhook": "Edit Webhook",
@ -633,7 +632,6 @@
"billing": "Billing",
"manage_your_billing_info": "Manage your billing information and cancel your subscription.",
"availability": "Availability",
"availability_title": "{{availabilityTitle}} | Availability",
"edit_availability": "Edit availability",
"configure_availability": "Configure times when you are available for bookings.",
"copy_times_to": "Copy times to",
@ -1268,5 +1266,6 @@
"confirm_password_change_email": "Please confirm your password before changing your email address",
"seats": "seats",
"every_app_published": "Every app published on the Cal.com App Store is open source and thoroughly tested via peer reviews. Nevertheless, Cal.com, Inc. does not endorse or certify these apps unless they are published by Cal.com. If you encounter inappropriate content or behaviour please report it.",
"report_app": "Report app"
"report_app": "Report app",
"team_name_required": "Team name required"
}

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Utilice el enlace de abajo para restablecer su contraseña",
"hey_there": "Hola,",
"forgot_your_password_calcom": "¿Has olvidado tu contraseña? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Tipo de Evento",
"delete_webhook_confirmation_message": "¿Está seguro de que desea eliminar este webhook? Ya no recibirá datos de reuniones de Cal.com en una URL específica, en tiempo real, cuando se programe o cancele un evento.",
"confirm_delete_webhook": "Sí, elimina este webhook",
"edit_webhook": "Editar Webhook",
@ -633,7 +632,6 @@
"billing": "Facturación",
"manage_your_billing_info": "Gestione su información de facturación y cancele su suscripción.",
"availability": "Disponibilidad",
"availability_title": "{{availabilityTitle}} | Disponibilidad",
"edit_availability": "Editar disponibilidad",
"configure_availability": "Configure los horarios en los que está disponible para realizar reservas.",
"copy_times_to": "Copiar tiempos en",
@ -1184,8 +1182,58 @@
"organizer_name_info": "Tu Nombre",
"additional_notes_info": "Las notas adicionales de la reserva",
"attendee_name_info": "El nombre de la persona que reserva",
"to": "Para",
"attendee_required_enter_number": "Será necesario que el asistente introduzca un número de teléfono al reservar",
"workflow_turned_on_successfully": "El flujo de trabajo {{workflowName}} se ajustó como {{offOn}} correctamente",
"download_responses": "Descargar respuestas",
"create_your_first_form": "Cree su primer formulario",
"create_your_first_form_description": "Con los formularios de orientación puede hacer preguntas de cualificación y llegar a la persona o tipo de evento correctos.",
"create_your_first_webhook": "Cree su primer Webhook",
"create_your_first_webhook_description": "Con Webhooks puede recibir datos de reuniones en tiempo real cuando suceda algo en Cal.com.",
"for_a_maximum_of": "Para un máximo de",
"event_one": "evento",
"event_other": "eventos",
"profile_team_description": "Administre ajustes para el perfil de su equipo",
"members_team_description": "Usuarios que están en el grupo",
"team_url": "URL del equipo",
"delete_team": "Eliminar equipo",
"team_members": "Miembros del equipo",
"more": "Más",
"more_page_footer": "Vemos la aplicación móvil como una extensión de la aplicación web. Si está realizando acciones complicadas, consulte la aplicación web.",
"workflow_example_1": "Enviar recordatorio por SMS al asistente 24 horas antes de que el evento comience",
"workflow_example_2": "Enviar SMS personalizado al asistente cuando se cambie la planificación del evento",
"workflow_example_3": "Enviar correo electrónico personalizado al anfitrión cuando se reserve un evento nuevo",
"workflow_example_4": "Enviar recordatorio por correo electrónico al asistente 1 hora antes de que el evento comience",
"workflow_example_5": "Enviar correo electrónico personalizado al anfitrión cuando se cambie la planificación del evento",
"workflow_example_6": "Enviar SMS personalizado al anfitrión cuando se reserve un evento nuevo",
"welcome_to_cal_header": "¡Bienvenido a Cal.com!",
"edit_form_later_subtitle": "Podrá editarlo más tarde.",
"connect_calendar_later": "Conectaré mi calendario más tarde",
"set_my_availability_later": "Indicaré mi disponibilidad más tarde",
"problem_saving_user_profile": "Se produjo un problema al guardar sus datos. Inténtelo de nuevo o póngase en contacto con el servicio de atención al cliente.",
"purchase_missing_seats": "Comprar licencias que faltan",
"slot_length": "Duración de franja",
"booking_appearance": "Aspecto de la reserva",
"appearance_team_description": "Administre los ajustes para el aspecto de la reserva de su equipo",
"only_owner_change": "Solo el propietario de este equipo puede hacer cambios en la reserva del equipo ",
"team_disable_cal_branding_description": "Elimina cualquier marca relacionada con Cal, p. ej., \"Powered by Cal\"",
"invited_by_team": "{{teamName}} le invitó a unirse a su equipo como {{role}}",
"token_invalid_expired": "El token no es válido o ha caducado.",
"exchange_add": "Conectar a Microsoft Exchange",
"exchange_authentication": "Método de autenticación",
"exchange_authentication_standard": "Autenticación básica",
"exchange_authentication_ntlm": "Autenticación NTLM",
"exchange_compression": "Compresión GZip",
"routing_forms_description": "Puede ver todos los formularios y rutas que ha creado aquí.",
"add_new_form": "Añadir formulario nuevo",
"form_description": "Cree su formulario para dirigirlo a un agente de reservas",
"copy_link_to_form": "Copiar enlace al formulario",
"theme": "Tema",
"theme_applies_note": "Solo se aplica a sus páginas de reservas públicas",
"theme_light": "Claro",
"theme_dark": "Oscuro",
"theme_system": "Predeterminado del sistema",
"add_a_team": "Añadir un equipo",
"saml_config": "Configuración de SAML",
"add_webhook_description": "Reciba datos de reuniones en tiempo real cuando suceda algo en Cal.com",
"triggers_when": "Se activa cuando",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Utilisez le lien ci-dessous pour réinitialiser votre mot de passe",
"hey_there": "Salut,",
"forgot_your_password_calcom": "Mot de passe oublié ? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Type d'événement",
"delete_webhook_confirmation_message": "Êtes-vous sûr de vouloir supprimer ce webhook ? Vous ne recevrez plus les données de réunion de Cal.com à une URL spécifiée, en temps réel, lorsqu'un événement est programmé ou annulé.",
"confirm_delete_webhook": "Oui, supprimer le webhook",
"edit_webhook": "Modifier le webhook",
@ -633,7 +632,9 @@
"billing": "Facturation",
"manage_your_billing_info": "Gérez vos informations de facturation et annulez votre abonnement.",
"availability": "Disponibilité",
"edit_availability": "Modifier la disponibilité",
"configure_availability": "Déclarez les moments où vous êtes disponible pour un rendez-vous.",
"copy_times_to": "Copier les heures vers",
"change_weekly_schedule": "Modifier votre planning hebdomadaire",
"logo": "Logo",
"error": "Erreur",
@ -648,6 +649,7 @@
"event_name_tooltip": "Le nom qui apparaîtra dans les calendriers",
"meeting_with_user": "Rendez-vous avec {ATTENDEE}",
"additional_inputs": "Entrées additionnelles",
"additional_input_description": "Exiger que le planificateur saisisse des entrées supplémentaires avant que la réservation soit confirmée",
"label": "Libellé",
"placeholder": "Placeholder",
"type": "Type",
@ -662,6 +664,8 @@
"disable_guests": "Désactiver les invité. es",
"disable_guests_description": "Désactiver l'ajout d'invité·es supplémentaires lors de la réservation.",
"private_link": "Générer une URL privée",
"private_link_label": "Lien privé",
"private_link_hint": "Votre lien privé sera régénéré après chaque utilisation",
"copy_private_link": "Copier le lien privé",
"private_link_description": "Générer une URL privée à partager sans exposer votre nom d'utilisateur Cal",
"invitees_can_schedule": "Les invité·es peuvent réserver",
@ -703,16 +707,21 @@
"delete_account_confirmation_message": "Êtes-vous sûr de vouloir supprimer votre compte Cal.com ? Toute personne avec qui vous avez partagé le lien de votre compte ne pourra plus réserver en utilisant ce lien et toutes les préférences que vous avez enregistrées seront perdues.",
"integrations": "Intégrations",
"apps": "Applications",
"category_apps": "{{category}} applications",
"app_store": "App Store",
"app_store_description": "Connecter les personnes, la technologie et l'espace de travail.",
"settings": "Paramètres",
"event_type_moved_successfully": "Le type d'évènement a bien été déplacé",
"next_step_text": "Prochaine étape",
"next_step": "Passer l'étape",
"prev_step": "Étape précédente",
"install": "Installer",
"installed": "Installé",
"active_install_one": "{{count}} installation active",
"active_install_other": "{{count}} installations actives",
"globally_install": "Installation globale",
"app_successfully_installed": "Application installée avec succès",
"app_could_not_be_installed": "Impossible d'installer l'application",
"disconnect": "Déconnecter",
"embed_your_calendar": "Intégrez votre calendrier dans votre page web",
"connect_your_favourite_apps": "Connectez vos applications favorites.",
@ -723,6 +732,7 @@
"connect_additional_calendar": "Connecter un calendrier supplémentaire",
"conferencing": "Conférence",
"calendar": "Calendrier",
"payments": "Paiements",
"not_installed": "Non installé",
"error_password_mismatch": "Les mots de passe ne correspondent pas.",
"error_required_field": "Ce champ est requis.",
@ -756,9 +766,22 @@
"import_from": "Importer depuis",
"access_token": "Jeton d'accès",
"visit_roadmap": "Feuille de route",
"featured_categories": "Catégories en vedette",
"popular_categories": "Catégories populaires",
"number_apps_one": "{{count}} Application",
"number_apps_other": "{{count}} Applications",
"trending_apps": "Applications populaires",
"explore_apps": "{{category}} applications",
"installed_apps": "Applications installées",
"no_category_apps": "Aucune application {{category}}",
"no_category_apps_description_calendar": "Ajouter une application de calendrier pour vérifier les conflits et éviter les doubles réservations",
"no_category_apps_description_conferencing": "Essayez d'ajouter une application de conférence pour interconnecter les appels vidéo avec vos clients",
"no_category_apps_description_payment": "Ajouter une application de paiement pour faciliter les transactions entre vous et vos clients",
"no_category_apps_description_other": "Ajouter n'importe quel autre type d'application pour faire toutes sortes de choses",
"installed_app_calendar_description": "Définir le(s) calendrier(s) pour vérifier les conflits pour éviter les doubles réservations.",
"installed_app_conferencing_description": "Ajoutez vos applications de vidéoconférence préférées pour vos réunions",
"installed_app_payment_description": "Configurez les services de traitement de paiement à utiliser lors de la facturation de vos clients.",
"installed_app_other_description": "Toutes vos applications installées à partir d'autres catégories.",
"empty_installed_apps_headline": "Aucune application installée",
"empty_installed_apps_description": "Les applications vous permettent d'améliorer votre flux de travail et votre processus de planification de façon significative.",
"empty_installed_apps_button": "Explorer l'App Store",
@ -779,6 +802,7 @@
"remove": "Supprimer",
"add": "Ajouter",
"installed_one": "Installé",
"installed_other": "{{count}} installé(e)(s)",
"verify_wallet": "Vérifier le portefeuille",
"connect_metamask": "Connecter Metamask",
"create_events_on": "Créer des événements le :",
@ -796,6 +820,8 @@
"set_to_default": "Définir par défaut",
"new_schedule_btn": "Nouveau programme",
"add_new_schedule": "Ajouter un nouveau programme",
"add_new_calendar": "Ajouter un nouveau calendrier",
"set_calendar": "Définir où ajouter de nouveaux événements lors de la réservation.",
"delete_schedule": "Supprimer le programme",
"schedule_created_successfully": "{{scheduleName}} programme créé",
"availability_updated_successfully": "{{scheduleName}} programme mis à jour",
@ -949,6 +975,7 @@
"workflows": "Workflows",
"new_workflow_btn": "Nouveau workflow",
"add_new_workflow": "Ajouter un nouveau workflow",
"reschedule_event_trigger": "lorsque l'événement est reprogrammé",
"trigger": "Déclencheur",
"triggers": "Déclencheurs",
"action": "Action",
@ -976,10 +1003,13 @@
"change_username_standard_to_premium": "Puisque vous passez d'un nom d'utilisateur standard à un premium, vous allez être envoyé au paiement pour valider le changement.",
"change_username_premium_to_standard": "Puisque vous passez d'un nom d'utilisateur premium à un standard, vous allez être envoyé au paiement pour valider la rétrogradation.",
"go_to_stripe_billing": "Accéder à la facturation",
"stripe_description": "Nécessite un paiement pour les réservations (0,5% + 0,10 € de commission par transaction)",
"trial_expired": "Votre période d'essai a expiré",
"remove_app": "Supprimer l'application",
"yes_remove_app": "Oui, supprimer l'application",
"are_you_sure_you_want_to_remove_this_app": "Voulez-vous vraiment supprimer cette application ?",
"app_removed_successfully": "Application supprimée avec succès",
"error_removing_app": "Erreur lors de la suppression de l'application",
"web_conference": "Conférence en ligne",
"number_for_sms_reminders": "Numéro de téléphone (pour les rappels par SMS)",
"requires_confirmation": "Nécessite une confirmation",
@ -1035,18 +1065,167 @@
"navigate": "Naviguer",
"open": "Ouvrir",
"close": "Fermer",
"team_feature_teams": "Ceci est une fonctionnalité d'équipe. Mettez à niveau vers l'équipe pour voir la disponibilité de votre équipe.",
"team_feature_workflows": "Ceci est une fonctionnalité d'équipe. Mettez à niveau vers l'équipe pour automatiser vos notifications et rappels d'événements avec les flux de travail.",
"show_eventtype_on_profile": "Afficher sur le profil",
"embed": "Intégré",
"new_username": "Nouveau nom d'utilisateur",
"current_username": "Nom d'utilisateur actuel",
"example_1": "Exemple 1",
"example_2": "Exemple 2",
"additional_input_label": "Libellé de saisie supplémentaire",
"company_size": "Taille de l'entreprise",
"what_help_needed": "Pour quoi avez-vous besoin d'aide ?",
"variable_format": "Format des variables",
"webhook_subscriber_url_reserved": "L'url d'abonné au Webhook est déjà définie",
"custom_input_as_variable_info": "Ignorer tous les caractères spéciaux du libellé de saisie supplémentaire (utiliser uniquement des lettres et des chiffres), utiliser des majuscules pour toutes les lettres et remplacer les espaces par des tirets bas.",
"using_additional_inputs_as_variables": "Comment utiliser des entrées supplémentaires en tant que variables ?",
"download_desktop_app": "Télécharger l'application de bureau",
"set_ping_link": "Définir le lien Ping",
"rate_limit_exceeded": "Limite dépassée",
"when_something_happens": "Quand quelque chose se passe",
"action_is_performed": "Une action est effectuée",
"test_action": "Tester l'action",
"notification_sent": "Notification envoyée",
"no_input": "Aucune entrée",
"test_workflow_action": "Tester l'effet du workflow",
"send_sms": "Envoyer un SMS",
"send_sms_to_number": "Êtes-vous sûr de vouloir envoyer un SMS au {{number}}?",
"missing_connected_calendar": "Aucun calendrier par défaut connecté",
"connect_your_calendar_and_link": "Vous pouvez connecter votre calendrier depuis <1>ici</1>.",
"default_calendar_selected": "Calendrier par défaut",
"hide_from_profile": "Masquer du profil",
"event_setup_tab_title": "Configuration de l'événement",
"event_limit_tab_title": "Limites",
"event_limit_tab_description": "Fréquence de réservation",
"event_advanced_tab_description": "Paramètres du calendrier & plus...",
"event_advanced_tab_title": "Avancé",
"select_which_cal": "Sélectionnez le calendrier auquel ajouter des réservations",
"custom_event_name": "Nom de l'événement personnalisé",
"custom_event_name_description": "Créer des noms d'événements personnalisés à afficher sur l'événement du calendrier",
"2fa_required": "Authentification en deux étapes requise",
"incorrect_2fa": "Code d'authentification à deux facteurs incorrect",
"which_event_type_apply": "À quel type d'événement s'appliquera-t-il ?",
"no_workflows_description": "Les workflows permettent une automatisation simple pour envoyer des notifications et des rappels vous permettant de construire des processus autour de vos événements.",
"create_workflow": "Créer un workflow",
"do_this": "Effectuer ceci",
"turn_off": "Désactiver",
"settings_updated_successfully": "Paramètres mis à jour avec succès",
"error_updating_settings": "Erreur lors de la mise à jour des paramètres",
"personal_cal_url": "Mon URL Cal personnelle",
"bio_hint": "Quelques phrases à propos de vous. Ces informations apparaîtront sur votre page d'url personnelle.",
"delete_account_modal_title": "Supprimer le compte",
"confirm_delete_account_modal": "Êtes-vous sûr de vouloir supprimer votre compte Cal.com ?",
"delete_my_account": "Supprimer mon compte",
"start_of_week": "Début de la semaine",
"select_calendars": "Sélectionnez quels calendriers vous voulez vérifier les conflits pour éviter les doubles réservations.",
"check_for_conflicts": "Vérifier les conflits",
"adding_events_to": "Ajout d'événements à",
"follow_system_preferences": "Suivre les préférences système",
"custom_brand_colors": "Couleurs de marque personnalisées",
"customize_your_brand_colors": "Personnalisez votre propre couleur de marque dans votre page de réservation.",
"pro": "Pro",
"removes_cal_branding": "Supprime les marques associées à Cal, c'est-à-dire \"Powered by Cal.\"",
"profile_picture": "Photo de profil",
"upload": "Télécharger",
"web3": "Web3",
"rainbow_token_gated": "Ce type d'événement nécessite un jeton d'authentification.",
"rainbow_connect_wallet_gate": "Connectez votre portefeuille si vous possédez <1>{{name}}</1> (<3>{{symbol}}</3>).",
"rainbow_insufficient_balance": "Votre portefeuille connecté ne contient pas assez de <1>{{symbol}}</1>.",
"rainbow_sign_message_request": "Signez la demande de message sur votre portefeuille.",
"rainbow_signature_error": "Erreur lors de la demande de signature de votre portefeuille.",
"token_address": "Adresse du jeton",
"blockchain": "Blockchain",
"old_password": "Ancien mot de passe",
"secure_password": "Votre nouveau mot de passe super sécurisé",
"error_updating_password": "Erreur lors de la mise à jour du mot de passe",
"two_factor_auth": "Authentification en deux étapes",
"recurring_event_tab_description": "Configurez un calendrier récurrent",
"today": "aujourd'hui",
"appearance": "Apparence",
"appearance_subtitle": "Gérer les paramètres pour votre apparence de réservation",
"my_account": "Mon compte",
"general": "Général",
"calendars": "Calendriers",
"2fa_auth": "Authentification à deux facteurs",
"invoices": "Factures",
"embeds": "Intègre",
"impersonation": "Identification",
"users": "Utilisateurs",
"profile_description": "Gérer les paramètres de votre profil cal",
"general_description": "Gérer les paramètres pour votre langue et votre fuseau horaire",
"calendars_description": "Configurez la manière dont vos types d'événements interagissent avec vos calendriers",
"appearance_description": "Gérer les paramètres pour votre apparence de réservation",
"conferencing_description": "Gérez vos applications de vidéoconférence pour vos réunions",
"password_description": "Gérer les paramètres pour les mots de passe de votre compte",
"2fa_description": "Gérer les paramètres pour les mots de passe de votre compte",
"we_just_need_basic_info": "Nous avons juste besoin de quelques informations de base pour configurer votre profil.",
"skip": "Ignorer",
"do_this_later": "Effectuer ceci plus tard",
"set_availability_getting_started_subtitle_1": "Définir les plages de temps lorsque vous êtes disponible",
"set_availability_getting_started_subtitle_2": "Vous pouvez personnaliser tout cela plus tard dans la page de disponibilité.",
"connect_calendars_from_app_store": "Vous pouvez ajouter plus de calendriers depuis l'App Store",
"connect_conference_apps": "Connecter les applications de conférence",
"connect_calendar_apps": "Connecter les applications de calendrier",
"connect_payment_apps": "Connecter les applications de paiement",
"connect_other_apps": "Connecter d'autres applications",
"current_step_of_total": "Étape {{currentStep}} sur {{maxSteps}}",
"add_variable": "Ajouter une variable",
"custom_phone_number": "Numéro de téléphone personnalisé",
"message_template": "Modèle de message",
"email_subject": "Objet",
"add_dynamic_variables": "Ajouter des variables de texte dynamiques",
"event_name_info": "Nom du type d'événement",
"event_date_info": "Date de l'évènement",
"event_time_info": "Heure de début de l'événement",
"location_info": "Lieu de l'événement",
"organizer_name_info": "Votre nom",
"additional_notes_info": "Notes supplémentaires de réservation",
"attendee_name_info": "Nom de la personne réservant",
"to": "À/vers",
"attendee_required_enter_number": "Le participant devra entrer un numéro de téléphone lors de la réservation",
"workflow_turned_on_successfully": "Le workflow {{workflowName}} a été {{offOn}} avec succès",
"download_responses": "Télécharger les réponses",
"create_your_first_form": "Créer votre premier formulaire",
"create_your_first_form_description": "Grâce aux formulaires d'acheminement, vous pouvez poser des questions de qualification et vous diriger vers la personne ou le type d'événement appropriés.",
"create_your_first_webhook": "Créez votre premier Webhook",
"create_your_first_webhook_description": "Avec les Webhooks, vous pouvez recevoir des données de réunion en temps réel lorsque quelque chose se passe sur Cal.com.",
"for_a_maximum_of": "Pour un maximum de",
"event_one": "événement",
"event_other": "événements",
"profile_team_description": "Gérer les paramètres de votre profil d'équipe",
"members_team_description": "Utilisateurs membres du groupe",
"team_url": "URL de l'équipe",
"delete_team": "Supprimer l'équipe",
"team_members": "Membres de l'équipe",
"more": "En savoir plus",
"more_page_footer": "Nous considérons l'application mobile comme une extension de l'application web. Si vous effectuez des actions complexes, veuillez vous référer à l'application Web.",
"workflow_example_1": "Envoyer un rappel SMS 24 heures avant le début de l'événement",
"workflow_example_2": "Envoyer un SMS personnalisé lorsque l'événement est reprogrammé au participant",
"workflow_example_3": "Envoyer un email personnalisé quand un nouvel événement est réservé à un hôte",
"workflow_example_4": "Envoyer un rappel par e-mail 1 heure avant le début des événements",
"workflow_example_5": "Envoyer un email personnalisé lorsque l'événement est reprogrammé à l'hôte",
"workflow_example_6": "Envoyer un SMS personnalisé quand un nouvel événement est réservé à un hôte",
"welcome_to_cal_header": "Bienvenue sur Cal.com !",
"edit_form_later_subtitle": "Vous pourrez modifier cela plus tard.",
"connect_calendar_later": "Je connecterai mon calendrier plus tard",
"set_my_availability_later": "Je vais définir ma disponibilité plus tard",
"problem_saving_user_profile": "Un problème est survenu lors de l'enregistrement de vos données. Veuillez réessayer ou contacter le service client.",
"purchase_missing_seats": "Acheter des places manquantes",
"slot_length": "Durée du créneau",
"booking_appearance": "Apparence de réservation",
"appearance_team_description": "Gérer les paramètres pour l'apparence de réservation de votre équipe",
"only_owner_change": "Seul le propriétaire de cette équipe peut apporter des modifications à la réservation de l'équipe ",
"team_disable_cal_branding_description": "Supprime les marques associées à Cal, c'est-à-dire \"Powered by Cal\"",
"invited_by_team": "{{teamName}} vous a invité à rejoindre son équipe en tant que {{role}}",
"token_invalid_expired": "Le jeton est invalide ou expiré.",
"exchange_add": "Se connecter à Microsoft Exchange",
"exchange_authentication": "Méthode d'authentification",
"exchange_authentication_standard": "Authentification de base",
"exchange_authentication_ntlm": "Authentification NTLM",
"exchange_compression": "Compression GZip",
"routing_forms_description": "Vous pouvez voir tous les formulaires et tous les parcours que vous avez créés ici.",
"add_new_form": "Ajouter un nouveau formulaire",
"theme_light": "Clair",
"theme_dark": "Sombre"
}

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "נא להשתמש בקישור הבא כדי לאפס את הסיסמה",
"hey_there": "שלום,",
"forgot_your_password_calcom": "שכחתה את הסיסמה? - cal.com",
"event_type_title": "{{eventTypeTitle}} | סוג האירוע",
"delete_webhook_confirmation_message": "בטוח שברצונך למחוק את ה-Webhook הזה? אם אירוע יבוטל או שייקבע עבורו מועד, לא תקבל יותר נתוני פגישות מ-Cal.com בזמן אמת או בכתובת ה-URL שציינת.",
"confirm_delete_webhook": "כן, אני רוצה למחוק את ה-Webhook",
"edit_webhook": "עריכת Webhook",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Usa il link qui sotto per reimpostare la tua password",
"hey_there": "Ciao,",
"forgot_your_password_calcom": "Hai dimenticato la password? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Tipo di evento",
"delete_webhook_confirmation_message": "Sei sicuro di voler eliminare questo webhook? Non riceverai più Cal.com dati di riunione in un URL specificato, in tempo reale, quando un evento è programmato o annullato.",
"confirm_delete_webhook": "Sì, elimina webhook",
"edit_webhook": "Modifica Webhook",
@ -633,7 +632,6 @@
"billing": "Fatturazione",
"manage_your_billing_info": "Gestisci le tue informazioni di fatturazione e annulla il tuo abbonamento.",
"availability": "Disponibilità",
"availability_title": "{{availabilityTitle}} | Disponibilità",
"edit_availability": "Modifica disponibilità",
"configure_availability": "Cambia quando sei disponibile per le prenotazioni.",
"copy_times_to": "Copia orari in",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "以下のリンクを使用してパスワードをリセットしてください",
"hey_there": "こんにちは!",
"forgot_your_password_calcom": "パスワードをお忘れですか? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | イベントタイプ",
"delete_webhook_confirmation_message": "このウェブフックを削除してもよろしいですか? イベントがスケジュールまたはキャンセルされたときに、指定された URL でのミーティングデータをリアルタイムには受け取れなくなります。",
"confirm_delete_webhook": "はい、ウェブフックを削除します",
"edit_webhook": "ウェブフックを編集",
@ -633,7 +632,6 @@
"billing": "請求",
"manage_your_billing_info": "請求情報の管理とサブスクリプションのキャンセル。",
"availability": "利用可能期間",
"availability_title": "{{availabilityTitle}} | 空き状況",
"edit_availability": "空き状況を編集",
"configure_availability": "予約が可能な時間を設定する。",
"copy_times_to": "次に時間をコピー",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "비밀번호를 재설정하시려면 아래 링크를 사용하세요.",
"hey_there": "안녕하세요.",
"forgot_your_password_calcom": "비밀번호를 잊어버리셨나요? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | 이벤트 타입",
"delete_webhook_confirmation_message": "웹훅을 정말로 삭제하시겠습니까? 이벤트 일정이 잡혔거나 취소되었을 때 Cal.com의 회의 정보를 더 이상 실시간으로 받아보실 수 없게 됩니다.",
"confirm_delete_webhook": "네, 웹훅을 삭제하겠습니다.",
"edit_webhook": "웹훅 수정하기",
@ -633,7 +632,6 @@
"billing": "청구",
"manage_your_billing_info": "결제 정보를 관리하고 구독을 취소하세요.",
"availability": "유효성",
"availability_title": "{{availabilityTitle}} | 가용성",
"edit_availability": "가용성 편집",
"configure_availability": "예약 가능한 시간을 구성하십시오.",
"copy_times_to": "횟수 복사:",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Gebruik de onderstaande link om uw wachtwoord te resetten",
"hey_there": "Hallo daar,",
"forgot_your_password_calcom": "Wachtwoord vergeten? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Evenement",
"delete_webhook_confirmation_message": "Weet u zeker dat u deze webhook wilt verwijderen? U ontvangt dan niet langer Cal.com vergadergegevens op een opgegeven URL, in real-time, wanneer een evenement is geboekt of geannuleerd.",
"confirm_delete_webhook": "Ja, webhook verwijderen",
"edit_webhook": "Webhook bewerken",
@ -633,7 +632,6 @@
"billing": "Abonnement",
"manage_your_billing_info": "Beheer uw betalingsgegevens en annuleer uw abonnement.",
"availability": "Beschikbaarheid",
"availability_title": "{{availabilityTitle}} | Beschikbaarheid",
"edit_availability": "Beschikbaarheid bewerken",
"configure_availability": "Configureer tijden wanneer u beschikbaar bent voor afspraken.",
"copy_times_to": "Tijden kopiëren naar",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Użyj poniższego linku, aby zresetować swoje hasło",
"hey_there": "Cześć,",
"forgot_your_password_calcom": "Nie pamiętasz swojego hasła? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Typ Wydarzenia",
"delete_webhook_confirmation_message": "Czy na pewno chcesz usunąć ten webhook? Nie będziesz już otrzymywać danych o spotkaniach w Cal.com w określonym URL, w czasie rzeczywistym, gdy zdarzenie jest zaplanowane lub anulowane.",
"confirm_delete_webhook": "Tak, usuń webhook",
"edit_webhook": "Edytuj Webhook",
@ -633,7 +632,6 @@
"billing": "Rozliczenia",
"manage_your_billing_info": "Zarządzaj informacjami rozliczeniowymi i anuluj subskrypcję.",
"availability": "Dostępność",
"availability_title": "{{availabilityTitle}} | Dostępność",
"edit_availability": "Edytuj dostępność",
"configure_availability": "Skonfiguruj czasy, kiedy jesteś dostępny dla rezerwacji.",
"copy_times_to": "Kopiuj czasy do",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Use o link abaixo para redefinir a sua senha",
"hey_there": "Olá,",
"forgot_your_password_calcom": "Esqueceu sua senha? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Tipo de evento",
"delete_webhook_confirmation_message": "Você tem certeza que quer remover este Webhook? Você não receberá mais dados de reuniões de Cal.com na URL especificada, em tempo real, quando um evento for agendado ou cancelado.",
"confirm_delete_webhook": "Sim, remover o Webhook",
"edit_webhook": "Editar Webhook",
@ -633,7 +632,6 @@
"billing": "Faturamento",
"manage_your_billing_info": "Gerenciar as suas informações de faturamento e cancelar a sua assinatura.",
"availability": "Disponibilidade",
"availability_title": "{{availabilityTitle}} | Disponibilidade",
"edit_availability": "Editar disponibilidade",
"configure_availability": "Configure os horários em que estiver disponível para reservas.",
"copy_times_to": "Copiar horários para",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Use a ligação abaixo para redefinir a sua senha",
"hey_there": "Olá,",
"forgot_your_password_calcom": "Esqueceu-se da sua senha? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Tipo de evento",
"delete_webhook_confirmation_message": "De certeza que quer eliminar este Webhook? Não receberá mais dados de reuniões de Cal.com do URL especificado, em tempo real, quando um evento for agendado ou cancelado.",
"confirm_delete_webhook": "Sim, eliminar o Webhook",
"edit_webhook": "Editar Webhook",
@ -633,7 +632,6 @@
"billing": "Facturação",
"manage_your_billing_info": "Gerir as suas informações de faturação e cancele a sua assinatura.",
"availability": "Disponibilidade",
"availability_title": "{{availabilityTitle}} | Disponibilidade",
"edit_availability": "Editar disponibilidade",
"configure_availability": "Configure os horários em que estiver disponível para reservas.",
"copy_times_to": "Copiar horários para",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Utilizați linkul de mai jos pentru a vă reseta parola",
"hey_there": "Bună,",
"forgot_your_password_calcom": "Ți-ai uitat parola? - Cal.com",
"event_type_title": "{{eventTypeTitle}} Tip de Eveniment",
"delete_webhook_confirmation_message": "Ești sigur că vrei să ștergi acest webhook? Nu vei mai primi Cal.com date de întâlnire la un URL specificat, în timp real, atunci când un eveniment este programat sau anulat.",
"confirm_delete_webhook": "Da, șterge webhook",
"edit_webhook": "Editează Webhook",
@ -633,7 +632,6 @@
"billing": "Facturare",
"manage_your_billing_info": "Gestionați informațiile de facturare și anulați abonamentul.",
"availability": "Disponibilitate",
"availability_title": "{{availabilityTitle}} | Disponibilitate",
"edit_availability": "Editează disponibilitatea",
"configure_availability": "Configurați orele când sunteți disponibil pentru rezervări.",
"copy_times_to": "Copiază orele la",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Используйте ссылку ниже, чтобы сбросить пароль",
"hey_there": "Привет,",
"forgot_your_password_calcom": "Забыли пароль? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Тип события",
"delete_webhook_confirmation_message": "Вы уверены, что хотите удалить этот вебхук? Вы больше не будете получать от Cal.com данные о новых или отменённых встречах по указанному URL в реальном времени.",
"confirm_delete_webhook": "Да, удалить веб-хук",
"edit_webhook": "Изменить веб-хук",
@ -633,7 +632,6 @@
"billing": "Биллинг",
"manage_your_billing_info": "Управление платежной информацией и отменой подписки.",
"availability": "Доступность",
"availability_title": "{{availabilityTitle}} | Доступность",
"edit_availability": "Изменить доступность",
"configure_availability": "Измените временные интервалы, доступные для бронирования.",
"copy_times_to": "Скопировать время в",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Resetujte lozinku koristeći link ispod",
"hey_there": "Zdravo,",
"forgot_your_password_calcom": "Zaboravili ste lozinku? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Tip Dogadjaja",
"delete_webhook_confirmation_message": "Da li ste sigurni da želite da obrišete ovaj webhook? Nećete više dobijati Cal.com podatke o sastancima preko naznačenog URL, istovremeno kad je dogadjaj zakazan ili otkazan.",
"confirm_delete_webhook": "Da, obriši webhook",
"edit_webhook": "Uredi Webhook",
@ -633,7 +632,6 @@
"billing": "Naplate",
"manage_your_billing_info": "Upravljajte svojim informacijama za plaćanje i otkažite pretplatu.",
"availability": "Dostupnost",
"availability_title": "{{availabilityTitle}} | Dostupnost",
"edit_availability": "Uredi dostupnost",
"configure_availability": "Konfigurišite vreme kada ste dostupni za rezervacije.",
"copy_times_to": "Kopiraj vremena u",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Använd länken nedan för att återställa ditt lösenord",
"hey_there": "Hallå där,",
"forgot_your_password_calcom": "Glömt ditt lösenord? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Händelsetyp",
"delete_webhook_confirmation_message": "Är du säker på att du vill ta bort denna webhook? Du kommer inte längre att få Calcom mötesdata skickad till angiven URL, i realtid, när en händelse är schemalagd eller avbruten.",
"confirm_delete_webhook": "Ja, ta bort webhook",
"edit_webhook": "Redigera Webhook",
@ -633,7 +632,6 @@
"billing": "Fakturering",
"manage_your_billing_info": "Hantera din faktureringsinformation och avsluta din prenumeration.",
"availability": "Tillgänglighet",
"availability_title": "{{availabilityTitle}} | Tillgänglighet",
"edit_availability": "Redigera tillgänglighet",
"configure_availability": "Ställ in de tider du är tillgänglig för bokningar.",
"copy_times_to": "Kopiera tider till",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Şifrenizi sıfırlamak için aşağıdaki bağlantıyı kullanın",
"hey_there": "Selam,",
"forgot_your_password_calcom": "Şifrenizi mi unuttunuz? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Etkinlik Türü",
"delete_webhook_confirmation_message": "Bu web kancasını silmek istediğinizden emin misiniz? Bir etkinlik planlandığında veya iptal edildiğinde, Cal.com toplantı verilerini gerçek zamanlı olarak belirli bir URL'de almazsınız.",
"confirm_delete_webhook": "Evet, web kancasını sil",
"edit_webhook": "Web kancasını düzenle",
@ -633,7 +632,6 @@
"billing": "Fatura",
"manage_your_billing_info": "Fatura bilgilerinizi yönetin ve aboneliğinizi iptal edin.",
"availability": "Müsaitlik",
"availability_title": "{{availabilityTitle}} | Müsaitlik Durumu",
"edit_availability": "Müsaitlik durumunu düzenle",
"configure_availability": "Rezervasyon için uygun olduğunuz zamanları yapılandırın.",
"copy_times_to": "Saatleri şuraya kopyala:",
@ -1185,13 +1183,13 @@
"additional_notes_info": "Ek rezervasyon notları",
"attendee_name_info": "Rezervasyon yaptıran kişinin adı",
"to": "Kime",
"attendee_required_enter_number": "Bu, katılımcının rezervasyon yapmak için bir telefon numarası girmesini gerektirecektir",
"attendee_required_enter_number": "Bu, katılımcının rezervasyon yapmak için bir telefon numarası girmesini gerektirir",
"workflow_turned_on_successfully": "{{workflowName}} iş akışı başarıyla {{offOn}}",
"download_responses": "Yanıtları İndir",
"create_your_first_form": "İlk formunuzu oluşturun",
"create_your_first_form_description": "Yönlendirme Formları ile niteliksel sorular sorabilir ve bunları doğru kişiye veya etkinlik türüne yönlendirebilirsiniz.",
"create_your_first_webhook": "İlk Web kancanızı oluşturun",
"create_your_first_webhook_description": "Web kancaları ile Cal.com'da bir etkinlik gerçekleştiğinde toplantı verilerini gerçek zamanlı olarak alabilirsiniz.",
"create_your_first_webhook": "İlk Web Kancanızı oluşturun",
"create_your_first_webhook_description": "Web Kancaları ile Cal.com'da bir etkinlik gerçekleştiğinde toplantı verilerini gerçek zamanlı olarak alabilirsiniz.",
"for_a_maximum_of": "Maksimum",
"event_one": "etkinlik",
"event_other": "etkinlik",
@ -1201,12 +1199,12 @@
"delete_team": "Ekibi Sil",
"team_members": "Ekip üyeleri",
"more": "Daha fazla",
"more_page_footer": "Mobil uygulamayı web uygulamasının bir uzantısı olarak görüyoruz. Karmaşık bir işlem yapıyorsanız, lütfen web uygulamasına geri dönün.",
"more_page_footer": "Mobil uygulamayı web uygulamasının bir uzantısı olarak görüyoruz. Karmaşık bir işlem yapıyorsanız lütfen web uygulamasına geri dönün.",
"workflow_example_1": "Etkinlik başlamadan 24 saat önce katılımcıya SMS hatırlatıcısı gönder",
"workflow_example_2": "Etkinlik yeniden planlandığında katılımcıya özel SMS gönder",
"workflow_example_3": "Yeni bir etkinlik rezervasyonu yapıldığında organizatöre özel bir e-posta gönderin",
"workflow_example_4": "Etkinlikler başlamadan 1 saat önce katılımcıya e-posta hatırlatıcısı gönderin",
"workflow_example_5": "Etkinlik yeniden planlandığında ana bilgisayara özel e-posta gönder",
"workflow_example_5": "Etkinlik yeniden planlandığında organizatöre özel e-posta gönderin",
"workflow_example_6": "Yeni bir etkinlik rezervasyonu yapıldığında organizatöre özel SMS gönderin",
"welcome_to_cal_header": "Cal.com'a hoş geldiniz!",
"edit_form_later_subtitle": "Bunu daha sonra düzenleyebilirsiniz.",
@ -1226,24 +1224,24 @@
"exchange_authentication_standard": "Temel kimlik doğrulaması",
"exchange_authentication_ntlm": "NTLM kimlik doğrulaması",
"exchange_compression": "GZip sıkıştırma",
"routing_forms_description": "Oluşturduğunuz tüm formları ve rotaları burada görebilirsiniz.",
"routing_forms_description": "Oluşturduğunuz tüm formları ve yönlendirmeleri burada görebilirsiniz.",
"add_new_form": "Yeni form ekle",
"form_description": "Rezervasyon yapan kişiyi yönlendirmek için formunuzu oluşturun",
"copy_link_to_form": "Bağlantıyı forma kopyala",
"theme": "Tema",
"theme_applies_note": "Bu, sadecev genel rezervasyon sayfalarınız için geçerlidir",
"theme_applies_note": "Bu, sadece genel rezervasyon sayfalarınız için geçerlidir",
"theme_light": "Açık",
"theme_dark": "Koyu",
"theme_system": "Sistem varsayılanı",
"add_a_team": "Ekip ekle",
"saml_config": "SAML Yapılandırması",
"add_webhook_description": "Cal.com'da bir etkinlik gerçekleştiğinde gerçek zamanlı olarak toplantı bilgilerini alın",
"add_webhook_description": "Cal.com'da bir etkinlik gerçekleştiğinde toplantı bilgilerini gerçek zamanlı olarak alın",
"triggers_when": "Tetiklenme zamanı",
"test_webhook": "Lütfen oluşturmadan önce ping testi yapın.",
"enable_webhook": "Web kancasını etkinleştir",
"add_webhook": "Web kancası ekle",
"add_webhook": "Web Kancası ekle",
"webhook_edited_successfully": "Web Kancası kaydedildi",
"webhooks_description": "Cal.com'da bir etkinlik gerçekleştiğinde gerçek zamanlı olarak toplantı bilgilerini alın",
"webhooks_description": "Cal.com'da bir etkinlik gerçekleştiğinde toplantı bilgilerini gerçek zamanlı olarak alın",
"api_keys_description": "Kendi hesabınıza erişmek için API anahtarları oluşturun",
"new_api_key": "Yeni API anahtarı",
"active": "Etkin",
@ -1258,14 +1256,14 @@
"password_reset_email": "{{email}} adresine şifrenizi sıfırlama talimatlarını içeren bir e-posta gönderildi.",
"password_updated": "Şifre güncellendi!",
"pending_payment": "Bekleyen ödeme",
"confirmation_page_rainbow": "Ethereum, Polygon ve diğer token'lar veya NFT ile etkinliğinizi kontrol edin.",
"not_on_cal": "Cal.com'da değil",
"confirmation_page_rainbow": "Ethereum, Polygon ve diğer token'lar veya NFT ile etkinliğinizi kontrol altında tutun.",
"not_on_cal": "Cal.com'da yok",
"no_calendar_installed": "Yüklü takvim yok",
"no_calendar_installed_description": "Henüz hiçbir takviminizi bağlamadınız",
"add_a_calendar": "Takvim ekle",
"change_email_hint": "Değişikliklerin geçerli olduğunu görmek için oturumu kapatıp tekrar açmanız gerekebilir",
"confirm_password_change_email": "Lütfen e-posta adresinizi değiştirmeden önce şifrenizi onaylayın",
"seats": "yer",
"every_app_published": "Cal.com Uygulama Mağazası'nda yayınlanan her uygulama açık kaynak kodludur ve uzman incelemeleriyle kapsamlı bir şekilde test edilmiştir. Cal.com, Cal.com tarafından yayınlanmadıkça bu uygulamaları desteklemez veya onaylamaz. Uygunsuz içerik veya davranışla karşılaşırsanız lütfen bize bildirin.",
"every_app_published": "Cal.com Uygulama Mağazası'nda yayınlanan her uygulama açık kaynak kodludur ve uzman incelemeleriyle kapsamlı bir şekilde test edilmiştir. Cal.com, Cal.com tarafından yayınlanmadıkça bu uygulamaları desteklemez veya onaylamaz. Herhangi bir uygunsuz içerik veya davranışla karşılaşırsanız lütfen bize bildirin.",
"report_app": "Uygulamayı bildir"
}

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Скористайтеся посиланням нижче, щоб скинути пароль",
"hey_there": "Привіт!",
"forgot_your_password_calcom": "Забули пароль? Cal.com",
"event_type_title": "{{eventTypeTitle}} | Тип заходу",
"delete_webhook_confirmation_message": "Справді видалити цей вебгук? Ви більше не отримуватимете дані про нараду Cal.com за вказаною URL-адресою: у реальному часі, а також під час планування та скасування.",
"confirm_delete_webhook": "Так, видалити вебгук",
"edit_webhook": "Редагувати вебгук",
@ -498,6 +497,8 @@
"new_member": "Новий учасник",
"invite": "Запросити",
"add_team_members": "Додати учасників команди",
"add_team_members_description": "Запросіть інших у свою команду",
"add_team_member": "Додати учасника команди",
"invite_new_member": "Запросіть нового учасника",
"invite_new_team_member": "Запросіть когось у свою команду.",
"change_member_role": "Змініть роль учасника команди",
@ -610,6 +611,7 @@
"create_first_team_and_invite_others": "Створіть свою першу команду та запросіть інших, щоб працювати разом.",
"create_team_to_get_started": "Створіть команду, щоб почати",
"teams": "Команди",
"team": "Команда",
"team_billing": "Виставлення рахунків для команд",
"upgrade_to_flexible_pro_title": "Ми змінили умови оплати для команд",
"upgrade_to_flexible_pro_message": "У вашій команді є учасники без придбаних місць. Перейдіть на план Pro, щоб отримати всі потрібні місця.",
@ -630,7 +632,9 @@
"billing": "Виставлення рахунків",
"manage_your_billing_info": "Керуйте своїми даними для виставлення рахунків і підписками.",
"availability": "Доступність",
"edit_availability": "Редагувати відомості про доступність",
"configure_availability": "Налаштовуйте свої часові вікна, доступні для бронювання.",
"copy_times_to": "Копіювати час до",
"change_weekly_schedule": "Змініть свій розклад на тиждень",
"logo": "Логотип",
"error": "Помилка",
@ -645,6 +649,7 @@
"event_name_tooltip": "Ім’я, яке показуватиметься в календарях",
"meeting_with_user": "Нарада з користувачем {ATTENDEE}",
"additional_inputs": "Додаткові поля введення",
"additional_input_description": "Вимагати від особи, що хоче створити бронювання, надавати додаткові відомості",
"label": "Мітка",
"placeholder": "Заповнювач",
"type": "Тип",
@ -659,6 +664,8 @@
"disable_guests": "Вимкнути гостей",
"disable_guests_description": "Забороніть додати гостей під час бронювання.",
"private_link": "Створити приватне посилання",
"private_link_label": "Приватне посилання",
"private_link_hint": "Після кожного використання ваше приватне посилання створюватиметься повторно",
"copy_private_link": "Копіювати приватне посилання",
"private_link_description": "Створіть приватну URL-адресу, щоб поширювати її, не виказуючи свого імені користувача в Cal",
"invitees_can_schedule": "Запрошені можуть планувати",
@ -700,16 +707,21 @@
"delete_account_confirmation_message": "Справді видалити обліковий запис Cal.com? Усі, кому ви надавали посилання на свій обліковий запис, більше не зможуть бронювати ваш час за його допомогою. Усі збережені налаштування буде втрачено.",
"integrations": "Інтеграції",
"apps": "Додатки",
"category_apps": "Додатки з категорії «{{category}}»",
"app_store": "App Store",
"app_store_description": "Спілкування та технології на робочому місці.",
"settings": "Параметри",
"event_type_moved_successfully": "Тип події переміщено",
"next_step_text": "Наступний крок",
"next_step": "Пропустити крок",
"prev_step": "Попередній крок",
"install": "Установити",
"installed": "Установлено",
"active_install_one": "{{count}} активна інсталяція",
"active_install_other": "Активних інсталяцій: {{count}}",
"globally_install": "Установлено глобально",
"app_successfully_installed": "Додаток установлено",
"app_could_not_be_installed": "Не вдалося встановити додаток",
"disconnect": "Від’єднати",
"embed_your_calendar": "Вбудуйте календар у свою вебсторінку",
"connect_your_favourite_apps": "Підключіть улюблені застосунки.",
@ -720,6 +732,7 @@
"connect_additional_calendar": "Підключити додатковий календар",
"conferencing": "Відеоконференції",
"calendar": "Календар",
"payments": "Платежі",
"not_installed": "Не встановлено",
"error_password_mismatch": "Паролі не збігаються.",
"error_required_field": "Це поле обов’язкове.",
@ -753,9 +766,15 @@
"import_from": "Імпортувати з",
"access_token": "Токен доступу",
"visit_roadmap": "Дорожня карта",
"featured_categories": "Рекомендовані категорії",
"popular_categories": "Популярні категорії",
"number_apps_one": "{{count}} додаток",
"number_apps_other": "Додатків: {{count}}",
"trending_apps": "Популярні додатки",
"explore_apps": "Додатки з категорії «{{category}}»",
"installed_apps": "Установлені додатки",
"no_category_apps": "Немає додатків із категорії «{{category}}»",
"no_category_apps_description_calendar": "Додайте додаток-календар, щоб перевіряти розклад на наявність конфліктів і уникати подвійних бронювань",
"empty_installed_apps_headline": "Не встановлено жодних додатків",
"empty_installed_apps_description": "Додатки дають змогу оптимізувати робочий процес і спростити роботу з графіком.",
"empty_installed_apps_button": "Переглянути магазин додатків",
@ -793,6 +812,7 @@
"set_to_default": "Установити за замовчуванням",
"new_schedule_btn": "Створити розклад",
"add_new_schedule": "Додати новий розклад",
"add_new_calendar": "Додати новий календар",
"delete_schedule": "Видалити розклад",
"schedule_created_successfully": "Розклад «{{scheduleName}}» створено",
"availability_updated_successfully": "Розклад «{{scheduleName}}» оновлено",
@ -1045,5 +1065,6 @@
"set_ping_link": "Установити Ping-посилання",
"organizer_name_info": "Ваше ім’я",
"theme_light": "Світла",
"theme_dark": "Темна"
"theme_dark": "Темна",
"report_app": "Поскаржитися на додаток"
}

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "Sử dụng đường link dưới đây để thay đổi mật khẩu của bạn",
"hey_there": "Xin chào,",
"forgot_your_password_calcom": "Quên mật khẩu của bạn? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | Loại Sự Kiện",
"delete_webhook_confirmation_message": "Bạn có chắc bạn muốn xoá webhook này? Bạn sẽ không còn nhận dữ liệu cuộc họp Cal.com tại đường URL này, trong thời gian thực, khi một sự kiện được lên lịch hoặc huỷ.",
"confirm_delete_webhook": "Vâng, hãy xoá webhook",
"edit_webhook": "Chỉnh Webhook",
@ -633,7 +632,6 @@
"billing": "Thanh toán",
"manage_your_billing_info": "Quản lý thông tin thanh toán của bạn và hủy đăng ký của bạn.",
"availability": "Lịch khả dụng",
"availability_title": "{{availabilityTitle}} | Tình trạng trống lịch",
"edit_availability": "Sửa tình trạng trống lịch",
"configure_availability": "Định cấu hình thời gian mà mọi người có thể đặt lịch hẹn.",
"copy_times_to": "Sao chép thời gian đến",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "使用下面的链接重置您的密码",
"hey_there": "嘿,您好!",
"forgot_your_password_calcom": "忘记密码?- Cal.com",
"event_type_title": "{{eventTypeTitle}} | 活动类型",
"delete_webhook_confirmation_message": "您确定要删除此Webhook吗当活动被安排或取消时您将不再会在指定的链接收到 Cal.com 实时提供的会议数据。",
"confirm_delete_webhook": "是,删除 Webhook",
"edit_webhook": "编辑 Webhook",
@ -633,7 +632,6 @@
"billing": "计费",
"manage_your_billing_info": "管理您的账单信息和取消您的订阅。",
"availability": "可预约时间",
"availability_title": "{{availabilityTitle}} | 可预约时间",
"edit_availability": "编辑可预约时间",
"configure_availability": "配置您可预约的时间。",
"copy_times_to": "复制时间到",

View File

@ -112,7 +112,6 @@
"use_link_to_reset_password": "使用以下連結重置密碼",
"hey_there": "哈囉,",
"forgot_your_password_calcom": "忘記密碼了? - Cal.com",
"event_type_title": "{{eventTypeTitle}} | 活動類型",
"delete_webhook_confirmation_message": "您確定要刪除這組 Webhook 嗎?之後活動預定或取消的時候,您就不會即時經特定連結收到 Cal.com 的會議資料。",
"confirm_delete_webhook": "是的,刪除 Webhook",
"edit_webhook": "編輯 Webhook",
@ -633,7 +632,6 @@
"billing": "付費",
"manage_your_billing_info": "管理付費資訊,以及取消訂閱。",
"availability": "開放時間",
"availability_title": "{{availabilityTitle}} | 開放時間",
"edit_availability": "編輯開放時間",
"configure_availability": "設定開放接受預約的時段。",
"copy_times_to": "將時間複製到",

View File

@ -154,6 +154,21 @@ module.exports = {
900: "#f3f4f6",
},
},
keyframes: {
"fade-in-up": {
"0%": {
opacity: 0.75,
transform: "translateY(20px)",
},
"100%": {
opacity: 1,
transform: "translateY(0)",
},
},
},
animation: {
"fade-in-up": "fade-in-up 0.35s cubic-bezier(.21,1.02,.73,1)",
},
boxShadow: {
dropdown: "0px 2px 6px -1px rgba(0, 0, 0, 0.08)",
},

View File

@ -5,9 +5,7 @@ import cache from "memory-cache";
import { getCalendar } from "@calcom/app-store/_utils/getCalendar";
import getApps from "@calcom/app-store/utils";
import { sendBrokenIntegrationEmail } from "@calcom/emails";
import { getUid } from "@calcom/lib/CalEventParser";
import { getErrorFromUnknown } from "@calcom/lib/errors";
import logger from "@calcom/lib/logger";
import { performance } from "@calcom/lib/server/perfObserver";
import type { CalendarEvent, EventBusyDate, NewCalendarEventType } from "@calcom/types/Calendar";
@ -15,13 +13,13 @@ import type { EventResult } from "@calcom/types/EventManager";
const log = logger.getChildLogger({ prefix: ["CalendarManager"] });
export const getCalendarCredentials = (credentials: Array<Credential>, userId: number) => {
export const getCalendarCredentials = (credentials: Array<Credential>) => {
const calendarCredentials = getApps(credentials)
.filter((app) => app.type.endsWith("_calendar"))
.flatMap((app) => {
const credentials = app.credentials.flatMap((credential) => {
const calendar = getCalendar(credential);
return [{ integration: app, credential, calendar }];
return app.variant === "calendar" ? [{ integration: app, credential, calendar }] : [];
});
return credentials.length ? credentials : [];
});
@ -54,9 +52,15 @@ export const getConnectedCalendars = async (
}))
.sortBy(["primary"])
.value();
const primary = calendars.find((item) => item.primary) ?? calendars[0];
const primary = calendars.find((item) => item.primary) ?? calendars.find((cal) => cal !== undefined);
if (!primary) {
throw new Error("No primary calendar found");
return {
integration,
credentialId,
error: {
message: "No primary calendar found",
},
};
}
return {
integration,

View File

@ -91,9 +91,15 @@ const CreateANewTeamForm = (props: { nextStep: () => void; setTeamId: (teamId: n
)}
/>
</div>
<Button type="submit" EndIcon={Icon.FiArrowRight} className="w-full justify-center">
{t("continue")}
</Button>
<div className="flex space-x-2">
<Button color="secondary" href="/settings" className="w-full justify-center">
{t("cancel")}
</Button>
<Button color="primary" type="submit" EndIcon={Icon.FiArrowRight} className="w-full justify-center">
{t("continue")}
</Button>
</div>
{createTeamMutation.isError && <p className="mt-4 text-red-700">{createTeamMutation.error.message}</p>}
</Form>
);

View File

@ -28,11 +28,11 @@ export const AddVariablesDropdown = (props: IAddVariablesDropdown) => {
return (
<Dropdown>
<DropdownMenuTrigger className="px-0 py-0 focus:bg-transparent focus:ring-transparent focus:ring-offset-0 ">
<Label>
<div className="flex">
<DropdownMenuTrigger className="focus:bg-transparent focus:ring-transparent focus:ring-offset-0 ">
<Label className="mb-0">
<div className="flex items-center">
{t("add_variable")}
<Icon.FiChevronDown className="mt-[1.8px] ml-1 h-4 w-4" />
<Icon.FiChevronDown className="ml-1 h-4 w-4" />
</div>
</Label>
</DropdownMenuTrigger>
@ -48,7 +48,7 @@ export const AddVariablesDropdown = (props: IAddVariablesDropdown) => {
onClick={() => props.addVariable(props.isEmailSubject, t(`${variable}_workflow`))}>
<div className="md:grid md:grid-cols-2">
<div className="mr-3 text-left md:col-span-1">
{`{${t(`${variable}_workflow`).toUpperCase().replace(" ", "_")}}`}
{`{${t(`${variable}_workflow`).toUpperCase().replace(/ /g, "_")}}`}
</div>
<div className="invisible text-left text-gray-600 md:visible md:col-span-1">
{t(`${variable}_info`)}

View File

@ -86,14 +86,14 @@ export default function WorkflowStepContainer(props: WorkflowStepProps) {
const cursorPosition = refEmailSubject?.current?.selectionStart || currentEmailSubject.length;
const subjectWithAddedVariable = `${currentEmailSubject.substring(0, cursorPosition)}{${variable
.toUpperCase()
.replace(" ", "_")}}${currentEmailSubject.substring(cursorPosition)}`;
.replace(/ /g, "_")}}${currentEmailSubject.substring(cursorPosition)}`;
form.setValue(`steps.${step.stepNumber - 1}.emailSubject`, subjectWithAddedVariable);
} else {
const currentMessageBody = refReminderBody?.current?.value || "";
const cursorPosition = refReminderBody?.current?.selectionStart || currentMessageBody.length;
const messageWithAddedVariable = `${currentMessageBody.substring(0, cursorPosition)}{${variable
.toUpperCase()
.replace(" ", "_")}}${currentMessageBody.substring(cursorPosition)}`;
.replace(/ /g, "_")}}${currentMessageBody.substring(cursorPosition)}`;
form.setValue(`steps.${step.stepNumber - 1}.reminderBody`, messageWithAddedVariable);
}
}
@ -327,11 +327,11 @@ export default function WorkflowStepContainer(props: WorkflowStepProps) {
/>
</div>
{isCustomReminderBodyNeeded && (
<div className="mt-2 rounded-md bg-gray-50 p-2 md:p-4">
<div className="mt-2 rounded-md bg-gray-50 p-4 pt-2 md:p-6 md:pt-4">
{isEmailSubjectNeeded && (
<div className="mb-5">
<div className="flex">
<Label className="flex-none">{t("subject")}</Label>
<div className="mb-2 flex items-center">
<Label className="mb-0 flex-none">{t("subject")}</Label>
<div className="flex-grow text-right">
<AddVariablesDropdown addVariable={addVariable} isEmailSubject={true} />
</div>
@ -353,8 +353,8 @@ export default function WorkflowStepContainer(props: WorkflowStepProps) {
)}
</div>
)}
<div className="flex">
<Label className="flex-none">
<div className="mb-2 flex items-center">
<Label className="mb-0 flex-none">
{isEmailSubjectNeeded ? t("email_body") : t("text_message")}
</Label>
<div className="flex-grow text-right">

View File

@ -45,12 +45,12 @@ export function translateVariablesToEnglish(text: string, language: { locale: st
originalVariables.forEach((originalVariable) => {
const newVariableName = variable.replace("_NAME", "");
if (
language.t(originalVariable).replace(/ /, "_").toUpperCase() === variable ||
language.t(originalVariable).replace(/ /, "_").toUpperCase() === newVariableName
language.t(originalVariable).replace(/ /g, "_").toUpperCase() === variable ||
language.t(originalVariable).replace(/ /g, "_").toUpperCase() === newVariableName
) {
newText = newText.replace(
variable,
language.t(originalVariable, { lng: "en" }).replace(" ", "_").toUpperCase()
language.t(originalVariable, { lng: "en" }).replace(/ /g, "_").toUpperCase()
);
return;
}

View File

@ -626,7 +626,7 @@ const loggedInViewerRouter = createProtectedRouter()
async resolve({ ctx }) {
const { user } = ctx;
// get user's credentials + their connected integrations
const calendarCredentials = getCalendarCredentials(user.credentials, user.id);
const calendarCredentials = getCalendarCredentials(user.credentials);
// get all the connected integrations' calendars (from third party)
const connectedCalendars = await getConnectedCalendars(calendarCredentials, user.selectedCalendars);
@ -692,7 +692,7 @@ const loggedInViewerRouter = createProtectedRouter()
async resolve({ ctx, input }) {
const { user } = ctx;
const { integration, externalId, eventTypeId } = input;
const calendarCredentials = getCalendarCredentials(user.credentials, user.id);
const calendarCredentials = getCalendarCredentials(user.credentials);
const connectedCalendars = await getConnectedCalendars(calendarCredentials, user.selectedCalendars);
const allCals = connectedCalendars.map((cal) => cal.calendars ?? []).flat();

View File

@ -26,6 +26,7 @@ import Dropdown, {
DropdownMenuTrigger,
} from "@calcom/ui/Dropdown";
import { Icon } from "@calcom/ui/Icon";
import Button from "@calcom/ui/v2/core/Button";
/* TODO: Get this from endpoint */
import pkg from "../../../../apps/web/package.json";
@ -118,7 +119,7 @@ export function ShellSubHeading(props: {
}
const Layout = (props: LayoutProps) => {
const pageTitle = typeof props.heading === "string" ? props.heading : props.title;
const pageTitle = typeof props.heading === "string" && !props.title ? props.heading : props.title;
return (
<>
@ -747,9 +748,13 @@ export function ShellMain(props: LayoutProps) {
<>
<div className="flex items-baseline sm:mt-0">
{!!props.backPath && (
<Icon.FiArrowLeft
className="mr-3 hover:cursor-pointer"
<Button
size="icon"
color="minimal"
onClick={() => router.push(props.backPath as string)}
StartIcon={Icon.FiArrowLeft}
aria-label="Go Back"
className="ltr:mr-2 rtl:ml-2"
/>
)}
{props.heading && (
@ -761,7 +766,7 @@ export function ShellMain(props: LayoutProps) {
{props.HeadingLeftIcon && <div className="ltr:mr-4">{props.HeadingLeftIcon}</div>}
<div className="w-full ltr:mr-4 rtl:ml-4 sm:block">
{props.heading && (
<h1 className="font-cal mb-1 text-xl font-bold capitalize tracking-wide text-black">
<h1 className="font-cal mb-1 text-xl font-bold capitalize tracking-wide text-black">
{!isLocaleReady ? <SkeletonText invisible /> : props.heading}
</h1>
)}
@ -772,7 +777,11 @@ export function ShellMain(props: LayoutProps) {
)}
</div>
{props.CTA && (
<div className="cta fixed right-4 bottom-[75px] z-40 mb-4 flex-shrink-0 sm:relative sm:bottom-auto sm:right-auto sm:z-0">
<div
className={classNames(
props.backPath ? "relative" : "fixed right-4 bottom-[75px] z-40 ",
"cta mb-4 flex-shrink-0 sm:relative sm:bottom-auto sm:right-auto sm:z-0"
)}>
{props.CTA}
</div>
)}

View File

@ -270,7 +270,7 @@ export const PasswordField = forwardRef<HTMLInputElement, InputFieldProps>(funct
<div className="relative">
<InputField
type={isPasswordVisible ? "text" : "password"}
placeholder="•••••••••••••"
placeholder={isPasswordVisible ? "0hMy4P4ssw0rd" : "•••••••••••••"}
ref={ref}
{...props}
className={classNames("mb-0 pr-10", props.className)}
@ -278,7 +278,10 @@ export const PasswordField = forwardRef<HTMLInputElement, InputFieldProps>(funct
<Tooltip content={textLabel}>
<button
className="absolute bottom-0 right-3 h-9 text-gray-900"
className={classNames(
"absolute right-3 h-9 text-gray-900",
props.hintErrors ? "top-[22px]" : "bottom-0"
)}
type="button"
onClick={() => toggleIsPasswordVisible()}>
{isPasswordVisible ? (

View File

@ -118,15 +118,12 @@ const SettingsSidebarContainer = ({ className = "" }) => {
aria-label="Tabs">
<>
<div className="desktop-only pt-4" />
<div>
<VerticalTabItem
name="Back"
href="/"
icon={Icon.FiArrowLeft}
textClassNames="text-md font-medium leading-none text-black"
className="my-6"
/>
</div>
<VerticalTabItem
name="Back"
href="/."
icon={Icon.FiArrowLeft}
textClassNames="text-md font-medium leading-none text-black"
/>
{tabsWithPermissions.map((tab) => {
return tab.name !== "teams" ? (
<React.Fragment key={tab.href}>
@ -332,7 +329,7 @@ export default function SettingsLayout({
<MobileSettingsContainer onSideContainerOpen={() => setSideContainerOpen(!sideContainerOpen)} />
}>
<div className="flex flex-1 [&>*]:flex-1">
<div className="mx-auto max-w-xs justify-center md:max-w-3xl">
<div className="mx-auto max-w-3xl justify-center">
<ShellHeader />
<ErrorBoundary>{children}</ErrorBoundary>
</div>
@ -347,7 +344,7 @@ function ShellHeader() {
const { meta } = useMeta();
const { t, isLocaleReady } = useLocale();
return (
<header className="mx-auto block max-w-xs justify-between pt-12 sm:flex sm:pt-8 md:max-w-3xl">
<header className="mx-auto block justify-between pt-12 sm:flex sm:pt-8">
<div className="mb-8 flex w-full items-center border-b border-gray-200 pb-8">
{meta.backButton && (
<a href="javascript:history.back()">

View File

@ -47,7 +47,7 @@ const VerticalTabItem = function ({
target={props.isExternalLink ? "_blank" : "_self"}
className={classNames(
props.textClassNames || "text-sm font-medium leading-none text-gray-600",
"group flex w-64 flex-row items-center rounded-md px-3 py-[10px] hover:bg-gray-100 group-hover:text-gray-700 [&[aria-current='page']]:bg-gray-200 [&[aria-current='page']]:text-gray-900",
"min-h-9 group flex w-64 flex-row items-center rounded-md px-3 py-[10px] hover:bg-gray-100 group-hover:text-gray-700 [&[aria-current='page']]:bg-gray-200 [&[aria-current='page']]:text-gray-900",
props.disabled && "pointer-events-none !opacity-30",
(isChild || !props.icon) && "ml-7 mr-5 w-auto",
!info ? "h-6" : "h-14",

View File

@ -1,3 +1,4 @@
import classNames from "classnames";
import { Check, Info } from "react-feather";
import toast from "react-hot-toast";
@ -5,8 +6,12 @@ export default function showToast(message: string, variant: "success" | "warning
switch (variant) {
case "success":
toast.custom(
() => (
<div className="data-testid-toast-success bg-brand-500 mb-2 flex h-9 items-center space-x-2 rounded-md p-3 text-sm font-semibold text-white shadow-md">
(t) => (
<div
className={classNames(
"data-testid-toast-success bg-brand-500 mb-2 flex h-9 items-center space-x-2 rounded-md p-3 text-sm font-semibold text-white shadow-md",
t.visible && "animate-fade-in-up"
)}>
<Check className="h-4 w-4" />
<p>{message}</p>
</div>
@ -16,8 +21,12 @@ export default function showToast(message: string, variant: "success" | "warning
break;
case "error":
toast.custom(
() => (
<div className="mb-2 flex h-9 items-center space-x-2 rounded-md bg-red-100 p-3 text-sm font-semibold text-red-900 shadow-md">
(t) => (
<div
className={classNames(
"animate-fade-in-up mb-2 flex h-9 items-center space-x-2 rounded-md bg-red-100 p-3 text-sm font-semibold text-red-900 shadow-md",
t.visible && "animate-fade-in-up"
)}>
<Info className="h-4 w-4" />
<p>{message}</p>
</div>
@ -27,8 +36,12 @@ export default function showToast(message: string, variant: "success" | "warning
break;
case "warning":
toast.custom(
() => (
<div className="bg-brand-500 mb-2 flex h-9 items-center space-x-2 rounded-md p-3 text-sm font-semibold text-white shadow-md">
(t) => (
<div
className={classNames(
"animate-fade-in-up bg-brand-500 mb-2 flex h-9 items-center space-x-2 rounded-md p-3 text-sm font-semibold text-white shadow-md",
t.visible && "animate-fade-in-up"
)}>
<Info className="h-4 w-4" />
<p>{message}</p>
</div>
@ -38,8 +51,12 @@ export default function showToast(message: string, variant: "success" | "warning
break;
default:
toast.custom(
() => (
<div className="bg-brand-500 mb-2 flex h-9 items-center space-x-2 rounded-md p-3 text-sm font-semibold text-white shadow-md">
(t) => (
<div
className={classNames(
"animate-fade-in-up bg-brand-500 mb-2 flex h-9 items-center space-x-2 rounded-md p-3 text-sm font-semibold text-white shadow-md",
t.visible && "animate-fade-in-up"
)}>
<Check className="h-4 w-4" />
<p>{message}</p>
</div>

View File

@ -167,7 +167,7 @@ const DatePicker = ({
</button>
</div>
</div>
<div className="border-bookinglightest mb-2 grid grid-cols-7 gap-4 border-t border-b text-center dark:border-gray-800 md:mb-0 md:border-0">
<div className="border-bookinglightest mb-2 grid grid-cols-7 gap-4 border-t border-b text-center dark:border-neutral-900 md:mb-0 md:border-0">
{weekdayNames(locale, weekStart, "short").map((weekDay) => (
<div
key={weekDay}

View File

@ -6,7 +6,6 @@ import * as path from "path";
dotEnv.config({ path: ".env" });
const outputDir = path.join(__dirname, "test-results");
const testDir = path.join(__dirname, "apps/web/playwright");
const DEFAULT_NAVIGATION_TIMEOUT = 15000;