From b8b24c04dced5fd09a3d984359559d8813dfdfd3 Mon Sep 17 00:00:00 2001 From: Hariom Balhara Date: Fri, 3 Mar 2023 22:00:44 +0530 Subject: [PATCH 001/228] We dont support button html (#7500) --- packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts b/packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts index a1a26048817131..79e83175ea2fbf 100644 --- a/packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts +++ b/packages/embeds/embed-core/src/FloatingButton/FloatingButton.ts @@ -26,7 +26,7 @@ export class FloatingButton extends HTMLElement { if (!buttonEl) { throw new Error("Button not found"); } - buttonEl.innerHTML = newValue; + buttonEl.textContent = newValue; } else if (name === "data-hide-button-icon") { const buttonIconEl = this.shadowRoot?.querySelector("#button-icon"); if (!buttonIconEl) { From 2d26d73eb348560f2faef059d0512cfcd436807a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efra=C3=ADn=20Roch=C3=ADn?= Date: Fri, 3 Mar 2023 09:33:16 -0700 Subject: [PATCH 002/228] Fix/DST issues (#7462) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * use the organizer timezone and invitee timezone to show slots * type fixes * set start date on selected TZ on booking payload * add considerations when only the invitee is on DTS * Apply suggestions from code review Co-authored-by: alannnc Co-authored-by: Omar López * fixes typo * Apply suggestions from code review Co-authored-by: alannnc * cleaning --------- Co-authored-by: Alex van Andel Co-authored-by: Omar López Co-authored-by: alannnc --- .../components/booking/pages/BookingPage.tsx | 4 +- apps/web/test/lib/slots.test.ts | 5 ++ .../features/bookings/lib/handleNewBooking.ts | 38 +++++++++-- .../components/v2/TeamAvailabilityTimes.tsx | 5 +- packages/lib/date-fns/index.ts | 66 +++++++++++++++++++ packages/lib/slots.ts | 33 +++++++--- packages/trpc/server/routers/viewer/slots.tsx | 2 + 7 files changed, 134 insertions(+), 19 deletions(-) diff --git a/apps/web/components/booking/pages/BookingPage.tsx b/apps/web/components/booking/pages/BookingPage.tsx index c51a1d7e6ce8d8..525999b6450825 100644 --- a/apps/web/components/booking/pages/BookingPage.tsx +++ b/apps/web/components/booking/pages/BookingPage.tsx @@ -426,8 +426,8 @@ const BookingPage = ({ } else { mutation.mutate({ ...booking, - start: dayjs(date).format(), - end: dayjs(date).add(duration, "minute").format(), + start: dayjs(date).tz(timeZone()).format(), + end: dayjs(date).tz(timeZone()).add(duration, "minute").format(), eventTypeId: eventType.id, eventTypeSlug: eventType.slug, timeZone: timeZone(), diff --git a/apps/web/test/lib/slots.test.ts b/apps/web/test/lib/slots.test.ts index 3643c593f04547..0c8407f8599483 100644 --- a/apps/web/test/lib/slots.test.ts +++ b/apps/web/test/lib/slots.test.ts @@ -24,6 +24,7 @@ describe("Tests the slot logic", () => { }, ], eventLength: 60, + organizerTimeZone: "America/Toronto", }) ).toHaveLength(24); }); @@ -45,6 +46,7 @@ describe("Tests the slot logic", () => { }, ], eventLength: 60, + organizerTimeZone: "America/Toronto", }) ).toHaveLength(12); }); @@ -64,6 +66,7 @@ describe("Tests the slot logic", () => { }, ], eventLength: 60, + organizerTimeZone: "America/Toronto", }) ).toHaveLength(0); }); @@ -84,6 +87,7 @@ describe("Tests the slot logic", () => { minimumBookingNotice: 0, workingHours, eventLength: 60, + organizerTimeZone: "America/Toronto", }) ).toHaveLength(0); }); @@ -104,6 +108,7 @@ describe("Tests the slot logic", () => { }, ], eventLength: 60, + organizerTimeZone: "America/Toronto", }) ).toHaveLength(11); }); diff --git a/packages/features/bookings/lib/handleNewBooking.ts b/packages/features/bookings/lib/handleNewBooking.ts index d353b8a75d882c..db41714499a736 100644 --- a/packages/features/bookings/lib/handleNewBooking.ts +++ b/packages/features/bookings/lib/handleNewBooking.ts @@ -19,7 +19,7 @@ import { cancelScheduledJobs, scheduleTrigger } from "@calcom/app-store/zapier/l import EventManager from "@calcom/core/EventManager"; import { getEventName } from "@calcom/core/event"; import { getUserAvailability } from "@calcom/core/getUserAvailability"; -import type { ConfigType } from "@calcom/dayjs"; +import type { ConfigType, Dayjs } from "@calcom/dayjs"; import dayjs from "@calcom/dayjs"; import { sendAttendeeRequestEmail, @@ -35,6 +35,7 @@ import { deleteScheduledSMSReminder } from "@calcom/features/ee/workflows/lib/re import getWebhooks from "@calcom/features/webhooks/lib/getWebhooks"; import { isPrismaObjOrUndefined, parseRecurringEvent } from "@calcom/lib"; import { getVideoCallUrl } from "@calcom/lib/CalEventParser"; +import { getDSTDifference, isInDST } from "@calcom/lib/date-fns"; import { getDefaultEvent, getGroupName, getUsernameList } from "@calcom/lib/defaultEvents"; import { getErrorFromUnknown } from "@calcom/lib/errors"; import getPaymentAppData from "@calcom/lib/getPaymentAppData"; @@ -111,16 +112,40 @@ const isWithinAvailableHours = ( timeSlot: { start: ConfigType; end: ConfigType }, { workingHours, + organizerTimeZone, + inviteeTimeZone, }: { workingHours: WorkingHours[]; + organizerTimeZone: string; + inviteeTimeZone: string; } ) => { const timeSlotStart = dayjs(timeSlot.start).utc(); const timeSlotEnd = dayjs(timeSlot.end).utc(); + const isOrganizerInDST = isInDST(dayjs().tz(organizerTimeZone)); + const isInviteeInDST = isInDST(dayjs().tz(organizerTimeZone)); + const isOrganizerInDSTWhenSlotStart = isInDST(timeSlotStart.tz(organizerTimeZone)); + const isInviteeInDSTWhenSlotStart = isInDST(timeSlotStart.tz(inviteeTimeZone)); + const organizerDSTDifference = getDSTDifference(organizerTimeZone); + const inviteeDSTDifference = getDSTDifference(inviteeTimeZone); + const sameDSTUsers = isOrganizerInDSTWhenSlotStart === isInviteeInDSTWhenSlotStart; + const organizerDST = isOrganizerInDST === isOrganizerInDSTWhenSlotStart; + const inviteeDST = isInviteeInDST === isInviteeInDSTWhenSlotStart; + const getTime = (slotTime: Dayjs, minutes: number) => + slotTime + .startOf("day") + .add( + sameDSTUsers && organizerDST && inviteeDST + ? minutes + : minutes - + (isOrganizerInDSTWhenSlotStart || isOrganizerInDST + ? organizerDSTDifference + : inviteeDSTDifference), + "minutes" + ); for (const workingHour of workingHours) { - // TODO: Double check & possibly fix timezone conversions. - const startTime = timeSlotStart.startOf("day").add(workingHour.startTime, "minute"); - const endTime = timeSlotEnd.startOf("day").add(workingHour.endTime, "minute"); + const startTime = getTime(timeSlotStart, workingHour.startTime); + const endTime = getTime(timeSlotEnd, workingHour.endTime); if ( workingHour.days.includes(timeSlotStart.day()) && // UTC mode, should be performant. @@ -247,7 +272,7 @@ async function ensureAvailableUsers( eventType: Awaited> & { users: IsFixedAwareUser[]; }, - input: { dateFrom: string; dateTo: string }, + input: { dateFrom: string; dateTo: string; timeZone: string }, recurringDatesInfo?: { allRecurringDates: string[] | undefined; currentRecurringIndex: number | undefined; @@ -271,6 +296,8 @@ async function ensureAvailableUsers( { start: input.dateFrom, end: input.dateTo }, { workingHours, + organizerTimeZone: eventType.timeZone || eventType?.schedule?.timeZone || user.timeZone, + inviteeTimeZone: input.timeZone, } ) ) { @@ -567,6 +594,7 @@ async function handler( { dateFrom: reqBody.start, dateTo: reqBody.end, + timeZone: reqBody.timeZone, }, { allRecurringDates, diff --git a/packages/features/ee/teams/components/v2/TeamAvailabilityTimes.tsx b/packages/features/ee/teams/components/v2/TeamAvailabilityTimes.tsx index 43e4a4df7b6aa4..975d81e3f51dc6 100644 --- a/packages/features/ee/teams/components/v2/TeamAvailabilityTimes.tsx +++ b/packages/features/ee/teams/components/v2/TeamAvailabilityTimes.tsx @@ -1,8 +1,8 @@ import classNames from "classnames"; import React from "react"; -import { ITimezone } from "react-timezone-select"; +import type { ITimezone } from "react-timezone-select"; -import { Dayjs } from "@calcom/dayjs"; +import type { Dayjs } from "@calcom/dayjs"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import getSlots from "@calcom/lib/slots"; import { trpc } from "@calcom/trpc/react"; @@ -42,6 +42,7 @@ export default function TeamAvailabilityTimes(props: Props) { workingHours: data?.workingHours || [], minimumBookingNotice: 0, eventLength: props.frequency, + organizerTimeZone: `${data?.timeZone}`, }) : []; diff --git a/packages/lib/date-fns/index.ts b/packages/lib/date-fns/index.ts index 57658bcb04771f..9d1b1744f6254c 100644 --- a/packages/lib/date-fns/index.ts +++ b/packages/lib/date-fns/index.ts @@ -126,3 +126,69 @@ export const isNextDayInTimezone = (time: string, timezoneA: string, timezoneB: const timezoneBIsLaterTimezone = sortByTimezone(timezoneA, timezoneB) === -1; return hoursTimezoneBIsEarlier && timezoneBIsLaterTimezone; }; + +/** + * Dayjs does not expose the timeZone value publicly through .get("timeZone") + * instead, we as devs are required to somewhat hack our way to get the + * tz value as string + * @param date Dayjs + * @returns Time Zone name + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const getTimeZone = (date: Dayjs): string => (date as any)["$x"]["$timezone"]; + +/** + * Verify if timeZone has Daylight Saving Time (DST). + * + * Many countries in the Northern Hemisphere. Daylight Saving Time usually starts in March-April and ends in + * September-November when the countries return to standard time, or winter time as it is also known. + * + * In the Southern Hemisphere (south of the equator) the participating countries usually start the DST period + * in September-November and end DST in March-April. + * + * @param timeZone Time Zone Name (Ex. America/Mazatlan) + * @returns boolean + */ +export const timeZoneWithDST = (timeZone: string): boolean => { + const jan = dayjs.tz(`${new Date().getFullYear()}-01-01T00:00:00`, timeZone); + const jul = dayjs.tz(`${new Date().getFullYear()}-07-01T00:00:00`, timeZone); + return jan.utcOffset() !== jul.utcOffset(); +}; + +/** + * Get DST difference. + * Today clocks are almost always set one hour back or ahead. + * However, on Lord Howe Island, Australia, clocks are set only 30 minutes forward + * from LHST (UTC+10:30) to LHDT (UTC+11) during DST. + * @param timeZone Time Zone Name (Ex. America/Mazatlan) + * @returns minutes + */ +export const getDSTDifference = (timeZone: string): number => { + const jan = dayjs.tz(`${new Date().getFullYear()}-01-01T00:00:00`, timeZone); + const jul = dayjs.tz(`${new Date().getFullYear()}-07-01T00:00:00`, timeZone); + return jul.utcOffset() - jan.utcOffset(); +}; + +/** + * Get UTC offset of given time zone when in DST + * @param timeZone Time Zone Name (Ex. America/Mazatlan) + * @returns minutes + */ +export const getUTCOffsetInDST = (timeZone: string) => { + if (timeZoneWithDST(timeZone)) { + const jan = dayjs.tz(`${new Date().getFullYear()}-01-01T00:00:00`, timeZone); + const jul = dayjs.tz(`${new Date().getFullYear()}-07-01T00:00:00`, timeZone); + return jan.utcOffset() < jul.utcOffset() ? jul.utcOffset() : jan.utcOffset(); + } + return 0; +}; +/** + * Verifies if given time zone is in DST + * @param date + * @returns + */ +export const isInDST = (date: Dayjs) => { + const timeZone = getTimeZone(date); + + return timeZoneWithDST(timeZone) && date.utcOffset() === getUTCOffsetInDST(timeZone); +}; diff --git a/packages/lib/slots.ts b/packages/lib/slots.ts index 181749c1b235f2..e34c8b24134094 100644 --- a/packages/lib/slots.ts +++ b/packages/lib/slots.ts @@ -3,6 +3,7 @@ import dayjs from "@calcom/dayjs"; import type { WorkingHours, TimeRange as DateOverride } from "@calcom/types/schedule"; import { getWorkingHours } from "./availability"; +import { getTimeZone, isInDST, getDSTDifference } from "./date-fns"; export type GetSlots = { inviteeDate: Dayjs; @@ -11,6 +12,7 @@ export type GetSlots = { dateOverrides?: DateOverride[]; minimumBookingNotice: number; eventLength: number; + organizerTimeZone: string; }; export type TimeFrame = { userIds?: number[]; startTime: number; endTime: number }; @@ -22,12 +24,16 @@ function buildSlots({ frequency, eventLength, startDate, + organizerTimeZone, + inviteeTimeZone, }: { computedLocalAvailability: TimeFrame[]; startOfInviteeDay: Dayjs; startDate: Dayjs; frequency: number; eventLength: number; + organizerTimeZone: string; + inviteeTimeZone: string; }) { // no slots today if (startOfInviteeDay.isBefore(startDate, "day")) { @@ -92,11 +98,20 @@ function buildSlots({ }); } } - // XXX: Hack alert, as dayjs is supposedly not aware of timezone the current slot may have invalid UTC offset. - const timeZone = - (startOfInviteeDay as unknown as { $x: { $timezone: string } })["$x"]["$timezone"] || "UTC"; + + const isOrganizerInDST = isInDST(startOfInviteeDay.tz(organizerTimeZone)); + const isInviteeInDST = isInDST(startOfInviteeDay.tz(inviteeTimeZone)); + const organizerDSTDifference = getDSTDifference(organizerTimeZone); + const inviteeDSTDifference = getDSTDifference(inviteeTimeZone); const slots: { time: Dayjs; userIds?: number[] }[] = []; + const resultDSTDifference = isOrganizerInDST ? organizerDSTDifference : -inviteeDSTDifference; + const getTime = (time: number) => { + const minutes = isOrganizerInDST !== isInviteeInDST ? time - resultDSTDifference : time; + + return startOfInviteeDay.tz(inviteeTimeZone).add(minutes, "minutes"); + }; + for (const item of Object.values(slotsTimeFrameAvailable)) { /* * @calcom/web:dev: 2022-11-06T00:00:00-04:00 @@ -108,7 +123,7 @@ function buildSlots({ */ const slot = { userIds: item.userIds, - time: dayjs.tz(startOfInviteeDay.add(item.startTime, "minute").format("YYYY-MM-DDTHH:mm:ss"), timeZone), + time: getTime(item.startTime), }; // If the startOfInviteeDay has a different UTC offset than the slot, a DST change has occurred. // As the time has now fallen backwards, or forwards; this difference - @@ -132,6 +147,7 @@ const getSlots = ({ workingHours, dateOverrides = [], eventLength, + organizerTimeZone, }: GetSlots) => { // current date in invitee tz const startDate = dayjs().utcOffset(inviteeDate.utcOffset()).add(minimumBookingNotice, "minute"); @@ -151,12 +167,7 @@ const getSlots = ({ return []; } - // Dayjs does not expose the timeZone value publicly through .get("timeZone") - // instead, we as devs are required to somewhat hack our way to get the ... - // tz value as string - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const timeZone: string = (inviteeDate as any)["$x"]["$timezone"]; - + const timeZone: string = getTimeZone(inviteeDate); const workingHoursUTC = workingHours.map((schedule) => ({ userId: schedule.userId, days: schedule.days, @@ -237,6 +248,8 @@ const getSlots = ({ startDate, frequency, eventLength, + organizerTimeZone, + inviteeTimeZone: timeZone, }); }; diff --git a/packages/trpc/server/routers/viewer/slots.tsx b/packages/trpc/server/routers/viewer/slots.tsx index 95256dbe53c298..11493ec07e534f 100644 --- a/packages/trpc/server/routers/viewer/slots.tsx +++ b/packages/trpc/server/routers/viewer/slots.tsx @@ -317,6 +317,8 @@ export async function getSchedule(input: z.infer, ctx: dateOverrides, minimumBookingNotice: eventType.minimumBookingNotice, frequency: eventType.slotInterval || input.duration || eventType.length, + organizerTimeZone: + eventType.timeZone || eventType?.schedule?.timeZone || userAvailability?.[0]?.timeZone, }) ); } From 26ea249481281db5b86b5963daeb7aeb74a71fef Mon Sep 17 00:00:00 2001 From: Nafees Nazik <84864519+G3root@users.noreply.github.com> Date: Fri, 3 Mar 2023 22:05:11 +0530 Subject: [PATCH 003/228] Fix: email encoding bug (#7490) * fix: existing decode Uri * feat: unescape characters in base email * fix: encoding in booking page --- apps/web/components/booking/BookingListItem.tsx | 6 ++++-- packages/emails/templates/_base-email.ts | 11 ++++++++++- packages/emails/templates/attendee-scheduled-email.ts | 2 +- .../emails/templates/organizer-scheduled-email.ts | 4 +--- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/apps/web/components/booking/BookingListItem.tsx b/apps/web/components/booking/BookingListItem.tsx index 01086f7dfa7d27..01a775fbb92a93 100644 --- a/apps/web/components/booking/BookingListItem.tsx +++ b/apps/web/components/booking/BookingListItem.tsx @@ -223,6 +223,8 @@ function BookingListItem(booking: BookingItemProps) { }; const showRecordingsButtons = (booking.location === "integrations:daily" || booking?.location?.trim() === "") && isPast && isConfirmed; + + const title = decodeURIComponent(booking.title); return ( <>
- {booking.title} + {title} {!!booking?.eventType?.price && !booking.paid && ( diff --git a/packages/emails/templates/_base-email.ts b/packages/emails/templates/_base-email.ts index 770617b8e79e09..9d25a8cde56887 100644 --- a/packages/emails/templates/_base-email.ts +++ b/packages/emails/templates/_base-email.ts @@ -1,4 +1,5 @@ import nodemailer from "nodemailer"; +import { z } from "zod"; import type { Dayjs } from "@calcom/dayjs"; import dayjs from "@calcom/dayjs"; @@ -34,10 +35,18 @@ export default class BaseEmail { console.log("Skipped Sending Email as NEXT_PUBLIC_IS_E2E==1"); return new Promise((r) => r("Skipped sendEmail for E2E")); } + + const payload = this.getNodeMailerPayload(); + const parseSubject = z.string().safeParse(payload?.subject); + const payloadWithUnEscapedSubject = { + ...payload, + ...(parseSubject.success && { subject: decodeURIComponent(parseSubject.data) }), + }; + new Promise((resolve, reject) => nodemailer .createTransport(this.getMailerOptions().transport) - .sendMail(this.getNodeMailerPayload(), (_err, info) => { + .sendMail(payloadWithUnEscapedSubject, (_err, info) => { if (_err) { const err = getErrorFromUnknown(_err); this.printNodeMailerError(err); diff --git a/packages/emails/templates/attendee-scheduled-email.ts b/packages/emails/templates/attendee-scheduled-email.ts index 610b3db54e4895..e7477540dfbb42 100644 --- a/packages/emails/templates/attendee-scheduled-email.ts +++ b/packages/emails/templates/attendee-scheduled-email.ts @@ -78,7 +78,7 @@ export default class AttendeeScheduledEmail extends BaseEmail { to: `${this.attendee.name} <${this.attendee.email}>`, from: `${this.calEvent.organizer.name} <${this.getMailerOptions().from}>`, replyTo: [...this.calEvent.attendees.map(({ email }) => email), this.calEvent.organizer.email], - subject: decodeURIComponent(`${this.calEvent.title}`), + subject: `${this.calEvent.title}`, html: renderEmail("AttendeeScheduledEmail", { calEvent: this.calEvent, attendee: this.attendee, diff --git a/packages/emails/templates/organizer-scheduled-email.ts b/packages/emails/templates/organizer-scheduled-email.ts index dbd91140f79515..eeaa55134d2a84 100644 --- a/packages/emails/templates/organizer-scheduled-email.ts +++ b/packages/emails/templates/organizer-scheduled-email.ts @@ -76,9 +76,7 @@ export default class OrganizerScheduledEmail extends BaseEmail { }, from: `${APP_NAME} <${this.getMailerOptions().from}>`, to: toAddresses.join(","), - subject: decodeURIComponent( - `${this.newSeat ? this.t("new_attendee") + ":" : ""} ${this.calEvent.title}` - ), + subject: `${this.newSeat ? this.t("new_attendee") + ":" : ""} ${this.calEvent.title}`, html: renderEmail("OrganizerScheduledEmail", { calEvent: this.calEvent, attendee: this.calEvent.organizer, From d8387835a8a80c7e01b104b0fe29d319c551bca5 Mon Sep 17 00:00:00 2001 From: Hariom Balhara Date: Fri, 3 Mar 2023 22:05:58 +0530 Subject: [PATCH 004/228] Well, you can have 0 attendees in a booking (#7494) --- apps/web/lib/getBooking.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/web/lib/getBooking.tsx b/apps/web/lib/getBooking.tsx index 953422f67e4864..33771c7efae5bb 100644 --- a/apps/web/lib/getBooking.tsx +++ b/apps/web/lib/getBooking.tsx @@ -30,8 +30,9 @@ function getResponsesFromOldBooking( return acc; }, {}); return { - name: rawBooking.attendees[0].name, - email: rawBooking.attendees[0].email, + // It is possible to have no attendees in a booking when the booking is cancelled. + name: rawBooking.attendees[0]?.name || "Nameless", + email: rawBooking.attendees[0]?.email || "", guests: rawBooking.attendees.slice(1).map((attendee) => { return attendee.email; }), From 056edd8ec2d3e4d26fb4bba52971ccb9c050be8e Mon Sep 17 00:00:00 2001 From: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> Date: Fri, 3 Mar 2023 11:36:23 -0500 Subject: [PATCH 005/228] fix event type options (#7473) Co-authored-by: CarinaWolli --- .../ee/workflows/components/WorkflowDetailsPage.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/features/ee/workflows/components/WorkflowDetailsPage.tsx b/packages/features/ee/workflows/components/WorkflowDetailsPage.tsx index 38d77470671c19..99c680a79fe377 100644 --- a/packages/features/ee/workflows/components/WorkflowDetailsPage.tsx +++ b/packages/features/ee/workflows/components/WorkflowDetailsPage.tsx @@ -42,8 +42,10 @@ export default function WorkflowDetailsPage(props: Props) { const eventTypeOptions = useMemo( () => data?.eventTypeGroups.reduce((options, group) => { - /** only show event types that belong to team or user */ - if (!(!teamId && !group.teamId) || teamId !== group.teamId) return options; + /** don't show team event types for user workflow */ + if (!teamId && group.teamId) return options; + /** only show correct team event types for team workflows */ + if (teamId && teamId !== group.teamId) return options; return [ ...options, ...group.eventTypes.map((eventType) => ({ From 61a5c3a3b5e0c5d76aeb6d90dafb33c6ee5aebf4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 3 Mar 2023 17:41:00 +0100 Subject: [PATCH 006/228] New Crowdin translations by Github Action (#7467) --- apps/web/public/static/locales/da/common.json | 32 +++---- apps/web/public/static/locales/fr/common.json | 9 ++ apps/web/public/static/locales/tr/common.json | 5 + .../public/static/locales/zh-CN/common.json | 93 ++++++++++++++++++- 4 files changed, 122 insertions(+), 17 deletions(-) diff --git a/apps/web/public/static/locales/da/common.json b/apps/web/public/static/locales/da/common.json index 6adce100200672..a04500b045d76e 100644 --- a/apps/web/public/static/locales/da/common.json +++ b/apps/web/public/static/locales/da/common.json @@ -166,7 +166,7 @@ "optional": "Valgfrit", "input_type": "Input type", "rejected": "Afvist", - "unconfirmed": "Ubekræftet", + "unconfirmed": "Ubekræftede", "guests": "Gæster", "guest": "Gæst", "web_conferencing_details_to_follow": "Webkonference detaljer følger i bekræftelses-e-mailen.", @@ -189,8 +189,8 @@ "check_spelling_mistakes_or_go_back": "Tjek for stavefejl eller gå tilbage til forrige side.", "404_page_not_found": "404: Denne side blev ikke fundet.", "getting_started": "Kom I Gang", - "15min_meeting": "15 min Møde", - "30min_meeting": "30 min Møde", + "15min_meeting": "15 min. Møde", + "30min_meeting": "30 min. Møde", "secret": "Hemmeligt", "leave_blank_to_remove_secret": "Lad feltet stå tomt for at fjerne hemmelig", "webhook_secret_key_description": "Sørg for, at din server kun modtager de forventede {{appName}} anmodninger af sikkerhedsmæssige årsager", @@ -527,7 +527,7 @@ "invite_new_team_member": "Invitér nogen til dit team.", "change_member_role": "Skift teammedlems rolle", "disable_cal_branding": "Deaktivér {{appName}} branding", - "disable_cal_branding_description": "Skjul alle {{appName}} branding fra dine offentlige sider.", + "disable_cal_branding_description": "Skjul al {{appName}} branding fra dine offentlige sider.", "hide_book_a_team_member": "Skjul Book et Team Medlem-knap", "hide_book_a_team_member_description": "Skjul Book et Team medlem-knap på dine offentlige sider.", "danger_zone": "Farezone", @@ -548,7 +548,7 @@ "manage_your_team": "Administrér dit team", "no_teams": "Du har ikke nogen teams endnu.", "no_teams_description": "Teams giver andre mulighed for at booke begivenheder, der deles mellem dine kolleger.", - "submit": "Send", + "submit": "Videre", "delete": "Slet", "update": "Opdatér", "save": "Gem", @@ -664,7 +664,7 @@ "manage_your_billing_info": "Administrer dine faktureringsoplysninger og annuller dit abonnement.", "availability": "Tilgængelighed", "edit_availability": "Redigér tilgængelighed", - "configure_availability": "Konfigurér tidspunkter, hvor du er tilgængelig for bookinger.", + "configure_availability": "Indstil tidspunkter, hvor du er tilgængelig for bookinger.", "copy_times_to": "Kopiér tidspunkter til", "copy_times_to_tooltip": "Kopiér tidspunkter til …", "change_weekly_schedule": "Redigér din ugentlige tidsplan", @@ -762,7 +762,7 @@ "embed_your_calendar": "Indlejr din kalender på din hjemmeside", "connect_your_favourite_apps": "Tilslut dine foretrukne apps.", "automation": "Automatisering", - "configure_how_your_event_types_interact": "Konfigurér hvordan dine begivenhedstyper skal interagere med dine kalendere.", + "configure_how_your_event_types_interact": "Indstil hvordan dine begivenhedstyper skal interagere med dine kalendere.", "toggle_calendars_conflict": "Skift mellem de kalendere du vil tjekke for konflikter, for at forhindre dobbeltbookinger.", "select_destination_calendar": "Opret begivenheder på", "connect_additional_calendar": "Forbind yderligere kalender", @@ -811,11 +811,11 @@ "no_category_apps_description_web3": "Tilføj en web3 app til dine bookingsider", "installed_app_calendar_description": "Indstil kalenderne til at tjekke for konflikter, for at forhindre dobbeltbookinger.", "installed_app_conferencing_description": "Tilføj dine foretrukne videokonference apps til dine møder", - "installed_app_payment_description": "Konfigurer hvilke betalingsbehandlings tjenester der skal bruges, når du opkræver betaling fra dine kunder.", - "installed_app_analytics_description": "Konfigurer hvilke analyseapps der skal bruges til dine bookingsider", + "installed_app_payment_description": "Indstil hvilke betalingsbehandlingstjenester der skal bruges, når du opkræver betaling fra dine kunder.", + "installed_app_analytics_description": "Indstil hvilke analyseapps der skal bruges til dine bookingsider", "installed_app_other_description": "Alle dine installerede apps fra andre kategorier.", - "installed_app_automation_description": "Konfigurer hvilke automatiserings apps der skal bruges", - "installed_app_web3_description": "Konfigurer hvilke web3 apps der skal bruges til dine bookingsider", + "installed_app_automation_description": "Indstil hvilke automatiseringsapps der skal bruges", + "installed_app_web3_description": "Indstil hvilke web3 apps der skal bruges til dine bookingsider", "analytics": "Analyser", "empty_installed_apps_headline": "Ingen apps installeret", "empty_installed_apps_description": "Apps giver dig mulighed for at forbedre din arbejdsgang og forbedre dit planlægningsliv betydeligt.", @@ -1015,7 +1015,7 @@ "new_event_trigger": "når ny begivenhed er booket", "email_host_action": "send e-mail til vært", "email_attendee_action": "send e-mail til deltager", - "sms_attendee_action": "send SMS til deltager", + "sms_attendee_action": "Send SMS til deltager", "sms_number_action": "send SMS til et specifikt nummer", "workflows": "Workflows", "new_workflow_btn": "Nyt Workflow", @@ -1217,7 +1217,7 @@ "users_description": "Her kan du finde en liste over alle brugere", "users_listing": "Bruger liste", "general_description": "Administrér indstillinger for dit sprog og tidszone", - "calendars_description": "Konfigurér hvordan dine begivenhedstyper interagerer med dine kalendere", + "calendars_description": "Indstil hvordan dine begivenhedstyper interagerer med dine kalendere", "appearance_description": "Administrér indstillinger for din booking visning", "conferencing_description": "Tilføj dine foretrukne videokonference apps til dine møder", "password_description": "Administrér indstillinger for dine kontoadgangskoder", @@ -1394,7 +1394,7 @@ "saml_sp_entity_id": "SP Entity ID", "saml_sp_acs_url_copied": "ACS URL kopieret!", "saml_sp_entity_id_copied": "SP Entity ID kopieret!", - "saml_btn_configure": "Konfigurér", + "saml_btn_configure": "Indstil", "add_calendar": "Tilføj Kalender", "limit_future_bookings": "Begræns fremtidige bookinger", "limit_future_bookings_description": "Begræns hvor langt i fremtiden denne begivenhed kan bookes", @@ -1435,7 +1435,7 @@ "edit_event_type": "Redigér begivenhedstype", "collective_scheduling": "Kollektiv Planlægning", "make_it_easy_to_book": "Gør det nemt at booke dit team, når alle er tilgængelige.", - "find_the_best_person": "Find den bedste tilgængelige person, og cykl gennem dit team.", + "find_the_best_person": "Find den bedste person tilgængelig, og cykl gennem dit team.", "fixed_round_robin": "Fast round robin", "add_one_fixed_attendee": "Tilføj en fast deltager og round robin gennem en række deltagere.", "calcom_is_better_with_team": "Cal.com er bedre med teams", @@ -1550,7 +1550,7 @@ "step_enterprise_license_description": "Alt til en kommerciel brugssag med privat hosting, ompakning, rebranding og videresalg, og adgang til eksklusive virksomhedskomponenter.", "setup": "Opsætning", "setup_description": "Opsæt Cal.com instans", - "configure": "Konfigurér", + "configure": "Indstil", "sso_configuration": "Enkelt Log På", "sso_configuration_description": "Konfigurer SAML/OIDC SSO og tillad teammedlemmer at logge ind ved hjælp af en Identitetsudbyder", "sso_oidc_heading": "SSO med OIDC", diff --git a/apps/web/public/static/locales/fr/common.json b/apps/web/public/static/locales/fr/common.json index c9cc5feb9ce2ce..f71f09d25579c3 100644 --- a/apps/web/public/static/locales/fr/common.json +++ b/apps/web/public/static/locales/fr/common.json @@ -860,6 +860,7 @@ "add_new_calendar": "Ajouter un nouveau calendrier", "set_calendar": "Définissez où ajouter les nouveaux événements après une réservation.", "delete_schedule": "Supprimer le planning", + "delete_schedule_description": "La suppression d'un planning l'enlèvera de tous les types d'événements. Cette action ne peut pas être annulée.", "schedule_created_successfully": "Planning {{scheduleName}} créé avec succès", "availability_updated_successfully": "Planning {{scheduleName}} mis à jour avec succès", "schedule_deleted_successfully": "Planning supprimé avec succès", @@ -1598,10 +1599,18 @@ "under_maintenance": "En cours de maintenance", "under_maintenance_description": "L'équipe {{appName}} effectue une maintenance planifiée. Si vous avez des questions, veuillez contacter l'assistance.", "event_type_seats": "{{numberOfSeats}} places", + "booking_questions_title": "Questions de réservation", + "booking_questions_description": "Personnalisez les questions posées sur la page de réservation.", + "add_a_booking_question": "Ajouter une question", + "duplicate_email": "L'adresse e-mail existe déjà", "booking_with_payment_cancelled": "Payer pour cet événement n'est plus possible", "booking_with_payment_cancelled_already_paid": "Un remboursement pour ce paiement de réservation est en route.", "booking_with_payment_cancelled_refunded": "Ce paiement de réservation a été remboursé.", "booking_confirmation_failed": "Échec de la confirmation de la réservation", + "form_builder_field_already_exists": "Un champ avec ce nom existe déjà", + "form_builder_field_add_subtitle": "Personnalisez les questions posées sur la page de réservation.", + "form_builder_system_field_cant_delete": "Ce champ système ne peut pas être supprimé.", + "form_builder_system_field_cant_toggle": "Ce champ système ne peut pas être activé.", "get_started_zapier_templates": "Démarrer avec les modèles Zapier", "team_member": "Membre d'équipe", "a_routing_form": "Un formulaire de routage", diff --git a/apps/web/public/static/locales/tr/common.json b/apps/web/public/static/locales/tr/common.json index d3bf1d21166566..9f646c61d9b1e8 100644 --- a/apps/web/public/static/locales/tr/common.json +++ b/apps/web/public/static/locales/tr/common.json @@ -1447,6 +1447,7 @@ "disabled_calendar": "Yüklü başka bir takviminiz varsa yeni randevular bu takvime eklenir. Aksi takdirde yeni bir takvim bağlamazsanız yeni rezervasyonları kaçırabilirsiniz.", "enable_apps": "Uygulamaları Etkinleştir", "enable_apps_description": "Kullanıcıların Cal.com ile entegre edebileceği uygulamaları etkinleştirin", + "purchase_license": "Lisans satın alın", "app_is_enabled": "{{appName}} etkinleştirildi", "app_is_disabled": "{{appName}} devre dışı bırakıldı", "keys_have_been_saved": "Anahtarlar kaydedildi", @@ -1506,6 +1507,7 @@ "round_robin_hosts": "Döngüsel Organizatörler", "minimum_round_robin_hosts_count": "Katılması gereken organizatör sayısı", "hosts": "Organizatörler", + "upgrade_to_enable_feature": "Bu özelliği etkinleştirmek için bir ekip oluşturmanız gereklidir. Ekip oluşturmak için tıklayın.", "new_attendee": "Yeni Katılımcı", "awaiting_approval": "Onay Bekleniyor", "requires_google_calendar": "Bu uygulama, Google Takvim bağlantısı gerektirir", @@ -1514,6 +1516,9 @@ "continue_to_install_google_calendar": "Google Takvim'i yüklemek için devam edin", "install_google_meet": "Google Meet'i yükleyin", "install_google_calendar": "Google Takvim'i yükleyin", + "sender_name": "Gönderenin adı", + "already_invited": "Katılımcı zaten davet edildi", + "no_recordings_found": "Kayıt bulunamadı", "configure": "Yapılandır", "sso_configuration": "Çoklu Oturum Açma", "sso_oidc_configuration_title": "OIDC Yapılandırması", diff --git a/apps/web/public/static/locales/zh-CN/common.json b/apps/web/public/static/locales/zh-CN/common.json index 74c65ae8688127..fd49346d32e0d0 100644 --- a/apps/web/public/static/locales/zh-CN/common.json +++ b/apps/web/public/static/locales/zh-CN/common.json @@ -7,6 +7,7 @@ "upgrade_now": "立刻升级", "accept_invitation": "接受邀请", "calcom_explained": "{{appName}} 绝对为每个人提供日程安排基础设施。", + "calcom_explained_new_user": "完成您的 {{appName}} 账户设置!您距离解决所有日程安排问题仅几步之遥。", "have_any_questions": "有疑问?获取我们的帮助。", "reset_password_subject": "{{appName}}: 重置密码教程", "event_declined_subject": "拒绝:{{title}} 在 {{date}}", @@ -23,6 +24,8 @@ "rejection_reason_description": "您确定要拒绝预约吗?我们会通知试图预约的人,您可以在下面解释原因。", "rejection_confirmation": "拒绝预约", "manage_this_event": "管理此活动", + "invite_team_member": "邀请团队成员", + "invite_team_notifcation_badge": "已邀请", "your_event_has_been_scheduled": "您的活动已预约", "your_event_has_been_scheduled_recurring": "您的定期活动已安排", "accept_our_license": "请更改 .env 文件下的变量 <1>NEXT_PUBLIC_LICENSE_CONSENT 为 '{{agree}}' 以接受我们的许可协议。", @@ -63,6 +66,7 @@ "someone_requested_an_event": "有人请求在您的日历上安排一个活动。", "someone_requested_password_reset": "有人请求了更改密码链接。", "password_reset_instructions": "如果您没有这样请求,您可以安全地忽略此邮件,您的密码将不会被更改。", + "event_awaiting_approval_subject": "等待批准:{{date}} 的 {{title}}", "event_still_awaiting_approval": "有活动仍在等待您的批准", "booking_submitted_subject": "已提交预订:{{title}},于 {{date}}", "your_meeting_has_been_booked": "您的会议已预定", @@ -409,6 +413,8 @@ "password_updated_successfully": "密码更新成功", "password_has_been_changed": "您的密码已成功更改。", "error_changing_password": "更改密码时出错", + "session_timeout_changed": "您的会议配置已成功更新。", + "session_timeout_change_error": "更新会议配置时出错", "something_went_wrong": "出错了。", "something_doesnt_look_right": "看起来有问题?", "please_try_again": "请再试一次。", @@ -427,6 +433,7 @@ "password_hint_num": "包含至少 1 个数字", "invalid_password_hint": "密码必须是至少 {{passwordLength}} 个字符长,包含至少一个数字,并且是大写和小写字母混合", "incorrect_password": "密码不正确。", + "incorrect_username_password": "用户名或密码不正确。", "24_h": "24 小时制", "use_setting": "使用设置", "am_pm": "12小时制", @@ -454,6 +461,7 @@ "slots_load_fail": "无法加载可用的时间段。", "additional_guests": "添加访客", "your_name": "您的姓名", + "your_full_name": "您的全名", "email_address": "邮箱地址", "enter_valid_email": "请输入有效的电子邮件", "location": "位置", @@ -507,6 +515,8 @@ "admin": "管理员", "administrator_user": "管理员用户", "lets_create_first_administrator_user": "让我们创建第一个管理员用户。", + "admin_user_created": "管理员用户设置", + "admin_user_created_description": "您已经创建管理员用户。您现在可以登录您的账户。", "new_member": "新成员", "invite": "邀请", "add_team_members": "添加团队成员", @@ -656,6 +666,7 @@ "edit_availability": "编辑可预约时间", "configure_availability": "配置您可预约的时间。", "copy_times_to": "复制时间到", + "copy_times_to_tooltip": "复制时间到…", "change_weekly_schedule": "更改您的周时间表", "logo": "标志", "error": "错误", @@ -667,6 +678,7 @@ "add_attendees": "添加参与者", "show_advanced_settings": "显示高级设置", "event_name": "活动名称", + "event_name_in_calendar": "日历中的活动名称", "event_name_tooltip": "在日历中显示的名称", "meeting_with_user": "与 {{attendeeName}} 的会议", "additional_inputs": "更多输入框", @@ -785,6 +797,7 @@ "number_apps_one": "{{count}} 个应用", "number_apps_other": "{{count}} 个应用", "trending_apps": "热门应用", + "most_popular": "最热门", "explore_apps": "{{category}}应用", "installed_apps": "已安装的应用", "free_to_use_apps": "免费", @@ -795,12 +808,14 @@ "no_category_apps_description_analytics": "为您的预约页面添加分析应用", "no_category_apps_description_automation": "添加要使用的自动化应用", "no_category_apps_description_other": "添加任何其他类型的应用以执行各种操作", + "no_category_apps_description_web3": "为您的预约页面添加 web3 应用", "installed_app_calendar_description": "设置日历以检查冲突,防止重复预约。", "installed_app_conferencing_description": "添加您喜欢的视频会议应用以用于开会", "installed_app_payment_description": "配置向客户收费时要使用的支付处理服务。", "installed_app_analytics_description": "配置将用于您的预约页面的分析应用", "installed_app_other_description": "所有属于其他类别的已安装应用。", "installed_app_automation_description": "配置要使用的自动化应用", + "installed_app_web3_description": "配置将用于您的预约页面的 web3 应用", "analytics": "分析", "empty_installed_apps_headline": "未安装任何应用", "empty_installed_apps_description": "通过应用可以显著增强工作流程和改善日程安排生活。", @@ -928,6 +943,11 @@ "current_location": "当前位置", "user_phone": "您的电话号码", "new_location": "新位置", + "session": "会议", + "session_description": "控制您的账户会议", + "session_timeout_after": "会议超时时间", + "session_timeout": "会议超时", + "session_timeout_description": "在一段时间后使您的会议无效。", "no_location": "未定义任何位置", "set_location": "设置位置", "update_location": "更新位置", @@ -1071,6 +1091,7 @@ "broken_video_action": "我们无法将 <1>{{location}} 会议链接添加至您的预约活动。请联系您的受邀者或更新日历活动以添加详细信息。您可以<3>更改活动类型的位置,或尝试<5>删除应用再重新添加应用。", "broken_calendar_action": "我们无法更新您的 <1>{{calendar}}。<2>请检查您的日历设置或删除日历再重新添加日历", "attendee_name": "参与者姓名", + "scheduler_full_name": "预约人的全名", "broken_integration": "集成中断", "problem_adding_video_link": "添加视频链接时出现问题", "problem_updating_calendar": "更新日历时出现问题", @@ -1213,6 +1234,7 @@ "connect_automation_apps": "连接自动化应用", "connect_analytics_apps": "连接分析应用", "connect_other_apps": "连接其他应用", + "connect_web3_apps": "连接 web3 应用", "current_step_of_total": "第 {{currentStep}} 步,共 {{maxSteps}} 步", "add_variable": "添加变量", "custom_phone_number": "自定义电话号码", @@ -1229,6 +1251,7 @@ "to": "至", "workflow_turned_on_successfully": "{{workflowName}} 工作流程已成功{{offOn}}", "download_responses": "下载回应", + "download_responses_description": "以 CSV 格式下载对表格的所有回复。", "download": "下载", "create_your_first_form": "创建您的第一个表格", "create_your_first_form_description": "利用途径表格,您可以提出符合条件的问题,并可根据途径找到正确的人或活动类型。", @@ -1270,6 +1293,8 @@ "routing_forms_send_email_owner": "向所有者发送电子邮件", "routing_forms_send_email_owner_description": "提交表单后向所有者发送电子邮件", "add_new_form": "添加新表格", + "create_your_first_route": "创建您的第一个途径", + "route_to_the_right_person": "根据对您的表格的回答转给合适的人", "form_description": "创建表格来引导预约者", "copy_link_to_form": "将链接复制到表格", "theme": "主题", @@ -1300,6 +1325,7 @@ "password_reset_leading": "如果您没有很快收到该电子邮件,请检查您输入的电子邮件地址是否正确,如果问题仍然存在,请检查垃圾邮件文件夹或联系支持。", "password_updated": "密码已更新!", "pending_payment": "待付款", + "pending_invites": "待定邀请", "confirmation_page_rainbow": "使用 Ethereum、Polygon 等平台的代币或 NFT 对您的活动进行代币门控。", "not_on_cal": "不在 {{appName}} 上", "no_calendar_installed": "未安装任何日历", @@ -1426,6 +1452,9 @@ "disabled_calendar": "如果您安装了其他日历,新预约将添加至其中。如果没有,则连接一个新日历,这样就不会错过任何新预约。", "enable_apps": "启用应用", "enable_apps_description": "启用用户可以与 Cal.com 集成的应用", + "purchase_license": "购买许可证", + "already_have_key": "我已经有密钥:", + "already_have_key_suggestion": "请将您的现有 CALCOM_LICENSE_KEY 环境变量复制到此处。", "app_is_enabled": "{{appName}} 已启用", "app_is_disabled": "{{appName}} 已禁用", "keys_have_been_saved": "密钥已保存", @@ -1446,6 +1475,7 @@ "individual": "个人", "all_bookings_filter_label": "所有预约", "all_users_filter_label": "所有用户", + "your_bookings_filter_label": "您的预约", "meeting_url_variable": "会议链接", "meeting_url_info": "活动会议链接", "date_overrides": "日期替代", @@ -1484,6 +1514,7 @@ "round_robin_hosts": "轮流主持人", "minimum_round_robin_hosts_count": "需要参加的主持人数目", "hosts": "主持人", + "upgrade_to_enable_feature": "您需要创建团队才能启用此功能。点击以创建团队。", "new_attendee": "新参与者", "awaiting_approval": "待批准", "requires_google_calendar": "此应用需要 Google 日历连接", @@ -1492,9 +1523,69 @@ "continue_to_install_google_calendar": "继续安装 Google 日历", "install_google_meet": "安装 Google Meet", "install_google_calendar": "安装 Google 日历", + "sender_name": "发件人姓名", + "already_invited": "参与者已邀请", + "no_recordings_found": "未找到录制内容", + "reporting": "报告", + "teams_plan_required": "需要团队计划", + "choose_a_license": "选择许可证", + "license": "许可证", + "agplv3_license": "AGPLv3 许可证", + "ee_enterprise_license": "“/ee”企业许可证", + "enterprise_booking_fee": "{{enterprise_booking_fee}}/月起", + "no_need_to_keep_your_code_open_source": "无需让您的代码保持开源", + "a_vast_suite_of_enterprise_features": "大量企业版功能", + "free_license_fee": "0.00 美元/月", + "forever_open_and_free": "永远开放且免费", + "required_to_keep_your_code_open_source": "需要让您的代码保持开源", + "no_enterprise_features": "没有企业版功能", + "step_enterprise_license": "企业版许可证", + "setup": "设置", + "setup_description": "设置 Cal.com 实例", "configure": "配置", "sso_configuration": "单点登录", + "sso_configuration_description": "配置 SAML/OIDC SSO 并允许团队成员使用身份提供程序登录", + "sso_oidc_heading": "使用 OIDC 的 SSO", + "sso_oidc_configuration_title": "OIDC 配置", + "sso_oidc_callback_copied": "回调链接已复制", + "sso_saml_heading": "使用 SAML 的 SSO", + "sso_saml_acsurl_copied": "ACS 链接已复制", + "sso_saml_entityid_copied": "实体 ID 已复制", + "sso_connection_created_successfully": "{{connectionType}} 配置已成功创建", + "sso_connection_deleted_successfully": "已成功删除 {{connectionType}} 配置", + "delete_sso_configuration": "删除 {{connectionType}} 配置", + "delete_sso_configuration_confirmation": "是,删除 {{connectionType}} 配置", + "organizer_timezone": "组织者时区", "email_no_user_cta": "创建您的账户", + "email_user_cta": "查看邀请", + "email_no_user_invite_heading": "您已被邀请在 {{appName}} 加入一个团队", + "email_no_user_step_one": "选择您的用户名", + "email_no_user_step_two": "连接您的日历账户", + "email_no_user_step_three": "设置您的可预约时间", + "email_no_user_step_four": "加入 {{teamName}}", + "impersonation_user_tip": "您即将模拟一名用户,这意味着您可以代表他们进行更改。请小心。", + "available_variables": "可用变量", + "scheduler": "{Scheduler}", + "recommended_next_steps": "建议的后续步骤", + "create_a_managed_event": "创建托管活动类型", + "default_app_link_title": "设置默认应用链接", "change_default_conferencing_app": "设置为默认", - "booking_confirmation_failed": "预约确认失败" + "under_maintenance": "停机维护", + "under_maintenance_description": "{{appName}} 团队正在进行计划维护。如果您有任何疑问,请联系支持。", + "event_type_seats": "{{numberOfSeats}} 个位置", + "booking_with_payment_cancelled": "无法再为此活动付费", + "booking_with_payment_cancelled_already_paid": "此预约付款的退款正在进行中。", + "booking_with_payment_cancelled_refunded": "此预约付款已退款。", + "booking_confirmation_failed": "预约确认失败", + "get_started_zapier_templates": "开始使用 Zapier 模板", + "a_routing_form": "途径表格", + "form_description_placeholder": "表单描述", + "keep_me_connected_with_form": "让我与表格保持联系", + "form_deleted": "表格已删除", + "delete_form": "删除表格", + "delete_form_action": "是,删除表格", + "add_1_option_per_line": "每行添加 1 个选项", + "add_a_new_route": "添加新途径", + "no_responses_yet": "尚无回复", + "this_will_be_the_placeholder": "这将是占位符" } From f3143d99ee0fcb143c7134a5bc956d5943ac79f4 Mon Sep 17 00:00:00 2001 From: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Date: Sat, 4 Mar 2023 04:13:26 +0530 Subject: [PATCH 007/228] fix: use only slug (#7504) * fix: use only slug Signed-off-by: Udit Takkar * chore Signed-off-by: Udit Takkar * fix: create slug key Signed-off-by: Udit Takkar --------- Signed-off-by: Udit Takkar --- apps/web/pages/event-types/index.tsx | 7 ++++++- .../eventtypes/components/CreateEventTypeDialog.tsx | 8 ++++---- packages/ui/components/createButton/CreateButton.tsx | 3 ++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/apps/web/pages/event-types/index.tsx b/apps/web/pages/event-types/index.tsx index f5b6d180a093e8..3ee9dad439a6ef 100644 --- a/apps/web/pages/event-types/index.tsx +++ b/apps/web/pages/event-types/index.tsx @@ -637,7 +637,12 @@ const CTA = () => { const profileOptions = query.data.profiles .filter((profile) => !profile.readOnly) .map((profile) => { - return { teamId: profile.teamId, label: profile.name || profile.slug, image: profile.image }; + return { + teamId: profile.teamId, + label: profile.name || profile.slug, + image: profile.image, + slug: profile.slug, + }; }); return ( diff --git a/packages/features/eventtypes/components/CreateEventTypeDialog.tsx b/packages/features/eventtypes/components/CreateEventTypeDialog.tsx index 13dd714b7df3d0..f6c1605078adb5 100644 --- a/packages/features/eventtypes/components/CreateEventTypeDialog.tsx +++ b/packages/features/eventtypes/components/CreateEventTypeDialog.tsx @@ -203,26 +203,26 @@ export default function CreateEventTypeDialog() { message={form.formState.errors.schedulingType.message} /> )} - + - {t("collective")} + {t("collective")}

{t("collective_description")}

- {t("round_robin")} + {t("round_robin")}

{t("round_robin_description")}

)} -
+
diff --git a/packages/ui/components/createButton/CreateButton.tsx b/packages/ui/components/createButton/CreateButton.tsx index 192e6d31537f05..a0eb1fc85692b3 100644 --- a/packages/ui/components/createButton/CreateButton.tsx +++ b/packages/ui/components/createButton/CreateButton.tsx @@ -18,6 +18,7 @@ export interface Option { teamId: number | null | undefined; // if undefined, then it's a profile label: string | null; image?: string | null; + slug: string | null; } interface CreateBtnProps { @@ -43,7 +44,7 @@ export function CreateButton(props: CreateBtnProps) { const query = { ...router.query, dialog: "new", - eventPage: option.label, + eventPage: option.slug, teamId: option.teamId, }; if (!option.teamId) { From c8b01f69928da19a6d22f7c041afa520c578f56a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Omar=20L=C3=B3pez?= Date: Fri, 3 Mar 2023 15:44:14 -0700 Subject: [PATCH 008/228] Revert "fix: use only slug (#7504)" (#7506) This reverts commit f3143d99ee0fcb143c7134a5bc956d5943ac79f4. --- apps/web/pages/event-types/index.tsx | 7 +------ .../eventtypes/components/CreateEventTypeDialog.tsx | 8 ++++---- packages/ui/components/createButton/CreateButton.tsx | 3 +-- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/apps/web/pages/event-types/index.tsx b/apps/web/pages/event-types/index.tsx index 3ee9dad439a6ef..f5b6d180a093e8 100644 --- a/apps/web/pages/event-types/index.tsx +++ b/apps/web/pages/event-types/index.tsx @@ -637,12 +637,7 @@ const CTA = () => { const profileOptions = query.data.profiles .filter((profile) => !profile.readOnly) .map((profile) => { - return { - teamId: profile.teamId, - label: profile.name || profile.slug, - image: profile.image, - slug: profile.slug, - }; + return { teamId: profile.teamId, label: profile.name || profile.slug, image: profile.image }; }); return ( diff --git a/packages/features/eventtypes/components/CreateEventTypeDialog.tsx b/packages/features/eventtypes/components/CreateEventTypeDialog.tsx index f6c1605078adb5..13dd714b7df3d0 100644 --- a/packages/features/eventtypes/components/CreateEventTypeDialog.tsx +++ b/packages/features/eventtypes/components/CreateEventTypeDialog.tsx @@ -203,26 +203,26 @@ export default function CreateEventTypeDialog() { message={form.formState.errors.schedulingType.message} /> )} - + - {t("collective")} + {t("collective")}

{t("collective_description")}

- {t("round_robin")} + {t("round_robin")}

{t("round_robin_description")}

)}
-
+
diff --git a/packages/ui/components/createButton/CreateButton.tsx b/packages/ui/components/createButton/CreateButton.tsx index a0eb1fc85692b3..192e6d31537f05 100644 --- a/packages/ui/components/createButton/CreateButton.tsx +++ b/packages/ui/components/createButton/CreateButton.tsx @@ -18,7 +18,6 @@ export interface Option { teamId: number | null | undefined; // if undefined, then it's a profile label: string | null; image?: string | null; - slug: string | null; } interface CreateBtnProps { @@ -44,7 +43,7 @@ export function CreateButton(props: CreateBtnProps) { const query = { ...router.query, dialog: "new", - eventPage: option.slug, + eventPage: option.label, teamId: option.teamId, }; if (!option.teamId) { From 47e948fbbcf369bed5ee9bb4641a5172dd5d94fc Mon Sep 17 00:00:00 2001 From: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> Date: Fri, 3 Mar 2023 18:20:13 -0500 Subject: [PATCH 009/228] Fixes formatting issues with lists in event type description and bio (#7505) * fix ul and ol in editor * fix imports * disable list for team about section * fix event type description in list --------- Co-authored-by: CarinaWolli Co-authored-by: Peer Richelsen --- .../components/eventtype/EventSetupTab.tsx | 4 +--- .../steps-views/UserProfile.tsx | 4 +--- apps/web/components/team/screens/Team.tsx | 6 ++---- apps/web/pages/[user].tsx | 6 ++---- apps/web/pages/[user]/[type].tsx | 3 ++- .../web/pages/settings/my-account/profile.tsx | 5 ++--- apps/web/pages/team/[slug].tsx | 4 +--- .../ee/teams/pages/team-profile-view.tsx | 5 ++--- .../components/CreateEventTypeDialog.tsx | 12 +++++------- .../components/EventTypeDescription.tsx | 19 ++++++++----------- packages/lib/markdownIt.ts | 12 ++++++++++++ .../eventTypeDescriptionParseAndSanitize.ts | 3 +-- packages/ui/components/editor/Editor.tsx | 11 ++++++++++- .../ui/components/editor/stylesEditor.css | 3 ++- 14 files changed, 51 insertions(+), 46 deletions(-) create mode 100644 packages/lib/markdownIt.ts diff --git a/apps/web/components/eventtype/EventSetupTab.tsx b/apps/web/components/eventtype/EventSetupTab.tsx index 9e9f19eaa9a930..7b911fbe193f4d 100644 --- a/apps/web/components/eventtype/EventSetupTab.tsx +++ b/apps/web/components/eventtype/EventSetupTab.tsx @@ -1,7 +1,6 @@ import { useAutoAnimate } from "@formkit/auto-animate/react"; import { zodResolver } from "@hookform/resolvers/zod"; import { isValidPhoneNumber } from "libphonenumber-js"; -import MarkdownIt from "markdown-it"; import { Trans } from "next-i18next"; import Link from "next/link"; import type { EventTypeSetupProps, FormValues } from "pages/event-types/[type]"; @@ -14,6 +13,7 @@ import type { EventLocationType } from "@calcom/app-store/locations"; import { getEventLocationType, MeetLocationType, LocationType } from "@calcom/app-store/locations"; import { CAL_URL } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; +import { md } from "@calcom/lib/markdownIt"; import { slugify } from "@calcom/lib/slugify"; import turndown from "@calcom/lib/turndownService"; import { Button, Editor, Label, Select, SettingsToggle, Skeleton, TextField } from "@calcom/ui"; @@ -23,8 +23,6 @@ import { EditLocationDialog } from "@components/dialog/EditLocationDialog"; import type { SingleValueLocationOption, LocationOption } from "@components/ui/form/LocationSelect"; import LocationSelect from "@components/ui/form/LocationSelect"; -const md = new MarkdownIt("default", { html: true, breaks: true, linkify: true }); - const getLocationFromType = ( type: EventLocationType["type"], locationOptions: Pick["locationOptions"] diff --git a/apps/web/components/getting-started/steps-views/UserProfile.tsx b/apps/web/components/getting-started/steps-views/UserProfile.tsx index d6c1a5b1d919cf..db45f9a3f804b2 100644 --- a/apps/web/components/getting-started/steps-views/UserProfile.tsx +++ b/apps/web/components/getting-started/steps-views/UserProfile.tsx @@ -1,11 +1,11 @@ import { ArrowRightIcon } from "@heroicons/react/solid"; -import MarkdownIt from "markdown-it"; import { useRouter } from "next/router"; import type { FormEvent } from "react"; import { useRef, useState } from "react"; import { useForm } from "react-hook-form"; import { useLocale } from "@calcom/lib/hooks/useLocale"; +import { md } from "@calcom/lib/markdownIt"; import { telemetryEventTypes, useTelemetry } from "@calcom/lib/telemetry"; import turndown from "@calcom/lib/turndownService"; import { trpc } from "@calcom/trpc/react"; @@ -14,8 +14,6 @@ import { Avatar } from "@calcom/ui"; import type { IOnboardingPageProps } from "../../../pages/getting-started/[[...step]]"; -const md = new MarkdownIt("default", { html: true, breaks: true, linkify: true }); - type FormData = { bio: string; }; diff --git a/apps/web/components/team/screens/Team.tsx b/apps/web/components/team/screens/Team.tsx index f8b245ac9e3210..0633bae9391f9c 100644 --- a/apps/web/components/team/screens/Team.tsx +++ b/apps/web/components/team/screens/Team.tsx @@ -1,13 +1,11 @@ -import MarkdownIt from "markdown-it"; import Link from "next/link"; import type { TeamPageProps } from "pages/team/[slug]"; import { WEBAPP_URL } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; +import { md } from "@calcom/lib/markdownIt"; import { Avatar } from "@calcom/ui"; -const md = new MarkdownIt("default", { html: true, breaks: true, linkify: true }); - type TeamType = TeamPageProps["team"]; type MembersType = TeamType["members"]; type MemberType = MembersType[number]; @@ -19,7 +17,7 @@ const Member = ({ member, teamName }: { member: MemberType; teamName: string | n return ( -
+
& 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 @@ -147,7 +145,7 @@ export default function User(props: inferSSRProps & E {!isBioEmpty && ( <>
diff --git a/apps/web/pages/[user]/[type].tsx b/apps/web/pages/[user]/[type].tsx index a96ecf1b2926e3..b0879a49cec5dc 100644 --- a/apps/web/pages/[user]/[type].tsx +++ b/apps/web/pages/[user]/[type].tsx @@ -5,6 +5,7 @@ import type { LocationObject } from "@calcom/app-store/locations"; import { IS_TEAM_BILLING_ENABLED, WEBAPP_URL } from "@calcom/lib/constants"; import hasKeyInMetadata from "@calcom/lib/hasKeyInMetadata"; import { useLocale } from "@calcom/lib/hooks/useLocale"; +import { addListFormatting } from "@calcom/lib/markdownIt"; import type { User } from "@calcom/prisma/client"; import { isBrandingHidden } from "@lib/isBrandingHidden"; @@ -152,7 +153,7 @@ async function getUserPageProps(context: GetStaticPropsContext) { metadata: EventTypeMetaDataSchema.parse(eventType.metadata || {}), recurringEvent: parseRecurringEvent(eventType.recurringEvent), locations: privacyFilteredLocations(locations), - descriptionAsSafeHTML: eventType.description ? md.render(eventType.description) : null, + descriptionAsSafeHTML: eventType.description ? addListFormatting(md.render(eventType.description)) : null, }); // Check if the user you are logging into has any active teams or premium user name const hasActiveTeam = diff --git a/apps/web/pages/settings/my-account/profile.tsx b/apps/web/pages/settings/my-account/profile.tsx index bda681715eb3ee..5b695688d56f6d 100644 --- a/apps/web/pages/settings/my-account/profile.tsx +++ b/apps/web/pages/settings/my-account/profile.tsx @@ -1,6 +1,5 @@ import { IdentityProvider } from "@prisma/client"; import crypto from "crypto"; -import MarkdownIt from "markdown-it"; import { signOut } from "next-auth/react"; import type { BaseSyntheticEvent } from "react"; import { useRef, useState } from "react"; @@ -10,6 +9,7 @@ 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"; +import { md } from "@calcom/lib/markdownIt"; import turndown from "@calcom/lib/turndownService"; import type { TRPCClientErrorLike } from "@calcom/trpc/client"; import { trpc } from "@calcom/trpc/react"; @@ -41,8 +41,6 @@ import { FiAlertTriangle, FiTrash2 } from "@calcom/ui/components/icon"; import TwoFactor from "@components/auth/TwoFactor"; import { UsernameAvailabilityField } from "@components/ui/UsernameAvailability"; -const md = new MarkdownIt("default", { html: true, breaks: true, linkify: true }); - const SkeletonLoader = ({ title, description }: { title: string; description: string }) => { return ( @@ -371,6 +369,7 @@ const ProfileForm = ({ formMethods.setValue("bio", turndown(value), { shouldDirty: true }); }} excludedToolbarItems={["blockType"]} + disableLists />

{t("team_description")}

diff --git a/packages/features/eventtypes/components/CreateEventTypeDialog.tsx b/packages/features/eventtypes/components/CreateEventTypeDialog.tsx index 13dd714b7df3d0..3773eed216a16a 100644 --- a/packages/features/eventtypes/components/CreateEventTypeDialog.tsx +++ b/packages/features/eventtypes/components/CreateEventTypeDialog.tsx @@ -1,7 +1,6 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { SchedulingType } from "@prisma/client"; import { isValidPhoneNumber } from "libphonenumber-js"; -import MarkdownIt from "markdown-it"; import { useRouter } from "next/router"; import { useForm } from "react-hook-form"; import { z } from "zod"; @@ -9,6 +8,7 @@ import { z } from "zod"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { useTypedQuery } from "@calcom/lib/hooks/useTypedQuery"; import { HttpError } from "@calcom/lib/http-error"; +import { md } from "@calcom/lib/markdownIt"; import slugify from "@calcom/lib/slugify"; import turndown from "@calcom/lib/turndownService"; import { createEventTypeInput } from "@calcom/prisma/zod/custom/eventtype"; @@ -26,8 +26,6 @@ import { Editor, } from "@calcom/ui"; -const md = new MarkdownIt("default", { html: true, breaks: true, linkify: true }); - // this describes the uniform data needed to create a new event type on Profile or Team export interface EventTypeParent { teamId: number | null | undefined; // if undefined, then it's a profile @@ -203,26 +201,26 @@ export default function CreateEventTypeDialog() { message={form.formState.errors.schedulingType.message} /> )} - + - {t("collective")} + {t("collective")}

{t("collective_description")}

- {t("round_robin")} + {t("round_robin")}

{t("round_robin_description")}

)}
-
+
diff --git a/packages/features/eventtypes/components/EventTypeDescription.tsx b/packages/features/eventtypes/components/EventTypeDescription.tsx index 757401218ce517..a89611ba8df3bc 100644 --- a/packages/features/eventtypes/components/EventTypeDescription.tsx +++ b/packages/features/eventtypes/components/EventTypeDescription.tsx @@ -1,14 +1,15 @@ -import { Prisma, SchedulingType } from "@prisma/client"; -import MarkdownIt from "markdown-it"; +import type { Prisma } from "@prisma/client"; +import { SchedulingType } from "@prisma/client"; import { useMemo } from "react"; import { FormattedNumber, IntlProvider } from "react-intl"; -import { z } from "zod"; +import type { z } from "zod"; import { classNames, parseRecurringEvent } from "@calcom/lib"; import getPaymentAppData from "@calcom/lib/getPaymentAppData"; import { useLocale } from "@calcom/lib/hooks/useLocale"; -import { baseEventTypeSelect } from "@calcom/prisma"; -import { EventTypeModel } from "@calcom/prisma/zod"; +import { addListFormatting, md } from "@calcom/lib/markdownIt"; +import type { baseEventTypeSelect } from "@calcom/prisma"; +import type { EventTypeModel } from "@calcom/prisma/zod"; import { Badge } from "@calcom/ui"; import { FiClock, @@ -29,11 +30,9 @@ export type EventTypeDescriptionProps = { seatsPerTimeSlot?: number; }; className?: string; - shortenDescription?: true; + shortenDescription?: boolean; }; -const md = new MarkdownIt("default", { html: true, breaks: false, linkify: true }); - export const EventTypeDescription = ({ eventType, className, @@ -58,9 +57,7 @@ export const EventTypeDescription = ({ shortenDescription ? "line-clamp-4" : "" )} dangerouslySetInnerHTML={{ - __html: shortenDescription - ? md.render(eventType.description?.replace(/


<\/p>|\n/g, " ")) - : md.render(eventType.description), + __html: addListFormatting(md.render(eventType.description)), }} /> )} diff --git a/packages/lib/markdownIt.ts b/packages/lib/markdownIt.ts new file mode 100644 index 00000000000000..45df9a5fdd18f0 --- /dev/null +++ b/packages/lib/markdownIt.ts @@ -0,0 +1,12 @@ +import MarkdownIt from "markdown-it"; + +export const md = new MarkdownIt("default", { html: true, breaks: true, linkify: true }); + +export function addListFormatting(html: string) { + return html + .replaceAll("

    ", "
      ") + .replaceAll( + "
        ", + "
          " + ); +} diff --git a/packages/prisma/middleware/eventTypeDescriptionParseAndSanitize.ts b/packages/prisma/middleware/eventTypeDescriptionParseAndSanitize.ts index 4f21a8873c27e3..ab561e1f2005a7 100644 --- a/packages/prisma/middleware/eventTypeDescriptionParseAndSanitize.ts +++ b/packages/prisma/middleware/eventTypeDescriptionParseAndSanitize.ts @@ -1,7 +1,6 @@ import type { PrismaClient, EventType } from "@prisma/client"; -import MarkdownIt from "markdown-it"; -const md = new MarkdownIt("default", { html: true, breaks: true, linkify: true }); +import { md } from "@calcom/lib/markdownIt"; function parseAndSanitize(description: string) { const parsedMarkdown = md.render(description); diff --git a/packages/ui/components/editor/Editor.tsx b/packages/ui/components/editor/Editor.tsx index 1ae470d3d9c6b2..d66cdeeb9617b7 100644 --- a/packages/ui/components/editor/Editor.tsx +++ b/packages/ui/components/editor/Editor.tsx @@ -31,6 +31,7 @@ export type TextEditorProps = { variables?: string[]; height?: string; placeholder?: string; + disableLists?: boolean; }; const editorConfig = { @@ -74,7 +75,15 @@ export const Editor = (props: TextEditorProps) => { - + { + if (index !== 3 && index !== 4) return value; + }) + : TRANSFORMERS + } + />
diff --git a/packages/ui/components/editor/stylesEditor.css b/packages/ui/components/editor/stylesEditor.css index 65c89ef81e59ad..7a34014110ba8f 100644 --- a/packages/ui/components/editor/stylesEditor.css +++ b/packages/ui/components/editor/stylesEditor.css @@ -26,7 +26,7 @@ text-align: left; border-color: #D1D5DB; border-width: 1px; - padding: 1px + padding: 1px; } .editor-inner { @@ -37,6 +37,7 @@ overflow: scroll; resize: vertical; height: auto; + min-height: 40px; } .editor-input { From 1551a293c54ab61a494ef062c250871003eb6737 Mon Sep 17 00:00:00 2001 From: Raunak Singh Jolly Date: Sat, 4 Mar 2023 06:38:10 +0530 Subject: [PATCH 010/228] Made Skeleton Loader for Availibilty Page look more like actual content of the page (#7415) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Raunak Singh Jolly Co-authored-by: Alex van Andel Co-authored-by: Hariom Balhara Co-authored-by: Efraín Rochín --- .../availability/SkeletonLoader.tsx | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/apps/web/components/availability/SkeletonLoader.tsx b/apps/web/components/availability/SkeletonLoader.tsx index 7d10d5ffce59f5..374bb7a7988142 100644 --- a/apps/web/components/availability/SkeletonLoader.tsx +++ b/apps/web/components/availability/SkeletonLoader.tsx @@ -1,6 +1,7 @@ import React from "react"; -import { SkeletonText } from "@calcom/ui"; +import { Button, SkeletonText } from "@calcom/ui"; +import { FiMoreHorizontal } from "@calcom/ui/components/icon"; import classNames from "@lib/classNames"; @@ -18,17 +19,21 @@ export default SkeletonLoader; function SkeletonItem() { return ( -
  • -
    -
    - - -
    -
    -
    -
    - +
  • +
    +
    + + +
    +
  • ); From 9d7cd73c7f2d8ae1cc6455262bf3493184742dd9 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Sat, 4 Mar 2023 15:10:13 +0000 Subject: [PATCH 011/228] Fixed lockfile, bumped nextjs to v13.2.3 --- yarn.lock | 393 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 250 insertions(+), 143 deletions(-) diff --git a/yarn.lock b/yarn.lock index b2b86facdfdfc9..62c4c005d1efdf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -85,18 +85,6 @@ call-me-maybe "^1.0.1" z-schema "^4.2.3" -"@auth/core@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@auth/core/-/core-0.1.4.tgz#72a15907be721ddb142c57a717b2b1695017363d" - integrity sha512-RsGtCWzbimuTUfV0ODE8NDxiJ5iDJAR3Wedj5OgdyZxTlCxSirXKf7+6g+krE6gHG3PoOkkd6xN6QENk+D60xw== - dependencies: - "@panva/hkdf" "1.0.2" - cookie "0.5.0" - jose "4.11.1" - oauth4webapi "2.0.5" - preact "10.11.3" - preact-render-to-string "5.2.3" - "@aws-crypto/ie11-detection@^2.0.0": version "2.0.2" resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz#9c39f4a5558196636031a933ec1b4792de959d6a" @@ -2675,6 +2663,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.20.13": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" + integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + dependencies: + regenerator-runtime "^0.13.11" + "@babel/runtime@~7.5.4": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132" @@ -3383,6 +3378,26 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.0.tgz#943309d8697c52fc82c076e90c1c74fbbe69dbff" + integrity sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.35.0.tgz#b7569632b0b788a0ca0e438235154e45d42813a7" + integrity sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw== + "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.3": version "2.6.3" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.3.tgz#39ddece7300b336276bad6c02f6a9f1a082caa05" @@ -5106,6 +5121,13 @@ resolved "https://registry.yarnpkg.com/@next-auth/prisma-adapter/-/prisma-adapter-1.0.4.tgz#3e7304ac0615b8bfe425c81f96c40b40cafb59f0" integrity sha512-jIOM6CzCbl2/Mzbx9kb2IjtHoJOeRN9wtQgLk4EUm5bhneSVGv1rtz5TDskvp2UfCa+EK9nDmug+lje41z80Gg== +"@next/bundle-analyzer@^12.2.5": + version "12.3.4" + resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-12.3.4.tgz#37c587525288a3dea64213c991590532246e8bb8" + integrity sha512-eKjgRICzbLTmod0UnJcArFVs5uEAiuZwB6NCf84m+btW7jdylUVoOYf1wi5tA14xk5L9Lho7Prm6/XJ8gxYzfQ== + dependencies: + webpack-bundle-analyzer "4.3.0" + "@next/bundle-analyzer@^13.1.6": version "13.1.6" resolved "https://registry.yarnpkg.com/@next/bundle-analyzer/-/bundle-analyzer-13.1.6.tgz#36ff2f9c4b19aa75cd589ee080b1e2edb24f1192" @@ -5113,10 +5135,10 @@ dependencies: webpack-bundle-analyzer "4.7.0" -"@next/env@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.2.1.tgz#082d42cfc0c794e9185d7b4133d71440ba2e795d" - integrity sha512-Hq+6QZ6kgmloCg8Kgrix+4F0HtvLqVK3FZAnlAoS0eonaDemHe1Km4kwjSWRE3JNpJNcKxFHF+jsZrYo0SxWoQ== +"@next/env@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.2.3.tgz#77ca49edb3c1d7c5263bb8f2ebe686080e98279e" + integrity sha512-FN50r/E+b8wuqyRjmGaqvqNDuWBWYWQiigfZ50KnSFH0f+AMQQyaZl+Zm2+CIpKk0fL9QxhLxOpTVA3xFHgFow== "@next/eslint-plugin-next@13.2.1": version "13.2.1" @@ -5130,70 +5152,70 @@ resolved "https://registry.yarnpkg.com/@next/font/-/font-13.2.1.tgz#3723342727193116b904c798a1c054db02e07c22" integrity sha512-4sergLt7xp9+mZuKME/xM4tLlHGTcmL7naCq0qCTcAlof6NnttshYgiLOdhSiy0NcI+/yM3BjvdEk++O96UzTg== -"@next/swc-android-arm-eabi@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.1.tgz#67f2580fbbe05ee006220688972c5e3a555fc741" - integrity sha512-Yua7mUpEd1wzIT6Jjl3dpRizIfGp9NR4F2xeRuQv+ae+SDI1Em2WyM9m46UL+oeW5GpMiEHoaBagr47RScZFmQ== - -"@next/swc-android-arm64@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.2.1.tgz#460a02b69eb23bb5f402266bcea9cadae59415c1" - integrity sha512-Bifcr2f6VwInOdq1uH/9lp8fH7Nf7XGkIx4XceVd32LPJqG2c6FZU8ZRBvTdhxzXVpt5TPtuXhOP4Ij9UPqsVw== - -"@next/swc-darwin-arm64@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.1.tgz#8b8530ff417802027471aee2419f78a58a863ccb" - integrity sha512-gvqm+fGMYxAkwBapH0Vvng5yrb6HTkIvZfY4oEdwwYrwuLdkjqnJygCMgpNqIFmAHSXgtlWxfYv1VC8sjN81Kw== - -"@next/swc-darwin-x64@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.1.tgz#80aebb3329a1e4568a28de1ee177780b3d50330c" - integrity sha512-HGqVqmaZWj6zomqOZUVbO5NhlABL0iIaxTmd0O5B0MoMa5zpDGoaHSG+fxgcWMXcGcxmUNchv1NfNOYiTKoHOg== - -"@next/swc-freebsd-x64@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.1.tgz#250ea2ab7e1734f22d11c677c463fab9ac33a516" - integrity sha512-N/a4JarAq+E+g+9K2ywJUmDIgU2xs2nA+BBldH0oq4zYJMRiUhL0iaN9G4e72VmGOJ61L/3W6VN8RIUOwTLoqQ== - -"@next/swc-linux-arm-gnueabihf@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.1.tgz#fe6bb29ed348a5f8ecae3740df22a8d8130c474a" - integrity sha512-WaFoerF/eRbhbE57TaIGJXbQAERADZ/RZ45u6qox9beb5xnWsyYgzX+WuN7Tkhyvga0/aMuVYFzS9CEay7D+bw== - -"@next/swc-linux-arm64-gnu@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.1.tgz#4781b927fc5e421f3cea2b29e5d38e5e4837b198" - integrity sha512-R+Jhc1/RJTnncE9fkePboHDNOCm1WJ8daanWbjKhfPySMyeniKYRwGn5SLYW3S8YlRS0QVdZaaszDSZWgUcsmA== - -"@next/swc-linux-arm64-musl@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.1.tgz#c2ba0a121b0255ba62450916bc70e6d0e26cbc98" - integrity sha512-oI1UfZPidGAVddlL2eOTmfsuKV9EaT1aktIzVIxIAgxzQSdwsV371gU3G55ggkurzfdlgF3GThFePDWF0d8dmw== - -"@next/swc-linux-x64-gnu@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.1.tgz#573c220f8b087e5d131d1fba58d3e1a670b220ad" - integrity sha512-PCygPwrQmS+7WUuAWWioWMZCzZm4PG91lfRxToLDg7yIm/3YfAw5N2EK2TaM9pzlWdvHQAqRMX/oLvv027xUiA== - -"@next/swc-linux-x64-musl@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.1.tgz#950b5bb920b322ca7b447efbd12a9c7a10c3a642" - integrity sha512-sUAKxo7CFZYGHNxheGh9nIBElLYBM6md/liEGfOTwh/xna4/GTTcmkGWkF7PdnvaYNgcPIQgHIMYiAa6yBKAVw== - -"@next/swc-win32-arm64-msvc@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.1.tgz#dbff3c4f5a3812a7059dac05804148a0f98682db" - integrity sha512-qDmyEjDBpl/vBXxuOOKKWmPQOcARcZIMach1s7kjzaien0SySut/PHRlj56sosa81Wt4hTGhfhZ1R7g1n7+B8w== - -"@next/swc-win32-ia32-msvc@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.1.tgz#7d2c17be7b8d9963984f5c15cc2588127101f620" - integrity sha512-2joqFQ81ZYPg6DcikIzQn3DgjKglNhPAozx6dL5sCNkr1CPMD0YIkJgT3CnYyMHQ04Qi3Npv0XX3MD6LJO8OCA== - -"@next/swc-win32-x64-msvc@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.1.tgz#09713c6a925461f414e89422851326d1625bd4d2" - integrity sha512-r3+0fSaIZT6N237iMzwUhfNwjhAFvXjqB+4iuW+wcpxW+LHm1g/IoxN8eSRcb8jPItC86JxjAxpke0QL97qd6g== +"@next/swc-android-arm-eabi@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.3.tgz#85eed560c87c7996558c868a117be9780778f192" + integrity sha512-mykdVaAXX/gm+eFO2kPeVjnOCKwanJ9mV2U0lsUGLrEdMUifPUjiXKc6qFAIs08PvmTMOLMNnUxqhGsJlWGKSw== + +"@next/swc-android-arm64@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.2.3.tgz#8ac54ca9795a48afc4631b4823a4864bd5db0129" + integrity sha512-8XwHPpA12gdIFtope+n9xCtJZM3U4gH4vVTpUwJ2w1kfxFmCpwQ4xmeGSkR67uOg80yRMuF0h9V1ueo05sws5w== + +"@next/swc-darwin-arm64@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.3.tgz#f674e3c65aec505b6d218a662ade3fe248ccdbda" + integrity sha512-TXOubiFdLpMfMtaRu1K5d1I9ipKbW5iS2BNbu8zJhoqrhk3Kp7aRKTxqFfWrbliAHhWVE/3fQZUYZOWSXVQi1w== + +"@next/swc-darwin-x64@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.3.tgz#a15ea7fb4c46034a8f5e387906d0cad08387075a" + integrity sha512-GZctkN6bJbpjlFiS5pylgB2pifHvgkqLAPumJzxnxkf7kqNm6rOGuNjsROvOWVWXmKhrzQkREO/WPS2aWsr/yw== + +"@next/swc-freebsd-x64@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.3.tgz#f7ac6ae4f7d706ff2431f33e40230a554c8c2cbc" + integrity sha512-rK6GpmMt/mU6MPuav0/M7hJ/3t8HbKPCELw/Uqhi4732xoq2hJ2zbo2FkYs56y6w0KiXrIp4IOwNB9K8L/q62g== + +"@next/swc-linux-arm-gnueabihf@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.3.tgz#84ad9e9679d55542a23b590ad9f2e1e9b2df62f7" + integrity sha512-yeiCp/Odt1UJ4KUE89XkeaaboIDiVFqKP4esvoLKGJ0fcqJXMofj4ad3tuQxAMs3F+qqrz9MclqhAHkex1aPZA== + +"@next/swc-linux-arm64-gnu@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.3.tgz#56f9175bc632d647c60b9e8bedc0875edf92d8b7" + integrity sha512-/miIopDOUsuNlvjBjTipvoyjjaxgkOuvlz+cIbbPcm1eFvzX2ltSfgMgty15GuOiR8Hub4FeTSiq3g2dmCkzGA== + +"@next/swc-linux-arm64-musl@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.3.tgz#7d4cf00e8f1729a3de464da0624773f5d0d14888" + integrity sha512-sujxFDhMMDjqhruup8LLGV/y+nCPi6nm5DlFoThMJFvaaKr/imhkXuk8uCTq4YJDbtRxnjydFv2y8laBSJVC2g== + +"@next/swc-linux-x64-gnu@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.3.tgz#17de404910c4ebf7a1d366b19334d7e27e126ab0" + integrity sha512-w5MyxPknVvC9LVnMenAYMXMx4KxPwXuJRMQFvY71uXg68n7cvcas85U5zkdrbmuZ+JvsO5SIG8k36/6X3nUhmQ== + +"@next/swc-linux-x64-musl@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.3.tgz#07cb7b7f3a3a98034e2533f82638a9b099ba4ab1" + integrity sha512-CTeelh8OzSOVqpzMFMFnVRJIFAFQoTsI9RmVJWW/92S4xfECGcOzgsX37CZ8K982WHRzKU7exeh7vYdG/Eh4CA== + +"@next/swc-win32-arm64-msvc@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.3.tgz#b9ac98c954c71ec9de45d3497a8585096b873152" + integrity sha512-7N1KBQP5mo4xf52cFCHgMjzbc9jizIlkTepe9tMa2WFvEIlKDfdt38QYcr9mbtny17yuaIw02FXOVEytGzqdOQ== + +"@next/swc-win32-ia32-msvc@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.3.tgz#5ec48653a48fd664e940c69c96bba698fdae92eb" + integrity sha512-LzWD5pTSipUXTEMRjtxES/NBYktuZdo7xExJqGDMnZU8WOI+v9mQzsmQgZS/q02eIv78JOCSemqVVKZBGCgUvA== + +"@next/swc-win32-x64-msvc@13.2.3": + version "13.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.3.tgz#cd432f280beb8d8de5b7cd2501e9f502e9f3dd72" + integrity sha512-aLG2MaFs4y7IwaMTosz2r4mVbqRyCnMoFqOcmfTi7/mAS+G4IMH0vJp4oLdbshqiVoiVuKrAfqtXj55/m7Qu1Q== "@node-ipc/js-queue@2.0.3": version "2.0.3" @@ -5292,10 +5314,10 @@ "@otplib/plugin-crypto" "^12.0.1" "@otplib/plugin-thirty-two" "^12.0.1" -"@panva/hkdf@1.0.2", "@panva/hkdf@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.0.2.tgz#bab0f09d09de9fd83628220d496627681bc440d6" - integrity sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA== +"@panva/hkdf@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.0.4.tgz#4e02bb248402ff6c5c024e23a68438e2b0e69d67" + integrity sha512-003xWiCuvePbLaPHT+CRuaV4GlyCAVm6XYSbBZDHoWZGn1mNkVKFaDbGJjjxmEFvizUwlCoM6O18FCBMMky2zQ== "@pedrouid/environment@^1.0.1": version "1.0.1" @@ -5342,7 +5364,7 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== -"@prisma/client@^4.11.0": +"@prisma/client@^4.11.0", "@prisma/client@^4.8.1": version "4.11.0" resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.11.0.tgz#41d5664dea4172c954190a432f70b86d3e2e629b" integrity sha512-0INHYkQIqgAjrt7NzhYpeDQi8x3Nvylc2uDngKyFDDj1tTRQ4uV1HnVmd1sQEraeVAN63SOK0dgCKQHlvjL0KA== @@ -8640,7 +8662,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@18.0.26": +"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@18.0.26", "@types/react@^18.0.17": version "18.0.26" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== @@ -11379,11 +11401,16 @@ caniuse-lite@^1.0.30001370: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz#3d2159bf5a8f9ca093275b0d3ecc717b00f27b67" integrity sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA== -caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001407: +caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001407: version "1.0.30001425" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001425.tgz#52917791a453eb3265143d2cd08d80629e82c735" integrity sha512-/pzFv0OmNG6W0ym80P3NtapU0QEiDS3VuYAZMGoLLqiC7f6FJFe1MjpQDREGApeenD9wloeytmVDj+JLXPC6qw== +caniuse-lite@^1.0.30001406: + version "1.0.30001460" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001460.tgz#31d2e26f0a2309860ed3eff154e03890d9d851a7" + integrity sha512-Bud7abqjvEjipUkpLs4D7gR0l8hBYBHoa+tGtKJHvT2AYzLp1z7EmVkUT4ERpVUfca8S2HGIVs883D8pUH1ZzQ== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -11980,7 +12007,7 @@ commander@^4.0.0, commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^6.2.1: +commander@^6.2.0, commander@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== @@ -14106,6 +14133,52 @@ eslint@8.4.1: text-table "^0.2.0" v8-compile-cache "^2.0.3" +eslint@^8.22.0: + version "8.35.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.35.0.tgz#fffad7c7e326bae606f0e8f436a6158566d42323" + integrity sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw== + dependencies: + "@eslint/eslintrc" "^2.0.0" + "@eslint/js" "8.35.0" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + eslint@^8.34.0: version "8.34.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" @@ -14199,6 +14272,13 @@ esquery@^1.4.0: dependencies: estraverse "^5.1.0" +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + esrecurse@^4.1.0, esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" @@ -15873,7 +15953,7 @@ globby@^13.1.1: merge2 "^1.4.1" slash "^4.0.0" -globby@^13.1.2, globby@^13.1.3: +globby@^13.1.2: version "13.1.3" resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== @@ -18219,11 +18299,6 @@ joi@^17.7.0: "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" -jose@4.11.1, jose@^4.9.3: - version "4.11.1" - resolved "https://registry.yarnpkg.com/jose/-/jose-4.11.1.tgz#8f7443549befe5bddcf4bae664a9cbc1a62da4fa" - integrity sha512-YRv4Tk/Wlug8qicwqFNFVEZSdbROCHRAC6qu/i0dyNKr5JQdoa2pIGoS04lLO/jXQX7Z9omoNewYIVIxqZBd9Q== - jose@4.11.2: version "4.11.2" resolved "https://registry.yarnpkg.com/jose/-/jose-4.11.2.tgz#d9699307c02e18ff56825843ba90e2fae9f09e23" @@ -18234,6 +18309,11 @@ jose@^4.10.0: resolved "https://registry.yarnpkg.com/jose/-/jose-4.11.0.tgz#1c7f5c7806383d3e836434e8f49da531cb046a9d" integrity sha512-wLe+lJHeG8Xt6uEubS4x0LVjS/3kXXu9dGoj9BNnlhYq7Kts0Pbb2pvv5KiI0yaKH/eaiR0LUOBhOVo9ktd05A== +jose@^4.11.4: + version "4.13.1" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.13.1.tgz#449111bb5ab171db85c03f1bd2cb1647ca06db1c" + integrity sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ== + jpeg-js@0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.2.tgz#8b345b1ae4abde64c2da2fe67ea216a114ac279d" @@ -19745,6 +19825,15 @@ micro@^10.0.1: content-type "1.0.4" raw-body "2.4.1" +micro@^9.4.1: + version "9.4.1" + resolved "https://registry.yarnpkg.com/micro/-/micro-9.4.1.tgz#3a7eedd96718d8569a324475cd1967441df4b3c7" + integrity sha512-Lpjcbp6Y9GJIfewxDfTmu9eW0rt0MGo+Gs1d3yJLFa7mhErtKkCngGhDbA/O1gqUjEwsHh+jWPg8BJ0Bx4AgFA== + dependencies: + arg "4.1.0" + content-type "1.0.4" + raw-body "2.4.1" + microevent.ts@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" @@ -20619,17 +20708,17 @@ next-api-middleware@^1.0.1: dependencies: debug "^4.3.2" -next-auth@^4.18.8: - version "4.19.2" - resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.19.2.tgz#8dbdc4886d4f006e7c67c77ab56e0aec5693064d" - integrity sha512-6V2YG3IJQVhgCAH7mvT3yopTW92gMdUrcwGX7NQ0dCreT/+axGua/JmVdarjec0C/oJukKpIYRgjMlV+L5ZQOQ== +next-auth@^4.10.3, next-auth@^4.18.8: + version "4.20.1" + resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.20.1.tgz#6e65c4fde14171f6ce64f05f672f80f39fc418c7" + integrity sha512-ZcTUN4qzzZ/zJYgOW0hMXccpheWtAol8QOMdMts+LYRcsPGsqf2hEityyaKyECQVw1cWInb9dF3wYwI5GZdEmQ== dependencies: - "@babel/runtime" "^7.16.3" - "@panva/hkdf" "^1.0.1" + "@babel/runtime" "^7.20.13" + "@panva/hkdf" "^1.0.2" cookie "^0.5.0" - jose "^4.9.3" + jose "^4.11.4" oauth "^0.9.15" - openid-client "^5.1.0" + openid-client "^5.4.0" preact "^10.6.3" preact-render-to-string "^5.1.19" uuid "^8.3.2" @@ -20710,30 +20799,30 @@ next-validations@^0.2.0: resolved "https://registry.yarnpkg.com/next-validations/-/next-validations-0.2.1.tgz#68010c9b017ba48eec4f404fd42eb9b0c7324737" integrity sha512-92pR14MPTTx0ynlvYH2TwMf7WiGiznNL/l0dtZyKPw3x48rcMhwEZrP1ZmsMJwzp5D+U+sY2deexeLWC8rlNtQ== -next@^13.2.1: - version "13.2.1" - resolved "https://registry.yarnpkg.com/next/-/next-13.2.1.tgz#34d823f518632b36379863228ed9f861c335b9c0" - integrity sha512-qhgJlDtG0xidNViJUPeQHLGJJoT4zDj/El7fP3D3OzpxJDUfxsm16cK4WTMyvSX1ciIfAq05u+0HqFAa+VJ+Hg== +next@^13.1.1, next@^13.2.1: + version "13.2.3" + resolved "https://registry.yarnpkg.com/next/-/next-13.2.3.tgz#92d170e7aca421321f230ff80c35c4751035f42e" + integrity sha512-nKFJC6upCPN7DWRx4+0S/1PIOT7vNlCT157w9AzbXEgKy6zkiPKEt5YyRUsRZkmpEqBVrGgOqNfwecTociyg+w== dependencies: - "@next/env" "13.2.1" + "@next/env" "13.2.3" "@swc/helpers" "0.4.14" caniuse-lite "^1.0.30001406" postcss "8.4.14" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-android-arm-eabi" "13.2.1" - "@next/swc-android-arm64" "13.2.1" - "@next/swc-darwin-arm64" "13.2.1" - "@next/swc-darwin-x64" "13.2.1" - "@next/swc-freebsd-x64" "13.2.1" - "@next/swc-linux-arm-gnueabihf" "13.2.1" - "@next/swc-linux-arm64-gnu" "13.2.1" - "@next/swc-linux-arm64-musl" "13.2.1" - "@next/swc-linux-x64-gnu" "13.2.1" - "@next/swc-linux-x64-musl" "13.2.1" - "@next/swc-win32-arm64-msvc" "13.2.1" - "@next/swc-win32-ia32-msvc" "13.2.1" - "@next/swc-win32-x64-msvc" "13.2.1" + "@next/swc-android-arm-eabi" "13.2.3" + "@next/swc-android-arm64" "13.2.3" + "@next/swc-darwin-arm64" "13.2.3" + "@next/swc-darwin-x64" "13.2.3" + "@next/swc-freebsd-x64" "13.2.3" + "@next/swc-linux-arm-gnueabihf" "13.2.3" + "@next/swc-linux-arm64-gnu" "13.2.3" + "@next/swc-linux-arm64-musl" "13.2.3" + "@next/swc-linux-x64-gnu" "13.2.3" + "@next/swc-linux-x64-musl" "13.2.3" + "@next/swc-win32-arm64-msvc" "13.2.3" + "@next/swc-win32-ia32-msvc" "13.2.3" + "@next/swc-win32-x64-msvc" "13.2.3" nextra-theme-docs@^1.2.2: version "1.2.6" @@ -21035,11 +21124,6 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -oauth4webapi@2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/oauth4webapi/-/oauth4webapi-2.0.5.tgz#03e4ac9c29ec45423f07e47cd238cf179e0af6f8" - integrity sha512-KmoR3KxCwmr9KvL/c/6UVzQnc4CUjo+j8NSgD3bWYlZXpUmyOVw97nDVb0BKZhCcUtGsbll16v8vsnR5JbTZ9A== - oauth@^0.9.15: version "0.9.15" resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" @@ -21306,10 +21390,10 @@ openid-client@5.3.1: object-hash "^2.0.1" oidc-token-hash "^5.0.1" -openid-client@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.3.0.tgz#e0fa433bb7a156b09d8cbb100abe95b322aa42be" - integrity sha512-SykPCeZBZ/SxiBH5AWynvFUIDX3//2pgwc/3265alUmGHeCN03+X8uP+pHOVnCXCKfX/XOhO90qttAQ76XcGxA== +openid-client@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.4.0.tgz#77f1cda14e2911446f16ea3f455fc7c405103eac" + integrity sha512-hgJa2aQKcM2hn3eyVtN12tEA45ECjTJPXCgUh5YzTzy9qwapCvmDTVPWOcWVL0d34zeQoQ/hbG9lJhl3AYxJlQ== dependencies: jose "^4.10.0" lru-cache "^6.0.0" @@ -22271,13 +22355,6 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" -preact-render-to-string@5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-5.2.3.tgz#23d17376182af720b1060d5a4099843c7fe92fe4" - integrity sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA== - dependencies: - pretty-format "^3.8.0" - preact-render-to-string@^5.1.19: version "5.2.6" resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz#0ff0c86cd118d30affb825193f18e92bd59d0604" @@ -22285,11 +22362,6 @@ preact-render-to-string@^5.1.19: dependencies: pretty-format "^3.8.0" -preact@10.11.3, preact@^10.6.3: - version "10.11.3" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.11.3.tgz#8a7e4ba19d3992c488b0785afcc0f8aa13c78d19" - integrity sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg== - preact@10.4.1: version "10.4.1" resolved "https://registry.yarnpkg.com/preact/-/preact-10.4.1.tgz#9b3ba020547673a231c6cf16f0fbaef0e8863431" @@ -22300,6 +22372,11 @@ preact@^10.5.9: resolved "https://registry.yarnpkg.com/preact/-/preact-10.10.6.tgz#1fe62aecf93974b64e6a42e09ba1f00f93207d14" integrity sha512-w0mCL5vICUAZrh1DuHEdOWBjxdO62lvcO++jbzr8UhhYcTbFkpegLH9XX+7MadjTl/y0feoqwQ/zAnzkc/EGog== +preact@^10.6.3: + version "10.11.3" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.11.3.tgz#8a7e4ba19d3992c488b0785afcc0f8aa13c78d19" + integrity sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -22414,7 +22491,7 @@ prisma-field-encryption@^1.4.0: object-path "^0.11.8" zod "^3.17.3" -prisma@^4.11.0: +prisma@^4.11.0, prisma@^4.8.1: version "4.11.0" resolved "https://registry.yarnpkg.com/prisma/-/prisma-4.11.0.tgz#9695ba4129a43eab3e76b5f7a033c6c020377725" integrity sha512-4zZmBXssPUEiX+GeL0MUq/Yyie4ltiKmGu7jCJFnYMamNrrulTBc+D+QwAQSJ01tyzeGHlD13kOnqPwRipnlNw== @@ -23519,6 +23596,11 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: version "0.13.9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" @@ -26324,7 +26406,7 @@ tslib@^1.0.0, tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.0.3, tslib@^2.4.0: +tslib@^2.0.1, tslib@^2.0.3: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== @@ -26334,6 +26416,11 @@ tslib@^2.2.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== +tslib@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + tslog@^3.2.1: version "3.3.3" resolved "https://registry.yarnpkg.com/tslog/-/tslog-3.3.3.tgz#751a469e0d36841bd7e03676c27e53e7ffe9bc3d" @@ -26621,6 +26708,11 @@ typeorm@0.3.11: xml2js "^0.4.23" yargs "^17.3.1" +typescript@^4.7.4: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + typescript@^4.9.4: version "4.9.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" @@ -27699,6 +27791,21 @@ webidl-conversions@^7.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== +webpack-bundle-analyzer@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.3.0.tgz#2f3c0ca9041d5ee47fa418693cf56b4a518b578b" + integrity sha512-J3TPm54bPARx6QG8z4cKBszahnUglcv70+N+8gUqv2I5KOFHJbzBiLx+pAp606so0X004fxM7hqRu10MLjJifA== + dependencies: + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^6.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + webpack-bundle-analyzer@4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz#33c1c485a7fcae8627c547b5c3328b46de733c66" From 07399974ceda4da145c242973d4622773e2da964 Mon Sep 17 00:00:00 2001 From: Hariom Balhara Date: Sat, 4 Mar 2023 21:41:04 +0530 Subject: [PATCH 012/228] Small Embed Fixes (#7513) * Fix bg beyond rounded border in embed * Consider margin as well for mainElement height * Fix loader positioning * Give better name to embed artifacts --------- Co-authored-by: Alex van Andel --- .github/workflows/e2e-embed.yml | 4 ++-- packages/embeds/embed-core/src/Inline/inlineHtml.ts | 4 ++-- packages/embeds/embed-core/src/embed-iframe.ts | 11 +++++++++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.github/workflows/e2e-embed.yml b/.github/workflows/e2e-embed.yml index 60090d5ee26568..e8aca6b2373c3c 100644 --- a/.github/workflows/e2e-embed.yml +++ b/.github/workflows/e2e-embed.yml @@ -32,12 +32,12 @@ jobs: if: ${{ always() }} uses: actions/upload-artifact@v2 with: - name: test-results-core + name: test-results-embed-core path: packages/embeds/embed-core/playwright/results - name: Upload embed-react results if: ${{ always() }} uses: actions/upload-artifact@v2 with: - name: test-results-react + name: test-results-embed-react path: packages/embeds/embed-react/playwright/results diff --git a/packages/embeds/embed-core/src/Inline/inlineHtml.ts b/packages/embeds/embed-core/src/Inline/inlineHtml.ts index 740a25dda728bd..a0821402855c41 100644 --- a/packages/embeds/embed-core/src/Inline/inlineHtml.ts +++ b/packages/embeds/embed-core/src/Inline/inlineHtml.ts @@ -1,5 +1,5 @@ -const html = `
    -
    +const html = `
    +
    ); diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index 546c370113f8ef..5298332ce3d5f1 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -1634,5 +1634,9 @@ "no_responses_yet": "No responses yet", "this_will_be_the_placeholder": "This will be the placeholder", "verification_code": "Verification code", - "verify": "Verify" + "verify": "Verify", + "select_all":"Select All", + "default_conferncing_bulk_title":"Bulk update existing event types", + "default_conferncing_bulk_description":"Update the locations for the selected event types" + } diff --git a/packages/app-store/utils.ts b/packages/app-store/utils.ts index e0d113eba3ed0e..579c52991deae4 100644 --- a/packages/app-store/utils.ts +++ b/packages/app-store/utils.ts @@ -189,4 +189,8 @@ export function getAppFromSlug(slug: string | undefined): AppMeta | undefined { return ALL_APPS.find((app) => app.slug === slug); } +export function getAppFromLocationValue(type: string): AppMeta | undefined { + return ALL_APPS.find((app) => app?.appData?.location?.type === type); +} + export default getApps; diff --git a/packages/features/apps/components/AppSetDefaultLinkDialog.tsx b/packages/features/apps/components/AppSetDefaultLinkDialog.tsx index 4179cb59974a65..0fc389c46c7ddb 100644 --- a/packages/features/apps/components/AppSetDefaultLinkDialog.tsx +++ b/packages/features/apps/components/AppSetDefaultLinkDialog.tsx @@ -1,9 +1,10 @@ import { zodResolver } from "@hookform/resolvers/zod"; -import { Dispatch, SetStateAction } from "react"; +import type { Dispatch, SetStateAction } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; -import { EventLocationType, getEventLocationType } from "@calcom/app-store/locations"; +import type { EventLocationType } from "@calcom/app-store/locations"; +import { getEventLocationType } from "@calcom/app-store/locations"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import { @@ -26,9 +27,11 @@ type LocationTypeSetLinkDialogFormProps = { export function AppSetDefaultLinkDailog({ locationType, setLocationType, + onSuccess, }: { locationType: EventLocationType & { slug: string }; setLocationType: Dispatch>; + onSuccess: () => void; }) { const utils = trpc.useContext(); @@ -43,8 +46,7 @@ export function AppSetDefaultLinkDailog({ const updateDefaultAppMutation = trpc.viewer.updateUserDefaultConferencingApp.useMutation({ onSuccess: () => { - showToast("Default app updated successfully", "success"); - utils.viewer.getUsersDefaultConferencingApp.invalidate(); + onSuccess(); }, onError: () => { showToast(`Invalid App Link Format`, "error"); diff --git a/packages/features/eventtypes/components/BulkEditDefaultConferencingModal.tsx b/packages/features/eventtypes/components/BulkEditDefaultConferencingModal.tsx new file mode 100644 index 00000000000000..290d4f51fc07bd --- /dev/null +++ b/packages/features/eventtypes/components/BulkEditDefaultConferencingModal.tsx @@ -0,0 +1,103 @@ +import { zodResolver } from "@hookform/resolvers/zod"; +import { useForm } from "react-hook-form"; +import { z } from "zod"; + +import { useLocale } from "@calcom/lib/hooks/useLocale"; +import { trpc } from "@calcom/trpc/react"; +import { Dialog, DialogContent, Form, DialogFooter, DialogClose, Button } from "@calcom/ui"; + +export const BulkUpdateEventSchema = z.object({ + eventTypeIds: z.array(z.number()), +}); + +export function BulkEditDefaultConferencingModal(props: { open: boolean; setOpen: (open: boolean) => void }) { + const { t } = useLocale(); + const utils = trpc.useContext(); + const { data, isFetching } = trpc.viewer.eventTypes.bulkEventFetch.useQuery(); + const form = useForm({ + resolver: zodResolver(BulkUpdateEventSchema), + defaultValues: { + eventTypeIds: data?.eventTypes.map((e) => e.id) ?? [], + }, + }); + + const updateLocationsMutation = trpc.viewer.eventTypes.bulkUpdateToDefaultLocation.useMutation({ + onSuccess: () => { + utils.viewer.getUsersDefaultConferencingApp.invalidate(); + props.setOpen(false); + }, + }); + + const eventTypesSelected = form.watch("eventTypeIds"); + + if (isFetching || !open || !data?.eventTypes) return null; + + return ( + + +
    { + updateLocationsMutation.mutate(values); + }}> +
    + {data.eventTypes.length > 0 && ( +
    + +
    + )} + {data.eventTypes.map((eventType) => ( +
    + + +
    + # +
    +
    + ))} +
    + + { + utils.viewer.getUsersDefaultConferencingApp.invalidate(); + }} + /> + + +
    +
    +
    + ); +} diff --git a/packages/trpc/server/routers/viewer/eventTypes.ts b/packages/trpc/server/routers/viewer/eventTypes.ts index 6c095bccbf9291..b1d6abbf64f0d7 100644 --- a/packages/trpc/server/routers/viewer/eventTypes.ts +++ b/packages/trpc/server/routers/viewer/eventTypes.ts @@ -1,20 +1,21 @@ import { MembershipRole, PeriodType, Prisma, SchedulingType } from "@prisma/client"; -import { PrismaClientKnownRequestError } from "@prisma/client/runtime/library"; +import { PrismaClientKnownRequestError } from "@prisma/client/runtime"; // REVIEW: From lint error import _ from "lodash"; import { z } from "zod"; import getAppKeysFromSlug from "@calcom/app-store/_utils/getAppKeysFromSlug"; +import type { LocationObject } from "@calcom/app-store/locations"; import { DailyLocationType } from "@calcom/app-store/locations"; import { stripeDataSchema } from "@calcom/app-store/stripepayment/lib/server"; -import getApps from "@calcom/app-store/utils"; -import { updateEvent } from "@calcom/core/CalendarManager"; +import getApps, { getAppFromLocationValue, getAppFromSlug } from "@calcom/app-store/utils"; import { validateBookingLimitOrder } from "@calcom/lib"; import { CAL_URL } from "@calcom/lib/constants"; import getEventTypeById from "@calcom/lib/getEventTypeById"; import { baseEventTypeSelect, baseUserSelect } from "@calcom/prisma"; import { _DestinationCalendarModel, _EventTypeModel } from "@calcom/prisma/zod"; import type { CustomInputSchema } from "@calcom/prisma/zod-utils"; +import { eventTypeLocations as eventTypeLocationsSchema } from "@calcom/prisma/zod-utils"; import { customInputSchema, EventTypeMetaDataSchema, @@ -829,6 +830,70 @@ export const eventTypesRouter = router({ throw new TRPCError({ code: "INTERNAL_SERVER_ERROR" }); } }), + bulkEventFetch: authedProcedure.query(async ({ ctx }) => { + const eventTypes = await ctx.prisma.eventType.findMany({ + where: { + userId: ctx.user.id, + team: null, + }, + select: { + id: true, + title: true, + locations: true, + }, + }); + + const eventTypesWithLogo = eventTypes.map((eventType) => { + const locationParsed = eventTypeLocationsSchema.parse(eventType.locations); + const app = getAppFromLocationValue(locationParsed[0].type); + return { + ...eventType, + logo: app?.logo, + }; + }); + + return { + eventTypes: eventTypesWithLogo, + }; + }), + bulkUpdateToDefaultLocation: authedProcedure + .input( + z.object({ + eventTypeIds: z.array(z.number()), + }) + ) + .mutation(async ({ ctx, input }) => { + const { eventTypeIds } = input; + const defaultApp = userMetadataSchema.parse(ctx.user.metadata)?.defaultConferencingApp; + + if (!defaultApp) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Default conferencing app not set", + }); + } + + const foundApp = getAppFromSlug(defaultApp.appSlug); + const appType = foundApp?.appData?.location?.type; + if (!appType) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: `Default conferencing app '${defaultApp.appSlug}' doesnt exist.`, + }); + } + + return await ctx.prisma.eventType.updateMany({ + where: { + id: { + in: eventTypeIds, + }, + userId: ctx.user.id, + }, + data: { + locations: [{ type: appType, link: defaultApp.appLink }] as LocationObject[], + }, + }); + }), }); function ensureUniqueBookingFields(fields: z.infer["bookingFields"]) { From 3d41c64d8125841582511ff7972d5fa9416be463 Mon Sep 17 00:00:00 2001 From: Nafees Nazik <84864519+G3root@users.noreply.github.com> Date: Mon, 6 Mar 2023 17:44:54 +0530 Subject: [PATCH 022/228] feat: error message for invalid variables in custom event name (#7426) * feat: add custom validate name util * refactor: separate custom event type modal into a different component * feat: add validation to zod * chore: add i18n key * feat: add dynamic imports * fix: padding * Omit cache-hit exit 1, assuming it'll fail regardless --------- Co-authored-by: Alex van Andel Co-authored-by: CarinaWolli --- .../eventtype/CustomEventTypeModal.tsx | 144 ++++++++++++++++++ .../components/eventtype/EventAdvancedTab.tsx | 122 +++------------ apps/web/pages/event-types/[type]/index.tsx | 7 + apps/web/public/static/locales/en/common.json | 2 +- packages/core/event.ts | 16 +- 5 files changed, 188 insertions(+), 103 deletions(-) create mode 100644 apps/web/components/eventtype/CustomEventTypeModal.tsx diff --git a/apps/web/components/eventtype/CustomEventTypeModal.tsx b/apps/web/components/eventtype/CustomEventTypeModal.tsx new file mode 100644 index 00000000000000..aa7984d94b96cc --- /dev/null +++ b/apps/web/components/eventtype/CustomEventTypeModal.tsx @@ -0,0 +1,144 @@ +import type { FC } from "react"; +import type { SubmitHandler } from "react-hook-form"; +import { FormProvider } from "react-hook-form"; +import { useForm, useFormContext } from "react-hook-form"; + +import type { EventNameObjectType } from "@calcom/core/event"; +import { getEventName } from "@calcom/core/event"; +import { validateCustomEventName } from "@calcom/core/event"; +import { useLocale } from "@calcom/lib/hooks/useLocale"; +import { Button, Dialog, DialogClose, DialogFooter, DialogContent, TextField } from "@calcom/ui"; + +interface FormValues { + customEventName: string; +} + +interface CustomEventTypeModalFormProps { + placeHolder: string; + close: () => void; + setValue: (value: string) => void; + event: EventNameObjectType; + defaultValue: string; +} + +const CustomEventTypeModalForm: FC = (props) => { + const { t } = useLocale(); + const { placeHolder, close, setValue, event } = props; + const { register, handleSubmit, watch, getValues } = useFormContext(); + const onSubmit: SubmitHandler = (data) => { + setValue(data.customEventName); + close(); + }; + + // const customEventName = watch("customEventName"); + const previewText = getEventName({ ...event, eventName: watch("customEventName") }); + const placeHolder_ = watch("customEventName") === "" ? previewText : placeHolder; + + return ( +
    { + e.preventDefault(); + e.stopPropagation(); + const isEmpty = getValues("customEventName") === ""; + if (isEmpty) { + setValue(""); + } + + handleSubmit(onSubmit)(e); + }}> + validateCustomEventName(value, t("invalid_event_name_variables")), + })} + className="mb-0" + /> +
    +
    +

    {t("available_variables")}

    +
    +

    {`{Event type title}`}

    +

    {t("event_name_info")}

    +
    +
    +

    {`{Organiser}`}

    +

    {t("your_full_name")}

    +
    +
    +

    {`{Scheduler}`}

    +

    {t("scheduler_full_name")}

    +
    +
    +

    {`{Location}`}

    +

    {t("location_info")}

    +
    +
    +

    {t("preview")}

    +
    +
    +
    +

    {previewText}

    +

    8 - 10 AM

    +
    +
    +
    +
    + + ); +}; + +interface CustomEventTypeModalProps { + placeHolder: string; + defaultValue: string; + close: () => void; + setValue: (value: string) => void; + event: EventNameObjectType; +} + +const CustomEventTypeModal: FC = (props) => { + const { t } = useLocale(); + + const { defaultValue, placeHolder, close, setValue, event } = props; + + const methods = useForm({ + defaultValues: { + customEventName: defaultValue, + }, + }); + + return ( + + + + + + + {t("cancel")} + + + + + + ); +}; + +export default CustomEventTypeModal; diff --git a/apps/web/components/eventtype/EventAdvancedTab.tsx b/apps/web/components/eventtype/EventAdvancedTab.tsx index f3abfca726ba13..e23389d0d3f5ae 100644 --- a/apps/web/components/eventtype/EventAdvancedTab.tsx +++ b/apps/web/components/eventtype/EventAdvancedTab.tsx @@ -1,3 +1,4 @@ +import dynamic from "next/dynamic"; import Link from "next/link"; import type { EventTypeSetupProps, FormValues } from "pages/event-types/[type]"; import { useEffect, useState } from "react"; @@ -12,24 +13,13 @@ import { FormBuilder } from "@calcom/features/form-builder/FormBuilder"; import { APP_NAME, CAL_URL, IS_SELF_HOSTED } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; -import { - Badge, - Button, - Checkbox, - Dialog, - DialogClose, - DialogContent, - DialogFooter, - Label, - SettingsToggle, - showToast, - TextField, - Tooltip, -} from "@calcom/ui"; +import { Badge, Button, Checkbox, Label, SettingsToggle, showToast, TextField, Tooltip } from "@calcom/ui"; import { FiEdit, FiCopy } from "@calcom/ui/components/icon"; import RequiresConfirmationController from "./RequiresConfirmationController"; +const CustomEventTypeModal = dynamic(() => import("@components/eventtype/CustomEventTypeModal")); + const generateHashedLink = (id: number) => { const translator = short(); const seed = `${id}:${new Date().getTime()}`; @@ -53,21 +43,11 @@ export const EventAdvancedTab = ({ eventType, team }: Pick - previewEventName - .replace("{Event type title}", eventNameObject.eventType) - .replace("{Scheduler}", eventNameObject.attendeeName) - .replace("{Organiser}", eventNameObject.host); - - const changePreviewText = (eventNameObject: EventNameObjectType, previewEventName: string) => { - setPreviewText(replaceEventNamePlaceholder(eventNameObject, previewEventName)); - }; - useEffect(() => { !hashedUrl && setHashedUrl(generateHashedLink(eventType.users[0]?.id ?? team?.id)); }, [eventType.users, hashedUrl, team?.id]); @@ -88,8 +68,14 @@ export const EventAdvancedTab = ({ eventType, team }: Pick setShowEventNameTip(false); + + const setEventName = (value: string) => formMethods.setValue("eventName", value); return (
    {/** @@ -132,14 +118,7 @@ export const EventAdvancedTab = ({ eventType, team }: Pick { - if (!e.target.value || !formMethods.getValues("eventName")) { - return setPreviewText(getEventName(eventNameObject)); - } - changePreviewText(eventNameObject, e.target.value); - }, - })} + {...formMethods.register("eventName")} addOnSuffix={ - - - + )}
    ); diff --git a/apps/web/pages/event-types/[type]/index.tsx b/apps/web/pages/event-types/[type]/index.tsx index 5808efe651d179..f54f839202ac13 100644 --- a/apps/web/pages/event-types/[type]/index.tsx +++ b/apps/web/pages/event-types/[type]/index.tsx @@ -8,6 +8,7 @@ import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { z } from "zod"; +import { validateCustomEventName } from "@calcom/core/event"; import type { EventLocationType } from "@calcom/core/location"; import { validateBookingLimitOrder } from "@calcom/lib"; import { CAL_URL } from "@calcom/lib/constants"; @@ -218,6 +219,12 @@ const EventTypePage = (props: EventTypeSetupProps) => { .object({ // Length if string, is converted to a number or it can be a number // Make it optional because it's not submitted from all tabs of the page + eventName: z + .string() + .refine((val) => validateCustomEventName(val, t("invalid_event_name_variables")) === true, { + message: t("invalid_event_name_variables"), + }) + .optional(), length: z.union([z.string().transform((val) => +val), z.number()]).optional(), bookingFields: eventTypeBookingFields, }) diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index 5298332ce3d5f1..c32e98f4b6d9f4 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -1635,8 +1635,8 @@ "this_will_be_the_placeholder": "This will be the placeholder", "verification_code": "Verification code", "verify": "Verify", + "invalid_event_name_variables": "There is an invalid variable in your event name", "select_all":"Select All", "default_conferncing_bulk_title":"Bulk update existing event types", "default_conferncing_bulk_description":"Update the locations for the selected event types" - } diff --git a/packages/core/event.ts b/packages/core/event.ts index bb5cb2b3cad63c..adea9b7eaeef8a 100644 --- a/packages/core/event.ts +++ b/packages/core/event.ts @@ -1,4 +1,4 @@ -import { TFunction } from "next-i18next"; +import type { TFunction } from "next-i18next"; import { guessEventLocationType } from "@calcom/app-store/locations"; @@ -43,3 +43,17 @@ export function getEventName(eventNameObj: EventNameObjectType, forAttendeeView .replace("{HOST/ATTENDEE}", forAttendeeView ? eventNameObj.host : eventNameObj.attendeeName) ); } + +export const validateCustomEventName = (value: string, message: string) => { + const validVariables = ["{Event type title}", "{Organiser}", "{Scheduler}", "{Location}"]; + const matches = value.match(/\{([^}]+)\}/g); + if (matches?.length) { + for (const item of matches) { + if (!validVariables.includes(item)) { + return message; + } + } + } + + return true; +}; From 5f9f6ef0250c90429343c31b4546298c36c7e468 Mon Sep 17 00:00:00 2001 From: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> Date: Mon, 6 Mar 2023 07:37:18 -0500 Subject: [PATCH 023/228] Only show Google Meet dependency when GCal is not set as destination calendar (#7442) * Query for destination calendar * Only display Meet warning when destination calendar is not GCal * Add conditional --------- Co-authored-by: Alex van Andel --- apps/web/components/eventtype/EventSetupTab.tsx | 13 +++++++++---- apps/web/pages/event-types/[type]/index.tsx | 3 ++- packages/lib/getEventTypeById.ts | 11 +++++++++++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/apps/web/components/eventtype/EventSetupTab.tsx b/apps/web/components/eventtype/EventSetupTab.tsx index 7b911fbe193f4d..632ba29b225054 100644 --- a/apps/web/components/eventtype/EventSetupTab.tsx +++ b/apps/web/components/eventtype/EventSetupTab.tsx @@ -46,11 +46,14 @@ const getDefaultLocationValue = (options: EventTypeSetupProps["locationOptions"] }; export const EventSetupTab = ( - props: Pick + props: Pick< + EventTypeSetupProps, + "eventType" | "locationOptions" | "team" | "teamMembers" | "destinationCalendar" + > ) => { const { t } = useLocale(); const formMethods = useFormContext(); - const { eventType, locationOptions, team } = props; + const { eventType, locationOptions, team, destinationCalendar } = props; const [showLocationModal, setShowLocationModal] = useState(false); const [editingLocationType, setEditingLocationType] = useState(""); const [selectedLocation, setSelectedLocation] = useState(undefined); @@ -231,7 +234,10 @@ export const EventSetupTab = ( ); })} - {validLocations.some((location) => location.type === MeetLocationType) && ( + {validLocations.some( + (location) => + location.type === MeetLocationType && destinationCalendar?.integration !== "google_calendar" + ) && (
    @@ -243,7 +249,6 @@ export const EventSetupTab = ( className="underline"> here. {" "} - We will fall back to Cal video if you do not change it.

    diff --git a/apps/web/pages/event-types/[type]/index.tsx b/apps/web/pages/event-types/[type]/index.tsx index f54f839202ac13..0c9e185f6e0bea 100644 --- a/apps/web/pages/event-types/[type]/index.tsx +++ b/apps/web/pages/event-types/[type]/index.tsx @@ -123,7 +123,7 @@ const EventTypePage = (props: EventTypeSetupProps) => { extendsFeature: "EventType", }); - const { eventType, locationOptions, team, teamMembers, currentUserMembership } = props; + const { eventType, locationOptions, team, teamMembers, currentUserMembership, destinationCalendar } = props; const [animationParentRef] = useAutoAnimate(); const updateMutation = trpc.viewer.eventTypes.update.useMutation({ @@ -261,6 +261,7 @@ const EventTypePage = (props: EventTypeSetupProps) => { locationOptions={locationOptions} team={team} teamMembers={teamMembers} + destinationCalendar={destinationCalendar} /> ), availability: , diff --git a/packages/lib/getEventTypeById.ts b/packages/lib/getEventTypeById.ts index ff0d2126550c5d..bcf4c192ab796d 100644 --- a/packages/lib/getEventTypeById.ts +++ b/packages/lib/getEventTypeById.ts @@ -282,9 +282,20 @@ export default async function getEventTypeById({ // Sets to null if no membership is found - this must mean we are in a none team event type const currentUserMembership = eventTypeObject.team?.members.find((el) => el.user.id === userId) ?? null; + let destinationCalendar = eventTypeObject.destinationCalendar; + if (!destinationCalendar) { + destinationCalendar = await prisma.destinationCalendar.findFirst({ + where: { + userId: userId, + eventTypeId: null, + }, + }); + } + const finalObj = { eventType: eventTypeObject, locationOptions, + destinationCalendar, team: eventTypeObject.team || null, teamMembers, currentUserMembership, From fa7260d72a0fc7cfef4115ddf7e12e0dfd755167 Mon Sep 17 00:00:00 2001 From: Nafees Nazik <84864519+G3root@users.noreply.github.com> Date: Mon, 6 Mar 2023 18:40:39 +0530 Subject: [PATCH 024/228] feat: use next transpile packages feature (#7527) * feat: use next transpile packages feature * Also remove next-transpile-modules from storybook (+ remove experimental) --------- Co-authored-by: Alex van Andel --- apps/storybook/next.config.js | 29 +++++++++++++---------------- apps/web/next.config.js | 29 ++++++++++++++--------------- apps/web/package.json | 1 - 3 files changed, 27 insertions(+), 32 deletions(-) diff --git a/apps/storybook/next.config.js b/apps/storybook/next.config.js index 605a550c9b3dfd..f6b416d05e8d6c 100644 --- a/apps/storybook/next.config.js +++ b/apps/storybook/next.config.js @@ -1,21 +1,7 @@ const withBundleAnalyzer = require("@next/bundle-analyzer"); -const withTM = require("next-transpile-modules")([ - "@calcom/app-store", - "@calcom/dayjs", - "@calcom/emails", - "@calcom/trpc", - "@calcom/embed-core", - "@calcom/embed-react", - "@calcom/features", - "@calcom/lib", - "@calcom/prisma", - "@calcom/ui", -]); -const glob = require("glob"); - const plugins = []; -plugins.push(withTM, withBundleAnalyzer({ enabled: process.env.ANALYZE === "true" })); +plugins.push(withBundleAnalyzer({ enabled: process.env.ANALYZE === "true" })); /** @type {import("next").NextConfig} */ const nextConfig = { @@ -27,7 +13,18 @@ const nextConfig = { typescript: { ignoreBuildErrors: true, }, - experimental: { images: { allowFutureImage: true } }, + transpilePackages: [ + "@calcom/app-store", + "@calcom/dayjs", + "@calcom/emails", + "@calcom/trpc", + "@calcom/embed-core", + "@calcom/embed-react", + "@calcom/features", + "@calcom/lib", + "@calcom/prisma", + "@calcom/ui", + ], eslint: { ignoreDuringBuilds: true, }, diff --git a/apps/web/next.config.js b/apps/web/next.config.js index 5138b31987f120..80079fe4242e99 100644 --- a/apps/web/next.config.js +++ b/apps/web/next.config.js @@ -2,20 +2,6 @@ require("dotenv").config({ path: "../../.env" }); const CopyWebpackPlugin = require("copy-webpack-plugin"); const { withSentryConfig } = require("@sentry/nextjs"); const os = require("os"); -const withTM = require("next-transpile-modules")([ - "@calcom/app-store", - "@calcom/core", - "@calcom/dayjs", - "@calcom/emails", - "@calcom/embed-core", - "@calcom/embed-react", - "@calcom/embed-snippet", - "@calcom/features", - "@calcom/lib", - "@calcom/prisma", - "@calcom/trpc", - "@calcom/ui", -]); const { withAxiom } = require("next-axiom"); const { i18n } = require("./next-i18next.config"); @@ -80,7 +66,6 @@ if (process.env.ANALYZE === "true") { plugins.push(withBundleAnalyzer); } -plugins.push(withTM); plugins.push(withAxiom); /** @type {import("next").NextConfig} */ const nextConfig = { @@ -94,6 +79,20 @@ const nextConfig = { eslint: { ignoreDuringBuilds: !!process.env.CI, }, + transpilePackages: [ + "@calcom/app-store", + "@calcom/core", + "@calcom/dayjs", + "@calcom/emails", + "@calcom/embed-core", + "@calcom/embed-react", + "@calcom/embed-snippet", + "@calcom/features", + "@calcom/lib", + "@calcom/prisma", + "@calcom/trpc", + "@calcom/ui", + ], modularizeImports: { "@calcom/ui/components/icon": { transform: "@react-icons/all-files/fi/{{member}}", diff --git a/apps/web/package.json b/apps/web/package.json index 58575af2821c54..41e59c73a274f5 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -92,7 +92,6 @@ "next-i18next": "^11.3.0", "next-seo": "^4.26.0", "next-themes": "^0.2.0", - "next-transpile-modules": "^10.0.0", "nodemailer": "^6.7.8", "otplib": "^12.0.1", "qrcode": "^1.5.1", From ddf7a234ab12bdd837d8540347229c3ee20b784d Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Mon, 6 Mar 2023 14:17:16 +0100 Subject: [PATCH 025/228] use inner context type (#7449) Co-authored-by: Alex van Andel --- apps/web/server/lib/ssg.ts | 1 - packages/trpc/server/trpc.ts | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/web/server/lib/ssg.ts b/apps/web/server/lib/ssg.ts index 4fe41c8c068afa..c21f5f3b2d710c 100644 --- a/apps/web/server/lib/ssg.ts +++ b/apps/web/server/lib/ssg.ts @@ -26,7 +26,6 @@ export async function ssgInit(opts: GetStat const ssg = createProxySSGHelpers({ router: appRouter, transformer: superjson, - // @ts-expect-error FIXME The signature expects req and res. Which we don't have in an SSG context. ctx: { prisma, session: null, diff --git a/packages/trpc/server/trpc.ts b/packages/trpc/server/trpc.ts index 72edfc98976071..6577b51d970d44 100644 --- a/packages/trpc/server/trpc.ts +++ b/packages/trpc/server/trpc.ts @@ -4,9 +4,9 @@ import rateLimit from "@calcom/lib/rateLimit"; import { initTRPC, TRPCError } from "@trpc/server"; -import type { createContext } from "./createContext"; +import type { createContextInner } from "./createContext"; -const t = initTRPC.context().create({ +const t = initTRPC.context().create({ transformer: superjson, }); From bca1a1b86cef34531b25f6a81809bfc1b4757705 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 6 Mar 2023 14:20:14 +0100 Subject: [PATCH 026/228] New Crowdin translations by Github Action (#7522) Co-authored-by: Crowdin Bot Co-authored-by: Peer Richelsen --- apps/web/public/static/locales/de/common.json | 80 ++--- apps/web/public/static/locales/fr/common.json | 5 +- apps/web/public/static/locales/he/common.json | 319 +++++++++++++----- apps/web/public/static/locales/tr/common.json | 21 ++ .../public/static/locales/zh-CN/common.json | 30 ++ 5 files changed, 325 insertions(+), 130 deletions(-) diff --git a/apps/web/public/static/locales/de/common.json b/apps/web/public/static/locales/de/common.json index d3ff94f4bec80f..fb34c8d1f1c644 100644 --- a/apps/web/public/static/locales/de/common.json +++ b/apps/web/public/static/locales/de/common.json @@ -25,7 +25,7 @@ "rejection_confirmation": "Buchung ablehnen", "manage_this_event": "Diesen Termin verwalten", "invite_team_member": "Teammitglied einladen", - "invite_team_notifcation_badge": "Inv.", + "invite_team_notifcation_badge": "Eing.", "your_event_has_been_scheduled": "Ihr Termin wurde gebucht", "your_event_has_been_scheduled_recurring": "Ihr wiederkehrender Termin wurde gebucht", "accept_our_license": "Akzeptieren Sie unsere Lizenz, indem Sie die .env-Variable <1>NEXT_PUBLIC_LICENSE_CONSENT auf '{{agree}} ' ändern.", @@ -413,8 +413,8 @@ "password_updated_successfully": "Passwort erfolgreich aktualisiert", "password_has_been_changed": "Ihr Passwort wurde erfolgreich geändert.", "error_changing_password": "Fehler beim Ändern des Passworts", - "session_timeout_changed": "Ihre Session Konfiguration wurde erfolgreich aktualisiert.", - "session_timeout_change_error": "Fehler beim Aktualisieren der Session Konfiguration", + "session_timeout_changed": "Ihre Sitzungskonfiguration wurde erfolgreich aktualisiert.", + "session_timeout_change_error": "Fehler beim Aktualisieren der Sitzungskonfiguration", "something_went_wrong": "Etwas ist schief gelaufen", "something_doesnt_look_right": "Irgendwas sieht nicht richtig aus?", "please_try_again": "Bitte erneut versuchen", @@ -515,7 +515,7 @@ "admin": "Administrator", "administrator_user": "Administrator Benutzer", "lets_create_first_administrator_user": "Lass uns als erstes den Administrator Benutzer anlegen.", - "admin_user_created": "Administrator-Benutzereinstellungen", + "admin_user_created": "Administrator-Benutzereinrichtung", "admin_user_created_description": "Sie haben bereits einen Administrator-Benutzer erstellt. Sie können sich nun in Ihr Konto einloggen.", "new_member": "Neues Mitglied", "invite": "Einladen", @@ -943,11 +943,11 @@ "current_location": "Aktueller Ort", "user_phone": "Ihre Telefonnummer", "new_location": "Neuer Ort", - "session": "Session", - "session_description": "Verwalten Sie Ihre Account-Session", + "session": "Sitzung", + "session_description": "Verwalten Sie Ihre Kontositzung", "session_timeout_after": "Timeout Session nach", "session_timeout": "Session Timeout", - "session_timeout_description": "Nach einer bestimmten Zeit die Session löschen.", + "session_timeout_description": "Erklärt nach einer bestimmten Zeit Ihre Sitzung für ungültig.", "no_location": "Kein Ort definiert", "set_location": "Ort festlegen", "update_location": "Ort aktualisieren", @@ -1294,7 +1294,7 @@ "routing_forms_send_email_owner_description": "Sendet eine E-Mail an den Eigentümer, wenn das Formular abgeschickt wird", "add_new_form": "Neues Formular hinzufügen", "create_your_first_route": "Erstellen Sie Ihre erste Route", - "route_to_the_right_person": "Route an die richtige Person anhand der Formularantworten", + "route_to_the_right_person": "Anhand der Formularantworten an die richtige Person weiterleiten", "form_description": "Erstellen Sie Ihr Formular, um einen Bucher zu anzuleiten", "copy_link_to_form": "Link in Formular kopieren", "theme": "Theme", @@ -1453,8 +1453,8 @@ "enable_apps": "Apps aktivieren", "enable_apps_description": "Apps aktivieren, die Benutzer mit Cal.com integrieren können", "purchase_license": "Lizenz kaufen", - "already_have_key": "Ich habe bereits einen Key:", - "already_have_key_suggestion": "Bitte fügen Sie Ihre vorhandene CALCOM_LICENSE_KEY Lizenz hier ein.", + "already_have_key": "Ich habe bereits einen Schlüssel:", + "already_have_key_suggestion": "Bitte fügen Sie Ihre vorhandene CALCOM_LICENSE_KEY Umgebungsvariable hier ein.", "app_is_enabled": "{{appName}} ist aktiviert", "app_is_disabled": "{{appName}} ist deaktiviert", "keys_have_been_saved": "Schlüssel wurden gespeichert", @@ -1525,28 +1525,28 @@ "install_google_calendar": "Google Calendar installieren", "sender_name": "Absendername", "already_invited": "Teilnehmer bereits eingeladen", - "no_recordings_found": "Keine Aufzeichnungen gefunden", - "reporting": "Berichte", - "reporting_feature": "Alle Daten anzeigen und als CSV herunterladen", - "teams_plan_required": "Teamplan benötigt", - "routing_forms_are_a_great_way": "Routing-Formulare sind eine gute Möglichkeit, Ihre eingehenden Leads zur richtigen Person zu leiten. Upgrade auf einen Teamplan, um auf diese Funktion zuzugreifen.", + "no_recordings_found": "Keine Aufnahmen gefunden", + "reporting": "Meldungen", + "reporting_feature": "Alle eingehenden Daten anzeigen und als CSV herunterladen", + "teams_plan_required": "Teams-Plan benötigt", + "routing_forms_are_a_great_way": "Routing-Formulare sind eine gute Möglichkeit, Ihre eingehenden Leads zur richtigen Person zu leiten. Upgraden Sie auf einen Teamplan, um auf diese Funktion zuzugreifen.", "choose_a_license": "Wählen Sie eine Lizenz", - "choose_license_description": "Cal.com enthält eine kostenlose AGPLv3-Lizenz, die einige Einschränkungen enthält, die jederzeit auf eine Enterprise-Lizenz aktualisiert werden können. Sie können später jederzeit upgraden.", + "choose_license_description": "Cal.com enthält eine kostenlose AGPLv3-Lizenz, mit einigen Einschränkungen, die jederzeit auf eine Enterprise-Lizenz aufgerüstet werden können. Sie können später jederzeit upgraden.", "license": "Lizenz", "agplv3_license": "AGPLv3 Lizenz", "ee_enterprise_license": "„/ee“ Enterprise-Lizenz", "enterprise_booking_fee": "Ab {{enterprise_booking_fee}}/Monat", "enterprise_license_includes": "Alles für einen kommerziellen Anwendungsfall", - "no_need_to_keep_your_code_open_source": "Sie müssen Ihren Code nicht Open-Source lassen", - "repackage_rebrand_resell": "Einfaches neuverpacken, rebranding und weiterverkaufen", + "no_need_to_keep_your_code_open_source": "Ihr Code muss nicht open-source bleiben", + "repackage_rebrand_resell": "Einfaches Neuverpacken, Rebranding und Weiterverkaufen", "a_vast_suite_of_enterprise_features": "Eine große Auswahl an Enterprise-Funktionen", - "free_license_fee": "0.00€/Monat", + "free_license_fee": "0,00€/Monat", "forever_open_and_free": "Für immer offen & kostenlos", - "required_to_keep_your_code_open_source": "Ihr Code muss Open-Source bleiben", - "cannot_repackage_and_resell": "Kann nicht einfach neu verpackt, gerebrandet und weiterverkauft werden", + "required_to_keep_your_code_open_source": "Ihr Code muss open-source bleiben", + "cannot_repackage_and_resell": "Kann nicht einfach neuverpackt, rebrandet und weiterverkauft werden", "no_enterprise_features": "Keine Enterprise-Funktionen", "step_enterprise_license": "Enterprise-Lizenz", - "step_enterprise_license_description": "Alles für einen kommerziellen Einsatzfall mit privatem Hosting, Umverpackung, Rebranding, Wiederverkauf und Zugriff auf exklusive Enterprise Komponenten.", + "step_enterprise_license_description": "Alles für einen kommerziellen Einsatzfall mit privatem Hosting, Umverpacken, Rebranding, Wiederverkauf und Zugriff auf exklusive Enterprise-Komponenten.", "setup": "Einrichtung", "setup_description": "Cal.com Instanz einrichten", "configure": "Konfigurieren", @@ -1565,28 +1565,28 @@ "sso_saml_entityid_copied": "Entitäts-ID kopiert", "sso_connection_created_successfully": "{{connectionType}} Konfiguration erfolgreich erstellt", "sso_connection_deleted_successfully": "{{connectionType}} Konfiguration erfolgreich gelöscht", - "delete_sso_configuration": "Lösche {{connectionType}} Konfiguration", + "delete_sso_configuration": "{{connectionType}}-Konfiguration löschen", "delete_sso_configuration_confirmation": "Ja, {{connectionType}} Konfiguration löschen", - "delete_sso_configuration_confirmation_description": "Sind Sie sicher, dass Sie die {{connectionType}} -Konfiguration löschen möchten? Ihre Teammitglieder, die {{connectionType}} anmelden, werden keinen Zugriff mehr auf Cal.com haben.", + "delete_sso_configuration_confirmation_description": "Sind Sie sicher, dass Sie die {{connectionType}}-Konfiguration löschen möchten? Ihre Teammitglieder, die sich über {{connectionType}} anmelden, werden keinen Zugriff mehr auf Cal.com haben.", "organizer_timezone": "Zeitzone des Veranstalters", "email_no_user_cta": "Erstellen Sie Ihr Konto", "email_user_cta": "Einladung anzeigen", - "email_no_user_invite_heading": "Sie wurden eingeladen dem Team {{appName}} beizutreten", - "email_no_user_invite_subheading": "{{invitedBy}} hat Sie eingeladen, dem Team {{appName}} beizutreten. {{appName}} ist der Event-Planer, der es Ihnen und Ihrem Team ermöglicht, Meetings ohne E-Mail Tennis zu planen.", - "email_no_user_invite_steps_intro": "Wir begleiten Sie durch ein paar Schritte und Sie genießen stressfreie Planung mit Ihrem Team in kürzester Zeit.", - "email_no_user_step_one": "Benutzernamen auswählen", - "email_no_user_step_two": "Kalenderkonto verbinden", - "email_no_user_step_three": "Verfügbarkeit festlegen", - "email_no_user_step_four": "{{teamName}} beitreten", - "email_no_user_signoff": "Glückliche Terminplanung wünscht das {{appName}} Team", - "impersonation_user_tip": "Sie sind dabei einen Benutzer zu identifizieren, was bedeutet, dass Sie Änderungen in ihrem Namen vornehmen können. Bitte seien Sie vorsichtig.", + "email_no_user_invite_heading": "Sie wurden eingeladen, dem Team in {{appName}} beizutreten", + "email_no_user_invite_subheading": "{{invitedBy}} hat Sie eingeladen, dem Team {{appName}} beizutreten. {{appName}} ist der Event-Planer, der es Ihnen und Ihrem Team ermöglicht, Meetings ohne ständiges hin und her zu planen.", + "email_no_user_invite_steps_intro": "Wir begleiten Sie durch ein paar Schritte, danach können Sie stressfreie Planung mit Ihrem Team in kürzester Zeit genießen.", + "email_no_user_step_one": "Wählen Sie Ihren Benutzernamen", + "email_no_user_step_two": "Verbinden Sie Ihr Kalenderkonto", + "email_no_user_step_three": "Legen Sie Ihre Verfügbarkeit fest", + "email_no_user_step_four": "Treten Sie {{teamName}} bei", + "email_no_user_signoff": "Fröhliche Terminplanung wünscht das {{appName}} Team", + "impersonation_user_tip": "Sie sind dabei einen Benutzer zu identifizieren, was bedeutet, dass Sie Änderungen an ihrem Namen vornehmen können. Bitte seien Sie vorsichtig.", "available_variables": "Verfügbare Variablen", "scheduler": "{Scheduler}", "recommended_next_steps": "Empfohlene nächste Schritte", - "create_a_managed_event": "Erstellen Sie ein verwalteten Ereignistyp", - "meetings_are_better_with_the_right": "Treffen sind besser mit den richtigen Teammitgliedern. Laden Sie sie jetzt ein.", + "create_a_managed_event": "Einen verwalteten Ereignistyp erstellen", + "meetings_are_better_with_the_right": "Meetings sind mit den richtigen Teammitgliedern besser. Laden Sie sie jetzt ein.", "collective_or_roundrobin": "Kollektiv oder Round-Robin", - "book_your_team_members": "Buchen Sie Ihre Teammitglieder zusammen mit Kollektivveranstaltungen oder wählen Sie anhand Round-Robin die richtige Person.", + "book_your_team_members": "Buchen Sie Ihre Teammitglieder zusammen mit Kollektivveranstaltungen oder wählen Sie mit Round-Robin die richtige Person.", "default_app_link_title": "Standard-App-Link festlegen", "default_app_link_description": "Mit dem Festlegen eines Standard-App-Links können alle neu erstellten Ereignistypen den App-Link verwenden, den Sie gesetzt haben.", "change_default_conferencing_app": "Als Standard festlegen", @@ -1597,15 +1597,15 @@ "booking_with_payment_cancelled_already_paid": "Eine Rückerstattung für diese Buchungszahlung ist auf dem Weg.", "booking_with_payment_cancelled_refunded": "Diese Buchungszahlung wurde zurückerstattet.", "booking_confirmation_failed": "Buchungsbestätigung fehlgeschlagen", - "get_started_zapier_templates": "Beginnen Sie mit Zapier-Templates", + "get_started_zapier_templates": "Legen Sie mit Zapier-Templates los", "a_routing_form": "Ein Routing-Formular", "form_description_placeholder": "Formularbeschreibung", - "keep_me_connected_with_form": "Mich mit dem Formular verbunden lassen", - "fields_in_form_duplicated": "Alle Änderungen in Router und Felder des Formulars, die dupliziert werden, werden auch im Duplikat wiedergegeben.", + "keep_me_connected_with_form": "Behalte mich mit dem Formular verbunden", + "fields_in_form_duplicated": "Alle Änderungen in Router und in den Feldern des Formulars, die dupliziert werden, werden auch im Duplikat wiedergegeben.", "form_deleted": "Formular gelöscht", "delete_form": "Formular löschen", "delete_form_action": "Ja, Formular löschen", - "delete_form_confirmation": "Sind Sie sicher, dass Sie dieses Formular löschen möchten? Jede Person, mit dem Link kann nicht mehr mit dem Formular buchen. Außerdem wurden alle zugehörigen Antworten gelöscht.", + "delete_form_confirmation": "Sind Sie sicher, dass Sie dieses Formular löschen möchten? Jede Person, mit der Sie den Link geteilt haben, kann nicht mehr über das Formular buchen. Außerdem würden alle zugehörigen Antworten gelöscht werden.", "typeform_redirect_url_copied": "Typeform Umleitungs-URL kopiert! Sie können die URL in Typeform einstellen.", "modifications_in_fields_warning": "Änderungen in den Feldern und Routen der folgenden Formulare werden in diesem Formular reflektiert.", "connected_forms": "Verbundene Formulare", diff --git a/apps/web/public/static/locales/fr/common.json b/apps/web/public/static/locales/fr/common.json index f71f09d25579c3..1b1a9e35938484 100644 --- a/apps/web/public/static/locales/fr/common.json +++ b/apps/web/public/static/locales/fr/common.json @@ -1634,5 +1634,8 @@ "no_responses_yet": "Aucune réponse pour l'instant", "this_will_be_the_placeholder": "Ce sera le texte de substitution", "verification_code": "Code de vérification", - "verify": "Vérifier" + "verify": "Vérifier", + "select_all": "Tout sélectionner", + "default_conferncing_bulk_title": "Mise à jour multiple des types d'événements existants", + "default_conferncing_bulk_description": "Mettez à jour les emplacements pour les types d'événements sélectionnés." } diff --git a/apps/web/public/static/locales/he/common.json b/apps/web/public/static/locales/he/common.json index 5f54ce914ee8a8..6e5ca34fae181c 100644 --- a/apps/web/public/static/locales/he/common.json +++ b/apps/web/public/static/locales/he/common.json @@ -1,5 +1,5 @@ { - "trial_days_left": "נותרו לך $t(day, {\"count\": {{days}} }) לשימוש בגרסת הניסיון של גרסת ה-PRO", + "trial_days_left": "נותרו לך $t(day, {\"count\": {{days}} }) לשימוש בגרסת הניסיון של רישוי PRO", "day_one": "יום {{count}}", "day_other": "{{count}} ימים", "second_one": "שנייה {{count}}", @@ -7,10 +7,11 @@ "upgrade_now": "לשדרג עכשיו", "accept_invitation": "אישור הזמנה", "calcom_explained": "{{appName}} מספקת תשתית ליצירת לוחות זמנים שתתאים לכולם.", + "calcom_explained_new_user": "סיים להגדיר את החשבון של {{appName}}! אתה רק מספר צעדים מפתרון כל בעיות התזמון שלך.", "have_any_questions": "יש לך שאלות? אנחנו כאן כדי לעזור.", "reset_password_subject": "{{appName}}: הנחיות לאיפוס סיסמה", - "event_declined_subject": "נדחה: {{title}} בתאריך {{date}}", - "event_cancelled_subject": "בוטל: {{title}} בתאריך {{date}}", + "event_declined_subject": "נדחה: {{title}} ב- {{date}}", + "event_cancelled_subject": "בוטל: {{title}} ב- {{date}}", "event_request_declined": "בקשת האירוע שלך נדחתה", "event_request_declined_recurring": "בקשת האירוע החוזר שלך נדחתה", "event_request_cancelled": "האירוע המתוכנן בוטל", @@ -23,6 +24,8 @@ "rejection_reason_description": "בטוח שברצונך לדחות את ההזמנה? אנחנו ניידע את האדם שניסה להזמין. יש לך אפשרות להוסיף את הסיבה לדחייה למטה.", "rejection_confirmation": "לדחות את ההזמנה", "manage_this_event": "נהל את האירוע הזה", + "invite_team_member": "הזמן חבר צוות", + "invite_team_notifcation_badge": "הזמנה", "your_event_has_been_scheduled": "נקבע מועד לאירוע שלך", "your_event_has_been_scheduled_recurring": "נקבע מועד לאירוע החוזר שלך", "accept_our_license": "יש לאשר את תנאי הרישיון שלנו על ידי שינוי המשתנה מסוג ‎.env בשם <1>NEXT_PUBLIC_LICENSE_CONSENT ל-'{{agree}}'.", @@ -32,7 +35,7 @@ "refund_failed": "ההחזר הכספי עבור האירוע {{eventType}} עם {{userName}} בתאריך {{date}} נכשל.", "check_with_provider_and_user": "יש לברר עם ספק התשלום ועם {{user}} כיצד לטפל בעניין.", "a_refund_failed": "ההחזר הכספי נכשל", - "awaiting_payment_subject": "בהמתנה לתשלום: {{title}} בתאריך {{date}}", + "awaiting_payment_subject": "ממתין לתשלום: {{title}} ב- {{date}}", "meeting_awaiting_payment": "התשלום על הפגישה שלך טרם בוצע", "help": "עזרה", "price": "מחיר", @@ -63,11 +66,11 @@ "someone_requested_an_event": "מישהו ביקש לקבוע מועד לאירוע בלוח השנה שלך.", "someone_requested_password_reset": "מישהו ביקש קישור כדי לשנות את הסיסמה שלך.", "password_reset_instructions": "אם הבקשה לא היתה שלך, ניתן להתעלם מהודעת הדוא\"ל הזו בבטחה, והסיסמה שלך לא תשתנה.", - "event_awaiting_approval_subject": "בהמתנה לאישור: {{title}} בתאריך {{date}}", + "event_awaiting_approval_subject": "ממתין לאישור: {{title}} ב- {{date}}", "event_still_awaiting_approval": "אירוע עדיין ממתין לאישורך", - "booking_submitted_subject": "ההזמנה נשלחה: {{title}} בתאריך {{date}}", + "booking_submitted_subject": "ההזמנה נשלחה: {{title}} ב- {{date}}", "your_meeting_has_been_booked": "הפגישה שלך הוזמנה", - "event_type_has_been_rescheduled_on_time_date": "{{title}} הועבר לתאריך {{date}}.", + "event_type_has_been_rescheduled_on_time_date": "{{title}} תוזמן מחדש לתאריך {{date}}.", "event_has_been_rescheduled": "עודכן – מועד האירוע שלך השתנה", "request_reschedule_title_attendee": "בקשה לשינוי מועד ההזמנה", "request_reschedule_subtitle": "{{organizer}} ביטל/ה את ההזמנה וביקש/ה שתבחר/י מועד אחר.", @@ -101,7 +104,7 @@ "team_info": "מידע על הצוות", "request_another_invitation_email": "אם אתה מעדיף לא להשתמש בכתובת {{toEmail}} ככתובת הדוא\"ל שלך עבור {{appName}} או שכבר יש לך חשבון {{appName}}, יש לבקש לקבל הזמנה נוספת לכתובת הדוא\"ל הרצויה.", "you_have_been_invited": "הוזמנת להצטרף לצוות {{teamName}}", - "user_invited_you": "{{user}} הזמין/ה אותך להצטרף לצוות {{team}} ב-{{appName}}", + "user_invited_you": "{{user}} הזמין אותך להצטרף לצוות {{team}} ב-{{appName}}", "hidden_team_member_title": "אתה מוסתר בצוות זה", "hidden_team_member_message": "לא בוצע תשלום עבור המקום שלך. ניתן לשדרג ל-PRO או ליידע את הבעלים של הצוות שהוא או היא יכולים לשלם עבור המקום שלך.", "hidden_team_owner_message": "נדרש חשבון Pro כדי להשתמש בתכונות הצוותים. תהיה מוסתר עד שתבצע שידרוג.", @@ -240,7 +243,7 @@ "credentials_stored_and_encrypted": "פרטי הכניסה שלך יישמרו ויוצפנו.", "connect": "להתחבר", "try_for_free": "לנסות בחינם", - "create_booking_link_with_calcom": "צור קישור הזמנה משלך ב-{{appName}}", + "create_booking_link_with_calcom": "צור קישור תזמון משלך עם {{appName}}", "who": "מי", "what": "מה", "when": "מתי", @@ -410,6 +413,8 @@ "password_updated_successfully": "עדכון הסיסמה בוצע בהצלחה", "password_has_been_changed": "שינוי הסיסמה בוצע בהצלחה.", "error_changing_password": "שגיאה בעת שינוי הסיסמה", + "session_timeout_changed": "הגדרות החיבור שלך עודכנו בהצלחה.", + "session_timeout_change_error": "שגיאה בעדכון הגדרות החיבור", "something_went_wrong": "משהו השתבש.", "something_doesnt_look_right": "משהו נראה לא כשורה?", "please_try_again": "נא לנסות שוב.", @@ -418,16 +423,17 @@ "your_old_password": "הסיסמה הקודמת", "current_password": "הסיסמה הנוכחית", "change_password": "שינוי סיסמה", - "change_secret": "שינוי הסוד", + "change_secret": "שנה סוד", "new_password_matches_old_password": "הסיסמה החדשה זהה לישנה. יש לבחור סיסמה אחרת.", "forgotten_secret_description": "אם שכחת או איבדת את הסוד, יש לך אפשרות לשנות אותו, אבל חשוב לזכור שיהיה צורך לעדכן את כל השילובים שבהם נעשה שימוש בסוד זה", "current_incorrect_password": "הסיסמה הנוכחית שגויה", "password_hint_caplow": "שילוב של אותיות רישיות וקטנות", "password_hint_min": "באורך 7 תווים לפחות", - "password_hint_admin_min": "באורך של 15 תווים לפחות", + "password_hint_admin_min": "באורך 15 תווים לפחות", "password_hint_num": "לכלול לפחות ספרה אחת", "invalid_password_hint": "הסיסמה חייבת להיות באורך של {{passwordLength}} תווים לפחות ולכלול לפחות ספרה אחת ושילוב של אותיות רישיות וקטנות", "incorrect_password": "הסיסמה שגויה.", + "incorrect_username_password": "שם משתמש או סיסמה שגויים.", "24_h": "24 שעות", "use_setting": "השתמש בהגדרה", "am_pm": "לפנה\"צ/אחה\"צ", @@ -455,12 +461,13 @@ "slots_load_fail": "לא ניתן לטעון את חלונות הזמן הזמינים.", "additional_guests": "הוספת אורחים", "your_name": "שמך", + "your_full_name": "שמך המלא", "email_address": "כתובת דוא\"ל", "enter_valid_email": "יש להזין כתובת דוא״ל תקינה", "location": "מיקום", "address": "כתובת", "enter_address": "יש להזין כתובת", - "in_person_attendee_address": "פנים-אל-פנים (הכתובת של המשתתף/ת)", + "in_person_attendee_address": "פנים-אל-פנים (בכתובת של המשתתף)", "yes": "כן", "no": "לא", "additional_notes": "הערות נוספות", @@ -470,14 +477,14 @@ "booking_confirmation": "אשר את ה{{eventTypeTitle}} עם {{profileName}}", "booking_reschedule_confirmation": "שנה את המועד של ה{{eventTypeTitle}} עם {{profileName}}", "in_person_meeting": "פגישה אישית", - "attendeeInPerson": "פנים-אל-פנים (הכתובת של המשתתף/ת)", - "inPerson": "פנים-אל-פנים (הכתובת של המארגן/ת)", + "attendeeInPerson": "פנים-אל-פנים (בכתובת של המשתתף)", + "inPerson": "פנים-אל-פנים (בכתובת של המארגן)", "link_meeting": "פגישה עם קישור", "phone_call": "מספר הטלפון של המשתתף/ת", "your_number": "מספר הטלפון שלך", "phone_number": "מספר טלפון", "attendee_phone_number": "מספר הטלפון של המשתתף/ת", - "organizer_phone_number": "מספר הטלפון של המארגן/ת", + "organizer_phone_number": "מספר הטלפון של המארגן", "host_phone_number": "מספר הטלפון שלך", "enter_phone_number": "נא להזין מספר טלפון", "reschedule": "שינוי המועד שנקבע", @@ -508,6 +515,8 @@ "admin": "מנהל/ת מערכת", "administrator_user": "משתמש המוגדר כמנהל מערכת", "lets_create_first_administrator_user": "עכשיו ניצור את המשתמש הראשון המוגדר כמנהל מערכת.", + "admin_user_created": "הגדרת משתמש מנהל", + "admin_user_created_description": "כבר יצרת משתמש מנהל. אתה יכול לבצע כניסה לחשבונך.", "new_member": "חבר/ה חדש/ה", "invite": "להזמין", "add_team_members": "הוספת חברי צוות", @@ -517,8 +526,8 @@ "invite_new_member_description": "הערה: פעולה זו <1>תחייב את המינוי שלך במקום נוסף ($15 לחודש).", "invite_new_team_member": "להזמין מישהו לצוות שלך.", "change_member_role": "לשנות את תפקיד החבר/ה בצוות", - "disable_cal_branding": "להשבית את מיתוג {{appName}}", - "disable_cal_branding_description": "הסתר את כל מיתוגי {{appName}} מהדפים הציבוריים שלך.", + "disable_cal_branding": "הסר מיתוג {{appName}}", + "disable_cal_branding_description": "הסתר את כל המיתוג של {{appName}} מהדפים הציבוריים שלך.", "hide_book_a_team_member": "הסתרת הלחצן לשריון זמן של חבר/ת צוות", "hide_book_a_team_member_description": "הסתר/י את הלחצן לשריון זמן של חבר/ת צוות מהדפים הציבוריים שלך.", "danger_zone": "אזור מסוכן", @@ -568,7 +577,7 @@ "duration": "משך זמן", "available_durations": "משכי זמן זמינים", "default_duration": "משך הזמן המוגדר כברירת מחדל", - "default_duration_no_options": "יש לבחור תחילה משכי זמן זמינים", + "default_duration_no_options": "ראשית, אנא בחר משך זמינות", "multiple_duration_mins": "{{count}} $t(minute_timeUnit)", "minutes": "דקות", "round_robin": "לפי תורות", @@ -640,7 +649,7 @@ "changed_team_billing_info": "החל מינואר 2022, התחלנו לגבות תשלום עבור כל חבר צוות שמשתתף בפגישה. חברי צוות שעבדו עם גרסת PRO בחינם, הועברו לגרסת ניסיון למשך 14 יום. ברגע שהתוקף של גרסת הניסיון יסתיים, חברי צוות אלה יוסתרו מהצוות, אלא אם תשדרג כעת.", "create_manage_teams_collaborative": "צור ונהל צוותים כדי להשתמש בתכונות של שיתוף פעולה.", "only_available_on_pro_plan": "תכונה זו זמינה רק בחבילת Pro", - "remove_cal_branding_description": "כדי להסיר את המיתוג של {{appName}} מדפי ההזמנות שלך, עליך לשדרג לחשבון Pro.", + "remove_cal_branding_description": "כדי להסיר את המיתוג של {{appName}} מדפי הזימון שלך, עליך לשדרג לחשבון Pro.", "edit_profile_info_description": "ערוך את פרטי הפרופיל שלך שיופיעו בקישור לקביעת מועד.", "change_email_tip": "ייתכן שיהיה צורך לצאת ולהיכנס שוב כדי לראות את השינויים.", "little_something_about": "משהו קטן אודותיך.", @@ -657,6 +666,7 @@ "edit_availability": "עריכת נתוני זמינות", "configure_availability": "הגדר מועדים שבהם תהיה זמין להזמנות.", "copy_times_to": "להעתיק שעות ל", + "copy_times_to_tooltip": "העתק שעות אל …", "change_weekly_schedule": "שינוי לוח הזמנים השבועי שלך", "logo": "לוגו", "error": "שגיאה", @@ -668,10 +678,11 @@ "add_attendees": "הוסף משתתפים", "show_advanced_settings": "הצגת הגדרות מתקדמות", "event_name": "שם האירוע", + "event_name_in_calendar": "שם הארוע בלוח השנה", "event_name_tooltip": "השם שיופיע בלוחות השנה", - "meeting_with_user": "פגישה עם {{attendeeName}}", + "meeting_with_user": "{Event type title} פגישה בין {Organiser} ו- {Scheduler}", "additional_inputs": "אפשרויות קלט נוספות", - "additional_input_description": "לדרוש מכלי התזמון להוסיף פרטים לפני אישור ההזמנה", + "additional_input_description": "דרוש מהמתזמן להזין נתונים נוספים לפני אישור התזמון", "label": "תווית", "placeholder": "מציין מיקום", "type": "סוג", @@ -689,21 +700,21 @@ "private_link_label": "קישור פרטי", "private_link_hint": "הקישור הפרטי שלך ייווצר מחדש לאחר כל שימוש", "copy_private_link": "העתקת קישור פרטי", - "private_link_description": "ניתן ליצור כתובת URL פרטית על מנת לשתף את האירוע מבלי לחשוף את שם המשתמש/ת שלך ב-{{appName}}", + "private_link_description": "ניתן ליצור כתובת קישור פרטית מבלי לחשוף את המשתמש שלך- {{appName}}", "invitees_can_schedule": "המוזמנים יכולים לקבוע מועד", "date_range": "טווח תאריכים", "calendar_days": "ימים קלנדריים", "business_days": "ימי עסקים", "set_address_place": "הגדר כתובת או מקום", "set_link_meeting": "הגדר קישור לפגישה", - "cal_invitee_phone_number_scheduling": "{{appName}} יציג למוזמן/ת בקשה להזין מספר טלפון לפני קביעת מועד.", + "cal_invitee_phone_number_scheduling": "{{appName}} יציג לנמען בקשה להזנת מספר טלפון לפני קביעת ביצוע התזמון.", "cal_provide_google_meet_location": "{{appName}} יספק מיקום Google Meet.", - "cal_provide_zoom_meeting_url": "{{appName}} יספק כתובת URL לפגישת Zoom.", - "cal_provide_tandem_meeting_url": "{{appName}} יספק כתובת URL לפגישת Tandem.", - "cal_provide_video_meeting_url": "{{appName}} יספק כתובת URL לפגישת וידאו.", + "cal_provide_zoom_meeting_url": "{{appName}} יספק קישור לפגישת Zoom.", + "cal_provide_tandem_meeting_url": "{{appName}} יספק כתובת קישור לפגישת Tandem.", + "cal_provide_video_meeting_url": "{{appName}} יספק כתובת קישור לפגישת וידאו.", "cal_provide_jitsi_meeting_url": "אנחנו ניצור עבורך כתובת URL לפגישת Jitsi Meet.", - "cal_provide_huddle01_meeting_url": "{{appName}} יספק כתובת URL לפגישת וידאו ב-Huddle01 web3.", - "cal_provide_teams_meeting_url": "{{appName}} יספק כתובת URL לפגישת MS Teams. הערה: חייב להיות חשבון של מקום עבודה או בית ספר", + "cal_provide_huddle01_meeting_url": "{{appName}} יספק כתובת קישור לפגישת וידאו web3 ב- Huddle01.", + "cal_provide_teams_meeting_url": "{{appName}} יספק כתובת קישור לפגישת MS Teams. הערה: חייב להיות חשבון של מקום עבודה או בית ספר", "require_payment": "דרישת תשלום", "commission_per_transaction": "עמלה לעסקה", "event_type_updated_successfully_description": "סוג האירוע שלך עודכן בהצלחה.", @@ -786,6 +797,7 @@ "number_apps_one": "אפליקציה {{count}}", "number_apps_other": "{{count}} אפליקציות", "trending_apps": "אפליקציות פופולריות", + "most_popular": "הכי פופולרי", "explore_apps": "אפליקציות בקטגוריה {{category}}", "installed_apps": "אפליקציות מותקנות", "free_to_use_apps": "חינם", @@ -796,12 +808,14 @@ "no_category_apps_description_analytics": "להוסיף אפליקציה לניתוח נתונים עבור דפי ההזמנות שלך", "no_category_apps_description_automation": "להוסיף אפליקציית אוטומציה שברצונך להשתמש בה", "no_category_apps_description_other": "הוסף/הוסיפי אפליקציה מכל סוג אחר לביצוע פעולות שונות", + "no_category_apps_description_web3": "הוסף אפליקצית web3 לעמודי תזמון הפגישות שלך", "installed_app_calendar_description": "הגדר/הגדירח את לוחות השנה כדי לבדוק אם יש התנגשויות על מנת למנוע כפל הזמנות.", "installed_app_conferencing_description": "הוסף/הוסיפי את האפליקציות האהובות עליך לשיחות ועידה לשימוש בפגישות שלך", "installed_app_payment_description": "הגדר/הגידירי את השירותים לעיבוד תשלומים שבהם יש להשתמש לחיוב הלקוחות.", "installed_app_analytics_description": "הגדרת האפליקציות לניתוח נתונים שבהן יש להשתמש עבור דפי ההזמנות שלך", "installed_app_other_description": "כל האפליקציות המותקנות שלך מקטגוריות אחרות.", "installed_app_automation_description": "הגדרת אפליקציות האוטומציה שבהן ברצונך להשתמש", + "installed_app_web3_description": "הגדר באיזה אפליקציות web3 להשתמש בעמודי תזמון הפגישות שלך", "analytics": "ניתוח נתונים", "empty_installed_apps_headline": "אין אפליקציות מותקנות", "empty_installed_apps_description": "אפליקציות מאפשרות לך לשפר משמעותית את תהליכי העבודה שלך ואת תהליך קביעת המועדים.", @@ -827,11 +841,11 @@ "verify_wallet": "אימות הארנק", "connect_metamask": "קישור Metamask", "create_events_on": "ליצור אירועים ב-", - "enterprise_license": "תכונה זו זמינה רק במינוי ארגוני", - "enterprise_license_description": "כדי להפעיל תכונה זו, עליך לקבל מפתח פריסה בכתובת {{consoleUrl}} ולהוסיף אותו לסביבת ‎.env שלך בתור CALCOM_LICENSE_KEY. אם כבר יש לצוות שלך רישיון, ניתן לפנות אל {{supportMail}} לקבלת עזרה.", + "enterprise_license": "תכונה זו זמינה רק במינוי Enterprise", + "enterprise_license_description": "כדי להפעיל את יכולת זו, בקש ממנהל לגשת אל הקישור {{setupUrl}} והקלדת הרישיון. אם כבר יש רישיון מוגדר, צור קשר עם {{supportMail}} לעזרה.", "missing_license": "חסר רישיון", "signup_requires": "נדרש רישיון לשימוש מסחרי", - "signup_requires_description": "בשלב זה, {{companyName}} אינה מציעה גרסת קוד פתוח חינמית של דף ההרשמה. לקבלת גישה מלאה לרכיבי ההרשמה, תצטרך לקנות רישיון לשימוש מסחרי. ליציר חשבונות המיועדים לשימוש אישי, אנחנו ממליצים על Prisma Data Platform או על כל ממשק אחר של Postgres ליצירת חשבונות.", + "signup_requires_description": "בשלב זה, {{companyName}} אינה מציעה גרסת קוד פתוח חינמית של דף ההרשמה. לקבלת גישה מלאה לרכיבי ההרשמה, תצטרך לקנות רישיון לשימוש מסחרי. לצרכים אישיים אנו ממליצים על Prisma Data Platform או כל ממשק Postgres אחר ליצירת חשבונות.", "next_steps": "השלבים הבאים", "acquire_commercial_license": "רכישת רישיון לשימוש מסחרי", "the_infrastructure_plan": "חבילת הבסיס מחויבת לפי שימוש ומוצעת בהנחות למתחילים.", @@ -846,6 +860,7 @@ "add_new_calendar": "הוספת לוח שנה חדש", "set_calendar": "הגדר/י למתי יש להוסיף אירועים חדשים כשאת/ה עסוק/ה.", "delete_schedule": "מחק תזמון", + "delete_schedule_description": "מחיקת תזמון תמחק אותו מכל סוגי הארועים. לא ניתן לבטל פעולה זו.", "schedule_created_successfully": "יצירת התזמון {{scheduleName}} בוצעה בהצלחה", "availability_updated_successfully": "עדכון התזמון {{scheduleName}} בוצע בהצלחה", "schedule_deleted_successfully": "מחיקת התזמון בוצעה בהצלחה", @@ -857,7 +872,7 @@ "time_format": "פורמט תצוגת זמן", "12_hour": "12 שעות", "24_hour": "24 שעות", - "12_hour_short": "12 ש'", + "12_hour_short": "12 שעות", "24_hour_short": "24 שעות", "redirect_success_booking": "הפניה מחדש בעת הזמנה ", "you_are_being_redirected": "אנחנו ננתב אותך אל {{ url }} בעוד $t(second, {\"count\": {{seconds}} }).", @@ -920,7 +935,7 @@ "user_impersonation_heading": "התחזות למשתמשים", "user_impersonation_description": "מצב זה מאפשר לצוות התמיכה שלנו להתחבר באופן זמני לחשבונך כדי שנוכל לפתור במהירות את הבעיות שתדווח/י לנו עליהם.", "team_impersonation_description": "מאפשר לבעלים של הצוות/מנהלים להיכנס זמנית בשמך.", - "allow_booker_to_select_duration": "אפשר/י למזמין/ה לבחור משך זמן", + "allow_booker_to_select_duration": "אפשר למזמין לבחור את משך הזמן", "impersonate_user_tip": "כל השימושים בתכונה זו נבדקים.", "impersonating_user_warning": "בהתחזות לשם המשתמש \"{{user}}\".", "impersonating_stop_instructions": "לחץ/י כאן כדי להפסיק", @@ -929,20 +944,25 @@ "current_location": "המיקום הנוכחי", "user_phone": "מספר הטלפון שלך", "new_location": "המיקום החדש", + "session": "חיבור", + "session_description": "שלוט בהגדרות החיבור של החשבון שלך", + "session_timeout_after": "נתק חיבור לאחר", + "session_timeout": "ניתוק חיבור לאחר", + "session_timeout_description": "בטל הזדהות של החיבור לאחר פרק זמן מסויים.", "no_location": "לא הוגדר מיקום", "set_location": "הגדרת מיקום", "update_location": "עדכון מיקום", "location_updated": "המיקום עודכן", "email_validation_error": "המידע שהזנת לא נראה כמו כתובת דוא\"ל", - "place_where_cal_widget_appear": "מקם/י את הקוד הזה בתוך דף ה-HTML במקום שבו ברצונך שהווידג'ט של {{appName}} יופיע.", + "place_where_cal_widget_appear": "מקם את הקוד הזה בתוך דף ה-HTML במקום שבו ברצונך שהווידג'ט של {{appName}} יופיע.", "create_update_react_component": "צור או עדכן רכיב React קיים כפי שמוצג להלן.", "copy_code": "העתקת הקוד", "code_copied": "הקוד הועתק!", "how_you_want_add_cal_site": "איך ברצונך להוסיף את {{appName}} לאתר שלך?", - "choose_ways_put_cal_site": "בחר/י אחת מהדרכים הבאות כדי להציב את {{appName}} באתר שלך.", + "choose_ways_put_cal_site": "בחר/י אחת מהדרכים הבאות כדי לשלב את {{appName}} באתר שלך.", "setting_up_zapier": "המערכת מגדירה את השילוב שלך עם Zapier", "generate_api_key": "יצירת מפתח ממשק תכנות יישומים (API)", - "generate_api_key_description": "יצירת מפתח ממשק תכנות יישומים (API) לשימוש עם {{appName}} ב-", + "generate_api_key_description": "צור מפתח ממשק מפתחים, API, לשימוש עם {{appName}} ב-", "your_unique_api_key": "מפתח ה-API הייחודי שלך", "copy_safe_api_key": "העתק/י את מפתח ה-API הזה ושמור/י אותו במקום בטוח. אם תאבד/י אותו, יהיה עליך ליצור מפתח חדש.", "zapier_setup_instructions": "<0>התחבר/י לחשבון Zapier שלך וצור/י Zap חדש.<1>בחר/י את Cal.com כאפליקציית ה-Trigger. בנוסף, בחר/י אירוע Trigger.<2>בחר/י את החשבון שלך ולאחר מכן הזן/י את מפתח ה-API הייחודי שלך.<3>בדוק/י את ה-Trigger.<4>וזהו, הכל מוכן!", @@ -950,7 +970,7 @@ "connect_apple_server": "חיבור לשרת Apple", "connect_caldav_server": "חיבור לשרת CalDav (בטא)", "calendar_url": "כתובת ה-URL של לוח השנה", - "apple_server_generate_password": "צור סיסמה ספציפית לאפליקציה כדי להשתמש ב-{{appName}} ב:", + "apple_server_generate_password": "צור סיסמה ספציפית לאפליקציה שתשמש עבור {{appName}} ב-", "credentials_stored_encrypted": "פרטי הכניסה שלך יישמרו ויוצפנו.", "it_stored_encrypted": "הוא יאוחסן ויוצפן.", "go_to_app_store": "מעבר אל ה-App Store", @@ -994,13 +1014,13 @@ "before_event_trigger": "לפני שהאירוע מתחיל", "event_cancelled_trigger": "כאשר אירוע מבוטל", "new_event_trigger": "כאשר אירוע חדש מוזמן", - "email_host_action": "יש לשלוח דוא\"ל למארח/ת", - "email_attendee_action": "יש לשלוח דוא\"ל למשתתף/ת", - "sms_attendee_action": "יש לשלוח SMS למשתתף/ת", - "sms_number_action": "יש לשלוח SMS למספר מסוים", - "workflows": "תהליכי עבודה", + "email_host_action": "שלח מייל למארח", + "email_attendee_action": "שלח מייל למשתתף", + "sms_attendee_action": "שלח SMS למשתתף", + "sms_number_action": "שלח SMS למספר מסוים", + "workflows": "תהליכים", "new_workflow_btn": "תהליך עבודה חדש", - "add_new_workflow": "הוספת תהליך עבודה חדש", + "add_new_workflow": "הוסף תהליך חדש", "reschedule_event_trigger": "כאשר נקבע מועד חדש לאירוע", "trigger": "גורם מפעיל", "triggers": "גורמים מפעילים", @@ -1025,7 +1045,7 @@ "current": "נוכחי", "premium": "פרימיום", "standard": "רגיל", - "confirm_username_change_dialog_title": "אישור השינוי של שם המשתמש", + "confirm_username_change_dialog_title": "אשר את שינוי שם המשתמש", "change_username_standard_to_premium": "מאחר שאתה משנה את שם המשתמש מסטנדרטי לפרימיום, תועבר אל הקופה לצורך שדרוג.", "change_username_premium_to_standard": "מאחר שאתה משנה את שם המשתמש מפרימיום לסטנדרטי, תועבר אל הקופה לצורך שנמוך.", "go_to_stripe_billing": "למעבר אל דף החיוב", @@ -1061,37 +1081,38 @@ "browse_our_docs": "לדפדף במסמכים שלנו", "choose_template": "בחירת תבנית", "reminder": "תזכורת", - "custom": "בהתאמה אישית", + "custom": "התאמה אישית", "reminder_email": "תזכורת: {{eventType}} עם {{name}} בתאריך {{date}}", "not_triggering_existing_bookings": "לא יופעל עבור הזמנות קיימות מאחר שהמשתמש יתבקש למסור מספר טלפון בעת הזמנת האירוע.", - "minute_one": "דקה {{count}}", + "minute_one": "{{count}} דקה", "minute_other": "{{count}} דקות", - "hour_one": "שעה {{count}}", + "hour_one": "{{count}} שעה", "hour_other": "{{count}} שעות", "invalid_input": "קלט לא חוקי", "broken_video_action": "לא יכולנו להוסיף לאירוע המתוכנן שלך את הקישור לפגישה ב-<1>{{location}}. צור/י קשר עם המוזמנים או עדכן/י את הפרטים באירוע בלוח השנה. ניתן <3> לשנות את המיקום בסוג האירוע או לנסות <5>להסיר את האפליקציה ולהוסיף אותה שוב.", "broken_calendar_action": "לא הצלחנו לעדכן את <1>{{calendar}}. <2> נא לבדוק את הגדרות לוח השנה שלך או להסיר את לוח השנה ולהוסיף אותו שוב ", - "attendee_name": "שם המשתתף/ת", + "attendee_name": "שם המשתתף", + "scheduler_full_name": "השם המלא של האדם שמבצע את התזמון", "broken_integration": "שילוב מנותק", "problem_adding_video_link": "הייתה בעיה בהוספת קישור לסרטון", "problem_updating_calendar": "הייתה בעיה בעדכון לוח השנה", - "active_on_event_types_one": "פעיל בסוג אירוע {{count}}", + "active_on_event_types_one": "פעיל ב-{{count}} סוגי אירועים", "active_on_event_types_other": "פעיל ב-{{count}} סוגי אירועים", "no_active_event_types": "אין סוגי אירועים פעילים", "new_seat_subject": "משתתף/ת חדש/ה {{name}} ב{{eventType}} בתאריך {{date}}", "new_seat_title": "מישהו הוסיף את עצמו לאירוע", "variable": "משתנה", "event_name_variable": "שם האירוע", - "organizer_name_variable": "שם המארגן/ת", - "attendee_name_variable": "שם המשתתף/ת", + "organizer_name_variable": "שם המארגן", + "attendee_name_variable": "שם המשתתף", "event_date_variable": "תאריך האירוע", - "event_time_variable": "שעת האירוע", + "event_time_variable": "מועד האירוע", "location_variable": "מיקום", "additional_notes_variable": "הערות נוספות", "app_upgrade_description": "כדי להשתמש בתכונה זו, עליך לשדרג לחשבון Pro.", "invalid_number": "מספר טלפון לא תקין", "navigate": "ניווט", - "open": "פתיחה", + "open": "פתח", "close": "סגירה", "upgrade": "שדרוג", "upgrade_to_access_recordings_title": "שדרג/י כדי לגשת להקלטות", @@ -1109,25 +1130,25 @@ "company_size": "גודל החברה", "what_help_needed": "במה דרושה לך עזרה?", "variable_format": "הפורמט של המשתנה", - "webhook_subscriber_url_reserved": "כתובת ה-URL של מנוי/מנויית Webhook כבר מוגדרת", + "webhook_subscriber_url_reserved": "כתובת ה-URL של מנוי Webhook כבר מוגדרת", "custom_input_as_variable_info": "התעלמות מכל התווים המיוחדים של תווית הקלט הנוספת (שימוש באותיות ובספרות בלבד), שימוש באותיות רישיות עבור כל האותיות והחלפת רווחים במקפים תחתונים.", "using_additional_inputs_as_variables": "איך ניתן להשתמש בסוגי קלט נוספים כמשתנים?", "download_desktop_app": "הורדת האפליקציה למחשבים שולחניים", "set_ping_link": "הגדרת קישור Ping", - "rate_limit_exceeded": "חריגה מההגבלה", + "rate_limit_exceeded": "חריגה מהגבלת קצב", "when_something_happens": "כאשר משהו קורה", "action_is_performed": "פעולה מבוצעת", - "test_action": "בדיקת פעולה", - "notification_sent": "נשלח עדכון", + "test_action": "בדוק פעולה", + "notification_sent": "התראה נשלחה", "no_input": "אין קלט", - "test_workflow_action": "בדיקת פעולת תהליך עבודה", + "test_workflow_action": "בדוק פעולת תהליך עבודה", "send_sms": "שליחת SMS", "send_sms_to_number": "בטוח שברצונך לשלוח SMS למספר {{number}}?", - "missing_connected_calendar": "אף לוח שנה המוגדר כברירת מחדל לא מחובר", + "missing_connected_calendar": "אין לוח שנה מחובר המוגדר כברירת מחדל", "connect_your_calendar_and_link": "ניתן לחבר את לוח השנה שלך מ<1>כאן.", "default_calendar_selected": "לוח השנה המוגדר כברירת מחדל", - "hide_from_profile": "להסתיר מהפרופיל", - "event_setup_tab_title": "הגדרת האירוע", + "hide_from_profile": "הסתר מהפרופיל", + "event_setup_tab_title": "הגדרת ארוע", "event_limit_tab_title": "מגבלות", "event_limit_tab_description": "באיזו תדירות ניתן להזמין אותך", "event_advanced_tab_description": "הגדרות לוח שנה ועוד...", @@ -1135,36 +1156,36 @@ "event_setup_multiple_duration_error": "הגדרת אירוע: משכי זמן מרובים מחייבים הגדרה של אפשרות אחת לפחות.", "event_setup_multiple_duration_default_error": "הגדרת אירוע: יש לבחור משך זמן חוקי המוגדר כברירת מחדל.", "event_setup_booking_limits_error": "הגבלות על הזמנות חייבות להיות מוגדרות בסדר עולה. [יום,שבוע,חודש,שנה]", - "select_which_cal": "בחר/י את לוח השנה שאליו יש להוסיף הזמנות", + "select_which_cal": "בחר את לוח השנה שאליו יש להוסיף הזמנות", "custom_event_name": "שם אירוע מותאם אישית", - "custom_event_name_description": "ניתן ליצור שמות אירועים בהתאמה אישית שיוצגו באירוע בלוח השנה", - "2fa_required": "נדרש אימות בשני גורמים", - "incorrect_2fa": "קוד שגוי של אימות בשני גורמים", + "custom_event_name_description": "צור שמות אירועים בהתאמה אישית שיוצגו באירוע בלוח השנה", + "2fa_required": "נדרש אימות דו-גורמי", + "incorrect_2fa": "קוד אימות דו-גורמי שגוי", "which_event_type_apply": "על איזה סוג אירוע זה יחול?", - "no_workflows_description": "תהליכי עבודה מאפשרים שימוש באוטומציה פשוטה לשליחת עדכונים ותזכורות, כך שאת/ה יכול/ה לתכנן תהליכים שקשורים לאירועים שלך.", + "no_workflows_description": "תהליכי עבודה מאפשרים שימוש באוטומציה פשוטה לשליחת התראות ותזכורות, כך שאתה יכול לתכנן תהליכים שקשורים לאירועים שלך.", "timeformat_profile_hint": "זוהי הגדרה פנימית שלא תשפיע על אופן התצוגה של תאריכים ושעות בדפים של הזמנות ציבוריות עבורך או עבור מי שמבצע הזמנות בשמך.", "create_workflow": "יצירת תהליך עבודה", - "do_this": "יש לבצע את הפעולה הזו", - "turn_off": "השבתה", + "do_this": "עשה את זה", + "turn_off": "כבה", "settings_updated_successfully": "עדכון ההגדרות בוצע בהצלחה", - "error_updating_settings": "שגיאה במהלך עדכון ההגדרות", - "personal_cal_url": "כתובת ה-URL של ה-{{appName}} האישי שלי", + "error_updating_settings": "שגיאה בעדכון ההגדרות", + "personal_cal_url": "כתובת ה-URL האישית שלי של {{appName}}", "bio_hint": "מספר משפטים אודותיך. המידע הזה יופיע בדף ה-URL האישי שלך.", - "delete_account_modal_title": "מחיקת חשבון", + "delete_account_modal_title": "מחיקת החשבון", "confirm_delete_account_modal": "בטוח שברצונך למחוק את חשבון {{appName}} שלך?", "delete_my_account": "מחיקת החשבון שלי", "start_of_week": "תחילת השבוע", "recordings_title": "הקלטות", "recording": "הקלטה", - "select_calendars": "בחר/י את לוחות השנה שבהם ברצונך לבדוק אם יש התנגשויות כדי למנוע כפל הזמנות.", + "select_calendars": "בחר את לוחות השנה שבהם ברצונך לבדוק אם יש התנגשויות, כדי למנוע כפל הזמנות.", "check_for_conflicts": "בדיקת התנגשויות", "view_recordings": "צפייה בהקלטות", "adding_events_to": "הוספת אירועים ל", "follow_system_preferences": "פעל לפי העדפות המערכת", "custom_brand_colors": "צבעי מותג בהתאמה אישית", - "customize_your_brand_colors": "בצע/י התאמה אישית של דף ההזמנות שלך עם צבעי מותג משלך.", + "customize_your_brand_colors": "בצע התאמה אישית של דף ההזמנות שלך עם צבעי מותג משלך.", "pro": "Pro", - "removes_cal_branding": "הסרת מיתוגים הקשורים ל-{{appName}}, כלומר 'מופעל על ידי {{appName}}'.", + "removes_cal_branding": "הסרת מיתוגים הקשורים ל-{{appName}}, כגון 'מופעל על ידי {{appName}}'", "profile_picture": "תמונת פרופיל", "upload": "העלאה", "add_profile_photo": "הוספת תמונת פרופיל", @@ -1176,11 +1197,11 @@ "rainbow_signature_error": "שגיאה בעת בקשת חתימה מהארנק.", "token_address": "כתובת הטוקן", "blockchain": "בלוקצ'יין", - "old_password": "הסיסמה הקודמת", + "old_password": "סיסמה ישנה", "secure_password": "הסיסמה החדשה והסופר מאובטחת שלך", "error_updating_password": "שגיאה בעת עדכון הסיסמה", - "two_factor_auth": "אימות בשני גורמים", - "recurring_event_tab_description": "הגדרת לוח זמנים חוזר", + "two_factor_auth": "אימות דו-גורמי", + "recurring_event_tab_description": "הגדרת ארוע חוזר", "today": "היום", "appearance": "מראה", "appearance_subtitle": "ניהול ההגדרות של מראה ההזמנות שלך", @@ -1214,6 +1235,7 @@ "connect_automation_apps": "קישור אפליקציות אוטומציה", "connect_analytics_apps": "קישור אפליקציות ניתוח נתונים", "connect_other_apps": "חיבור אפליקציות אחרות", + "connect_web3_apps": "חבר אפליקציות web3", "current_step_of_total": "שלב {{currentStep}} מתוך {{maxSteps}}", "add_variable": "להוסיף משתנה", "custom_phone_number": "מספר טלפון בהתאמה אישית", @@ -1230,6 +1252,7 @@ "to": "אל", "workflow_turned_on_successfully": "תהליך העבודה {{workflowName}} הועבר למצב {{offOn}} בהצלחה", "download_responses": "להוריד תגובות", + "download_responses_description": "הורד את כל התגובות לטופס שלך בפורמט CSV.", "download": "הורדה", "create_your_first_form": "צור/צרי את הטופס הראשון שלך", "create_your_first_form_description": "באמצעות טפסי ניתוב ניתן לשאול שאלות סיווג ולנתב אל האדם או אל סוג האירוע המתאימים.", @@ -1250,7 +1273,7 @@ "workflow_example_4": "לשלוח למשתתף/ת תזכורת בדוא\"ל שעה אחת לפני תחילת האירועים", "workflow_example_5": "לשלוח דוא\"ל מותאם אישית למארח/ת כאשר המועד של אירוע משתנה", "workflow_example_6": "לשלוח הודעת SMS מותאמת אישית למארח/ת כאשר אירוע חדש מוזמן", - "welcome_to_cal_header": "ברוך בואך ל-{{appName}}!", + "welcome_to_cal_header": "ברוך הבא אל {{appName}}!", "edit_form_later_subtitle": "ניתן יהיה לערוך את זה מאוחר יותר.", "connect_calendar_later": "אקשר את לוח השנה שלי מאוחר יותר", "problem_saving_user_profile": "אירעה בעיה בשמירת הנתונים שלך. נסה/י שוב או פנה/י לשירות התמיכה.", @@ -1259,7 +1282,7 @@ "booking_appearance": "מראה ההזמנה", "appearance_team_description": "ניהול ההגדרות של מראה הזמנות הצוות שלך", "only_owner_change": "רק הבעלים של הצוות יכולים לבצע שינויים בהזמנת הצוות ", - "team_disable_cal_branding_description": "הסרת מיתוגים הקשורים ל-{{appName}}, כמו למשל 'מופעל על ידי {{appName}}'", + "team_disable_cal_branding_description": "הסרת מיתוגים הקשורים ל-{{appName}}, כגון 'מופעל על ידי {{appName}}'", "invited_by_team": "הוזמנת על ידי {{teamName}} להצטרף לצוות בתפקיד {{role}}", "token_invalid_expired": "הטוקן לא חוקי או שתוקפו פג.", "exchange_add": "התחבר/י אל Microsoft Exchange", @@ -1271,6 +1294,8 @@ "routing_forms_send_email_owner": "שליחת דוא\"ל לבעלים", "routing_forms_send_email_owner_description": "דוא\"ל נשלח לבעלים לאחר שליחת הטופס", "add_new_form": "הוספת טופס חדש", + "create_your_first_route": "צור את המסלול הראשון שלך", + "route_to_the_right_person": "מסלל לאדם הנכון בהתאם לתשובות בטופס שלך", "form_description": "צור/י טופס משלך כדי לנתב אל מזמין/ה", "copy_link_to_form": "להעתיק את הקישור לטופס", "theme": "ערכת נושא", @@ -1298,9 +1323,10 @@ "back_to_signin": "חזרה לדף הכניסה", "reset_link_sent": "נשלח קישור לאיפוס", "password_reset_email": "שלחנו לך הודעת דוא\"ל עם הוראות לאיפוס הסיסמה לכתובת {{email}}.", - "password_reset_leading": "אם הודעת הדוא\"ל לא תגיע בקרוב, ודא/י שכתובת הדוא\"ל שהזנת נכונה, בדוק/י אם ההודעה הגיעה לתיקיית דואר הזבל או פנה/י לתמיכה אם הבעיה נמשכת.", + "password_reset_leading": "אם הודעת המייל לא תגיע בקרוב, ודא שכתובת הדוא\"ל שהזנת נכונה, בדוק אם ההודעה הגיעה לתיקיית דואר הזבל או פנה לתמיכה אם הבעיה נמשכת.", "password_updated": "הסיסמה עודכנה!", "pending_payment": "המתנה לתשלום", + "pending_invites": "הזמנות ממתינות", "confirmation_page_rainbow": "הגן/י על האירוע שלך באמצעות טוקנים או אסימוני NFT במטבע Ethereum, Polygon ועוד.", "not_on_cal": "לא ב-{{appName}}", "no_calendar_installed": "לא מותקן לוח שנה", @@ -1314,7 +1340,7 @@ "limit_booking_frequency": "הגבלת תדירות ההזמנות", "limit_booking_frequency_description": "הגבלת מספר הפעמים שבהן ניתן להזמין את האירוע הזה", "add_limit": "הוספת הגבלה", - "team_name_required": "שם הצוות נדרש", + "team_name_required": "נדרש שם צוות", "show_attendees": "שיתוף האורחים בפרטי המשתתפים", "how_additional_inputs_as_variables": "איך ניתן להשתמש בסוגי קלט נוספים כמשתנים", "format": "פורמט", @@ -1371,7 +1397,7 @@ "saml_sp_entity_id_copied": "המזהה של ישות SP הועתק!", "saml_btn_configure": "הגדרה", "add_calendar": "הוספת לוח שנה", - "limit_future_bookings": "הגבלת הזמנות עתידיות", + "limit_future_bookings": "הגבלת תזמונים עתידיים", "limit_future_bookings_description": "הגבלת התאריך הרחוק ביותר בעתיד שעד אליו ניתן להזמין את האירוע הזה", "no_event_types": "לא הוגדר אף סוג אירוע", "no_event_types_description": "לא הוגדר על ידי {{name}} אף סוג אירוע שבאפשרותך להזמין.", @@ -1390,8 +1416,8 @@ "team_url_required": "יש להזין כתובת URL של הצוות", "team_url_taken": "כתובת ה-URL הזו כבר תפוסה", "team_publish": "פרסום צוות", - "number_sms_notifications": "מספר טלפון (הודעות SMS)", - "attendee_email_variable": "כתובת הדוא\"ל של המשתתף/ת", + "number_sms_notifications": "מספר טלפון (התראות SMS)", + "attendee_email_variable": "כתובת הדוא\"ל של המשתתף", "attendee_email_info": "כתובת הדוא\"ל של האדם שביצע את ההזמנה", "kbar_search_placeholder": "הקלד/י פקודה או חפש/י...", "invalid_credential": "נראה שתוקף ההרשאה פג או שההרשאה בוטלה. יש להתקין מחדש שוב.", @@ -1427,6 +1453,9 @@ "disabled_calendar": "אם התקנת לוח שנה אחר, ההזמנות החדשות יתווספו אליו. אם לא, קשר/י לוח שנה חדש כדי לא להחמיץ הזמנות חדשות.", "enable_apps": "הפעלת אפליקציות", "enable_apps_description": "להפעיל אפליקציות שמשתמשים יכולים לשלב עם Cal.com", + "purchase_license": "רכוש רישיון", + "already_have_key": "כבר יש לי מפתח:", + "already_have_key_suggestion": "אנא העתק את משתנה הסביבה CALCOM_LICENSE_KEY הקיים שלך לכאן.", "app_is_enabled": "האפליקציה {{appName}} מופעלת", "app_is_disabled": "האפליקציה {{appName}} מושבתת", "keys_have_been_saved": "המפתחות נשמרו", @@ -1438,18 +1467,19 @@ "no_available_apps_description": "ודא/י שיש אפליקציות בפריסה שלך בנתיב 'packages/app-store'", "no_apps": "אף אפליקציה לא מופעלת במופע הזה של Cal", "apps_settings": "הגדרות אפליקציות", - "fill_this_field": "יש להזין מידע בשדה הזה", + "fill_this_field": "נא מלא שדה זה", "options": "אפשרויות", "enter_option": "הזנת ה-{{index}} של האפשרות", "add_an_option": "הוספת אפשרות", - "radio": "לחצן אפשרויות", + "radio": "רדיו", "google_meet_warning": "כדי להשתמש ב-Google Meet, יש להגדיר את Google Calendar כלוח השנה של המארח", "individual": "משתמש בודד", "all_bookings_filter_label": "כל ההזמנות", "all_users_filter_label": "כל המשתמשים", + "your_bookings_filter_label": "התזמונים שלך", "meeting_url_variable": "כתובת ה-URL של הפגישה", "meeting_url_info": "כתובת ה-URL של שיחת הוועידה באירוע", - "date_overrides": "חפיפת תאריכים", + "date_overrides": "תאריכים חופפים", "date_overrides_subtitle": "הוסף/י תאריכים שבהם הזמינות שלך שונה משעות העבודה הרגילות שלך מדי יום.", "date_overrides_info": "תאריכים שסומנו למעקף מועברים לארכיון באופן אוטומטי לאחר שהתאריך חולף", "date_overrides_dialog_which_hours": "באילו שעות את/ה פנוי/ה?", @@ -1485,6 +1515,7 @@ "round_robin_hosts": "מארחים לפי סבב", "minimum_round_robin_hosts_count": "מספר המארחים שחייבים להשתתף", "hosts": "מארחים", + "upgrade_to_enable_feature": "אתה צריך לייצר צוות כדי להפעיל את היכולת. לחץ ליצירת צוות.", "new_attendee": "משתתף/ת חדש/ה", "awaiting_approval": "בהמתנה לאישור", "requires_google_calendar": "האפליקציה הזו מחייבת חיבור ל-Google Calendar", @@ -1493,9 +1524,119 @@ "continue_to_install_google_calendar": "המשך להתקנת Google Calendar", "install_google_meet": "התקנת Google Meet", "install_google_calendar": "התקנת Google Calendar", + "sender_name": "שם השולח", + "already_invited": "הנמען כבר הוזמן", + "no_recordings_found": "לא נמצאו הקלטות", + "new_workflow_subtitle": "צור תהליך חדש עבור...", + "reporting": "דוחות", + "reporting_feature": "ראה את כל המידע הנכנס והורד אותו כ- CSV", + "teams_plan_required": "נדרש תוכנית צוותים", + "routing_forms_are_a_great_way": "טפסי ניתוב הם דרך מעולה לנתב לידים נכנסים לאדם המתאים. שדרג לתוכנית צוותים לגישה ליכולת זו.", + "choose_a_license": "בחר רישיון", + "choose_license_description": "Cal.com מגיע עם רישיון AGPLv3 נגיש וחינמי עם כמה מגבלות שניתן לשדרג לתוכנית Enterprise בכל עת לקבלת גישה אליהן. אתה יכול לשדרג בכל מועד עתידי.", + "license": "רישיון", + "agplv3_license": "רישיון AGPLv3", + "ee_enterprise_license": "\"ee/\" רישיון Enterprise", + "enterprise_booking_fee": "החל מ- {{enterprise_booking_fee}}/לחודש", + "enterprise_license_includes": "הכל לשימוש מסחרי", + "no_need_to_keep_your_code_open_source": "אין צורך לשמור את הקוד שלך כקוד פתוח", + "repackage_rebrand_resell": "אריזה מחדש, מיתוג מחדש ומכירה בקלות", + "a_vast_suite_of_enterprise_features": "מגוון יכולות Enterprise עצום", + "free_license_fee": "$0.00/לחודש", + "forever_open_and_free": "פתוח וחינם לתמיד", + "required_to_keep_your_code_open_source": "נדרש על מנת לשמור את הקוד שלך כקוד פתוח", + "cannot_repackage_and_resell": "לא ניתן לבצע אריזה מחדש, מיתוג מחדש ומכירה בקלות", + "no_enterprise_features": "אין יכולות Enterprise", + "step_enterprise_license": "רישיון Enterprise", + "step_enterprise_license_description": "כל מה שמימוש מסחרי צריך עם אחסון פרטי, אריזה מחדש, מיתוג מחדש ומכירה עם גישה בלעדית ליכולות Enterprise.", + "setup": "התקנה", + "setup_description": "התקנת מופע Cal.com", "configure": "הגדרה", - "sso_configuration": "כניסה בודדת", + "sso_configuration": "כניסת הזדהות אחידה SSO", + "sso_configuration_description": "הגדר SSO מסוג SAML/OIDC ואפשר לחברי הצוות לבצע כניסה עם ספק הזדהות", + "sso_oidc_heading": "SSO עם OIDC", + "sso_oidc_description": "הגדר SSO מסוג OIDC עם ספק ההזדהות שאתה רוצה.", + "sso_oidc_configuration_title": "הגדרות OIDC", + "sso_oidc_configuration_description": "הגדרת חיבור OIDC לספק ההזדהות שלך. אתה יכול למצוא את כל המידע הדרוש אצל ספק ההזדהות שלך.", + "sso_oidc_callback_copied": "הועתק כתובת קישור Callback", + "sso_saml_heading": "SSO עם SAML", + "sso_saml_description": "הגדר SSO מסוג SAML עם ספק ההזדהות שאתה רוצה.", + "sso_saml_configuration_title": "הגדרות SAML", + "sso_saml_configuration_description": "הגדרת חיבור SAML לספק ההזדהות שלך. אתה יכול למצוא את כל המידע הדרוש אצל ספק ההזדהות שלך.", + "sso_saml_acsurl_copied": "הועתק כתובת קישור ACS", + "sso_saml_entityid_copied": "הועתק Entity ID", + "sso_connection_created_successfully": "הגדרות {{connectionType}} נוצרו בהצלחה", + "sso_connection_deleted_successfully": "הגדרות {{connectionType}} נמחקו בהצלחה", + "delete_sso_configuration": "מחק את הגדרות {{connectionType}}", + "delete_sso_configuration_confirmation": "כן, מחק את הגדרות {{connectionType}}", + "delete_sso_configuration_confirmation_description": "אתה בטוח שאתה רוצה למחוק את הגדרות {{connectionType}}? חברי הצוות שלך שמשתמשים ב- {{connectionType}} להזדהות לא יוכלו להשתמש בו להכנס ל- Cal.com.", + "organizer_timezone": "מארגן אזורי זמן", "email_no_user_cta": "צור את החשבון שלך", + "email_user_cta": "צפה בהזמנה", + "email_no_user_invite_heading": "הוזמנת להצטרף לצוות ב- {{appName}}", + "email_no_user_invite_subheading": "{{invitedBy}} הזמין אותך להצטרף לצוות שלו ב- {{appName}}. {{appName}} הינה מתזמן זימונים שמאפשר לך ולצוות שלך לזמן פגישות בלי כל הפינג פונג במיילים.", + "email_no_user_invite_steps_intro": "אנחנו נדריך אותך במספר צעדים קצרים ואתה תהנה תזמון נטול מתח עם הצוות שלך כהרף עין.", + "email_no_user_step_one": "בחר שם משתמש", + "email_no_user_step_two": "קשר את לוח השנה שלך", + "email_no_user_step_three": "הגדר את הזמינות שלך", + "email_no_user_step_four": "הצטרף ל- {{teamName}}", + "email_no_user_signoff": "תזמון פגישות נעים מצוות {{appName}}", + "impersonation_user_tip": "אתה עומד להתחזות למשתמש, זה אומר שאתה יכול לעשות שינויים בשמו. אנא הזהר.", + "available_variables": "משתנים זמינים", + "scheduler": "{Scheduler}", + "no_workflows": "אין תהליכים", + "change_filter": "שנה את הסנן כדי לראות תהליכים אישיים וצוותים.", + "recommended_next_steps": "הצעדים הבאים המומלצים", + "create_a_managed_event": "צור ארוע מנוהל", + "meetings_are_better_with_the_right": "פגישות טובות יותר עם אנשי הצוות הנכונים נמצאים בו. הזמן אותם עכשיו.", + "create_a_one_one_template": "צור תבנית לתזמון פגישות אחד על אחד והפץ אותם למספר משתמשים.", + "collective_or_roundrobin": "כולם או טורי", + "book_your_team_members": "הזמן את אנשי הצוות שלך ביחד עם ארועים מסוג כולם או עבור על פניהם לבחירת האדם הנכון עם טורי.", + "create_event_on": "צור ארוע ב-", + "default_app_link_title": "צור קישור אפליקציה ברירת מחדל", + "default_app_link_description": "הגדרת קישור אפליקציה ברירת מחדל מאפשר לכל הארועים החדשים להשתמש בקישור שהגדרת.", "change_default_conferencing_app": "להגדיר כברירת מחדל", - "booking_confirmation_failed": "אישור ההזמנה נכשל" + "under_maintenance": "אינו זמין עקב תחזוקה", + "under_maintenance_description": "צוות {{appName}} מבצע עבודות תחזוקה שתוכננו מראש. אם יש לך שאלות, נא צור קשר עם התמיכה.", + "event_type_seats": "{{numberOfSeats}} מושבים", + "booking_questions_title": "שאלות תזמון", + "booking_questions_description": "התאמת השאלות שנשאלות בדף התזמון", + "add_a_booking_question": "הוסף שאלה", + "duplicate_email": "מייל כבר קיים", + "booking_with_payment_cancelled": "תשלום עבור ארוע זה כבר אינו נתמך", + "booking_with_payment_cancelled_already_paid": "זיכוי עבור התשלום של תזמון זה כבר בדרך.", + "booking_with_payment_cancelled_refunded": "התשלום עבור תזמון זה זוכה.", + "booking_confirmation_failed": "אישור ההזמנה נכשל", + "form_builder_field_already_exists": "שדה עם שם זה כבר קיים", + "form_builder_field_add_subtitle": "התאמת השאלות שנשאלות בדף התזמון", + "form_builder_system_field_cant_delete": "שדה מערכת זה לא ניתן להסרה.", + "form_builder_system_field_cant_toggle": "שדה מערכת זה לא ניתן לשינוי.", + "get_started_zapier_templates": "התחל עם תבניות Zapier", + "team_member": "חבר צוות", + "a_routing_form": "טופס ניתוב", + "form_description_placeholder": "תיאור הטופס", + "keep_me_connected_with_form": "שמור אותי מחובר לטופס", + "fields_in_form_duplicated": "כל שינוי בניתוב ובשדות הטופס שמשוכפל, ישפיעו על הטופס המשוכפל.", + "form_deleted": "הטופס נמחק", + "delete_form": "מחק טופס", + "delete_form_action": "כן, מחק את הטופס", + "delete_form_confirmation": "אתה בטוח שאתה רוצה למחוק את הטופס? כל מי ששיתפת עמו את הקישור לא יוכל יותר לתזמן באמצעותו. בנוסף, כל התגובות הקשורות אליו ימחקו.", + "typeform_redirect_url_copied": "קישור הפניה TypeForm הועתק! אתה יכול ללכת ולהגדיר את הקישור בטופס ה- Typeform שלך.", + "modifications_in_fields_warning": "שינויים בשדות וניתובים של הטפסים הבאים ישפיעו על טופס זה.", + "connected_forms": "טפסים מחוברים", + "form_modifications_warning": "הטפסים הבאים יושפעו כשאתה משנה שדות או ניתובים כאן.", + "responses_collection_waiting_description": "חכה זמן מה עד לאיסוף תגובות. אתה גם יכול ללכת ולשלוח טופס בעצמך.", + "this_is_what_your_users_would_see": "זה מה שהמשתמשים שלך היו רואים", + "identifies_name_field": "מזהה שדה לפי שם זה.", + "add_1_option_per_line": "הוסף אפשרות 1 לכל שורה", + "select_a_router": "בחר נתב", + "add_a_new_route": "הוסף נתיב חדש", + "no_responses_yet": "אין עדיין תגובות", + "this_will_be_the_placeholder": "זה יהיה הממלא מקום", + "verification_code": "קוד אימות", + "verify": "אמת", + "invalid_event_name_variables": "יש משתנה שגוי בשם הארוע שלך", + "select_all": "בחר הכל", + "default_conferncing_bulk_title": "בצע עדכון אצווה של סוגי הארועים הקיימים", + "default_conferncing_bulk_description": "עדכן את המיקומים עבור סוגי הארועים שנבחרו" } diff --git a/apps/web/public/static/locales/tr/common.json b/apps/web/public/static/locales/tr/common.json index 64635fd6603660..7e98a0a679b9ab 100644 --- a/apps/web/public/static/locales/tr/common.json +++ b/apps/web/public/static/locales/tr/common.json @@ -945,6 +945,7 @@ "session": "Oturum", "session_description": "Hesap oturumunuzu kontrol edin", "session_timeout": "Oturum zaman aşımına uğradı", + "session_timeout_description": "Belirli bir süre sonra oturumunuzu geçersiz kılın.", "no_location": "Konum tanımlı değil", "set_location": "Konumu Ayarla", "update_location": "Konumu Güncelle", @@ -1523,11 +1524,24 @@ "sender_name": "Gönderenin adı", "already_invited": "Katılımcı zaten davet edildi", "no_recordings_found": "Kayıt bulunamadı", + "reporting": "Raporlama", + "reporting_feature": "Gelen tüm verileri görüntüleyin ve CSV olarak indirin", + "teams_plan_required": "Ekip planı gerekli", + "routing_forms_are_a_great_way": "Yönlendirme formları, gelen müşteri adaylarınızı doğru kişiye yönlendirmenin harika bir yoludur. Bu özelliğe erişmek için bir Teams planına geçin.", "choose_a_license": "Bir lisans seçin", "license": "Lisans", "agplv3_license": "AGPLv3 Lisansı", + "ee_enterprise_license": "“/ee” Kuruluş Lisansı", + "enterprise_booking_fee": "Ayda {{enterprise_booking_fee}} başlangıç fiyatıyla", + "enterprise_license_includes": "Ticari bir kullanım durumu için her şey", + "no_need_to_keep_your_code_open_source": "Kodunuzu açık kaynak olarak tutmanıza gerek yok", + "repackage_rebrand_resell": "Kolayca yeniden paketleyin, yeniden markalalayın ve yeniden satış yapın", "free_license_fee": "0,00 $/ay", + "required_to_keep_your_code_open_source": "Kodunuzu açık kaynak olarak tutmanıza gerekiyor", + "cannot_repackage_and_resell": "Yeniden paketleme, yeniden markalama ve yeniden satış kolayca yapılamaz", "no_enterprise_features": "Kurumsal özellik yok", + "step_enterprise_license": "Kurumsal Lisans", + "step_enterprise_license_description": "Özel barındırma, yeniden paketleme, yeniden markalama, yeniden satış ve özel kurumsal bileşenlere erişim de dahil olmak üzere ticari kullanım için her şey.", "setup": "Kurulum", "setup_description": "Cal.com örneğini kurun", "configure": "Yapılandır", @@ -1549,11 +1563,14 @@ "delete_sso_configuration": "{{connectionType}} yapılandırmasını sil", "delete_sso_configuration_confirmation": "Evet, {{connectionType}} yapılandırmasını sil", "delete_sso_configuration_confirmation_description": "{{connectionType}} yapılandırmasını silmek istediğinizden emin misiniz? {{connectionType}} girişini kullanan ekip üyeleriniz artık Cal.com'a erişemeyecek.", + "organizer_timezone": "Organizatörün saat dilimi", "email_no_user_cta": "Hesabınızı oluşturun", "email_user_cta": "Daveti görüntüle", "email_no_user_invite_heading": "{{appName}} uygulamasındaki bir ekibe katılmaya davet edildiniz", "email_no_user_invite_subheading": "{{invitedBy}}, sizi {{appName}} ekibine katılmaya davet etti. {{appName}}, size ve ekibinize e-posta iletişimine ihtiyaç duymadan toplantı planlama yapma olanağı sağlayan bir etkinlik planlama aracıdır.", + "email_no_user_invite_steps_intro": "Ekibinizle birlikte kısa sürede ve sorunsuz planlama yapmanın keyfini çıkarmanız için birkaç adım süresince size rehberlik edeceğiz.", "email_no_user_step_one": "Kullanıcı adınızı seçin", + "email_no_user_step_two": "Takvim hesabınızı bağlayın", "email_no_user_step_three": "Müsaitlik durumunuzu ayarlayın", "email_no_user_step_four": "{{teamName}} ekibine katılın", "email_no_user_signoff": "{{appName}} ekibinden Mutlu Planlamalar", @@ -1563,6 +1580,8 @@ "recommended_next_steps": "Önerilen sonraki adımlar", "create_a_managed_event": "Yönetilen bir olay türü oluşturun", "meetings_are_better_with_the_right": "Doğru ekip üyelerinin bir araya geldiği toplantılar daha iyidir. Onları şimdi davet edin.", + "collective_or_roundrobin": "Toplu veya döngüsel sıralı", + "book_your_team_members": "Ekip üyelerinizi toplu etkinliklerle bir araya getirmek için rezervasyon yapın veya döngüsel planlamayla en uygun doğru kişiyi bulmak için rotasyon yapın.", "default_app_link_title": "Varsayılan uygulama bağlantısını ayarlayın", "default_app_link_description": "Varsayılan uygulama bağlantısını ayarlamak, yeni oluşturulan tüm etkinlik türlerinin ayarladığınız uygulama bağlantısını kullanmasına olanak tanır.", "change_default_conferencing_app": "Varsayılan olarak ayarla", @@ -1576,6 +1595,8 @@ "get_started_zapier_templates": "Zapier şablonlarını kullanmaya başlayın", "a_routing_form": "Yönlendirme Formu", "form_description_placeholder": "Form Açıklaması", + "keep_me_connected_with_form": "Formla bağlantımı devam ettir", + "fields_in_form_duplicated": "Kopyalanan formun Yönlendirici ve Alanlarındaki tüm değişiklikler de kopyaya yansıtılır.", "form_deleted": "Form silindi", "delete_form": "Formu sil", "delete_form_action": "Evet, Formu sil", diff --git a/apps/web/public/static/locales/zh-CN/common.json b/apps/web/public/static/locales/zh-CN/common.json index fd49346d32e0d0..516a302d0e4b73 100644 --- a/apps/web/public/static/locales/zh-CN/common.json +++ b/apps/web/public/static/locales/zh-CN/common.json @@ -1527,48 +1527,68 @@ "already_invited": "参与者已邀请", "no_recordings_found": "未找到录制内容", "reporting": "报告", + "reporting_feature": "查看来自数据的所有传入内容并将其以 CSV 格式下载", "teams_plan_required": "需要团队计划", + "routing_forms_are_a_great_way": "途径表格是将您的潜在线索传送给合适的人的好方法。升级到团队计划可访问此功能。", "choose_a_license": "选择许可证", + "choose_license_description": "Cal.com 附带了一个可访问且免费的 AGPLv3 许可证,该许可证有一些限制,可以随时升级为企业版许可证。您可以在以后随时升级。", "license": "许可证", "agplv3_license": "AGPLv3 许可证", "ee_enterprise_license": "“/ee”企业许可证", "enterprise_booking_fee": "{{enterprise_booking_fee}}/月起", + "enterprise_license_includes": "一切都适合商业用例", "no_need_to_keep_your_code_open_source": "无需让您的代码保持开源", + "repackage_rebrand_resell": "轻松重新包装、重塑品牌和转售", "a_vast_suite_of_enterprise_features": "大量企业版功能", "free_license_fee": "0.00 美元/月", "forever_open_and_free": "永远开放且免费", "required_to_keep_your_code_open_source": "需要让您的代码保持开源", + "cannot_repackage_and_resell": "无法轻松重新包装、重塑品牌和转售", "no_enterprise_features": "没有企业版功能", "step_enterprise_license": "企业版许可证", + "step_enterprise_license_description": "一切都适合商业用例,包括私人托管、重新包装、重塑品牌和转售,以及获取独家企业版组件。", "setup": "设置", "setup_description": "设置 Cal.com 实例", "configure": "配置", "sso_configuration": "单点登录", "sso_configuration_description": "配置 SAML/OIDC SSO 并允许团队成员使用身份提供程序登录", "sso_oidc_heading": "使用 OIDC 的 SSO", + "sso_oidc_description": "使用您选择的身份提供程序配置 OIDC SSO。", "sso_oidc_configuration_title": "OIDC 配置", + "sso_oidc_configuration_description": "配置与您的身份提供程序的 OIDC 连接。您可以在您的身份提供程序中找到所需信息。", "sso_oidc_callback_copied": "回调链接已复制", "sso_saml_heading": "使用 SAML 的 SSO", + "sso_saml_description": "使用您选择的身份提供程序配置 SAML SSO。", + "sso_saml_configuration_title": "SAML 配置", + "sso_saml_configuration_description": "配置与您的身份提供程序的 SAML 连接。您可以在您的身份提供程序中找到所需信息。", "sso_saml_acsurl_copied": "ACS 链接已复制", "sso_saml_entityid_copied": "实体 ID 已复制", "sso_connection_created_successfully": "{{connectionType}} 配置已成功创建", "sso_connection_deleted_successfully": "已成功删除 {{connectionType}} 配置", "delete_sso_configuration": "删除 {{connectionType}} 配置", "delete_sso_configuration_confirmation": "是,删除 {{connectionType}} 配置", + "delete_sso_configuration_confirmation_description": "您确定要删除 {{connectionType}} 配置吗?您的使用 {{connectionType}} 登录的团队成员将无法再访问 Cal.com。", "organizer_timezone": "组织者时区", "email_no_user_cta": "创建您的账户", "email_user_cta": "查看邀请", "email_no_user_invite_heading": "您已被邀请在 {{appName}} 加入一个团队", + "email_no_user_invite_subheading": "{{invitedBy}} 已邀请您加入他们在 {{appName}} 上的团队。{{appName}} 是一个活动安排调度程序,让您和您的团队无需通过电子邮件沟通即可安排会议。", + "email_no_user_invite_steps_intro": "我们将引导您完成几个简短步骤,您将立即与您的团队一起享受无压力的日程安排。", "email_no_user_step_one": "选择您的用户名", "email_no_user_step_two": "连接您的日历账户", "email_no_user_step_three": "设置您的可预约时间", "email_no_user_step_four": "加入 {{teamName}}", + "email_no_user_signoff": "{{appName}} 团队祝您日程安排愉快", "impersonation_user_tip": "您即将模拟一名用户,这意味着您可以代表他们进行更改。请小心。", "available_variables": "可用变量", "scheduler": "{Scheduler}", "recommended_next_steps": "建议的后续步骤", "create_a_managed_event": "创建托管活动类型", + "meetings_are_better_with_the_right": "有合适的团队成员参加会议会更好。立即邀请他们。", + "collective_or_roundrobin": "集体或轮流", + "book_your_team_members": "以集体模式预约您的团队成员,或以轮流模式循环到合适的人员。", "default_app_link_title": "设置默认应用链接", + "default_app_link_description": "设置默认应用程序链接可以让所有新创建的活动类型使用您设置的应用程序链接。", "change_default_conferencing_app": "设置为默认", "under_maintenance": "停机维护", "under_maintenance_description": "{{appName}} 团队正在进行计划维护。如果您有任何疑问,请联系支持。", @@ -1581,10 +1601,20 @@ "a_routing_form": "途径表格", "form_description_placeholder": "表单描述", "keep_me_connected_with_form": "让我与表格保持联系", + "fields_in_form_duplicated": "所复制的表格的导向器和字段的任何变化都会反映在副本中。", "form_deleted": "表格已删除", "delete_form": "删除表格", "delete_form_action": "是,删除表格", + "delete_form_confirmation": "您确定要删除此表格吗?与您共享链接的任何人都将无法再使用它进行预约。此外,所有相关回复都将被删除。", + "typeform_redirect_url_copied": "Typeform 重定向 URL 已复制!您可以在 TypeForm 表格中设置 URL。", + "modifications_in_fields_warning": "以下表格的字段和途径的修改将反映在此表格中。", + "connected_forms": "连接的表格", + "form_modifications_warning": "在此处修改字段或途径时,以下表格将受到影响。", + "responses_collection_waiting_description": "等待一段时间以收集回复。您也可以自行提交表格。", + "this_is_what_your_users_would_see": "这是您的用户将看到的内容", + "identifies_name_field": "按此名称标识字段。", "add_1_option_per_line": "每行添加 1 个选项", + "select_a_router": "选择导向器", "add_a_new_route": "添加新途径", "no_responses_yet": "尚无回复", "this_will_be_the_placeholder": "这将是占位符" From 5616dba4db9e81566eb3282e581faa33f4196540 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Mon, 6 Mar 2023 13:46:21 +0000 Subject: [PATCH 027/228] Minor typo fixups :pray (#7530) Co-authored-by: Peer Richelsen --- apps/web/pages/apps/installed/[category].tsx | 4 ++-- apps/web/pages/settings/my-account/conferencing.tsx | 4 ++-- apps/web/public/static/locales/en/common.json | 8 ++++---- .../features/apps/components/AppSetDefaultLinkDialog.tsx | 4 +--- .../components/BulkEditDefaultConferencingModal.tsx | 4 ++-- 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/apps/web/pages/apps/installed/[category].tsx b/apps/web/pages/apps/installed/[category].tsx index 45a154ca0d0cb6..9fe46386561b33 100644 --- a/apps/web/pages/apps/installed/[category].tsx +++ b/apps/web/pages/apps/installed/[category].tsx @@ -7,7 +7,7 @@ import { InstallAppButton } from "@calcom/app-store/components"; import type { EventLocationType } from "@calcom/app-store/locations"; import { getEventLocationTypeFromApp } from "@calcom/app-store/locations"; import { InstalledAppVariants } from "@calcom/app-store/utils"; -import { AppSetDefaultLinkDailog } from "@calcom/features/apps/components/AppSetDefaultLinkDialog"; +import { AppSetDefaultLinkDialog } from "@calcom/features/apps/components/AppSetDefaultLinkDialog"; import DisconnectIntegrationModal from "@calcom/features/apps/components/DisconnectIntegrationModal"; import { BulkEditDefaultConferencingModal } from "@calcom/features/eventtypes/components/BulkEditDefaultConferencingModal"; import { useLocale } from "@calcom/lib/hooks/useLocale"; @@ -203,7 +203,7 @@ const IntegrationsList = ({ data, handleDisconnect, variant }: IntegrationsListP })} {locationType && ( - setLocationType(undefined)} onSuccess={onSuccessCallback} diff --git a/apps/web/pages/settings/my-account/conferencing.tsx b/apps/web/pages/settings/my-account/conferencing.tsx index 7c975827f8cfc9..f5a487596d4e67 100644 --- a/apps/web/pages/settings/my-account/conferencing.tsx +++ b/apps/web/pages/settings/my-account/conferencing.tsx @@ -2,7 +2,7 @@ import { useCallback, useState } from "react"; import type { EventLocationType } from "@calcom/app-store/locations"; import { getEventLocationTypeFromApp } from "@calcom/app-store/locations"; -import { AppSetDefaultLinkDailog } from "@calcom/features/apps/components/AppSetDefaultLinkDialog"; +import { AppSetDefaultLinkDialog } from "@calcom/features/apps/components/AppSetDefaultLinkDialog"; import { BulkEditDefaultConferencingModal } from "@calcom/features/eventtypes/components/BulkEditDefaultConferencingModal"; import { getLayout } from "@calcom/features/settings/layouts/SettingsLayout"; import { useLocale } from "@calcom/lib/hooks/useLocale"; @@ -171,7 +171,7 @@ const ConferencingLayout = () => { {locationType && ( - >; onSuccess: () => void; }) { - const utils = trpc.useContext(); - const { t } = useLocale(); const eventLocationTypeOptions = getEventLocationType(locationType.type); diff --git a/packages/features/eventtypes/components/BulkEditDefaultConferencingModal.tsx b/packages/features/eventtypes/components/BulkEditDefaultConferencingModal.tsx index 290d4f51fc07bd..d0bf656e19e8a8 100644 --- a/packages/features/eventtypes/components/BulkEditDefaultConferencingModal.tsx +++ b/packages/features/eventtypes/components/BulkEditDefaultConferencingModal.tsx @@ -36,8 +36,8 @@ export function BulkEditDefaultConferencingModal(props: { open: boolean; setOpen + title={t("default_conferencing_bulk_title")} + description={t("default_conferencing_bulk_description")}>
    { From 6a6faf30ffbc2da1ef8a2e6a7d8ea661d9437327 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 6 Mar 2023 14:50:58 +0100 Subject: [PATCH 028/228] New Crowdin translations by Github Action (#7534) Co-authored-by: Crowdin Bot --- apps/web/public/static/locales/fr/common.json | 5 +++-- apps/web/public/static/locales/he/common.json | 6 +++--- apps/web/public/static/locales/tr/common.json | 3 +++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/web/public/static/locales/fr/common.json b/apps/web/public/static/locales/fr/common.json index 1b1a9e35938484..5e54264b5aec65 100644 --- a/apps/web/public/static/locales/fr/common.json +++ b/apps/web/public/static/locales/fr/common.json @@ -1636,6 +1636,7 @@ "verification_code": "Code de vérification", "verify": "Vérifier", "select_all": "Tout sélectionner", - "default_conferncing_bulk_title": "Mise à jour multiple des types d'événements existants", - "default_conferncing_bulk_description": "Mettez à jour les emplacements pour les types d'événements sélectionnés." + "default_conferencing_bulk_title": "Mise à jour multiple des types d'événements existants", + "default_conferencing_bulk_description": "Mettez à jour les emplacements pour les types d'événements sélectionnés.", + "invalid_event_name_variables": "Il y a une variable invalide dans le nom de votre événement" } diff --git a/apps/web/public/static/locales/he/common.json b/apps/web/public/static/locales/he/common.json index 6e5ca34fae181c..e297082d5b665e 100644 --- a/apps/web/public/static/locales/he/common.json +++ b/apps/web/public/static/locales/he/common.json @@ -1635,8 +1635,8 @@ "this_will_be_the_placeholder": "זה יהיה הממלא מקום", "verification_code": "קוד אימות", "verify": "אמת", - "invalid_event_name_variables": "יש משתנה שגוי בשם הארוע שלך", "select_all": "בחר הכל", - "default_conferncing_bulk_title": "בצע עדכון אצווה של סוגי הארועים הקיימים", - "default_conferncing_bulk_description": "עדכן את המיקומים עבור סוגי הארועים שנבחרו" + "default_conferencing_bulk_title": "בצע עדכון אצווה של סוגי הארועים הקיימים", + "default_conferencing_bulk_description": "עדכן את המיקומים עבור סוגי הארועים שנבחרו", + "invalid_event_name_variables": "יש משתנה שגוי בשם הארוע שלך" } diff --git a/apps/web/public/static/locales/tr/common.json b/apps/web/public/static/locales/tr/common.json index 7e98a0a679b9ab..4537baa135c1df 100644 --- a/apps/web/public/static/locales/tr/common.json +++ b/apps/web/public/static/locales/tr/common.json @@ -25,6 +25,7 @@ "rejection_confirmation": "Rezervasyonu reddet", "manage_this_event": "Bu etkinliği yönet", "invite_team_member": "Ekip üyesi davet et", + "invite_team_notifcation_badge": "Dvt.", "your_event_has_been_scheduled": "Etkinliğiniz planlandı", "your_event_has_been_scheduled_recurring": "Yinelenen etkinliğiniz planlandı", "accept_our_license": "<1>NEXT_PUBLIC_LICENSE_CONSENT .env değişkenini '{{agree}}' olarak değiştirerek lisansımızı kabul edin.", @@ -944,6 +945,7 @@ "new_location": "Yeni Konum", "session": "Oturum", "session_description": "Hesap oturumunuzu kontrol edin", + "session_timeout_after": "Şu süreden sonra oturum zamanaşımı:", "session_timeout": "Oturum zaman aşımına uğradı", "session_timeout_description": "Belirli bir süre sonra oturumunuzu geçersiz kılın.", "no_location": "Konum tanımlı değil", @@ -1529,6 +1531,7 @@ "teams_plan_required": "Ekip planı gerekli", "routing_forms_are_a_great_way": "Yönlendirme formları, gelen müşteri adaylarınızı doğru kişiye yönlendirmenin harika bir yoludur. Bu özelliğe erişmek için bir Teams planına geçin.", "choose_a_license": "Bir lisans seçin", + "choose_license_description": "Erişilebilir ve ücretsiz bir AGPLv3 lisansı ile birlikte gelen Cal.com uygulaması Bazı sınırlamalara sahip olmakla birlikte uygulamayı istediğiniz zamanda Enterprise lisansına yükseltilebilirsiniz.\n\n\n\n\n\n\n\n Daha sonra istediğiniz zaman yükseltebilirsiniz.", "license": "Lisans", "agplv3_license": "AGPLv3 Lisansı", "ee_enterprise_license": "“/ee” Kuruluş Lisansı", From b349def58b79ff010c15c9e095ecced88052efdf Mon Sep 17 00:00:00 2001 From: Peer Richelsen Date: Mon, 6 Mar 2023 15:49:22 +0100 Subject: [PATCH 029/228] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index c9d69a3729e0d8..f93f3f7483dd3c 100644 --- a/README.md +++ b/README.md @@ -350,8 +350,17 @@ We have a list of [help wanted](https://github.com/calcom/cal.com/issues?q=is:is Bounties of cal + + +### Contributors + + + + + + ### Translations From e627cc51fd65f65a91a7ee4a76cb74f1d73a6099 Mon Sep 17 00:00:00 2001 From: Peer Richelsen Date: Mon, 6 Mar 2023 17:44:31 +0100 Subject: [PATCH 030/228] max-height for description + scroll bar, removing description icon (#7535) * max-height for description, scroll * added nicer scrollbar * removing info icon for more description space --- apps/web/components/booking/BookingDescription.tsx | 12 ++---------- apps/web/styles/globals.css | 7 +++++++ packages/ui/components/form/select/components.tsx | 5 +---- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/apps/web/components/booking/BookingDescription.tsx b/apps/web/components/booking/BookingDescription.tsx index 37c33c70937b5f..2df26dac79d309 100644 --- a/apps/web/components/booking/BookingDescription.tsx +++ b/apps/web/components/booking/BookingDescription.tsx @@ -6,7 +6,7 @@ import dayjs from "@calcom/dayjs"; import classNames from "@calcom/lib/classNames"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { Badge } from "@calcom/ui"; -import { FiCheckSquare, FiClock, FiInfo } from "@calcom/ui/components/icon"; +import { FiCheckSquare, FiClock } from "@calcom/ui/components/icon"; import useRouterQuery from "@lib/hooks/useRouterQuery"; @@ -94,15 +94,7 @@ const BookingDescription: FC = (props) => { "flex", isBookingPage && "dark:text-darkgray-600 text-sm font-medium text-gray-600" )}> -
    - -
    -
    +
    diff --git a/apps/web/styles/globals.css b/apps/web/styles/globals.css index cd0ed081fada68..870aefe1f83076 100644 --- a/apps/web/styles/globals.css +++ b/apps/web/styles/globals.css @@ -152,6 +152,13 @@ select:focus { input[type='text']:focus { box-shadow: none; } +@layer components { + .scroll-bar{ + @apply scrollbar-thin scrollbar-thumb-rounded-md dark:scrollbar-thumb-darkgray-300 scrollbar-thumb-gray-300 scrollbar-track-transparent + } +} + + button[role="switch"][data-state="checked"] { @apply bg-gray-900; } diff --git a/packages/ui/components/form/select/components.tsx b/packages/ui/components/form/select/components.tsx index a50bc43c5c8fc4..3d459894e9434e 100644 --- a/packages/ui/components/form/select/components.tsx +++ b/packages/ui/components/form/select/components.tsx @@ -163,9 +163,6 @@ export const MenuListComponent = < }: MenuListProps) => ( ); From 18b6a93476513459fc9e4868afed015d8274ba99 Mon Sep 17 00:00:00 2001 From: "GitStart-Cal.com" <121884634+gitstart-calcom@users.noreply.github.com> Date: Mon, 6 Mar 2023 17:52:20 +0000 Subject: [PATCH 031/228] Fix: Filter Timezones by cities (#7540) Co-authored-by: gitstart-calcom --- apps/web/test/lib/getTimezone.test.ts | 3 ++ packages/lib/isProblematicTimezone.ts | 49 +++++++++++++++++++++++++++ packages/lib/timezone.ts | 5 +-- 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 packages/lib/isProblematicTimezone.ts diff --git a/apps/web/test/lib/getTimezone.test.ts b/apps/web/test/lib/getTimezone.test.ts index 841c777a5c9941..bd3701355ec8e2 100644 --- a/apps/web/test/lib/getTimezone.test.ts +++ b/apps/web/test/lib/getTimezone.test.ts @@ -63,7 +63,10 @@ it("should filter cities for a valid city name", () => { it("should return appropriate timezone(s) for a given city name array", () => { expect(addCitiesToDropdown(cityData)).toMatchInlineSnapshot(` Object { + "America/Argentina/Cordoba": "San Francisco", + "America/El_Salvador": "San Francisco Gotera", "America/Los_Angeles": "San Francisco", + "America/Santo_Domingo": "San Francisco de Macoris", "America/Sao_Paulo": "Sao Francisco do Sul", } `); diff --git a/packages/lib/isProblematicTimezone.ts b/packages/lib/isProblematicTimezone.ts new file mode 100644 index 00000000000000..32709831236ec8 --- /dev/null +++ b/packages/lib/isProblematicTimezone.ts @@ -0,0 +1,49 @@ +// This function is purely necessary because of react-timezone-select see +// https://github.com/spencermountain/spacetime/issues/323 +// https://github.com/spencermountain/timezone-soft/issues/17 +// and https://github.com/ndom91/react-timezone-select/issues/76 +// for more context +function isProblematicTimezone(tz: string): boolean { + const problematicTimezones = [ + "null", + "Africa/Malabo", + "Africa/Maseru", + "Africa/Mbabane", + "America/Anguilla", + "America/Antigua", + "America/Aruba", + "America/Bahia", + "America/Cayman", + "America/Dominica", + "America/Grenada", + "America/Guadeloupe", + "America/Kralendijk", + "America/Lower_Princes", + "America/Maceio", + "America/Marigot", + "America/Montserrat", + "America/Nassau", + "America/St_Barthelemy", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Tortola", + "Antarctica/McMurdo", + "Arctic/Longyearbyen", + "Asia/Bahrain", + "Atlantic/St_Helena", + "Europe/Busingen", + "Europe/Guernsey", + "Europe/Isle_of_Man", + "Europe/Mariehamn", + "Europe/San_Marino", + "Europe/Vaduz", + "Europe/Vatican", + "Indian/Comoro", + "Pacific/Saipan", + "Africa/Asmara", + ]; + return problematicTimezones.includes(tz); +} +export default isProblematicTimezone; diff --git a/packages/lib/timezone.ts b/packages/lib/timezone.ts index 60c9b5a59ca46b..c6e064e398b8f1 100644 --- a/packages/lib/timezone.ts +++ b/packages/lib/timezone.ts @@ -1,8 +1,9 @@ import type { ITimezoneOption } from "react-timezone-select"; -import { allTimezones } from "react-timezone-select"; import type { ICity } from "@calcom/ui/components/form/timezone-select"; +import isProblematicTimezone from "./isProblematicTimezone"; + function findPartialMatch(itemsToSearch: string, searchString: string) { const searchItems = searchString.split(" "); return searchItems.every((i) => itemsToSearch.toLowerCase().indexOf(i.toLowerCase()) >= 0); @@ -23,7 +24,7 @@ export const filterByCities = (tz: string, data: ICity[]): ICity[] => { export const addCitiesToDropdown = (cities: ICity[]) => { const cityTimezones = cities?.reduce((acc: { [key: string]: string }, city: ICity) => { - if (Object.keys(allTimezones).includes(city.timezone)) { + if (city.timezone !== null && !isProblematicTimezone(city.timezone)) { acc[city.timezone] = city.city; } return acc; From 69808bb9a4f24f4295c4f520d2653c2daa9f0d0e Mon Sep 17 00:00:00 2001 From: Benjamin Babic <11808448+b-babic@users.noreply.github.com> Date: Mon, 6 Mar 2023 23:45:40 +0100 Subject: [PATCH 032/228] 1172 booking uid design update (#7537) * booking/[uid] additional fields design update * add host badge to the who field --------- Co-authored-by: Peer Richelsen --- apps/web/pages/booking/[uid].tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/web/pages/booking/[uid].tsx b/apps/web/pages/booking/[uid].tsx index fa337a6114c60c..a002ce410d3513 100644 --- a/apps/web/pages/booking/[uid].tsx +++ b/apps/web/pages/booking/[uid].tsx @@ -46,7 +46,7 @@ import prisma from "@calcom/prisma"; import type { Prisma } from "@calcom/prisma/client"; import { bookingMetadataSchema } from "@calcom/prisma/zod-utils"; import { customInputSchema, EventTypeMetaDataSchema } from "@calcom/prisma/zod-utils"; -import { Button, EmailInput, HeadSeo, Label } from "@calcom/ui"; +import { Badge, Button, EmailInput, HeadSeo } from "@calcom/ui"; import { FiX, FiExternalLink, FiChevronLeft, FiCheck, FiCalendar } from "@calcom/ui/components/icon"; import { timeZone } from "@lib/clock"; @@ -497,7 +497,12 @@ export default function Success(props: SuccessProps) { <> {bookingInfo?.user && (
    -

    {bookingInfo.user.name}

    +

    + {bookingInfo.user.name} + + {t("Host")} + +

    {bookingInfo.user.email}

    )} @@ -554,9 +559,10 @@ export default function Success(props: SuccessProps) { return ( <> - - {/* Might be a good idea to use the readonly variant of respective components here */} -
    {response.toString()}
    +
    {label}
    +
    +

    {response.toString()}

    +
    ); })} From 33f35e77fde1025e1453fe344d57926bc69b60d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efra=C3=ADn=20Roch=C3=ADn?= Date: Mon, 6 Mar 2023 16:12:43 -0700 Subject: [PATCH 033/228] Fix/incorrect timezone on booking success (#7544) * set the selected timezone to formatToLocalizedTimezone function * remove console.logs --- apps/web/pages/booking/[uid].tsx | 7 +++---- packages/lib/date-fns/index.ts | 3 ++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/web/pages/booking/[uid].tsx b/apps/web/pages/booking/[uid].tsx index a002ce410d3513..dbc1071cced79a 100644 --- a/apps/web/pages/booking/[uid].tsx +++ b/apps/web/pages/booking/[uid].tsx @@ -796,7 +796,6 @@ export function RecurringBookings({ t, i18n: { language }, } = useLocale(); - const recurringBookingsSorted = recurringBookings ? recurringBookings.sort((a: ConfigType, b: ConfigType) => (dayjs(a).isAfter(dayjs(b)) ? 1 : -1)) : null; @@ -823,7 +822,7 @@ export function RecurringBookings({ {formatToLocalizedTime(dayjs(dateStr), language, undefined, !is24h)} -{" "} {formatToLocalizedTime(dayjs(dateStr).add(duration, "m"), language, undefined, !is24h)}{" "} - ({formatToLocalizedTimezone(dayjs(dateStr), language)}) + ({formatToLocalizedTimezone(dayjs(dateStr), language, timeZone())})
    ))} @@ -843,7 +842,7 @@ export function RecurringBookings({ {formatToLocalizedTime(date, language, undefined, !is24h)} -{" "} {formatToLocalizedTime(dayjs(date).add(duration, "m"), language, undefined, !is24h)}{" "} - ({formatToLocalizedTimezone(dayjs(dateStr), language)}) + ({formatToLocalizedTimezone(dayjs(dateStr), language, timeZone())})
    ))} @@ -860,7 +859,7 @@ export function RecurringBookings({
    {formatToLocalizedTime(date, language, undefined, !is24h)} -{" "} {formatToLocalizedTime(dayjs(date).add(duration, "m"), language, undefined, !is24h)}{" "} - ({formatToLocalizedTimezone(date, language)}) + ({formatToLocalizedTimezone(date, language, timeZone())})
    ); } diff --git a/packages/lib/date-fns/index.ts b/packages/lib/date-fns/index.ts index 9d1b1744f6254c..5f474a6f9e61fa 100644 --- a/packages/lib/date-fns/index.ts +++ b/packages/lib/date-fns/index.ts @@ -75,12 +75,13 @@ export const formatToLocalizedTime = ( export const formatToLocalizedTimezone = ( date: Date | Dayjs, locale: string | undefined = undefined, + timeZone: Intl.DateTimeFormatOptions["timeZone"], timeZoneName: Intl.DateTimeFormatOptions["timeZoneName"] = "long" ) => { // Intl.DateTimeFormat doesn't format into a timezone only, so we must // formatToParts() and return the piece we want const theDate = date instanceof dayjs ? (date as Dayjs).toDate() : (date as Date); - return Intl.DateTimeFormat(locale, { timeZoneName }) + return Intl.DateTimeFormat(locale, { timeZoneName, timeZone }) .formatToParts(theDate) .find((d) => d.type == "timeZoneName")?.value; }; From 25ec5313fbc2bf8217dbbf38a00d217d79c46ae6 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Mon, 6 Mar 2023 23:16:17 +0000 Subject: [PATCH 034/228] Update CODEOWNERS Add kodiakhq as reviewer for translations. --- .github/CODEOWNERS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7e8de382df2d30..30e4fee5204824 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -31,3 +31,5 @@ packages/features/tips @PeerRich @calcom/core packages/ui @calcom/ui packages/config @calcom/core packages/app-store/ee/routing-forms @hariombalhara @calcom/core + +apps/web/public/static/locales @kodiakhq @calcom/core From b247075a19acc3b34df0a1f52d73ac4db6a4f8e7 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Mon, 6 Mar 2023 23:18:45 +0000 Subject: [PATCH 035/228] Revert "Update CODEOWNERS" This reverts commit 25ec5313fbc2bf8217dbbf38a00d217d79c46ae6. --- .github/CODEOWNERS | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 30e4fee5204824..7e8de382df2d30 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -31,5 +31,3 @@ packages/features/tips @PeerRich @calcom/core packages/ui @calcom/ui packages/config @calcom/core packages/app-store/ee/routing-forms @hariombalhara @calcom/core - -apps/web/public/static/locales @kodiakhq @calcom/core From a0f55707e2d48cfaa1173a29ad9898a0bb6ec4ca Mon Sep 17 00:00:00 2001 From: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> Date: Mon, 6 Mar 2023 18:27:29 -0500 Subject: [PATCH 036/228] make "text" the default value (#7543) Co-authored-by: CarinaWolli --- packages/features/form-builder/FormBuilder.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/features/form-builder/FormBuilder.tsx b/packages/features/form-builder/FormBuilder.tsx index 86ebc33b6edc9c..aa308df96e6c48 100644 --- a/packages/features/form-builder/FormBuilder.tsx +++ b/packages/features/form-builder/FormBuilder.tsx @@ -255,7 +255,7 @@ export const FormBuilder = function FormBuilder({ remove(index); }; - const fieldType = FieldTypesMap[fieldForm.watch("type")]; + const fieldType = FieldTypesMap[fieldForm.watch("type") || "text"]; const isFieldEditMode = fieldDialog.fieldIndex !== -1; return (
    @@ -374,6 +374,7 @@ export const FormBuilder = function FormBuilder({ { + const type = data.type || "text"; const isNewField = fieldDialog.fieldIndex == -1; if (isNewField && fields.some((f) => f.name === data.name)) { showToast(t("form_builder_field_already_exists"), "error"); @@ -384,6 +385,7 @@ export const FormBuilder = function FormBuilder({ } else { const field: RhfFormField = { ...data, + type, sources: [ { label: "User", @@ -402,7 +404,7 @@ export const FormBuilder = function FormBuilder({ }); }}> { - const fieldType = field.type; + const fieldType = field.type || "text"; const componentConfig = Components[fieldType]; const isValueOfPropsType = (val: unknown, propsType: typeof componentConfig.propsType) => { From 56a2b66190012a2048bdb5079cee988333e9f8ae Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Mon, 6 Mar 2023 23:53:04 +0000 Subject: [PATCH 037/228] v2.6.7 --- apps/web/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/package.json b/apps/web/package.json index 41e59c73a274f5..540d8c62b41e96 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "@calcom/web", - "version": "2.6.6", + "version": "2.6.7", "private": true, "scripts": { "analyze": "ANALYZE=true next build", From a25195cf207b8b622c90807209f1ebd79b3a5c8d Mon Sep 17 00:00:00 2001 From: Nafees Nazik <84864519+G3root@users.noreply.github.com> Date: Tue, 7 Mar 2023 13:25:06 +0530 Subject: [PATCH 038/228] fix: overflow issue in event type form builder and booking page (#7553) --- apps/web/components/booking/pages/BookingPage.tsx | 2 +- packages/features/form-builder/FormBuilder.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/web/components/booking/pages/BookingPage.tsx b/apps/web/components/booking/pages/BookingPage.tsx index 525999b6450825..d3d82e84cc4e63 100644 --- a/apps/web/components/booking/pages/BookingPage.tsx +++ b/apps/web/components/booking/pages/BookingPage.tsx @@ -481,7 +481,7 @@ const BookingPage = ({ )}>
    diff --git a/packages/features/form-builder/FormBuilder.tsx b/packages/features/form-builder/FormBuilder.tsx index aa308df96e6c48..3c909d354da3b9 100644 --- a/packages/features/form-builder/FormBuilder.tsx +++ b/packages/features/form-builder/FormBuilder.tsx @@ -368,7 +368,7 @@ export const FormBuilder = function FormBuilder({ fieldIndex: -1, }) }> - +
    Date: Tue, 7 Mar 2023 12:25:32 +0100 Subject: [PATCH 039/228] New Crowdin translations by Github Action (#7546) Co-authored-by: Crowdin Bot --- apps/web/public/static/locales/nl/common.json | 122 +++++++++++++++++- apps/web/public/static/locales/tr/common.json | 2 + 2 files changed, 123 insertions(+), 1 deletion(-) diff --git a/apps/web/public/static/locales/nl/common.json b/apps/web/public/static/locales/nl/common.json index afbbaf22ac46d8..cd5e3690962b9b 100644 --- a/apps/web/public/static/locales/nl/common.json +++ b/apps/web/public/static/locales/nl/common.json @@ -7,6 +7,7 @@ "upgrade_now": "Nu upgraden", "accept_invitation": "Uitnodiging accepteren", "calcom_explained": "{{appName}} is het open source Calendly-alternatief waarmee u uw eigen gegevens, werkstroom en uiterlijk in de hand houdt.", + "calcom_explained_new_user": "Voltooi het instellen van uw {{appName}}-account! U bent slechts enkele stappen verwijderd van het oplossen van al uw planningsproblemen.", "have_any_questions": "Heeft u vragen? We zijn er om te helpen.", "reset_password_subject": "{{appName}}: Instructies voor het opnieuw instellen van uw wachtwoord", "event_declined_subject": "Afgewezen: {{title}}", @@ -23,6 +24,8 @@ "rejection_reason_description": "Weet u zeker dat u de boeking wilt weigeren? We informeren de persoon die probeerde te boeken. U kunt hieronder een reden opgeven.", "rejection_confirmation": "Boeking weigeren", "manage_this_event": "Deze gebeurtenis beheren", + "invite_team_member": "Teamlid uitnodigen", + "invite_team_notifcation_badge": "Uitgenodigd", "your_event_has_been_scheduled": "Uw gebeurtenis is gepland", "your_event_has_been_scheduled_recurring": "Uw terugkerende gebeurtenis is gepland", "accept_our_license": "Accepteer onze licentie door de variable .env <1>NEXT_PUBLIC_LICENSE_CONSENT te veranderen in '{{agree}}'.", @@ -410,6 +413,8 @@ "password_updated_successfully": "Wachtwoord met succes bijgewerkt", "password_has_been_changed": "Uw wachtwoord is met succes gewijzigd.", "error_changing_password": "Er ging iets mis tijdens het wijzigen van uw wachtwoord", + "session_timeout_changed": "Je sessieconfiguratie is bijgewerkt.", + "session_timeout_change_error": "Fout bij het bijwerken van de sessieconfiguratie", "something_went_wrong": "Er ging iets fout.", "something_doesnt_look_right": "Iets ziet er niet correct uit?", "please_try_again": "Probeer het nogmaals.", @@ -428,6 +433,7 @@ "password_hint_num": "Minimaal 1 cijfer bevatten", "invalid_password_hint": "Het wachtwoord moet minimaal {{passwordLength}} tekens lang zijn, minimaal 1 cijfer bevatten en bestaan uit een mix van hoofd- en kleine letters", "incorrect_password": "Uw wachtwoord is incorrect.", + "incorrect_username_password": "Gebruikersnaam of wachtwoord is onjuist.", "24_h": "24u", "use_setting": "Instelling gebruiken", "am_pm": "am/pm", @@ -455,6 +461,7 @@ "slots_load_fail": "De beschikbare tijdsperiodes konden niet worden geladen.", "additional_guests": "Gasten toevoegen", "your_name": "Uw naam", + "your_full_name": "Uw volledige naam", "email_address": "E-mail adres", "enter_valid_email": "Voer een geldig e-mailadres in", "location": "Locatie", @@ -508,6 +515,8 @@ "admin": "Beheerder", "administrator_user": "Beheerdersgebruiker", "lets_create_first_administrator_user": "Laten we de eerste beheerdersgebruiker aanmaken.", + "admin_user_created": "Beheerdersgebruikerconfiguratie", + "admin_user_created_description": "U heeft al een beheerdersgebruiker gemaakt. U kunt nu inloggen op uw account.", "new_member": "Nieuw Lid", "invite": "Uitnodigen", "add_team_members": "Teamleden toevoegen", @@ -657,6 +666,7 @@ "edit_availability": "Beschikbaarheid bewerken", "configure_availability": "Configureer tijden wanneer u beschikbaar bent voor afspraken.", "copy_times_to": "Tijden kopiëren naar", + "copy_times_to_tooltip": "Tijden kopiëren naar …", "change_weekly_schedule": "Verander uw weekschema", "logo": "Logo", "error": "Foutmelding", @@ -668,6 +678,7 @@ "add_attendees": "Deelnemers toevoegen", "show_advanced_settings": "Toon geavanceerde instellingen", "event_name": "Naam van evenement", + "event_name_in_calendar": "Gebeurtenisnaam in agenda", "event_name_tooltip": "De naam die in kalenders wordt weergegeven", "meeting_with_user": "Afspraak met {{attendeeName}}", "additional_inputs": "Extra invoer", @@ -786,6 +797,7 @@ "number_apps_one": "{{count}} app", "number_apps_other": "{{count}} apps", "trending_apps": "Trending apps", + "most_popular": "Meest populair", "explore_apps": "{{category}}-apps", "installed_apps": "Geinstalleerde apps", "free_to_use_apps": "Gratis", @@ -796,12 +808,14 @@ "no_category_apps_description_analytics": "Voeg een analyse-app toe aan uw boekingspagina's", "no_category_apps_description_automation": "Voeg een automatiseringsapp toe om te gebruiken", "no_category_apps_description_other": "Voeg een ander type app toe om allerlei soorten dingen te doen", + "no_category_apps_description_web3": "Voeg een web3-app toe aan uw boekingspagina's", "installed_app_calendar_description": "Stel de agenda('s) in om te controleren op conflicten om dubbele boekingen te voorkomen.", "installed_app_conferencing_description": "Voeg uw favoriete apps voor videoconferenties toe voor uw vergaderingen", "installed_app_payment_description": "Configureer welke betalingsverwerkingsdiensten u wilt gebruiken bij het factureren aan uw klanten.", "installed_app_analytics_description": "Configureer welke analyse-apps moeten worden gebruikt voor uw boekingspagina's", "installed_app_other_description": "Alle geïnstalleerde apps uit andere categorieën.", "installed_app_automation_description": "Configureer welke automatiseringsapps moeten worden gebruikt", + "installed_app_web3_description": "Configureer welke web3-apps moeten worden gebruikt voor uw boekingspagina's", "analytics": "Analyse", "empty_installed_apps_headline": "Geen apps geïnstalleerd", "empty_installed_apps_description": "Met apps kunt u uw workflow en uw planning aanzienlijk verbeteren.", @@ -929,6 +943,11 @@ "current_location": "Huidige locatie", "user_phone": "Uw telefoonnummer", "new_location": "Nieuwe locatie", + "session": "Sessie", + "session_description": "Beheer uw accountsessie", + "session_timeout_after": "Time-out sessie na", + "session_timeout": "Sessietime-out", + "session_timeout_description": "Maak uw sessie ongeldig na een bepaalde tijd.", "no_location": "Geen locatie bepaald", "set_location": "Locatie instellen", "update_location": "Locatie bijwerken", @@ -1072,6 +1091,7 @@ "broken_video_action": "We konden de vergaderlink voor <1>{{location}} niet aan uw geplande evenement toevoegen. Neem contact op met uw genodigden of werk uw agenda-evenement bij om de details toe te voegen. U kunt <3>uw locatie op het eventementtype wijzigen of proberen <5>de app opnieuw toe te voegen.", "broken_calendar_action": "We konden uw <1>{{calendar}} niet bijwerken. <2>Controleer uw agenda-instellingen of verwijder uw agenda en voeg uw agenda opnieuw toe ", "attendee_name": "Naam deelnemer", + "scheduler_full_name": "De volledige naam van de persoon die boekt", "broken_integration": "Beschadigde integratie", "problem_adding_video_link": "Er was een probleem met het toevoegen van een videolink", "problem_updating_calendar": "Er was een probleem met het bijwerken van uw agenda", @@ -1214,6 +1234,7 @@ "connect_automation_apps": "Koppel automatiseringsapps", "connect_analytics_apps": "Koppel analyse-apps", "connect_other_apps": "Andere apps koppelen", + "connect_web3_apps": "Web3-apps koppelen", "current_step_of_total": "Stap {{currentStep}} van {{maxSteps}}", "add_variable": "Variabele toevoegen", "custom_phone_number": "Aangepast telefoonnummer", @@ -1230,6 +1251,7 @@ "to": "Aan", "workflow_turned_on_successfully": "De werkstroom {{workflowName}} is {{offOn}}", "download_responses": "Reacties downloaden", + "download_responses_description": "Download alle reacties op uw formulier in CSV-indeling.", "download": "Downloaden", "create_your_first_form": "Maak uw eerste formulier", "create_your_first_form_description": "Met routeringsformulieren kunt u kwalificerende vragen stellen en doorverwijzen naar de juiste persoon of het juiste type gebeurtenis.", @@ -1271,6 +1293,8 @@ "routing_forms_send_email_owner": "E-mail naar eigenaar versturen", "routing_forms_send_email_owner_description": "Verstuurt een e-mail naar de eigenaar wanneer het formulier is verzonden", "add_new_form": "Nieuw formulier toevoegen", + "create_your_first_route": "Maak uw eerste route", + "route_to_the_right_person": "Route naar de juiste persoon op basis van de antwoorden op uw formulier", "form_description": "Maak uw formulier om naar een boeker door te verwijzen", "copy_link_to_form": "Link kopiëren naar formulier", "theme": "Thema", @@ -1301,6 +1325,7 @@ "password_reset_leading": "Als u niet spoedig een e-mail ontvangt, controleer dan of het ingevoerde e-mailadres correct is, controleer uw spamfolder of neem contact op met de ondersteuning als het probleem zich blijft voordoen.", "password_updated": "Wachtwoord bijgewerkt!", "pending_payment": "In afwachting van betaling", + "pending_invites": "Openstaande uitnodigingen", "confirmation_page_rainbow": "Scherm uw gebeurtenis af met tokens of NFT's op Ethereum, Polygon en meer.", "not_on_cal": "Niet op {{appName}}", "no_calendar_installed": "Geen agenda geïnstalleerd", @@ -1427,6 +1452,9 @@ "disabled_calendar": "Als u een andere agenda heeft geïnstalleerd, worden nieuwe boekingen daaraan toegevoegd. Zo niet, koppel dan een nieuwe agenda zodat u geen nieuwe boekingen mist.", "enable_apps": "Apps inschakelen", "enable_apps_description": "Schakel apps in die gebruikers kunnen integreren met Cal.com", + "purchase_license": "Koop een licentie", + "already_have_key": "Ik heb al een sleutel:", + "already_have_key_suggestion": "Kopieer hier uw bestaande CALCOM_LICENSE_KEY-omgevingsvariabele.", "app_is_enabled": "{{appName}} is ingeschakeld", "app_is_disabled": "{{appName}} is uitgeschakeld", "keys_have_been_saved": "Sleutels zijn opgeslagen", @@ -1447,6 +1475,7 @@ "individual": "Individueel", "all_bookings_filter_label": "Alle boekingen", "all_users_filter_label": "Alle gebruikers", + "your_bookings_filter_label": "Uw boekingen", "meeting_url_variable": "Vergaderings-URL", "meeting_url_info": "De vergaderingsconferentie-url van de gebeurtenis", "date_overrides": "Datumoverschrijvingen", @@ -1485,6 +1514,7 @@ "round_robin_hosts": "Round-robin-hosts", "minimum_round_robin_hosts_count": "Aantal vereiste hosts voor deelname", "hosts": "Hosts", + "upgrade_to_enable_feature": "U moet een team maken om deze functie in te schakelen. Klik om een team te maken.", "new_attendee": "Nieuwe deelnemer", "awaiting_approval": "In afwachting van goedkeuring", "requires_google_calendar": "Deze app vereist een Google Agenda-koppeling", @@ -1493,9 +1523,99 @@ "continue_to_install_google_calendar": "Ga door met het installeren van Google Agenda", "install_google_meet": "Google Meet installeren", "install_google_calendar": "Google Agenda installeren", + "sender_name": "Naam afzender", + "already_invited": "Deelnemer reeds uitgenodigd", + "no_recordings_found": "Geen opnames gevonden", + "reporting": "Rapportage", + "reporting_feature": "Bekijk alle inkomende gegevens en download het als een CSV", + "teams_plan_required": "Teamsabonnement vereist", + "routing_forms_are_a_great_way": "Routingformulieren zijn een geweldige manier om uw inkomende leads naar de juiste persoon te leiden. Upgrade naar een teamsabonnement om toegang te krijgen tot deze functie.", + "choose_a_license": "Kies een licentie", + "choose_license_description": "Cal.com wordt geleverd met een toegankelijke en gratis AGPLv3-licentie met enkele beperkingen die op elk moment kan worden geüpgraded naar een bedrijfslicentie. U kunt later altijd upgraden.", + "license": "Licentie", + "agplv3_license": "AGPLv3-licentie", + "ee_enterprise_license": "\"gratis\" bedrijfslicentie", + "enterprise_booking_fee": "Vanaf {{enterprise_booking_fee}}/maand", + "enterprise_license_includes": "Alles voor een commerciële toepassing", + "no_need_to_keep_your_code_open_source": "Uw code hoeft niet open source te zijn", + "repackage_rebrand_resell": "Gemakkelijk opnieuw verpakken, rebranden en doorverkopen", + "a_vast_suite_of_enterprise_features": "Een uitgebreid pakket bedrijfsfuncties", + "free_license_fee": "$ 0.00/maand", + "forever_open_and_free": "Voor altijd open en gratis", + "required_to_keep_your_code_open_source": "Vereist dagt uw code open source is", + "cannot_repackage_and_resell": "Kan niet gemakkelijk opnieuw verpakken, rebranden en doorverkopen", + "no_enterprise_features": "Geen bedrijfsfuncties", + "step_enterprise_license": "Bedrijfslicentie", + "step_enterprise_license_description": "Alles voor commerciële toepassing met privéhosting, opnieuw verpakken, rebranden en doorverkopen en toegang tot exclusieve bedrijfscomponenten.", + "setup": "Configuratie", + "setup_description": "Cal.com-exemplaar configureren", "configure": "Configureren", "sso_configuration": "Eenmalige aanmelding", + "sso_configuration_description": "SAML/OIDC SSO configureren en teamleden laten inloggen met behulp van een identiteitsprovider", + "sso_oidc_heading": "SSO met OIDC", + "sso_oidc_description": "Configureer OIDC SSO met de identiteitsprovider van uw keuze.", + "sso_oidc_configuration_title": "OIDC-configuratie", + "sso_oidc_configuration_description": "Configureer de OIDC-verbinding met uw identiteitsprovider. U kunt de vereiste informatie vinden bij uw identiteitsprovider.", + "sso_oidc_callback_copied": "URL voor terugbellen gekopieerd", + "sso_saml_heading": "SSO met SAML", + "sso_saml_description": "Configureer SAML SSO met de identiteitsprovider van uw keuze.", + "sso_saml_configuration_title": "SAML-configuratie", + "sso_saml_configuration_description": "Configureer de SAML-verbinding met uw identiteitsprovider. U kunt de vereiste informatie vinden bij uw identiteitsprovider.", + "sso_saml_acsurl_copied": "ACS-URL gekopieerd", + "sso_saml_entityid_copied": "Entiteits-ID gekopieerd", + "sso_connection_created_successfully": "{{connectionType}}-configuratie gemaakt", + "sso_connection_deleted_successfully": "{{connectionType}}-configuratie verwijderd", + "delete_sso_configuration": "{{connectionType}}-configuratie verwijderen", + "delete_sso_configuration_confirmation": "Ja, verwijder de {{connectionType}}-configuratie", + "delete_sso_configuration_confirmation_description": "Weet u zeker dat u de {{connectionType}}-configuratie wilt verwijderen? Uw teamleden die {{connectionType}}-aanmelding gebruiken hebben niet langer toegang tot Cal.com.", + "organizer_timezone": "Organisator tijdzone", "email_no_user_cta": "Uw account aanmaken", + "email_user_cta": "Uitnodiging weergeven", + "email_no_user_invite_heading": "U bent uitgenodigd om lid te worden van een team op {{appName}}", + "email_no_user_invite_subheading": "{{invitedBy}} heeft u uitgenodigd om lid te worden van zijn team op {{appName}}. {{appName}} is de gebeurtenissenplanner die u en uw team in staat stelt vergaderingen te plannen zonder heen en weer te e-mailen.", + "email_no_user_invite_steps_intro": "We doorlopen samen een paar korte stappen en in een mum van tijd kunt u genieten van een stressvrije planning met uw team.", + "email_no_user_step_one": "Kies uw gebruikersnaam", + "email_no_user_step_two": "Koppel uw agenda-account", + "email_no_user_step_three": "Stel uw beschikbaarheid in", + "email_no_user_step_four": "Neem deel aan {{teamName}}", + "email_no_user_signoff": "Veel plezier met het plannen van het {{appName}}-team", + "impersonation_user_tip": "U staat op het punt zich voor te doen als een gebruiker, wat betekent dat u namens hem wijzigingen kunt aanbrengen. Wees voorzichtig.", + "available_variables": "Beschikbare variabelen", + "scheduler": "{Scheduler}", + "recommended_next_steps": "Aanbevolen volgende stappen", + "create_a_managed_event": "Maak een beheerd gebeurtenistype", + "meetings_are_better_with_the_right": "Vergaderingen zijn beter met de juiste teamleden erbij. Nodig ze nu uit.", + "collective_or_roundrobin": "Collectief of round-robin", + "book_your_team_members": "Boek uw teamleden samen met collectieve gebeurtenissen of blader voor de juiste persoon met round-robin.", + "default_app_link_title": "Stel een standaard app-link in", + "default_app_link_description": "Door een standaard app-link in te stellen kunnen alle nieuw gemaakte gebeurtenistypes de door u ingestelde app-link gebruiken.", "change_default_conferencing_app": "Als standaard instellen", - "booking_confirmation_failed": "Boekingsbevestiging mislukt" + "under_maintenance": "Onbereikbaar wegens onderhoud", + "under_maintenance_description": "Het {{appName}}-team voert gepland onderhoud uit. Neem contact op met de ondersteuning als u vragen heeft.", + "event_type_seats": "{{numberOfSeats}} plaatsen", + "booking_with_payment_cancelled": "Betalen voor deze gebeurtenis is niet meer mogelijk", + "booking_with_payment_cancelled_already_paid": "Een terugbetaling voor deze boeking is onderweg.", + "booking_with_payment_cancelled_refunded": "Deze boekingsbetaling is terugbetaald.", + "booking_confirmation_failed": "Boekingsbevestiging mislukt", + "get_started_zapier_templates": "Aan de slag met Zapier-sjablonen", + "a_routing_form": "Een routeringsformulier", + "form_description_placeholder": "Formulierbeschrijving", + "keep_me_connected_with_form": "Houd me verbonden met het formulier", + "fields_in_form_duplicated": "Alle wijzigingen in router en velden van het formulier dat wordt gedupliceerd, worden in het duplicaat verwerkt.", + "form_deleted": "Formulier verwijderd", + "delete_form": "Formulier verwijderen", + "delete_form_action": "Ja, verwijder het formulier", + "delete_form_confirmation": "Weet u zeker dat u dit formulier wilt verwijderen? Iedereen met wie u de link heeft gedeeld kan dan niet meer boeken. Ook worden alle bijbehorende reacties verwijderd.", + "typeform_redirect_url_copied": "Typeform-omleidings-URL gekopieerd! U kunt de URL instellen in het Typeform-formulier.", + "modifications_in_fields_warning": "Wijzigingen in velden en routes van de volgende formulieren worden in dit formulier verwerkt.", + "connected_forms": "Verbonden formulieren", + "form_modifications_warning": "De volgende formulieren worden beïnvloed wanneer u hier velden of routes wijzigt.", + "responses_collection_waiting_description": "Wacht enige tijd tot de reacties zijn verzameld. U kunt het formulier ook zelf indienen.", + "this_is_what_your_users_would_see": "Dit is wat uw gebruikers te zien krijgen", + "identifies_name_field": "Identificeert het veld met deze naam.", + "add_1_option_per_line": "Voeg 1 optie per regel toe", + "select_a_router": "Selecteer een router", + "add_a_new_route": "Voeg een nieuwe route toe", + "no_responses_yet": "Nog geen reacties", + "this_will_be_the_placeholder": "Dit wordt de plaatshouder" } diff --git a/apps/web/public/static/locales/tr/common.json b/apps/web/public/static/locales/tr/common.json index 4537baa135c1df..d9b495c23fc4b6 100644 --- a/apps/web/public/static/locales/tr/common.json +++ b/apps/web/public/static/locales/tr/common.json @@ -1539,7 +1539,9 @@ "enterprise_license_includes": "Ticari bir kullanım durumu için her şey", "no_need_to_keep_your_code_open_source": "Kodunuzu açık kaynak olarak tutmanıza gerek yok", "repackage_rebrand_resell": "Kolayca yeniden paketleyin, yeniden markalalayın ve yeniden satış yapın", + "a_vast_suite_of_enterprise_features": "Kapsamlı kurumsal özellikler paketi", "free_license_fee": "0,00 $/ay", + "forever_open_and_free": "Sonsuza Kadar Açık ve Ücretsiz", "required_to_keep_your_code_open_source": "Kodunuzu açık kaynak olarak tutmanıza gerekiyor", "cannot_repackage_and_resell": "Yeniden paketleme, yeniden markalama ve yeniden satış kolayca yapılamaz", "no_enterprise_features": "Kurumsal özellik yok", From faaf935724d35bb667ffd417b12104bc5eba4e5e Mon Sep 17 00:00:00 2001 From: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com> Date: Tue, 7 Mar 2023 21:17:10 +0530 Subject: [PATCH 040/228] Fix for bad primary calendar check (#7557) --- packages/core/CalendarManager.ts | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/packages/core/CalendarManager.ts b/packages/core/CalendarManager.ts index ea01c57f0fb623..f5f4ba36734a2e 100644 --- a/packages/core/CalendarManager.ts +++ b/packages/core/CalendarManager.ts @@ -44,7 +44,6 @@ export const getConnectedCalendars = async ( calendarCredentials.map(async (item) => { try { const { calendar, integration, credential } = item; - let primary!: IntegrationCalendar; // Don't leak credentials to the client const credentialId = credential.id; @@ -57,12 +56,7 @@ export const getConnectedCalendars = async ( const cals = await calendar.listCalendars(); const calendars = _(cals) .map((cal) => { - if (cal.primary) { - primary = { ...cal, credentialId }; - } - if (cal.externalId === destinationCalendarExternalId) { - destinationCalendar = cal; - } + if (cal.externalId === destinationCalendarExternalId) destinationCalendar = cal; return { ...cal, readOnly: cal.readOnly || false, @@ -73,11 +67,7 @@ export const getConnectedCalendars = async ( }) .sortBy(["primary"]) .value(); - - if (primary && destinationCalendar) { - destinationCalendar.primaryEmail = primary.email; - destinationCalendar.integrationTitle = integration.title; - } + const primary = calendars.find((item) => item.primary) ?? calendars.find((cal) => cal !== undefined); if (!primary) { return { integration, @@ -87,6 +77,10 @@ export const getConnectedCalendars = async ( }, }; } + if (destinationCalendar) { + destinationCalendar.primaryEmail = primary.email; + destinationCalendar.integrationTitle = integration.title; + } return { integration: cleanIntegrationKeys(integration), From 48c8b749ceedf1bd300578081c864bdd9ad31801 Mon Sep 17 00:00:00 2001 From: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Date: Tue, 7 Mar 2023 22:35:01 +0530 Subject: [PATCH 041/228] fix: remove alert and disable toggle (#7542) --- .../RequiresConfirmationController.tsx | 220 +++++++++--------- apps/web/public/static/locales/en/common.json | 1 + .../components/form/switch/SettingsToggle.tsx | 5 +- 3 files changed, 114 insertions(+), 112 deletions(-) diff --git a/apps/web/components/eventtype/RequiresConfirmationController.tsx b/apps/web/components/eventtype/RequiresConfirmationController.tsx index bc628b9be0af06..f2e78a7e1de10b 100644 --- a/apps/web/components/eventtype/RequiresConfirmationController.tsx +++ b/apps/web/components/eventtype/RequiresConfirmationController.tsx @@ -9,7 +9,7 @@ import type z from "zod"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import type { EventTypeMetaDataSchema } from "@calcom/prisma/zod-utils"; -import { Alert, Input, Label, SettingsToggle } from "@calcom/ui"; +import { Input, Label, SettingsToggle } from "@calcom/ui"; type RequiresConfirmationControllerProps = { metadata: z.infer; @@ -39,118 +39,116 @@ export default function RequiresConfirmationController({ return (
    -
    - {seatsEnabled ? ( - - ) : ( - ( - { - formMethods.setValue("requiresConfirmation", val); - onRequiresConfirmation(val); - }}> - + ( + { + formMethods.setValue("requiresConfirmation", val); + onRequiresConfirmation(val); + }}> + { + if (val === "always") { + formMethods.setValue("requiresConfirmation", true); + onRequiresConfirmation(true); + formMethods.setValue("metadata.requiresConfirmationThreshold", undefined); + setRequiresConfirmationSetup(undefined); + } else if (val === "notice") { + formMethods.setValue("requiresConfirmation", true); + onRequiresConfirmation(true); + formMethods.setValue( + "metadata.requiresConfirmationThreshold", + requiresConfirmationSetup || defaultRequiresConfirmationSetup + ); } - onValueChange={(val) => { - if (val === "always") { - formMethods.setValue("requiresConfirmation", true); - onRequiresConfirmation(true); - formMethods.setValue("metadata.requiresConfirmationThreshold", undefined); - setRequiresConfirmationSetup(undefined); - } else if (val === "notice") { - formMethods.setValue("requiresConfirmation", true); - onRequiresConfirmation(true); - formMethods.setValue( - "metadata.requiresConfirmationThreshold", - requiresConfirmationSetup || defaultRequiresConfirmationSetup - ); - } - }}> -
    -
    - - - - -
    -
    - - - -
    - ), - }} - /> - -
    + }}> +
    +
    + + + + +
    +
    + + + +
    + ), + }} + /> +
    -
    -
    - )} - /> - )} +
    + + + )} + />
    ); diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index ff4ffc8a34dc98..bb7503ac047726 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -110,6 +110,7 @@ "hidden_team_owner_message": "You need a pro account to use teams, you are hidden until you upgrade.", "link_expires": "p.s. It expires in {{expiresIn}} hours.", "upgrade_to_per_seat": "Upgrade to Per-Seat", + "seat_options_doesnt_support_confirmation":"Seats option doesn't support confirmation requirement", "team_upgrade_seats_details": "Of the {{memberCount}} members in your team, {{unpaidCount}} seat(s) are unpaid. At ${{seatPrice}}/month per seat the estimated total cost of your membership is ${{totalCost}}/month.", "team_upgrade_banner_description": "Thank you for trialing our new team plan. We noticed your team \"{{teamName}}\" needs to be upgraded.", "team_upgrade_banner_action": "Upgrade here", diff --git a/packages/ui/components/form/switch/SettingsToggle.tsx b/packages/ui/components/form/switch/SettingsToggle.tsx index a18fce67bfdb12..d4474a412f3035 100644 --- a/packages/ui/components/form/switch/SettingsToggle.tsx +++ b/packages/ui/components/form/switch/SettingsToggle.tsx @@ -12,6 +12,7 @@ type Props = { disabled?: boolean; onCheckedChange?: (checked: boolean) => void; "data-testid"?: string; + tooltip?: string; }; function SettingsToggle({ @@ -21,6 +22,7 @@ function SettingsToggle({ title, children, disabled, + tooltip, ...rest }: Props) { const [animateRef] = useAutoAnimate(); @@ -36,9 +38,10 @@ function SettingsToggle({ checked={checked} onCheckedChange={onCheckedChange} disabled={disabled} + tooltip={tooltip} /> -
    +
    {description &&

    {description}

    }
    From a2fd5ba2a2e7c22ca24a6c6c888aa819ce86c976 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 7 Mar 2023 18:28:10 +0100 Subject: [PATCH 042/228] New Crowdin translations by Github Action (#7561) Co-authored-by: Crowdin Bot --- apps/web/public/static/locales/pl/common.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/web/public/static/locales/pl/common.json b/apps/web/public/static/locales/pl/common.json index 6186b2b6a1f722..34562e9fbde49f 100644 --- a/apps/web/public/static/locales/pl/common.json +++ b/apps/web/public/static/locales/pl/common.json @@ -7,6 +7,7 @@ "upgrade_now": "Ulepsz teraz", "accept_invitation": "Akceptuj zaproszenie", "calcom_explained": "{{appName}} zapewnia infrastrukturę planowania dla absolutnie wszystkich.", + "calcom_explained_new_user": "Dokończ konfigurację konta w aplikacji {{appName}}! Od rozwiązania wszystkich Twoich problemów z układaniem grafików dzieli Cię tylko kilka kroków.", "have_any_questions": "Masz pytania? Jesteśmy tutaj, aby pomóc.", "reset_password_subject": "{{appName}}: Instrukcje resetowania hasła", "event_declined_subject": "Odrzucono: {{title}} w dniu {{date}}", @@ -23,6 +24,8 @@ "rejection_reason_description": "Czy jesteś pewien, że chcesz odrzucić prośbę o rezerwację? Damy znać osobie, która próbowała jej dokonać. Poniżej możesz podać powód.", "rejection_confirmation": "Odrzuć prośbę o rezerwację", "manage_this_event": "Zarządzaj wydarzeniem", + "invite_team_member": "Zaproś członka zespołu", + "invite_team_notifcation_badge": "Zapr.", "your_event_has_been_scheduled": "Zaplanowano wydarzenie", "your_event_has_been_scheduled_recurring": "Twoje wydarzenie cykliczne zostało zaplanowane", "accept_our_license": "Zaakceptuj naszą licencję, zmieniając zmienną .env <1>NEXT_PUBLIC_LICENSE_CONSENT na '{{agree}}'.", @@ -410,6 +413,7 @@ "password_updated_successfully": "Hasło zaktualizowane pomyślnie", "password_has_been_changed": "Twoje hasło zostało pomyślnie zmienione.", "error_changing_password": "Błąd zmiany hasła", + "session_timeout_changed": "Twoja konfiguracja sesji została pomyślnie zaktualizowana.", "something_went_wrong": "Coś się zepsuło.", "something_doesnt_look_right": "Coś nie wygląda poprawnie?", "please_try_again": "Proszę spróbuj ponownie.", @@ -508,6 +512,8 @@ "admin": "Administrator", "administrator_user": "Użytkownik-administrator", "lets_create_first_administrator_user": "Utwórzmy pierwszego użytkownika-administratora.", + "admin_user_created": "Konfiguracja użytkownika administratora", + "admin_user_created_description": "Utworzono już użytkownika administratora. Możesz teraz zalogować się na swoim koncie.", "new_member": "Nowy Członek", "invite": "Zaproś", "add_team_members": "Dodaj członków zespołu", From 6f8ea490d0ff1fa4378cc46f367691e152eafd98 Mon Sep 17 00:00:00 2001 From: Hariom Balhara Date: Tue, 7 Mar 2023 23:10:47 +0530 Subject: [PATCH 043/228] "Manage Booking Questions" - Add a comprehensive test (#7465) * Add first test * Add test for team event as well --- .../eventtype/EventTypeSingleLayout.tsx | 1 + apps/web/pages/booking/[uid].tsx | 7 +- apps/web/playwright/fixtures/users.ts | 29 +- .../manage-booking-questions.e2e.ts | 409 ++++++++++++++++++ .../features/form-builder/FormBuilder.tsx | 20 +- playwright.config.ts | 18 +- 6 files changed, 471 insertions(+), 13 deletions(-) create mode 100644 apps/web/playwright/manage-booking-questions.e2e.ts diff --git a/apps/web/components/eventtype/EventTypeSingleLayout.tsx b/apps/web/components/eventtype/EventTypeSingleLayout.tsx index 38e22efcc733d6..ffeb9b4fa996c8 100644 --- a/apps/web/components/eventtype/EventTypeSingleLayout.tsx +++ b/apps/web/components/eventtype/EventTypeSingleLayout.tsx @@ -220,6 +220,7 @@ function EventTypeSingleLayout({
    @@ -405,6 +412,7 @@ export const FormBuilder = function FormBuilder({ }}> Cancel - +
    @@ -684,9 +694,7 @@ export const FormBuilderField = ({ const { t } = useLocale(); const { control, formState } = useFormContext(); return ( -
    +

    {t(message)}

    diff --git a/playwright.config.ts b/playwright.config.ts index fb03d86ecc33ba..52b74adad4c647 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -8,7 +8,15 @@ dotEnv.config({ path: ".env" }); const outputDir = path.join(__dirname, "test-results"); -const DEFAULT_NAVIGATION_TIMEOUT = 15000; +// Dev Server on local can be slow to start up and process requests. So, keep timeouts really high on local, so that tests run reliably locally + +// So, if not in CI, keep the timers high, if the test is stuck somewhere and there is unnecessary wait developer can see in browser that it's stuck +const DEFAULT_NAVIGATION_TIMEOUT = process.env.CI ? 15000 : 50000; +const DEFAULT_EXPECT_TIMEOUT = process.env.CI ? 10000 : 50000; + +// Test Timeout can hit due to slow expect, slow navigation. +// So, it should me much higher than sum of expect and navigation timeouts as there can be many async expects and navigations in a single test +const DEFAULT_TEST_TIMEOUT = process.env.CI ? 60000 : 120000; const headless = !!process.env.CI || !!process.env.PLAYWRIGHT_HEADLESS; @@ -36,7 +44,7 @@ const config: PlaywrightTestConfig = { forbidOnly: !!process.env.CI, retries: 2, workers: os.cpus().length, - timeout: 60_000, + timeout: DEFAULT_TEST_TIMEOUT, maxFailures: headless ? 10 : undefined, fullyParallel: true, reporter: [ @@ -58,6 +66,9 @@ const config: PlaywrightTestConfig = { name: "@calcom/web", testDir: "./apps/web/playwright", testMatch: /.*\.e2e\.tsx?/, + expect: { + timeout: DEFAULT_EXPECT_TIMEOUT, + }, use: { ...devices["Desktop Chrome"], /** If navigation takes more than this, then something's wrong, let's fail fast. */ @@ -68,6 +79,9 @@ const config: PlaywrightTestConfig = { name: "@calcom/app-store", testDir: "./packages/app-store/", testMatch: /.*\.e2e\.tsx?/, + expect: { + timeout: DEFAULT_EXPECT_TIMEOUT, + }, use: { ...devices["Desktop Chrome"], /** If navigation takes more than this, then something's wrong, let's fail fast. */ From ce8e1d52da4689fd720b698eca1bacf40a56408f Mon Sep 17 00:00:00 2001 From: Hariom Balhara Date: Tue, 7 Mar 2023 23:20:54 +0530 Subject: [PATCH 044/228] Fix "User Added Question" Label in Email and Calendar Invite (#7559) * Show label in email and calendar invite and send label as well as name in webhook * Make common code reusable --------- Co-authored-by: Peer Richelsen --- apps/web/playwright/webhook.e2e.ts | 11 +++++++- .../src/components/UserFieldsResponses.tsx | 13 +++++----- .../features/bookings/lib/handleNewBooking.ts | 26 ++++++++++++++----- packages/lib/CalEventParser.ts | 14 +++++----- packages/lib/getLabelValueMapFromResponses.ts | 15 +++++++++++ packages/types/Calendar.d.ts | 16 ++++++++++-- 6 files changed, 74 insertions(+), 21 deletions(-) create mode 100644 packages/lib/getLabelValueMapFromResponses.ts diff --git a/apps/web/playwright/webhook.e2e.ts b/apps/web/playwright/webhook.e2e.ts index 3ed89f3a7d97e7..23ba60e2a1fddc 100644 --- a/apps/web/playwright/webhook.e2e.ts +++ b/apps/web/playwright/webhook.e2e.ts @@ -90,7 +90,16 @@ test("add webhook & test that creating an event triggers a webhook call", async timeZone: "[redacted/dynamic]", language: "[redacted/dynamic]", }, - responses: { email: "test@example.com", name: "Test Testson" }, + responses: { + email: { + value: "test@example.com", + label: "email_address", + }, + name: { + value: "Test Testson", + label: "your_name", + }, + }, userFieldsResponses: {}, attendees: [ { diff --git a/packages/emails/src/components/UserFieldsResponses.tsx b/packages/emails/src/components/UserFieldsResponses.tsx index fed4c41971598b..4df5a4bb81098d 100644 --- a/packages/emails/src/components/UserFieldsResponses.tsx +++ b/packages/emails/src/components/UserFieldsResponses.tsx @@ -1,16 +1,17 @@ +import getLabelValueMapFromResponses from "@calcom/lib/getLabelValueMapFromResponses"; import type { CalendarEvent } from "@calcom/types/Calendar"; import { Info } from "./Info"; export function UserFieldsResponses(props: { calEvent: CalendarEvent }) { - const { customInputs, userFieldsResponses } = props.calEvent; - const responses = userFieldsResponses || customInputs; - if (!responses) return null; + const labelValueMap = getLabelValueMapFromResponses(props.calEvent); + + if (!labelValueMap) return null; return ( <> - {Object.keys(responses).map((key) => - responses[key] !== "" ? ( - + {Object.keys(labelValueMap).map((key) => + labelValueMap[key] !== "" ? ( + ) : null )} diff --git a/packages/features/bookings/lib/handleNewBooking.ts b/packages/features/bookings/lib/handleNewBooking.ts index db41714499a736..85254195caf238 100644 --- a/packages/features/bookings/lib/handleNewBooking.ts +++ b/packages/features/bookings/lib/handleNewBooking.ts @@ -363,11 +363,23 @@ function getBookingData({ const reqBody = bookingDataSchema.parse(req.body); if ("responses" in reqBody) { const responses = reqBody.responses; - const userFieldsResponses = {} as typeof responses; + const calEventResponses = {} as NonNullable; + const calEventUserFieldsResponses = {} as NonNullable; eventType.bookingFields.forEach((field) => { + const label = field.label || field.defaultLabel; + if (!label) { + throw new Error('Missing label for booking field "' + field.name + '"'); + } if (field.editable === "user" || field.editable === "user-readonly") { - userFieldsResponses[field.name] = responses[field.name]; + calEventUserFieldsResponses[field.name] = { + label, + value: responses[field.name], + }; } + calEventResponses[field.name] = { + label, + value: responses[field.name], + }; }); return { ...reqBody, @@ -377,8 +389,9 @@ function getBookingData({ location: responses.location?.optionValue || responses.location?.value || "", smsReminderNumber: responses.smsReminderNumber, notes: responses.notes || "", - userFieldsResponses, + calEventUserFieldsResponses, rescheduleReason: responses.rescheduleReason, + calEventResponses, }; } else { // Check if required custom inputs exist @@ -721,7 +734,8 @@ async function handler( } const responses = "responses" in reqBody ? reqBody.responses : null; - const userFieldsResponses = "userFieldsResponses" in reqBody ? reqBody.userFieldsResponses : null; + const calEventUserFieldsResponses = + "calEventUserFieldsResponses" in reqBody ? reqBody.calEventUserFieldsResponses : null; let evt: CalendarEvent = { type: eventType.title, title: getEventName(eventNameObject), //this needs to be either forced in english, or fetched for each attendee and organizer separately @@ -737,8 +751,8 @@ async function handler( timeZone: organizerUser.timeZone, language: { translate: tOrganizer, locale: organizerUser.locale ?? "en" }, }, - responses, - userFieldsResponses, + responses: "calEventResponses" in reqBody ? reqBody.calEventResponses : null, + userFieldsResponses: calEventUserFieldsResponses, attendees: attendeesList, location: bookingLocation, // Will be processed by the EventManager later. /** For team events & dynamic collective events, we will need to handle each member destinationCalendar eventually */ diff --git a/packages/lib/CalEventParser.ts b/packages/lib/CalEventParser.ts index 1413f77b8a258e..2a8f95f710606e 100644 --- a/packages/lib/CalEventParser.ts +++ b/packages/lib/CalEventParser.ts @@ -4,6 +4,7 @@ import { v5 as uuidv5 } from "uuid"; import type { CalendarEvent } from "@calcom/types/Calendar"; import { WEBAPP_URL } from "./constants"; +import getLabelValueMapFromResponses from "./getLabelValueMapFromResponses"; const translator = short(); @@ -72,17 +73,18 @@ ${calEvent.additionalNotes} }; export const getUserFieldsResponses = (calEvent: CalendarEvent) => { - const responses = calEvent.userFieldsResponses || calEvent.customInputs; - if (!responses) { + const labelValueMap = getLabelValueMapFromResponses(calEvent); + + if (!labelValueMap) { return ""; } - const responsesString = Object.keys(responses) + const responsesString = Object.keys(labelValueMap) .map((key) => { - if (!responses) return ""; - if (responses[key] !== "") { + if (!labelValueMap) return ""; + if (labelValueMap[key] !== "") { return ` ${key}: -${responses[key]} +${labelValueMap[key]} `; } }) diff --git a/packages/lib/getLabelValueMapFromResponses.ts b/packages/lib/getLabelValueMapFromResponses.ts new file mode 100644 index 00000000000000..124c8af35c9704 --- /dev/null +++ b/packages/lib/getLabelValueMapFromResponses.ts @@ -0,0 +1,15 @@ +import type { CalendarEvent } from "@calcom/types/Calendar"; + +export default function getLabelValueMapFromResponses(calEvent: CalendarEvent) { + const { customInputs, userFieldsResponses } = calEvent; + + let labelValueMap: Record = {}; + if (userFieldsResponses) { + for (const [, value] of Object.entries(userFieldsResponses)) { + labelValueMap[value.label] = value.value; + } + } else { + labelValueMap = customInputs as Record; + } + return labelValueMap; +} diff --git a/packages/types/Calendar.d.ts b/packages/types/Calendar.d.ts index d4db84dcc77e29..46e94dc7ddf840 100644 --- a/packages/types/Calendar.d.ts +++ b/packages/types/Calendar.d.ts @@ -165,10 +165,22 @@ export interface CalendarEvent { seatsPerTimeSlot?: number | null; // It has responses to all the fields(system + user) - responses?: Prisma.JsonObject | null; + responses?: Record< + string, + { + value: string | string[]; + label: string; + } + > | null; // It just has responses to only the user fields. It allows to easily iterate over to show only user fields - userFieldsResponses?: Prisma.JsonObject | null; + userFieldsResponses?: Record< + string, + { + value: string | string[]; + label: string; + } + > | null; } export interface EntryPoint { From 74a30a180e2b98b9dc429774f46be7947e869f0c Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 8 Mar 2023 00:03:16 +0530 Subject: [PATCH 045/228] URL to initiate SAML authentication flow (#6813) Co-authored-by: Peer Richelsen --- apps/web/pages/auth/sso/direct.tsx | 38 ++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 apps/web/pages/auth/sso/direct.tsx diff --git a/apps/web/pages/auth/sso/direct.tsx b/apps/web/pages/auth/sso/direct.tsx new file mode 100644 index 00000000000000..23b0a66be4ace5 --- /dev/null +++ b/apps/web/pages/auth/sso/direct.tsx @@ -0,0 +1,38 @@ +import { signIn } from "next-auth/react"; +import { useRouter } from "next/router"; + +import { samlProductID, samlTenantID } from "@calcom/features/ee/sso/lib/saml"; +import { HOSTED_CAL_FEATURES } from "@calcom/lib/constants"; + +import type { inferSSRProps } from "@lib/types/inferSSRProps"; + +// This page is used to initiate the SAML authentication flow by redirecting to the SAML provider. +// Accessible only on self-hosted Cal.com instances. +export default function Page({ samlTenantID, samlProductID }: inferSSRProps) { + const router = useRouter(); + + if (HOSTED_CAL_FEATURES) { + router.push("/auth/login"); + return; + } + + // Initiate SAML authentication flow + signIn( + "saml", + { + callbackUrl: "/", + }, + { tenant: samlTenantID, product: samlProductID } + ); + + return null; +} + +export async function getServerSideProps() { + return { + props: { + samlTenantID, + samlProductID, + }, + }; +} From 699c55da18d65359cef36b4e26a5658dccb757a4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 7 Mar 2023 19:48:20 +0100 Subject: [PATCH 046/228] New Crowdin translations by Github Action (#7562) Co-authored-by: Crowdin Bot --- apps/web/public/static/locales/fr/common.json | 1 + apps/web/public/static/locales/pl/common.json | 47 ++++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/apps/web/public/static/locales/fr/common.json b/apps/web/public/static/locales/fr/common.json index 5e54264b5aec65..c39d993d8386b4 100644 --- a/apps/web/public/static/locales/fr/common.json +++ b/apps/web/public/static/locales/fr/common.json @@ -110,6 +110,7 @@ "hidden_team_owner_message": "Vous avez besoin d'un compte Pro pour utiliser les équipes, vous êtes masqué(e) jusqu'à ce que vous mettiez à niveau.", "link_expires": "p.s. Il expire dans {{expiresIn}} heures.", "upgrade_to_per_seat": "Mise à niveau vers la place", + "seat_options_doesnt_support_confirmation": "L'option de places ne prend pas en charge l'exigence de confirmation", "team_upgrade_seats_details": "Parmi les {{memberCount}} membres de votre équipe, {{unpaidCount}} place(s) sont impayées. À {{seatPrice}} $/mois par place, le coût total estimé de votre abonnement est de {{totalCost}} $/mois.", "team_upgrade_banner_description": "Merci d'avoir essayé notre nouveau plan Équipes. Nous avons remarqué que votre équipe « {{teamName}} » doit être mise à niveau.", "team_upgrade_banner_action": "Mettre à niveau", diff --git a/apps/web/public/static/locales/pl/common.json b/apps/web/public/static/locales/pl/common.json index 34562e9fbde49f..bd3e38fec90243 100644 --- a/apps/web/public/static/locales/pl/common.json +++ b/apps/web/public/static/locales/pl/common.json @@ -414,6 +414,7 @@ "password_has_been_changed": "Twoje hasło zostało pomyślnie zmienione.", "error_changing_password": "Błąd zmiany hasła", "session_timeout_changed": "Twoja konfiguracja sesji została pomyślnie zaktualizowana.", + "session_timeout_change_error": "Podczas aktualizacji konfiguracji sesji wystąpił błąd.", "something_went_wrong": "Coś się zepsuło.", "something_doesnt_look_right": "Coś nie wygląda poprawnie?", "please_try_again": "Proszę spróbuj ponownie.", @@ -432,6 +433,7 @@ "password_hint_num": "Zawrzyj co najmniej 1 cyfrę", "invalid_password_hint": "Hasło musi składać się z co najmniej {{passwordLength}} znaków, zawierać co najmniej jedną cyfrę oraz kombinację wielkich i małych liter", "incorrect_password": "Hasło jest nieprawidłowe.", + "incorrect_username_password": "Nazwa użytkownika lub hasło są nieprawidłowe.", "24_h": "24 godz.", "use_setting": "Użyj ustawień", "am_pm": "rano/po południu", @@ -459,6 +461,7 @@ "slots_load_fail": "Nie można załadować dostępnych przedziałów czasu.", "additional_guests": "Dodaj gości", "your_name": "Twoje imię", + "your_full_name": "Twoje imię i nazwisko", "email_address": "Adres e-mail", "enter_valid_email": "Wprowadź prawidłowy adres e-mail", "location": "Lokalizacja", @@ -663,6 +666,7 @@ "edit_availability": "Edytuj dostępność", "configure_availability": "Skonfiguruj czasy, kiedy jesteś dostępny dla rezerwacji.", "copy_times_to": "Kopiuj czasy do", + "copy_times_to_tooltip": "Kopiuj czasy do…", "change_weekly_schedule": "Zmień swój tygodniowy harmonogram", "logo": "Logo", "error": "Błąd", @@ -674,6 +678,7 @@ "add_attendees": "Dodaj uczestników", "show_advanced_settings": "Pokaż ustawienia zaawansowane", "event_name": "Nazwa wydarzenia", + "event_name_in_calendar": "Nazwa wydarzenia w kalendarzu", "event_name_tooltip": "Nazwa, która pojawi się w kalendarzach", "meeting_with_user": "Spotkanie z {{attendeeName}}", "additional_inputs": "Dodatkowe Wejścia", @@ -792,6 +797,7 @@ "number_apps_one": "Liczba aplikacji: {{count}}", "number_apps_other": "Liczba aplikacji: {{count}}", "trending_apps": "Popularne aplikacje", + "most_popular": "Najpopularniejsze", "explore_apps": "Aplikacje z kategorii {{category}}", "installed_apps": "Zainstalowane aplikacje", "free_to_use_apps": "Darmowe", @@ -802,12 +808,14 @@ "no_category_apps_description_analytics": "Dodaj aplikację analityczną do stron rezerwacji", "no_category_apps_description_automation": "Dodaj aplikację automatyzującą, która ma być używana", "no_category_apps_description_other": "Dodaj dowolny typ aplikacji, aby uzyskać dostęp do różnych innych funkcji", + "no_category_apps_description_web3": "Dodaj aplikację web3 do stron rezerwacji", "installed_app_calendar_description": "Ustaw kalendarze, aby wykrywać konflikty i unikać podwójnych rezerwacji.", "installed_app_conferencing_description": "Dodaj ulubione aplikacje do wideokonferencji, aby umożliwić korzystanie z nich podczas spotkań", "installed_app_payment_description": "Skonfiguruj usługi przetwarzania płatności, których chcesz używać do pobierania opłat od klientów.", "installed_app_analytics_description": "Skonfiguruj, które aplikacje analityczne mają być używane na stronach rezerwacji", "installed_app_other_description": "Wszystkie zainstalowane aplikacje z innych kategorii.", "installed_app_automation_description": "Skonfiguruj, które aplikacje automatyzujące mają być używane", + "installed_app_web3_description": "Skonfiguruj, które aplikacje web3 mają być używane na stronach rezerwacji.", "analytics": "Analityka", "empty_installed_apps_headline": "Brak zainstalowanych aplikacji", "empty_installed_apps_description": "Aplikacje umożliwiają znaczne usprawnienie przebiegu pracy i uproszczenie planowania.", @@ -935,6 +943,11 @@ "current_location": "Bieżąca lokalizacja", "user_phone": "Twój numer telefonu", "new_location": "Nowa lokalizacja", + "session": "Sesja", + "session_description": "Kontroluj sesję konta", + "session_timeout_after": "Sesja wygasa po upływie", + "session_timeout": "Limit czasu sesji", + "session_timeout_description": "Unieważnij sesję po określonym czasie.", "no_location": "Nie określono lokalizacji", "set_location": "Określ lokalizację", "update_location": "Zaktualizuj lokalizację", @@ -1078,6 +1091,7 @@ "broken_video_action": "Do zaplanowanego wydarzenia nie można dodać linku do spotkania <1>{{location}}. Skontaktuj się z zaproszonymi osobami lub zaktualizuj wydarzenie w kalendarzu, aby dodać szczegóły. Możesz albo <3>zmienić lokalizację w typie wydarzenia, albo spróbować <5>usunąć aplikację i ponownie ją dodać.", "broken_calendar_action": "Nie udało nam się zaktualizować Twojego kalendarza <1>{{calendar}}. <2> Sprawdź ustawienia kalendarza lub usuń swój kalendarz i dodaj go ponownie ", "attendee_name": "Nazwa uczestnika", + "scheduler_full_name": "Imię i nazwisko osoby rezerwującej", "broken_integration": "Uszkodzona integracja", "problem_adding_video_link": "Podczas dodawania linku do wideo wystąpił problem", "problem_updating_calendar": "Podczas aktualizowania kalendarza wystąpił problem", @@ -1220,6 +1234,7 @@ "connect_automation_apps": "Połącz aplikacje automatyzujące", "connect_analytics_apps": "Połącz aplikacje analityczne", "connect_other_apps": "Połącz inne aplikacje", + "connect_web3_apps": "Połącz aplikacje web3", "current_step_of_total": "Krok {{currentStep}} z {{maxSteps}}", "add_variable": "Dodaj zmienną", "custom_phone_number": "Niestandardowy numer telefonu", @@ -1236,6 +1251,7 @@ "to": "Do", "workflow_turned_on_successfully": "Przepływ pracy {{workflowName}} został {{offOn}}", "download_responses": "Pobierz odpowiedzi", + "download_responses_description": "Pobierz wszystkie odpowiedzi na formularz w formacie CSV.", "download": "Pobierz", "create_your_first_form": "Utwórz pierwszy formularz", "create_your_first_form_description": "Za pomocą formularzy przekierowujących możesz zadawać pytania profilujące i przekierowywać użytkowników do odpowiednich osób lub typów wydarzeń.", @@ -1277,6 +1293,8 @@ "routing_forms_send_email_owner": "Wyślij wiadomość e-mail do właściciela", "routing_forms_send_email_owner_description": "Wysyła wiadomość e-mail do właściciela, gdy formularz zostanie przesłany.", "add_new_form": "Dodaj nowy formularz", + "create_your_first_route": "Utwórz pierwsze przekierowanie", + "route_to_the_right_person": "Przekierowanie do właściwej osoby na podstawie odpowiedzi na Twój formularz", "form_description": "Utwórz formularz, aby przekierowywać osoby rezerwujące", "copy_link_to_form": "Skopiuj link do formularza", "theme": "Motyw", @@ -1307,6 +1325,7 @@ "password_reset_leading": "Jeśli wkrótce nie otrzymasz wiadomości e-mail, sprawdź, czy wprowadzony adres e-mail jest poprawny, sprawdź folder ze spamem lub skontaktuj się z pomocą, jeśli problem będzie się powtarzał.", "password_updated": "Hasło zostało zaktualizowane!", "pending_payment": "Płatność w toku", + "pending_invites": "Oczekujące zaproszenia", "confirmation_page_rainbow": "Udostępnij Twoje wydarzenie tylko posiadaczom tokenów lub NFT w blockchainach Ethereum, Polygon i innych.", "not_on_cal": "Niedostępne na {{appName}}", "no_calendar_installed": "Brak zainstalowanego kalendarza", @@ -1433,6 +1452,9 @@ "disabled_calendar": "Jeśli masz zainstalowany inny kalendarz, nowe rezerwacje zostaną dodane do niego. Jeśli nie, podłącz nowy kalendarz, aby nie przegapić żadnych nowych rezerwacji.", "enable_apps": "Włącz aplikacje", "enable_apps_description": "Włącz aplikacje, które użytkownicy mogą zintegrować z usługą Cal.com", + "purchase_license": "Kup licencję", + "already_have_key": "Mam już klucz:", + "already_have_key_suggestion": "Skopiuj istniejącą zmienną środowiskową CALCOM_LICENSE_KEY tutaj.", "app_is_enabled": "Aplikacja {{appName}} jest włączona", "app_is_disabled": "Aplikacja {{appName}} jest wyłączona", "keys_have_been_saved": "Klucze zostały zapisane", @@ -1453,6 +1475,7 @@ "individual": "Pojedyncza osoba", "all_bookings_filter_label": "Wszystkie rezerwacje", "all_users_filter_label": "Wszyscy użytkownicy", + "your_bookings_filter_label": "Twoje rezerwacje", "meeting_url_variable": "Adres URL spotkania", "meeting_url_info": "Adres URL konferencji na spotkaniu w ramach wydarzenia", "date_overrides": "Zastąpione daty", @@ -1491,6 +1514,7 @@ "round_robin_hosts": "Gospodarze przypisywani algorytmem karuzelowym", "minimum_round_robin_hosts_count": "Liczba gospodarzy, których uczestnictwo jest wymagane", "hosts": "Gospodarze", + "upgrade_to_enable_feature": "Musisz utworzyć zespół, aby włączyć tę funkcję. Kliknij, aby utworzyć zespół.", "new_attendee": "Nowy uczestnik", "awaiting_approval": "Oczekiwanie na zatwierdzenie", "requires_google_calendar": "Ta aplikacja wymaga połączenia z Kalendarzem Google", @@ -1499,9 +1523,30 @@ "continue_to_install_google_calendar": "Kontynuuj instalację Kalendarza Google", "install_google_meet": "Zainstaluj Google Meet", "install_google_calendar": "Zainstaluj Kalendarz Google", + "sender_name": "Nazwa nadawcy", + "already_invited": "Uczestnik został już zaproszony.", + "no_recordings_found": "Nie znaleziono nagrań", + "reporting": "Raportowanie", + "reporting_feature": "Zobacz wszystkie elementy przychodzące z danych i pobierz je w formacie CSV", + "teams_plan_required": "Wymagany plan dla zespołów", "configure": "Konfiguruj", "sso_configuration": "Pojedyncze logowanie", "email_no_user_cta": "Załóż swoje konto", "change_default_conferencing_app": "Ustaw jako domyślne", - "booking_confirmation_failed": "Potwierdzenie rezerwacji nie powiodło się" + "booking_confirmation_failed": "Potwierdzenie rezerwacji nie powiodło się", + "a_routing_form": "Formularz przekierowania", + "form_description_placeholder": "Opis formularza", + "keep_me_connected_with_form": "Zachowaj połączenie z formularzem", + "fields_in_form_duplicated": "Duplikowanie zmian w przekierowaniu i polach formularza zostaną odzwierciedlone w duplikacie.", + "form_deleted": "Formularz usunięty", + "delete_form": "Usuń formularz", + "delete_form_action": "Tak, usuń formularz", + "delete_form_confirmation": "Czy na pewno chcesz usunąć ten formularz? Osoby, którym udostępniono link, nie będą już mogły użyć go do rezerwacji. Ponadto wszystkie powiązane odpowiedzi zostaną usunięte.", + "typeform_redirect_url_copied": "Skopiowano adres URL przekierowania typu Typeform! Możesz teraz skonfigurować adres URL w formacie Typeform.", + "modifications_in_fields_warning": "Zmiany w polach i przekierowaniach następujących formularzy zostaną odzwierciedlone w tym formularzu.", + "connected_forms": "Połączone formularze", + "form_modifications_warning": "Zmiany w polach i przekierowaniach tutaj będą miały wpływ na następujące formularze.", + "responses_collection_waiting_description": "Poczekaj na zebranie odpowiedzi. Możesz też przesłać formularz osobiście.", + "this_is_what_your_users_would_see": "To zobaczą Twoi użytkownicy.", + "identifies_name_field": "Identyfikuje pole za pomocą tej nazwy." } From 6c8b428577952763af173200084a64571d337b50 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 7 Mar 2023 20:04:35 +0100 Subject: [PATCH 047/228] New Crowdin translations by Github Action (#7566) Co-authored-by: Crowdin Bot --- apps/web/public/static/locales/he/common.json | 1 + apps/web/public/static/locales/pl/common.json | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/apps/web/public/static/locales/he/common.json b/apps/web/public/static/locales/he/common.json index e297082d5b665e..b96ffd3c5c0f03 100644 --- a/apps/web/public/static/locales/he/common.json +++ b/apps/web/public/static/locales/he/common.json @@ -110,6 +110,7 @@ "hidden_team_owner_message": "נדרש חשבון Pro כדי להשתמש בתכונות הצוותים. תהיה מוסתר עד שתבצע שידרוג.", "link_expires": "נ.ב. תוקף הקישור יפוג תוך {{expiresIn}} שעות.", "upgrade_to_per_seat": "שדרג למינוי לפי מקום", + "seat_options_doesnt_support_confirmation": "אפשרויות המושבים אינם תומכים בדרישת האישור", "team_upgrade_seats_details": "לא התבצע תשלום עבור {{unpaidCount}} מקומות מתוך {{memberCount}} חברי הצוות שלך. תמורת ${{seatPrice}} לחודש למקום, עלות המינוי הכוללת המשוערת שלך היא ${{totalCost}} לחודש.", "team_upgrade_banner_description": "אנחנו מודים לך על כך שניסית את החבילה החדשה שלנו לצוותים. שמנו לב שהצוות שלך, \"{{teamName}}\", זקוק לשדרוג.", "team_upgrade_banner_action": "כאן משדרגים", diff --git a/apps/web/public/static/locales/pl/common.json b/apps/web/public/static/locales/pl/common.json index bd3e38fec90243..aa8dea29e49fa1 100644 --- a/apps/web/public/static/locales/pl/common.json +++ b/apps/web/public/static/locales/pl/common.json @@ -1529,6 +1529,11 @@ "reporting": "Raportowanie", "reporting_feature": "Zobacz wszystkie elementy przychodzące z danych i pobierz je w formacie CSV", "teams_plan_required": "Wymagany plan dla zespołów", + "choose_a_license": "Wybierz licencję", + "license": "Licencja", + "agplv3_license": "Licencja AGPLv3", + "enterprise_booking_fee": "Od {{enterprise_booking_fee}}/miesięcznie", + "enterprise_license_includes": "Wszystko co niezbędne do zastosowań komercyjnych", "configure": "Konfiguruj", "sso_configuration": "Pojedyncze logowanie", "email_no_user_cta": "Załóż swoje konto", From 7eecc311e04f84890327a4e38a371b0f0d14b0b2 Mon Sep 17 00:00:00 2001 From: zomars Date: Tue, 7 Mar 2023 12:55:33 -0700 Subject: [PATCH 048/228] Syncs yarn.lock with submodules --- yarn.lock | 141 +++++++++++++++++------------------------------------- 1 file changed, 45 insertions(+), 96 deletions(-) diff --git a/yarn.lock b/yarn.lock index 31ad39972089f8..60d5757de765a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -85,6 +85,18 @@ call-me-maybe "^1.0.1" z-schema "^4.2.3" +"@auth/core@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@auth/core/-/core-0.1.4.tgz#72a15907be721ddb142c57a717b2b1695017363d" + integrity sha512-RsGtCWzbimuTUfV0ODE8NDxiJ5iDJAR3Wedj5OgdyZxTlCxSirXKf7+6g+krE6gHG3PoOkkd6xN6QENk+D60xw== + dependencies: + "@panva/hkdf" "1.0.2" + cookie "0.5.0" + jose "4.11.1" + oauth4webapi "2.0.5" + preact "10.11.3" + preact-render-to-string "5.2.3" + "@aws-crypto/ie11-detection@^2.0.0": version "2.0.2" resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz#9c39f4a5558196636031a933ec1b4792de959d6a" @@ -3378,26 +3390,6 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/eslintrc@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.0.tgz#943309d8697c52fc82c076e90c1c74fbbe69dbff" - integrity sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.35.0": - version "8.35.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.35.0.tgz#b7569632b0b788a0ca0e438235154e45d42813a7" - integrity sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw== - "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.3": version "2.6.3" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.3.tgz#39ddece7300b336276bad6c02f6a9f1a082caa05" @@ -5302,6 +5294,11 @@ "@otplib/plugin-crypto" "^12.0.1" "@otplib/plugin-thirty-two" "^12.0.1" +"@panva/hkdf@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.0.2.tgz#bab0f09d09de9fd83628220d496627681bc440d6" + integrity sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA== + "@panva/hkdf@^1.0.2": version "1.0.4" resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.0.4.tgz#4e02bb248402ff6c5c024e23a68438e2b0e69d67" @@ -5352,7 +5349,7 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== -"@prisma/client@^4.11.0", "@prisma/client@^4.8.1": +"@prisma/client@^4.11.0": version "4.11.0" resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.11.0.tgz#41d5664dea4172c954190a432f70b86d3e2e629b" integrity sha512-0INHYkQIqgAjrt7NzhYpeDQi8x3Nvylc2uDngKyFDDj1tTRQ4uV1HnVmd1sQEraeVAN63SOK0dgCKQHlvjL0KA== @@ -8650,7 +8647,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@18.0.26", "@types/react@^18.0.17": +"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@18.0.26": version "18.0.26" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== @@ -14121,52 +14118,6 @@ eslint@8.4.1: text-table "^0.2.0" v8-compile-cache "^2.0.3" -eslint@^8.22.0: - version "8.35.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.35.0.tgz#fffad7c7e326bae606f0e8f436a6158566d42323" - integrity sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw== - dependencies: - "@eslint/eslintrc" "^2.0.0" - "@eslint/js" "8.35.0" - "@humanwhocodes/config-array" "^0.11.8" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - eslint@^8.34.0: version "8.34.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" @@ -14260,13 +14211,6 @@ esquery@^1.4.0: dependencies: estraverse "^5.1.0" -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - esrecurse@^4.1.0, esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" @@ -18287,6 +18231,11 @@ joi@^17.7.0: "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" +jose@4.11.1: + version "4.11.1" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.11.1.tgz#8f7443549befe5bddcf4bae664a9cbc1a62da4fa" + integrity sha512-YRv4Tk/Wlug8qicwqFNFVEZSdbROCHRAC6qu/i0dyNKr5JQdoa2pIGoS04lLO/jXQX7Z9omoNewYIVIxqZBd9Q== + jose@4.11.2: version "4.11.2" resolved "https://registry.yarnpkg.com/jose/-/jose-4.11.2.tgz#d9699307c02e18ff56825843ba90e2fae9f09e23" @@ -18297,7 +18246,7 @@ jose@^4.10.0: resolved "https://registry.yarnpkg.com/jose/-/jose-4.11.0.tgz#1c7f5c7806383d3e836434e8f49da531cb046a9d" integrity sha512-wLe+lJHeG8Xt6uEubS4x0LVjS/3kXXu9dGoj9BNnlhYq7Kts0Pbb2pvv5KiI0yaKH/eaiR0LUOBhOVo9ktd05A== -jose@^4.11.4: +jose@^4.11.4, jose@^4.13.1: version "4.13.1" resolved "https://registry.yarnpkg.com/jose/-/jose-4.13.1.tgz#449111bb5ab171db85c03f1bd2cb1647ca06db1c" integrity sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ== @@ -20687,7 +20636,7 @@ next-api-middleware@^1.0.1: dependencies: debug "^4.3.2" -next-auth@^4.10.3, next-auth@^4.18.8: +next-auth@^4.18.8: version "4.20.1" resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.20.1.tgz#6e65c4fde14171f6ce64f05f672f80f39fc418c7" integrity sha512-ZcTUN4qzzZ/zJYgOW0hMXccpheWtAol8QOMdMts+LYRcsPGsqf2hEityyaKyECQVw1cWInb9dF3wYwI5GZdEmQ== @@ -20758,13 +20707,6 @@ next-tick@^1.1.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== -next-transpile-modules@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/next-transpile-modules/-/next-transpile-modules-10.0.0.tgz#7152880048835acb64d05fc7aa34910cbe7994da" - integrity sha512-FyeJ++Lm2Fq31gbThiRCrJlYpIY9QaI7A3TjuhQLzOix8ChQrvn5ny4MhfIthS5cy6+uK1AhDRvxVdW17y3Xdw== - dependencies: - enhanced-resolve "^5.10.0" - next-transpile-modules@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/next-transpile-modules/-/next-transpile-modules-8.0.0.tgz#56375cdc25ae5d23a834195f277fc2737b26cb97" @@ -20778,7 +20720,7 @@ next-validations@^0.2.0: resolved "https://registry.yarnpkg.com/next-validations/-/next-validations-0.2.1.tgz#68010c9b017ba48eec4f404fd42eb9b0c7324737" integrity sha512-92pR14MPTTx0ynlvYH2TwMf7WiGiznNL/l0dtZyKPw3x48rcMhwEZrP1ZmsMJwzp5D+U+sY2deexeLWC8rlNtQ== -next@^13.1.1, next@^13.2.1: +next@^13.2.1: version "13.2.3" resolved "https://registry.yarnpkg.com/next/-/next-13.2.3.tgz#92d170e7aca421321f230ff80c35c4751035f42e" integrity sha512-nKFJC6upCPN7DWRx4+0S/1PIOT7vNlCT157w9AzbXEgKy6zkiPKEt5YyRUsRZkmpEqBVrGgOqNfwecTociyg+w== @@ -21103,6 +21045,11 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== +oauth4webapi@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/oauth4webapi/-/oauth4webapi-2.0.5.tgz#03e4ac9c29ec45423f07e47cd238cf179e0af6f8" + integrity sha512-KmoR3KxCwmr9KvL/c/6UVzQnc4CUjo+j8NSgD3bWYlZXpUmyOVw97nDVb0BKZhCcUtGsbll16v8vsnR5JbTZ9A== + oauth@^0.9.15: version "0.9.15" resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" @@ -22334,6 +22281,13 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" +preact-render-to-string@5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-5.2.3.tgz#23d17376182af720b1060d5a4099843c7fe92fe4" + integrity sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA== + dependencies: + pretty-format "^3.8.0" + preact-render-to-string@^5.1.19: version "5.2.6" resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz#0ff0c86cd118d30affb825193f18e92bd59d0604" @@ -22341,6 +22295,11 @@ preact-render-to-string@^5.1.19: dependencies: pretty-format "^3.8.0" +preact@10.11.3, preact@^10.6.3: + version "10.11.3" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.11.3.tgz#8a7e4ba19d3992c488b0785afcc0f8aa13c78d19" + integrity sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg== + preact@10.4.1: version "10.4.1" resolved "https://registry.yarnpkg.com/preact/-/preact-10.4.1.tgz#9b3ba020547673a231c6cf16f0fbaef0e8863431" @@ -22351,11 +22310,6 @@ preact@^10.5.9: resolved "https://registry.yarnpkg.com/preact/-/preact-10.10.6.tgz#1fe62aecf93974b64e6a42e09ba1f00f93207d14" integrity sha512-w0mCL5vICUAZrh1DuHEdOWBjxdO62lvcO++jbzr8UhhYcTbFkpegLH9XX+7MadjTl/y0feoqwQ/zAnzkc/EGog== -preact@^10.6.3: - version "10.11.3" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.11.3.tgz#8a7e4ba19d3992c488b0785afcc0f8aa13c78d19" - integrity sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg== - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -22470,7 +22424,7 @@ prisma-field-encryption@^1.4.0: object-path "^0.11.8" zod "^3.17.3" -prisma@^4.11.0, prisma@^4.8.1: +prisma@^4.11.0: version "4.11.0" resolved "https://registry.yarnpkg.com/prisma/-/prisma-4.11.0.tgz#9695ba4129a43eab3e76b5f7a033c6c020377725" integrity sha512-4zZmBXssPUEiX+GeL0MUq/Yyie4ltiKmGu7jCJFnYMamNrrulTBc+D+QwAQSJ01tyzeGHlD13kOnqPwRipnlNw== @@ -26687,11 +26641,6 @@ typeorm@0.3.11: xml2js "^0.4.23" yargs "^17.3.1" -typescript@^4.7.4: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - typescript@^4.9.4: version "4.9.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" From 2fa83bd512604dca5a8a2cf8c816598dc8383109 Mon Sep 17 00:00:00 2001 From: Kiran K Date: Wed, 8 Mar 2023 03:01:39 +0530 Subject: [PATCH 049/228] Add Idp-Initiated SSO (#6781) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * wip idp enabled login * add route to handle callback from IdP * update the new provider * cleanup * fix the type * add suggested changes * make the suggested changes * use client secret verifier * Make [...nextauth] a little easier to read --------- Co-authored-by: Alex van Andel Co-authored-by: Peer Richelsen Co-authored-by: Omar López --- .env.example | 2 + apps/web/pages/api/auth/[...nextauth].tsx | 105 ++++++++++++++++---- apps/web/pages/api/auth/saml/callback.ts | 6 +- apps/web/pages/auth/saml-idp.tsx | 23 +++++ packages/features/ee/sso/lib/jackson.ts | 4 +- packages/features/ee/sso/lib/saml.ts | 1 + packages/trpc/server/routers/viewer/sso.tsx | 2 +- turbo.json | 1 + 8 files changed, 122 insertions(+), 22 deletions(-) create mode 100644 apps/web/pages/auth/saml-idp.tsx diff --git a/.env.example b/.env.example index 8e11bc30380cd7..df8d9a8430df27 100644 --- a/.env.example +++ b/.env.example @@ -39,6 +39,8 @@ SAML_DATABASE_URL= SAML_ADMINS= # NEXT_PUBLIC_HOSTED_CAL_FEATURES=1 NEXT_PUBLIC_HOSTED_CAL_FEATURES= +# For additional security set to a random secret and use that value as the client_secret during the OAuth 2.0 flow. +SAML_CLIENT_SECRET_VERIFIER= # If you use Heroku to deploy Postgres (or use self-signed certs for Postgres) then uncomment the follow line. # @see https://devcenter.heroku.com/articles/connecting-heroku-postgres#connecting-in-node-js diff --git a/apps/web/pages/api/auth/[...nextauth].tsx b/apps/web/pages/api/auth/[...nextauth].tsx index c58fbea36105c7..b4cb08764f0f61 100644 --- a/apps/web/pages/api/auth/[...nextauth].tsx +++ b/apps/web/pages/api/auth/[...nextauth].tsx @@ -17,7 +17,8 @@ import path from "path"; import checkLicense from "@calcom/features/ee/common/server/checkLicense"; import ImpersonationProvider from "@calcom/features/ee/impersonation/lib/ImpersonationProvider"; -import { hostedCal, isSAMLLoginEnabled } from "@calcom/features/ee/sso/lib/saml"; +import jackson from "@calcom/features/ee/sso/lib/jackson"; +import { hostedCal, isSAMLLoginEnabled, clientSecretVerifier } from "@calcom/features/ee/sso/lib/saml"; import { ErrorCode, isPasswordValid, verifyPassword } from "@calcom/lib/auth"; import { APP_NAME, IS_TEAM_BILLING_ENABLED, WEBAPP_URL, WEBSITE_URL } from "@calcom/lib/constants"; import { symmetricDecrypt } from "@calcom/lib/crypto"; @@ -222,10 +223,65 @@ if (isSAMLLoginEnabled) { }, options: { clientId: "dummy", - clientSecret: "dummy", + clientSecret: clientSecretVerifier, }, allowDangerousEmailAccountLinking: true, }); + + // Idp initiated login + providers.push( + CredentialsProvider({ + id: "saml-idp", + name: "IdP Login", + credentials: { + code: {}, + }, + async authorize(credentials) { + if (!credentials) { + return null; + } + + const { code } = credentials; + + if (!code) { + return null; + } + + const { oauthController } = await jackson(); + + // Fetch access token + const { access_token } = await oauthController.token({ + code, + grant_type: "authorization_code", + redirect_uri: `${process.env.NEXTAUTH_URL}`, + client_id: "dummy", + client_secret: clientSecretVerifier, + }); + + if (!access_token) { + return null; + } + + // Fetch user info + const userInfo = await oauthController.userInfo(access_token); + + if (!userInfo) { + return null; + } + + const { id, firstName, lastName, email } = userInfo; + + return { + id: id as unknown as number, + firstName, + lastName, + email, + name: `${firstName} ${lastName}`.trim(), + email_verified: true, + }; + }, + }) + ); } if (true) { @@ -326,12 +382,18 @@ export default NextAuth({ ...token, }; }; - if (!user) { return await autoMergeIdentities(); } - - if (account && account.type === "credentials") { + if (!account) { + return token; + } + if (account.type === "credentials") { + // return token if credentials,saml-idp + if (account.provider === "saml-idp") { + return token; + } + // any other credentials, add user info return { ...token, id: user.id, @@ -346,11 +408,12 @@ export default NextAuth({ // The arguments above are from the provider so we need to look up the // user based on those values in order to construct a JWT. - if (account && account.type === "oauth" && account.provider && account.providerAccountId) { - let idP: IdentityProvider = IdentityProvider.GOOGLE; - if (account.provider === "saml") { - idP = IdentityProvider.SAML; + if (account.type === "oauth") { + if (!account.provider || !account.providerAccountId) { + return token; } + const idP = account.provider === "saml" ? IdentityProvider.SAML : IdentityProvider.GOOGLE; + const existingUser = await prisma.user.findFirst({ where: { AND: [ @@ -405,14 +468,18 @@ export default NextAuth({ if (account?.provider === "email") { return true; } + // In this case we've already verified the credentials in the authorize // callback so we can sign the user in. - if (account?.type === "credentials") { - return true; - } + // Only if provider is not saml-idp + if (account?.provider !== "saml-idp") { + if (account?.type === "credentials") { + return true; + } - if (account?.type !== "oauth") { - return false; + if (account?.type !== "oauth") { + return false; + } } if (!user.email) { @@ -425,7 +492,7 @@ export default NextAuth({ if (account?.provider) { let idP: IdentityProvider = IdentityProvider.GOOGLE; - if (account.provider === "saml") { + if (account.provider === "saml" || account.provider === "saml-idp") { idP = IdentityProvider.SAML; } // eslint-disable-next-line @typescript-eslint/ban-ts-comment @@ -435,19 +502,18 @@ export default NextAuth({ if (!user.email_verified) { return "/auth/error?error=unverified-email"; } - // Only google oauth on this path - const provider = account.provider.toUpperCase() as IdentityProvider; + // Only google oauth on this path const existingUser = await prisma.user.findFirst({ include: { accounts: { where: { - provider: account.provider, + provider: idP, }, }, }, where: { - identityProvider: provider, + identityProvider: idP as IdentityProvider, identityProviderId: account.providerAccountId, }, }); @@ -569,6 +635,7 @@ export default NextAuth({ identityProviderId: String(user.id), }, }); + const linkAccountNewUserData = { ...account, userId: newUser.id }; await calcomAdapter.linkAccount(linkAccountNewUserData); diff --git a/apps/web/pages/api/auth/saml/callback.ts b/apps/web/pages/api/auth/saml/callback.ts index fd51d97314918e..45b993d87cc99f 100644 --- a/apps/web/pages/api/auth/saml/callback.ts +++ b/apps/web/pages/api/auth/saml/callback.ts @@ -5,8 +5,12 @@ import { defaultHandler, defaultResponder } from "@calcom/lib/server"; async function postHandler(req: NextApiRequest, res: NextApiResponse) { const { oauthController } = await jackson(); + const { redirect_url } = await oauthController.samlResponse(req.body); - if (redirect_url) return res.redirect(302, redirect_url); + + if (redirect_url) { + res.redirect(302, redirect_url); + } } export default defaultHandler({ diff --git a/apps/web/pages/auth/saml-idp.tsx b/apps/web/pages/auth/saml-idp.tsx new file mode 100644 index 00000000000000..5834c74bbeaad3 --- /dev/null +++ b/apps/web/pages/auth/saml-idp.tsx @@ -0,0 +1,23 @@ +import { signIn } from "next-auth/react"; +import { useRouter } from "next/router"; +import { useEffect } from "react"; + +// To handle the IdP initiated login flow callback +export default function Page() { + const router = useRouter(); + + useEffect(() => { + if (!router.isReady) { + return; + } + + const { code } = router.query; + + signIn("saml-idp", { + callbackUrl: "/", + code, + }); + }, []); + + return null; +} diff --git a/packages/features/ee/sso/lib/jackson.ts b/packages/features/ee/sso/lib/jackson.ts index d43491d92017bd..777bcfb8d5687a 100644 --- a/packages/features/ee/sso/lib/jackson.ts +++ b/packages/features/ee/sso/lib/jackson.ts @@ -8,7 +8,7 @@ import type { import {WEBAPP_URL} from "@calcom/lib/constants"; -import {samlDatabaseUrl, samlAudience, samlPath, oidcPath} from "./saml"; +import { samlDatabaseUrl, samlAudience, samlPath, oidcPath, clientSecretVerifier } from "./saml"; // Set the required options. Refer to https://github.com/boxyhq/jackson#configuration for the full list const opts: JacksonOption = { @@ -22,6 +22,8 @@ const opts: JacksonOption = { url: samlDatabaseUrl, encryptionKey: process.env.CALENDSO_ENCRYPTION_KEY, }, + idpEnabled: true, + clientSecretVerifier, }; let connectionController: IConnectionAPIController; diff --git a/packages/features/ee/sso/lib/saml.ts b/packages/features/ee/sso/lib/saml.ts index b715a789269123..0f41ce4bc7bce2 100644 --- a/packages/features/ee/sso/lib/saml.ts +++ b/packages/features/ee/sso/lib/saml.ts @@ -13,6 +13,7 @@ export const samlProductID = "Cal.com"; export const samlAudience = "https://saml.cal.com"; export const samlPath = "/api/auth/saml/callback"; export const oidcPath = "/api/auth/oidc"; +export const clientSecretVerifier = process.env.SAML_CLIENT_SECRET_VERIFIER || "dummy"; export const hostedCal = Boolean(HOSTED_CAL_FEATURES); export const tenantPrefix = "team-"; diff --git a/packages/trpc/server/routers/viewer/sso.tsx b/packages/trpc/server/routers/viewer/sso.tsx index 7e6451f60df5cd..d4dfe3a44c2004 100644 --- a/packages/trpc/server/routers/viewer/sso.tsx +++ b/packages/trpc/server/routers/viewer/sso.tsx @@ -87,7 +87,7 @@ export const ssoRouter = router({ try { return await connectionController.createSAMLConnection({ encodedRawMetadata, - defaultRedirectUrl: `${process.env.NEXT_PUBLIC_WEBAPP_URL}/api/auth/saml/idp`, + defaultRedirectUrl: `${process.env.NEXT_PUBLIC_WEBAPP_URL}/auth/saml-idp`, redirectUrl: JSON.stringify([`${process.env.NEXT_PUBLIC_WEBAPP_URL}/*`]), tenant: teamId ? tenantPrefix + teamId : samlTenantID, product: samlProductID, diff --git a/turbo.json b/turbo.json index 81adc27fad6ce7..c55320382136d0 100644 --- a/turbo.json +++ b/turbo.json @@ -248,6 +248,7 @@ "$SALESFORCE_CONSUMER_SECRET", "$SAML_ADMINS", "$SAML_DATABASE_URL", + "$SAML_CLIENT_SECRET_VERIFIER", "$SEND_FEEDBACK_EMAIL", "$SENTRY_DSN", "$NEXT_PUBLIC_SENTRY_DSN", From 1b468b9ae7f007ce08f7233b8693b601f825d5dc Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Tue, 7 Mar 2023 22:15:11 +0000 Subject: [PATCH 050/228] Fixed test (#7572) --- .../manage-booking-questions.e2e.ts | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/apps/web/playwright/manage-booking-questions.e2e.ts b/apps/web/playwright/manage-booking-questions.e2e.ts index 9fd6ae42d86c66..ba55fefdfb2afb 100644 --- a/apps/web/playwright/manage-booking-questions.e2e.ts +++ b/apps/web/playwright/manage-booking-questions.e2e.ts @@ -106,9 +106,18 @@ test.describe("Manage Booking Questions", () => { const payload = (request.body as any).payload as any; expect(payload.responses).toMatchObject({ - name: "Booker", - email: "booker@example.com", - how_are_you: "I am great!", + email: { + label: "email_address", + value: "booker@example.com", + }, + how_are_you: { + label: "How are you?", + value: "I am great!", + }, + name: { + label: "your_name", + value: "Booker", + }, }); expect(payload.location).toBe("integrations:daily"); @@ -119,7 +128,10 @@ test.describe("Manage Booking Questions", () => { }); expect(payload.userFieldsResponses).toMatchObject({ - how_are_you: "I am great!", + how_are_you: { + label: "How are you?", + value: "I am great!", + }, }); }); }); @@ -233,9 +245,18 @@ async function runTestStepsCommonForTeamAndUserEventType( const payload = (request.body as any).payload as any; expect(payload.responses).toMatchObject({ - name: "Booker", - email: "booker@example.com", - how_are_you: "I am great!", + email: { + label: "email_address", + value: "booker@example.com", + }, + how_are_you: { + label: "How are you?", + value: "I am great!", + }, + name: { + label: "your_name", + value: "Booker", + }, }); expect(payload.location).toBe("integrations:daily"); @@ -246,7 +267,10 @@ async function runTestStepsCommonForTeamAndUserEventType( }); expect(payload.userFieldsResponses).toMatchObject({ - how_are_you: "I am great!", + how_are_you: { + label: "How are you?", + value: "I am great!", + }, }); }); }); From b0da827483a8ea6b8a217fdbc14f94aa11497c8e Mon Sep 17 00:00:00 2001 From: Nafees Nazik <84864519+G3root@users.noreply.github.com> Date: Wed, 8 Mar 2023 04:07:56 +0530 Subject: [PATCH 051/228] fix: event location not translated in booking page (#7528) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: event location not translated * fix: translate * chore: lowercase trans keys * fix: label * feat: snake case labels * fix: show the link if the user has one * fix: add translatable keys * fix: * chore: fix type error --------- Co-authored-by: Peer Richelsen Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Co-authored-by: Efraín Rochín Co-authored-by: Alex van Andel --- .../booking/AvailableEventLocations.tsx | 27 +++++++++++++++---- .../components/dialog/EditLocationDialog.tsx | 15 +++++------ .../components/eventtype/EventSetupTab.tsx | 6 ++--- apps/web/public/static/locales/ar/common.json | 4 +-- apps/web/public/static/locales/cs/common.json | 4 +-- apps/web/public/static/locales/da/common.json | 4 +-- apps/web/public/static/locales/de/common.json | 4 +-- apps/web/public/static/locales/en/common.json | 4 +-- apps/web/public/static/locales/es/common.json | 4 +-- apps/web/public/static/locales/fr/common.json | 4 +-- apps/web/public/static/locales/he/common.json | 4 +-- apps/web/public/static/locales/it/common.json | 4 +-- apps/web/public/static/locales/ja/common.json | 4 +-- apps/web/public/static/locales/ko/common.json | 4 +-- apps/web/public/static/locales/nl/common.json | 4 +-- apps/web/public/static/locales/no/common.json | 4 +-- apps/web/public/static/locales/pl/common.json | 4 +-- .../public/static/locales/pt-BR/common.json | 4 +-- apps/web/public/static/locales/pt/common.json | 4 +-- apps/web/public/static/locales/ro/common.json | 4 +-- apps/web/public/static/locales/ru/common.json | 4 +-- apps/web/public/static/locales/sr/common.json | 4 +-- apps/web/public/static/locales/sv/common.json | 4 +-- apps/web/public/static/locales/tr/common.json | 4 +-- apps/web/public/static/locales/uk/common.json | 4 +-- apps/web/public/static/locales/vi/common.json | 4 +-- .../public/static/locales/zh-CN/common.json | 4 +-- .../public/static/locales/zh-TW/common.json | 4 +-- packages/app-store/locations.ts | 12 ++++----- packages/app-store/utils.ts | 18 +++++-------- 30 files changed, 92 insertions(+), 86 deletions(-) diff --git a/apps/web/components/booking/AvailableEventLocations.tsx b/apps/web/components/booking/AvailableEventLocations.tsx index 4b9363718fc58c..d4266d90f80e38 100644 --- a/apps/web/components/booking/AvailableEventLocations.tsx +++ b/apps/web/components/booking/AvailableEventLocations.tsx @@ -1,3 +1,5 @@ +import { z } from "zod"; + import { getEventLocationType, locationKeyToString } from "@calcom/app-store/locations"; import { classNames } from "@calcom/lib"; import { useLocale } from "@calcom/lib/hooks/useLocale"; @@ -17,6 +19,23 @@ export function AvailableEventLocations({ locations }: { locations: Props["event // It's possible that the location app got uninstalled return null; } + + const translateAbleKeys = [ + "attendee_in_person", + "in_person", + "attendee_phone_number", + "link_meeting", + "organizer_phone_number", + ]; + + const locationKey = z.string().default("").parse(locationKeyToString(location)); + + const translatedLocation = location.type.startsWith("integrations:") + ? eventLocationType.label + : translateAbleKeys.includes(locationKey) + ? t(locationKey) + : locationKey; + return (
    {eventLocationType.iconUrl === "/link.svg" ? ( @@ -31,14 +50,12 @@ export function AvailableEventLocations({ locations }: { locations: Props["event alt={`${eventLocationType.label} icon`} /> )} - -

    {t(locationKeyToString(location) ?? "")}

    + +

    {translatedLocation}

    ); })}
    - ) : ( - <> - ); + ) : null; } diff --git a/apps/web/components/dialog/EditLocationDialog.tsx b/apps/web/components/dialog/EditLocationDialog.tsx index 1aedc4cc088c75..2f662f3df6b597 100644 --- a/apps/web/components/dialog/EditLocationDialog.tsx +++ b/apps/web/components/dialog/EditLocationDialog.tsx @@ -288,16 +288,13 @@ export const EditLocationDialog = (props: ISetLocationDialog) => { }}> { - if (!locationOptions.length) return null; + success={({ data }) => { + if (!data.length) return null; + const locationOptions = [...data]; if (booking) { - locationOptions.forEach((location) => { - if (location.label === "phone") { - location.options.filter((l) => l.value !== "phone"); - } else if (location.label === "in person") { - location.options.filter((l) => l.value !== "attendeeInPerson"); - } - }); + locationOptions.map((location) => + location.options.filter((l) => !["phone", "attendeeInPerson"].includes(l.value)) + ); } return ( ({ + const tmp = { + label: t(category), + options: apps[category].map((l) => ({ ...l, label: t(l.label), - })); - } else { - tmp.options.map((l) => ({ - ...l, - label: t(l.label.toLowerCase().split(" ").join("_")), - })); - } - - tmp.label = t(tmp.label); + })), + }; locations.push(tmp); } + return locations; } From 163444a0f92bfef79250e0dab4ce42a67874458e Mon Sep 17 00:00:00 2001 From: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> Date: Tue, 7 Mar 2023 18:02:05 -0500 Subject: [PATCH 052/228] Bug - teams being double created without slugs (#7571) --- .../teams/components/CreateANewTeamForm.tsx | 10 +++++++--- packages/trpc/server/routers/viewer/teams.tsx | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/features/ee/teams/components/CreateANewTeamForm.tsx b/packages/features/ee/teams/components/CreateANewTeamForm.tsx index c02c56fb7f4782..db00f905839ba8 100644 --- a/packages/features/ee/teams/components/CreateANewTeamForm.tsx +++ b/packages/features/ee/teams/components/CreateANewTeamForm.tsx @@ -10,7 +10,7 @@ import { trpc } from "@calcom/trpc/react"; import { Avatar, Button, Form, ImageUploader, TextField } from "@calcom/ui"; import { FiArrowRight } from "@calcom/ui/components/icon"; -import { NewTeamFormValues } from "../lib/types"; +import type { NewTeamFormValues } from "../lib/types"; const querySchema = z.object({ returnTo: z.string(), @@ -140,10 +140,14 @@ export const CreateANewTeamForm = () => { {t("cancel")} diff --git a/packages/trpc/server/routers/viewer/teams.tsx b/packages/trpc/server/routers/viewer/teams.tsx index 023d4552828d9f..6e3dd723565090 100644 --- a/packages/trpc/server/routers/viewer/teams.tsx +++ b/packages/trpc/server/routers/viewer/teams.tsx @@ -92,6 +92,25 @@ export const viewerTeamsRouter = router({ if (nameCollisions) throw new TRPCError({ code: "BAD_REQUEST", message: "Team name already taken." }); + // Ensure that the user is not duplicating a requested team + const duplicatedRequest = await ctx.prisma.team.findFirst({ + where: { + members: { + some: { + userId: ctx.user.id, + }, + }, + metadata: { + path: ["requestedSlug"], + equals: slug, + }, + }, + }); + + if (duplicatedRequest) { + return duplicatedRequest; + } + const createTeam = await ctx.prisma.team.create({ data: { name, From 804ba049831f04c130d24c5b765fe238a303c871 Mon Sep 17 00:00:00 2001 From: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> Date: Tue, 7 Mar 2023 18:50:34 -0500 Subject: [PATCH 053/228] make eventpage optional (#7573) Co-authored-by: CarinaWolli --- .../features/eventtypes/components/CreateEventTypeDialog.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/features/eventtypes/components/CreateEventTypeDialog.tsx b/packages/features/eventtypes/components/CreateEventTypeDialog.tsx index 3773eed216a16a..cea65f7aee5978 100644 --- a/packages/features/eventtypes/components/CreateEventTypeDialog.tsx +++ b/packages/features/eventtypes/components/CreateEventTypeDialog.tsx @@ -48,7 +48,7 @@ const locationFormSchema = z.array( ); const querySchema = z.object({ - eventPage: z.string(), + eventPage: z.string().optional(), teamId: z.union([z.string().transform((val) => +val), z.number()]).optional(), title: z.string().optional(), slug: z.string().optional(), From c97fecf436c60c35c696227c1846d23a8589718e Mon Sep 17 00:00:00 2001 From: zomars Date: Tue, 7 Mar 2023 19:08:00 -0700 Subject: [PATCH 054/228] Syncs react-hook-form in console/website --- yarn.lock | 153 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 106 insertions(+), 47 deletions(-) diff --git a/yarn.lock b/yarn.lock index 60d5757de765a5..85decd4aa35c94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -53,6 +53,14 @@ dependencies: "@jridgewell/trace-mapping" "^0.3.0" +"@ampproject/remapping@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + "@apidevtools/json-schema-ref-parser@9.0.9", "@apidevtools/json-schema-ref-parser@^9.0.6": version "9.0.9" resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#d720f9256e3609621280584f2b47ae165359268b" @@ -1013,9 +1021,9 @@ integrity sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw== "@babel/compat-data@^7.20.5": - version "7.20.14" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.14.tgz#4106fc8b755f3e3ee0a0a7c27dde5de1d2b2baf8" - integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw== + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298" + integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== "@babel/core@7.12.9": version "7.12.9" @@ -1104,20 +1112,20 @@ semver "^6.3.0" "@babel/core@^7.17.10": - version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" - integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13" + integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== dependencies: - "@ampproject/remapping" "^2.1.0" + "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" + "@babel/generator" "^7.21.0" "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helpers" "^7.20.7" - "@babel/parser" "^7.20.7" + "@babel/helper-module-transforms" "^7.21.0" + "@babel/helpers" "^7.21.0" + "@babel/parser" "^7.21.0" "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.12" - "@babel/types" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -1238,6 +1246,16 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" +"@babel/generator@^7.21.0", "@babel/generator@^7.21.1": + version "7.21.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd" + integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA== + dependencies: + "@babel/types" "^7.21.0" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" @@ -1417,6 +1435,14 @@ "@babel/template" "^7.18.10" "@babel/types" "^7.19.0" +"@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + "@babel/helper-get-function-arity@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" @@ -1459,7 +1485,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.20.11": +"@babel/helper-module-transforms@^7.12.1": version "7.20.11" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== @@ -1529,6 +1555,20 @@ "@babel/traverse" "^7.19.6" "@babel/types" "^7.19.4" +"@babel/helper-module-transforms@^7.21.0": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" + integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.2" + "@babel/types" "^7.21.2" + "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" @@ -1721,14 +1761,14 @@ "@babel/traverse" "^7.19.4" "@babel/types" "^7.19.4" -"@babel/helpers@^7.20.7": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.13.tgz#e3cb731fb70dc5337134cadc24cbbad31cc87ad2" - integrity sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg== +"@babel/helpers@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" + integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== dependencies: "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.13" - "@babel/types" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" "@babel/highlight@^7.16.7": version "7.16.10" @@ -1788,10 +1828,10 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.6.tgz#b923430cb94f58a7eae8facbffa9efd19130e7f8" integrity sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA== -"@babel/parser@^7.20.13": - version "7.20.15" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89" - integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg== +"@babel/parser@^7.21.0", "@babel/parser@^7.21.2": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" + integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -2342,7 +2382,14 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx-self@^7.16.7", "@babel/plugin-transform-react-jsx-self@^7.18.6": +"@babel/plugin-transform-react-jsx-self@^7.16.7": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz#ec98d4a9baafc5a1eb398da4cf94afbb40254a54" + integrity sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-react-jsx-self@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz#3849401bab7ae8ffa1e3e5687c94a753fc75bda7" integrity sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig== @@ -2375,15 +2422,15 @@ "@babel/types" "^7.18.6" "@babel/plugin-transform-react-jsx@^7.17.3": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz#f950f0b0c36377503d29a712f16287cedf886cbb" - integrity sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw== + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz#656b42c2fdea0a6d8762075d58ef9d4e3c4ab8a2" + integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-module-imports" "^7.18.6" "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-jsx" "^7.18.6" - "@babel/types" "^7.20.7" + "@babel/types" "^7.21.0" "@babel/plugin-transform-react-jsx@^7.18.10": version "7.18.10" @@ -2852,19 +2899,19 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.20.12", "@babel/traverse@^7.20.13": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" - integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== +"@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.2.tgz#ac7e1f27658750892e815e60ae90f382a46d8e75" + integrity sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" + "@babel/generator" "^7.21.1" "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" + "@babel/helper-function-name" "^7.21.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.13" - "@babel/types" "^7.20.7" + "@babel/parser" "^7.21.2" + "@babel/types" "^7.21.2" debug "^4.1.0" globals "^11.1.0" @@ -2937,6 +2984,15 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" +"@babel/types@^7.21.0", "@babel/types@^7.21.2": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1" + integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -4720,6 +4776,14 @@ magic-string "^0.26.1" react-docgen-typescript "^2.1.1" +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" @@ -4739,7 +4803,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== -"@jridgewell/set-array@^1.0.1": +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== @@ -4794,7 +4858,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.14": +"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.17": version "0.3.17" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== @@ -22241,7 +22305,7 @@ postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.36, postcss@^7.0 picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.2.15, postcss@^8.4.13, postcss@^8.4.17, postcss@^8.4.18: +postcss@^8.2.15, postcss@^8.4.17, postcss@^8.4.18: version "8.4.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.18.tgz#6d50046ea7d3d66a85e0e782074e7203bc7fbca2" integrity sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA== @@ -22250,7 +22314,7 @@ postcss@^8.2.15, postcss@^8.4.13, postcss@^8.4.17, postcss@^8.4.18: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.4.21: +postcss@^8.4.13, postcss@^8.4.21: version "8.4.21" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== @@ -23019,11 +23083,6 @@ react-github-btn@^1.4.0: dependencies: github-buttons "^2.22.0" -react-hook-form@^7.34.2: - version "7.34.2" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.34.2.tgz#9ac6d1a309a7c4aaa369d1269357a70e9e9bf4de" - integrity sha512-1lYWbEqr0GW7HHUjMScXMidGvV0BE2RJV3ap2BL7G0EJirkqpccTaawbsvBO8GZaB3JjCeFBEbnEWI1P8ZoLRQ== - react-hook-form@^7.43.3: version "7.43.3" resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.43.3.tgz#780af64ea1f3c5864626a377e302bfcc7750af6f" @@ -23756,7 +23815,7 @@ remark@^13.0.0: remark-stringify "^9.0.0" unified "^9.1.0" -remark@^14.0.1, remark@^14.0.2: +remark@^14.0.2: version "14.0.2" resolved "https://registry.yarnpkg.com/remark/-/remark-14.0.2.tgz#4a1833f7441a5c29e44b37bb1843fb820797b40f" integrity sha512-A3ARm2V4BgiRXaUo5K0dRvJ1lbogrbXnhkJRmD0yw092/Yl0kOCZt1k9ZeElEwkZsWGsMumz6qL5MfNJH9nOBA== From e1601960dfd0ff962ada8fabf745903a8adae5a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efra=C3=ADn=20Roch=C3=ADn?= Date: Tue, 7 Mar 2023 19:24:36 -0700 Subject: [PATCH 055/228] Generate getSchedule response using the invitee timeZone (#7574) * Generate getSchedule response using the invitee timeZone * Prevents too much diffing * Adds follow up to TODO to issue --------- Co-authored-by: zomars --- packages/trpc/server/routers/viewer/slots.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/trpc/server/routers/viewer/slots.tsx b/packages/trpc/server/routers/viewer/slots.tsx index 11493ec07e534f..bd8b45136f9a08 100644 --- a/packages/trpc/server/routers/viewer/slots.tsx +++ b/packages/trpc/server/routers/viewer/slots.tsx @@ -367,8 +367,10 @@ export async function getSchedule(input: z.infer, ctx: const computedAvailableSlots = availableTimeSlots.reduce( ( r: Record, - { time: time, ...passThroughProps } + { time: _time, ...passThroughProps } ) => { + // TODO: Adds unit tests to prevent regressions in getSchedule (try multiple timezones) + const time = _time.tz(input.timeZone); r[time.format("YYYY-MM-DD")] = r[time.format("YYYY-MM-DD")] || []; r[time.format("YYYY-MM-DD")].push({ ...passThroughProps, From 4ab6c2b3dadda59d9c8af39c4c2993553780f877 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 8 Mar 2023 08:50:57 +0100 Subject: [PATCH 056/228] New Crowdin translations by Github Action (#7569) --- apps/web/public/static/locales/es/common.json | 4 + apps/web/public/static/locales/fr/common.json | 12 +- apps/web/public/static/locales/pl/common.json | 25 +++- apps/web/public/static/locales/ro/common.json | 122 +++++++++++++++++- 4 files changed, 155 insertions(+), 8 deletions(-) diff --git a/apps/web/public/static/locales/es/common.json b/apps/web/public/static/locales/es/common.json index 2da2c05d8328d3..1a65b25769b495 100644 --- a/apps/web/public/static/locales/es/common.json +++ b/apps/web/public/static/locales/es/common.json @@ -7,6 +7,7 @@ "upgrade_now": "Actualizar ahora", "accept_invitation": "Aceptar invitación", "calcom_explained": "{{appName}} proporciona una infraestructura de programación para absolutamente todo el mundo.", + "calcom_explained_new_user": "¡Termine de configurar tu cuenta de {{appName}}! Solo le faltan unos pasos para resolver todos sus problemas de programación.", "have_any_questions": "¿Tienes preguntas? Estamos aquí para ayudar.", "reset_password_subject": "{{appName}}: Instrucciones para restablecer la contraseña", "event_declined_subject": "Rechazado: {{title}} en {{date}}", @@ -23,6 +24,8 @@ "rejection_reason_description": "¿Estás seguro de que deseas rechazar la reserva? Le haremos saber a la persona que ha intentado reservar. Puedes indicar una razón a continuación.", "rejection_confirmation": "Rechazar la reserva", "manage_this_event": "Administrar este evento", + "invite_team_member": "Invite a un miembro del equipo", + "invite_team_notifcation_badge": "Inv.", "your_event_has_been_scheduled": "Tu evento ha sido reprogramado", "your_event_has_been_scheduled_recurring": "Su evento recurrente se ha programado", "accept_our_license": "Acepte nuestra licencia cambiando la variable .env <1>NEXT_PUBLIC_LICENSE_CONSENT a '{{agree}}'.", @@ -410,6 +413,7 @@ "password_updated_successfully": "Contraseña Actualizada con Éxito", "password_has_been_changed": "Su contraseña se ha cambiado correctamente.", "error_changing_password": "Error al cambiar la contraseña", + "session_timeout_changed": "La configuración de su sesión se ha actualizado correctamente.", "something_went_wrong": "Algo ha Fallado.", "something_doesnt_look_right": "¿Algo no se ve bien?", "please_try_again": "Por Favor, Inténtalo de Nuevo.", diff --git a/apps/web/public/static/locales/fr/common.json b/apps/web/public/static/locales/fr/common.json index 77377442ca3bd4..8a6647e12c51bc 100644 --- a/apps/web/public/static/locales/fr/common.json +++ b/apps/web/public/static/locales/fr/common.json @@ -581,7 +581,7 @@ "default_duration_no_options": "Veuillez d'abord choisir les durées disponibles", "multiple_duration_mins": "{{count}} $t(minute_timeUnit)", "minutes": "minutes", - "round_robin": "Round-robin", + "round_robin": "Round-Robin", "round_robin_description": "Alternez vos rendez-vous entre plusieurs membres d'équipe.", "url": "Lien", "hidden": "Masqué", @@ -1350,7 +1350,7 @@ "manage_billing": "Gérer la facturation", "manage_billing_description": "Gérez tout ce qui est en lien avec la facturation.", "billing_freeplan_title": "Vous êtes actuellement sur le plan Gratuit", - "billing_freeplan_description": "Nous travaillons mieux en équipe. Élargissez vos workflows avec le round-robin et les événements collectifs et produisez des formulaires de routage avancés.", + "billing_freeplan_description": "Nous travaillons mieux en équipe. Élargissez vos workflows avec le Round-Robin et les événements collectifs et produisez des formulaires de routage avancés.", "billing_freeplan_cta": "Essayer maintenant", "billing_manage_details_title": "Affichez et gérez vos informations de facturation", "billing_manage_details_description": "Affichez et modifiez vos informations de facturation, et annulez votre abonnement.", @@ -1438,10 +1438,10 @@ "collective_scheduling": "Planification collective", "make_it_easy_to_book": "Facilitez la réservation de votre équipe lorsque tout le monde est disponible.", "find_the_best_person": "Trouvez la meilleure personne disponible et alternez à travers votre équipe.", - "fixed_round_robin": "Round-robin fixe", - "add_one_fixed_attendee": "Ajoutez un participant fixe et le round-robin via un certain nombre de participants.", + "fixed_round_robin": "Round-Robin fixe", + "add_one_fixed_attendee": "Ajoutez un participant fixe et le Round-Robin via un certain nombre de participants.", "calcom_is_better_with_team": "Cal.com est meilleur en équipe", - "add_your_team_members": "Ajoutez les membres de votre équipe à vos types d'événements. Utilisez la planification collective pour inclure tout le monde ou trouvez la personne la plus appropriée avec la planification round-robin.", + "add_your_team_members": "Ajoutez les membres de votre équipe à vos types d'événements. Utilisez la planification collective pour inclure tout le monde ou trouvez la personne la plus appropriée avec la planification Round-Robin.", "booking_limit_reached": "La limite de réservation pour ce type d'événement a été atteinte", "admin_has_disabled": "Un administrateur a désactivé {{appName}}", "disabled_app_affects_event_type": "Un administrateur a désactivé {{appName}} qui affecte votre type d'événement {{eventType}}", @@ -1513,7 +1513,7 @@ "assignment": "Affectation", "fixed_hosts": "Hôtes fixes", "add_fixed_hosts": "Ajouter des hôtes fixes", - "round_robin_hosts": "Hôtes round-robin", + "round_robin_hosts": "Hôtes Round-Robin", "minimum_round_robin_hosts_count": "Nombre d'hôtes requis pour participer", "hosts": "Hôtes", "upgrade_to_enable_feature": "Vous devez créer une équipe pour activer cette fonctionnalité. Cliquez pour créer une équipe.", diff --git a/apps/web/public/static/locales/pl/common.json b/apps/web/public/static/locales/pl/common.json index 3443ef06d52f73..fa8bb73dc657d2 100644 --- a/apps/web/public/static/locales/pl/common.json +++ b/apps/web/public/static/locales/pl/common.json @@ -1529,15 +1529,37 @@ "reporting": "Raportowanie", "reporting_feature": "Zobacz wszystkie elementy przychodzące z danych i pobierz je w formacie CSV", "teams_plan_required": "Wymagany plan dla zespołów", + "routing_forms_are_a_great_way": "Formularze przekierowania są świetnym sposobem na przekierowanie Twoich przychodzących leadów do właściwej osoby. Przejdź na plan dla zespołów, aby uzyskać dostęp do tej funkcji.", "choose_a_license": "Wybierz licencję", + "choose_license_description": "Wraz z Cal.com zyskujesz przystępną i bezpłatną licencję AGPLv3 z pewnymi ograniczeniami, która może zostać ulepszona do licencji Enterprise w dowolnym momencie. Możesz wykupić licencję wyższego poziomu w każdej chwili.", "license": "Licencja", "agplv3_license": "Licencja AGPLv3", "enterprise_booking_fee": "Od {{enterprise_booking_fee}}/miesięcznie", "enterprise_license_includes": "Wszystko co niezbędne do zastosowań komercyjnych", + "no_need_to_keep_your_code_open_source": "Twój kod nie musi pozostać na licencji typu open-source.", + "repackage_rebrand_resell": "Łatwa modyfikacja wyglądu, marki i odsprzedaży", + "a_vast_suite_of_enterprise_features": "Duży wybór funkcji dla przedsiębiorstw", + "free_license_fee": "0,00 USD/miesiąc", + "forever_open_and_free": "Zawsze za darmo i w otwartym dostępie", + "required_to_keep_your_code_open_source": "Twój kod musi pozostać na licencji typu open-source.", + "cannot_repackage_and_resell": "Nie da się łatwo zmodyfikować wyglądu, zmienić marki i odsprzedać.", + "no_enterprise_features": "Brak funkcji dla przedsiębiorstw", + "step_enterprise_license": "Licencja dla przedsiębiorstw", + "setup": "Konfiguracja", + "setup_description": "Skonfiguruj wystąpienie Cal.com", "configure": "Konfiguruj", "sso_configuration": "Pojedyncze logowanie", "email_no_user_cta": "Załóż swoje konto", + "create_a_managed_event": "Utwórz typ zarządzanego wydarzenia", + "meetings_are_better_with_the_right": "Spotkania idą lepiej, gdy uczestniczą w nich właściwi członkowie zespołu. Zaproś ich teraz.", + "collective_or_roundrobin": "Kolektywnie czy według algorytmu karuzelowego", + "book_your_team_members": "Zarezerwuj wszystkich członków zespołu za pomocą wydarzeń kolektywnych lub przeglądaj dostępne osoby, aby znaleźć tę właściwą za pomocą algorytmu karuzelowego.", + "default_app_link_title": "Ustaw domyślny link do aplikacji", + "default_app_link_description": "Ustawienie domyślnego linku do aplikacji pozwala wszystkim nowo utworzonym rodzajom wydarzeń na używanie ustawionego linku do aplikacji.", "change_default_conferencing_app": "Ustaw jako domyślne", + "under_maintenance": "Przerwa konserwacyjna", + "under_maintenance_description": "Zespół {{appName}} przeprowadza zaplanowane prace konserwacyjne. Jeśli masz jakieś pytania, skontaktuj się z pomocą techniczną.", + "event_type_seats": "Liczba miejsc: {{numberOfSeats}}", "booking_confirmation_failed": "Potwierdzenie rezerwacji nie powiodło się", "a_routing_form": "Formularz przekierowania", "form_description_placeholder": "Opis formularza", @@ -1553,5 +1575,6 @@ "form_modifications_warning": "Zmiany w polach i przekierowaniach tutaj będą miały wpływ na następujące formularze.", "responses_collection_waiting_description": "Poczekaj na zebranie odpowiedzi. Możesz też przesłać formularz osobiście.", "this_is_what_your_users_would_see": "To zobaczą Twoi użytkownicy.", - "identifies_name_field": "Identyfikuje pole za pomocą tej nazwy." + "identifies_name_field": "Identyfikuje pole za pomocą tej nazwy.", + "this_will_be_the_placeholder": "To będzie symbol zastępczy" } diff --git a/apps/web/public/static/locales/ro/common.json b/apps/web/public/static/locales/ro/common.json index 2805f02338fc2a..b16cd3062381e7 100644 --- a/apps/web/public/static/locales/ro/common.json +++ b/apps/web/public/static/locales/ro/common.json @@ -7,6 +7,7 @@ "upgrade_now": "Faceți upgrade acum", "accept_invitation": "Acceptați invitația", "calcom_explained": "{{appName}} oferă infrastructura de programare pentru absolut toată lumea.", + "calcom_explained_new_user": "Finalizați configurarea contului {{appName}}! Mai aveți doar câțiva pași până la soluționarea tuturor problemelor legate de programare.", "have_any_questions": "Aveți întrebări? Suntem aici pentru a vă ajuta.", "reset_password_subject": "{{appName}}: instrucțiuni de resetare a parolei", "event_declined_subject": "Refuzat: {{title}} în {{date}}", @@ -23,6 +24,8 @@ "rejection_reason_description": "Sigur doriți să respingeți rezervarea? Vom anunța persoana care a încercat să rezerve. Puteți specifica un motiv mai jos.", "rejection_confirmation": "Respingeți rezervarea", "manage_this_event": "Gestionați acest eveniment", + "invite_team_member": "Invitați un membru al echipei", + "invite_team_notifcation_badge": "Inv.", "your_event_has_been_scheduled": "Evenimentul a fost programat", "your_event_has_been_scheduled_recurring": "Evenimentul dvs. recurent a fost programat", "accept_our_license": "Acceptați licența noastră schimbând variabila .env <1>URMĂTOAREA_LICENȚĂ_PUBLICĂ în.", @@ -410,6 +413,8 @@ "password_updated_successfully": "Parola actualizată cu succes", "password_has_been_changed": "Parola dvs. a fost modificată cu succes.", "error_changing_password": "Eroare la schimbarea parolei", + "session_timeout_changed": "Configurația sesiunii dvs. a fost actualizată cu succes.", + "session_timeout_change_error": "Eroare la actualizarea configurației sesiunii", "something_went_wrong": "A apărut o problemă.", "something_doesnt_look_right": "Ceva nu pare a fi corect?", "please_try_again": "Te rugăm să încerci din nou.", @@ -428,6 +433,7 @@ "password_hint_num": "Conține cel puțin 1 cifră", "invalid_password_hint": "Parola trebuie să aibă cel puțin {{passwordLength}} caractere, să conțină cel puțin o cifră și o combinație de litere mari și litere mici", "incorrect_password": "Parola este incorectă.", + "incorrect_username_password": "Numele de utilizator sau parola este incorectă.", "24_h": "24h", "use_setting": "Folosește setarea", "am_pm": "am/pm", @@ -455,6 +461,7 @@ "slots_load_fail": "Nu s-au putut încărca intervalele de timp disponibile.", "additional_guests": "Adăugați vizitatori", "your_name": "Numele tău", + "your_full_name": "Numele dvs. complet", "email_address": "Adresa de e-mail", "enter_valid_email": "Introduceți un e-mail valid", "location": "Locaţie", @@ -508,6 +515,8 @@ "admin": "Admin", "administrator_user": "Utilizator administrator", "lets_create_first_administrator_user": "Haideți să creăm primul utilizator administrator.", + "admin_user_created": "Configurare utilizator-administrator", + "admin_user_created_description": "Ați creat deja un utilizator-administrator. Vă puteți conecta acum la contul dvs.", "new_member": "Membru Nou", "invite": "Invită", "add_team_members": "Adăugați membri în echipă", @@ -657,6 +666,7 @@ "edit_availability": "Modificați disponibilitatea", "configure_availability": "Configurați orele când sunteți disponibil pentru rezervări.", "copy_times_to": "Copiați orele în", + "copy_times_to_tooltip": "Copiați orele în…", "change_weekly_schedule": "Modificaţi schema săptămânală", "logo": "Logo", "error": "Eroare", @@ -668,6 +678,7 @@ "add_attendees": "Adăugați participanți", "show_advanced_settings": "Afișează setările avansate", "event_name": "Denumirea evenimentului", + "event_name_in_calendar": "Denumirea evenimentului în calendar", "event_name_tooltip": "Numele care va apărea în calendare", "meeting_with_user": "Întâlnire cu {{attendeeName}}", "additional_inputs": "Date suplimentare", @@ -786,6 +797,7 @@ "number_apps_one": "{{count}} aplicație", "number_apps_other": "{{count}} (de) aplicații", "trending_apps": "Aplicații populare", + "most_popular": "Cele mai populare", "explore_apps": "Aplicații {{category}}", "installed_apps": "Aplicații instalate", "free_to_use_apps": "Gratuit", @@ -796,12 +808,14 @@ "no_category_apps_description_analytics": "Adăugați o aplicație de analiză pentru paginile dvs. de rezervări", "no_category_apps_description_automation": "Adăugați o aplicație de automatizare de utilizat", "no_category_apps_description_other": "Adăugați orice alt tip de aplicație pentru a întreprinde diverse acțiuni", + "no_category_apps_description_web3": "Adăugați o aplicație Web3 pentru paginile dvs. de rezervări", "installed_app_calendar_description": "Pentru a evita rezervările suprapuse, configurează calendarele astfel încât să poată verifica existența conflictelor.", "installed_app_conferencing_description": "Adăugați aplicațiile preferate de conferințe video pentru ședințele dvs.", "installed_app_payment_description": "Configurați serviciile de procesare a plăților care vor fi utilizate la taxarea clienților.", "installed_app_analytics_description": "Configurați care aplicații de analiză vor fi utilizate pentru paginile dvs. de rezervări", "installed_app_other_description": "Toate aplicațiile instalate din alte categorii.", "installed_app_automation_description": "Configurați care aplicații de automatizare vor fi utilizate", + "installed_app_web3_description": "Configurați care aplicații Web3 vor fi utilizate pentru paginile dvs. de rezervări", "analytics": "Analiză", "empty_installed_apps_headline": "Nicio aplicație instalată", "empty_installed_apps_description": "Aplicațiile vă permit să vă îmbunătățiți în mod semnificativ fluxul de lucru și activitățile legate de programări.", @@ -929,6 +943,11 @@ "current_location": "Locația curentă", "user_phone": "Numărul dvs. de telefon", "new_location": "Locație nouă", + "session": "Sesiune", + "session_description": "Controlați sesiunea contului", + "session_timeout_after": "Expirare sesiune după", + "session_timeout": "Expirare sesiune", + "session_timeout_description": "Invalidați sesiunea după o anumită perioadă.", "no_location": "Nicio locație definită", "set_location": "Stabiliți locația", "update_location": "Actualizați locația", @@ -1072,6 +1091,7 @@ "broken_video_action": "Nu am reușit să adăugăm linkul pentru întâlnirea <1>{{location}} la evenimentul programat. Contactați-vă invitații sau actualizați-vă evenimentul din calendar pentru a adăuga detalii. Puteți fie <3> să modificați locul pentru tipul de eveniment, fie să încercați să <5>ștergeți și să adăugați din nou aplicația.", "broken_calendar_action": "Nu am reușit să vă actualizăm <1>{{calendar}}. <2> Verificați setările calendarului sau ștergeți-l și adăugați-l din nou ", "attendee_name": "Numele participantului", + "scheduler_full_name": "Numele complet al persoanei care efectuează rezervarea", "broken_integration": "Integrare întreruptă", "problem_adding_video_link": "A intervenit o problemă la adăugarea linkului pentru videoclip", "problem_updating_calendar": "A intervenit o problemă la actualizarea calendarului dvs.", @@ -1214,6 +1234,7 @@ "connect_automation_apps": "Conectați aplicații de automatizare", "connect_analytics_apps": "Conectați aplicații de analiză", "connect_other_apps": "Conectați alte aplicații", + "connect_web3_apps": "Conectați aplicații Web3", "current_step_of_total": "Pasul {{currentStep}} din {{maxSteps}}", "add_variable": "Adăugare variabilă", "custom_phone_number": "Număr de telefon personalizat", @@ -1230,6 +1251,7 @@ "to": "Către", "workflow_turned_on_successfully": "Fluxul de lucru {{workflowName}} a fost {{offOn}} cu succes", "download_responses": "Descărcați răspunsurile", + "download_responses_description": "Descărcați în format CSV toate răspunsurile la formularul dvs.", "download": "Descarcă", "create_your_first_form": "Creați primul dvs. formular", "create_your_first_form_description": "Cu ajutorul formularelor de direcționare, puteți adresa întrebări de calificare și le puteți redirecționa persoanei sau tipului de eveniment potrivit.", @@ -1271,6 +1293,8 @@ "routing_forms_send_email_owner": "Trimiteți un e-mail către proprietar", "routing_forms_send_email_owner_description": "Trimite un e-mail către proprietar atunci când este trimis formularul", "add_new_form": "Adăugați un formular nou", + "create_your_first_route": "Creați-vă primul parcurs", + "route_to_the_right_person": "Direcționați către persoana potrivită, pe baza răspunsurilor la formularul dvs.", "form_description": "Creați formularul pentru direcționarea unei persoane care face rezervare", "copy_link_to_form": "Copiați linkul în formular", "theme": "Temă", @@ -1301,6 +1325,7 @@ "password_reset_leading": "Dacă nu primiți un e-mail în curând, verificați dacă adresa de e-mail pe care ați introdus-o este corectă, verificați folderul de mesaje nedorite sau contactați serviciul de asistență dacă problema persistă.", "password_updated": "Parolă actualizată!", "pending_payment": "Plată în așteptare", + "pending_invites": "Invitații în așteptare", "confirmation_page_rainbow": "Restricționați accesul la evenimentul dvs. cu tokenuri sau NFT-uri pe Ethereum, Polygon și altele.", "not_on_cal": "Nu este pe {{appName}}", "no_calendar_installed": "Niciun calendar instalat", @@ -1427,6 +1452,9 @@ "disabled_calendar": "Dacă ai un alt calendar instalat, rezervările noi vor fi adăugate la acesta. Dacă nu ai, conectează un calendar nou, astfel încât să nu ratezi nicio rezervare nouă.", "enable_apps": "Activează aplicații", "enable_apps_description": "Activează aplicațiile pe care utilizatorii le pot integra cu Cal.com", + "purchase_license": "Achiziționați o licență", + "already_have_key": "Am deja o cheie:", + "already_have_key_suggestion": "Copiați aici variabila de mediu CALCOM_LICENSE_KEY existentă.", "app_is_enabled": "{{appName}} este activat", "app_is_disabled": "{{appName}} este dezactivat", "keys_have_been_saved": "Cheile au fost salvate", @@ -1447,6 +1475,7 @@ "individual": "Persoană", "all_bookings_filter_label": "Toate rezervările", "all_users_filter_label": "Toți utilizatorii", + "your_bookings_filter_label": "Rezervările dvs.", "meeting_url_variable": "URL ședință", "meeting_url_info": "Adresa URL a evenimentului ședință tip conferință", "date_overrides": "Suprascrieri dată", @@ -1485,6 +1514,7 @@ "round_robin_hosts": "Gazde Round-Robin", "minimum_round_robin_hosts_count": "Numărul de gazde necesar pentru participare", "hosts": "Gazde", + "upgrade_to_enable_feature": "Trebuie să creați o echipă pentru a activa această caracteristică. Faceți clic pentru a crea o echipă.", "new_attendee": "Participant nou", "awaiting_approval": "În așteptarea aprobării", "requires_google_calendar": "Această aplicație necesită o conexiune cu Google Calendar", @@ -1493,9 +1523,99 @@ "continue_to_install_google_calendar": "Continuă cu instalarea Google Calendar", "install_google_meet": "Instalează Google Meet", "install_google_calendar": "Instalează Google Calendar", + "sender_name": "Nume expeditor", + "already_invited": "Participant deja invitat", + "no_recordings_found": "Nu s-au găsit înregistrări", + "reporting": "Raportare", + "reporting_feature": "Vizualizați toate datele primite și descărcați-le în format CSV", + "teams_plan_required": "Este necesar un plan pentru echipe", + "routing_forms_are_a_great_way": "Formularele de parcurs reprezintă un mod excelent de a vă direcționa potențialii clienți către persoana potrivită. Pentru a putea accesa această caracteristică, treceți la un plan pentru echipe.", + "choose_a_license": "Alegeți o licență", + "choose_license_description": "Cal.com include o licență AGPLv3 accesibilă și gratuită, cu unele limitări, însă care poate fi actualizată la o licență Enterprise în orice moment. Puteți face upgrade oricând mai târziu.", + "license": "Licență", + "agplv3_license": "Licență AGPLv3", + "ee_enterprise_license": "Licență Enterprise „/ee”", + "enterprise_booking_fee": "Începând de la {{enterprise_booking_fee}}/lună", + "enterprise_license_includes": "Totul pentru uz comercial", + "no_need_to_keep_your_code_open_source": "Nu este nevoie să vă păstrați codul open-source", + "repackage_rebrand_resell": "Restructurați și revindeți cu ușurință, sub o nouă marcă", + "a_vast_suite_of_enterprise_features": "O gamă largă de caracteristici specifice întreprinderilor", + "free_license_fee": "0,00 USD/lună", + "forever_open_and_free": "Deschis și gratuit fără limită de timp", + "required_to_keep_your_code_open_source": "Este necesar să vă păstrați codul open-source", + "cannot_repackage_and_resell": "Nu se poate restructura și revinde cu ușurință, sub o nouă marcă", + "no_enterprise_features": "Fără caracteristici specifice întreprinderilor", + "step_enterprise_license": "Licență Enterprise", + "step_enterprise_license_description": "Totul pentru uz comercial, cu găzduire privată, restructurare și revânzare sub o nouă marcă, precum și cu acces la componente destinate exclusiv întreprinderilor.", + "setup": "Configurare", + "setup_description": "Configurare eveniment Cal.com", "configure": "Configurare", "sso_configuration": "Single Sign-On", + "sso_configuration_description": "Configurați SSO cu SAML/OIDC și permiteți membrilor echipei să se conecteze folosind un furnizor de identitate", + "sso_oidc_heading": "SSO cu OIDC", + "sso_oidc_description": "Configurați SSO cu OIDC, apelând la furnizorul de identitate dorit.", + "sso_oidc_configuration_title": "Configurare OIDC", + "sso_oidc_configuration_description": "Configurați conexiunea OIDC la furnizorul dvs. de identitate. Puteți găsi informațiile necesare la furnizorul dvs. de identitate.", + "sso_oidc_callback_copied": "URL-ul pentru apelare inversă a fost copiat", + "sso_saml_heading": "SSO cu SAML", + "sso_saml_description": "Configurați SSO cu SAML, apelând la furnizorul de identitate dorit.", + "sso_saml_configuration_title": "Configurare SAML", + "sso_saml_configuration_description": "Configurați conexiunea SAML la furnizorul dvs. de identitate. Puteți găsi informațiile necesare la furnizorul dvs. de identitate.", + "sso_saml_acsurl_copied": "URL-ul ACS a fost copiat", + "sso_saml_entityid_copied": "ID-ul entității a fost copiat", + "sso_connection_created_successfully": "Configurația {{connectionType}} a fost creată cu succes", + "sso_connection_deleted_successfully": "Configurația {{connectionType}} a fost ștearsă cu succes", + "delete_sso_configuration": "Ștergeți configurația {{connectionType}}", + "delete_sso_configuration_confirmation": "Da, șterg configurația {{connectionType}}", + "delete_sso_configuration_confirmation_description": "Sigur doriți să ștergeți configurația {{connectionType}}? Membrii echipei dvs. care utilizează conectarea prin {{connectionType}} nu vor mai putea accesa Cal.com.", + "organizer_timezone": "Fusul orar al organizatorului", "email_no_user_cta": "Creează-ți contul", + "email_user_cta": "Vizualizare invitație", + "email_no_user_invite_heading": "Ați fost invitat să faceți parte dintr-o echipă de pe {{appName}}", + "email_no_user_invite_subheading": "{{invitedBy}} v-a invitat să faceți parte din echipa sa de pe {{appName}}. {{appName}} este un instrument de planificare a evenimentelor care vă permite dvs. și echipei dvs. să programați ședințe fără a face ping-pong prin e-mail.", + "email_no_user_invite_steps_intro": "Vom parcurge împreună câțiva pași simpli și vă veți bucura împreună cu echipa dvs. de planificări fără probleme, în cel mai scurt timp.", + "email_no_user_step_one": "Alegeți-vă numele de utilizator", + "email_no_user_step_two": "Conectați-vă contul de calendar", + "email_no_user_step_three": "Setați-vă disponibilitatea", + "email_no_user_step_four": "Faceți parte din {{teamName}}", + "email_no_user_signoff": "Echipa {{appName}} vă dorește programări cu spor", + "impersonation_user_tip": "Urmează să simulați identitatea unui utilizator, ceea ce înseamnă că puteți face modificări în numele său. Acționați cu atenție.", + "available_variables": "Variabile disponibile", + "scheduler": "{Scheduler}", + "recommended_next_steps": "Următorii pași recomandați", + "create_a_managed_event": "Creați un tip de eveniment gestionat", + "meetings_are_better_with_the_right": "Ședințele sunt mai agreabile dacă participă membrii potriviți ai echipei. Invitați-i acum.", + "collective_or_roundrobin": "Alocare colectivă sau prin rotație", + "book_your_team_members": "Efectuați rezervări comune pentru membrii echipei. Alegeți evenimente colective sau creați un ciclu pentru a găsi persoana potrivită prin alocarea prin rotație.", + "default_app_link_title": "Setați un link implicit pentru aplicații", + "default_app_link_description": "Setarea unui link implicit pentru aplicații permite tuturor tipurilor de evenimente nou-create să utilizeze linkul pentru aplicații pe care l-ați setat.", "change_default_conferencing_app": "Setează ca implicit", - "booking_confirmation_failed": "Confirmare rezervare nereușită" + "under_maintenance": "Serviciu întrerupt pentru întreținere", + "under_maintenance_description": "Echipa {{appName}} efectuează lucrări de întreținere programate. Dacă aveți întrebări, contactați serviciul de asistență.", + "event_type_seats": "{{numberOfSeats}} (de) locuri", + "booking_with_payment_cancelled": "Nu se mai poate plăti pentru acest eveniment", + "booking_with_payment_cancelled_already_paid": "Există o rambursare în curs pentru plata acestei rezervări.", + "booking_with_payment_cancelled_refunded": "Plata pentru această rezervare a fost rambursată.", + "booking_confirmation_failed": "Confirmare rezervare nereușită", + "get_started_zapier_templates": "Fă primii pași cu șabloanele Zapier", + "a_routing_form": "Un formular de redirecționare", + "form_description_placeholder": "Descriere formular", + "keep_me_connected_with_form": "Vreau să primesc actualizări privind formularul", + "fields_in_form_duplicated": "Orice modificări aduse parcursului și câmpurilor din formularul duplicat se vor reflecta în duplicat.", + "form_deleted": "Formular șters", + "delete_form": "Ștergere formular", + "delete_form_action": "Da, ștergeți formularul", + "delete_form_confirmation": "Sigur doriți să ștergeți acest formular? Nicio persoană căreia i-ați transmis linkul nu va mai putea efectua rezervări pe baza lui. În plus, toate răspunsurile asociate vor fi șterse.", + "typeform_redirect_url_copied": "URL-ul de redirecționare Typeform a fost copiat! Puteți accesa și seta URL-ul în formularul Typeform.", + "modifications_in_fields_warning": "Modificările aduse câmpurilor și parcursurilor pentru următoarele formulare vor fi reproduse în acest formular.", + "connected_forms": "Formulare conectate", + "form_modifications_warning": "Următoarele formulare vor fi afectate dacă modificați aici câmpuri sau parcursuri.", + "responses_collection_waiting_description": "Așteptați puțin pentru ca răspunsurile să fie colectate. Puteți trimite și dvs. formularul.", + "this_is_what_your_users_would_see": "Iată ce vor vedea utilizatorii dvs.", + "identifies_name_field": "Depistează câmpul după această denumire.", + "add_1_option_per_line": "Adăugați o opțiune pe linie", + "select_a_router": "Selectați o rută", + "add_a_new_route": "Adăugați o rută nouă", + "no_responses_yet": "Nu există încă răspunsuri", + "this_will_be_the_placeholder": "Acesta va fi substituentul" } From 58836eefbf8cf03d1bac83c544cce5980aa0ac4d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 8 Mar 2023 10:51:07 +0100 Subject: [PATCH 057/228] New Crowdin translations by Github Action (#7577) Co-authored-by: Crowdin Bot --- apps/web/public/static/locales/es/common.json | 118 +++++++++++++++++- apps/web/public/static/locales/fr/common.json | 4 +- .../public/static/locales/zh-TW/common.json | 72 ++++++++++- 3 files changed, 190 insertions(+), 4 deletions(-) diff --git a/apps/web/public/static/locales/es/common.json b/apps/web/public/static/locales/es/common.json index 1a65b25769b495..fe96af48701870 100644 --- a/apps/web/public/static/locales/es/common.json +++ b/apps/web/public/static/locales/es/common.json @@ -414,6 +414,7 @@ "password_has_been_changed": "Su contraseña se ha cambiado correctamente.", "error_changing_password": "Error al cambiar la contraseña", "session_timeout_changed": "La configuración de su sesión se ha actualizado correctamente.", + "session_timeout_change_error": "Error al actualizar la configuración de sesión", "something_went_wrong": "Algo ha Fallado.", "something_doesnt_look_right": "¿Algo no se ve bien?", "please_try_again": "Por Favor, Inténtalo de Nuevo.", @@ -432,6 +433,7 @@ "password_hint_num": "Debe contener al menos 1 número", "invalid_password_hint": "La contraseña debe tener un mínimo de {{passwordLength}} caracteres que contengan al menos un número y una mezcla de letras mayúsculas y minúsculas", "incorrect_password": "La Contraseña es Incorrecta.", + "incorrect_username_password": "El nombre de usuario o la contraseña son incorrectos.", "24_h": "24hs", "use_setting": "Usar Ajuste", "am_pm": "am/pm", @@ -459,6 +461,7 @@ "slots_load_fail": "No se pudo cargar el intervalo de tiempo disponible.", "additional_guests": "Añadir invitados", "your_name": "Tu Nombre", + "your_full_name": "Su nombre completo", "email_address": "Email", "enter_valid_email": "Ingresa un correo electrónico válido", "location": "Ubicación", @@ -512,6 +515,8 @@ "admin": "Administrador", "administrator_user": "Usuario administrador", "lets_create_first_administrator_user": "Vamos a crear el primer usuario administrador.", + "admin_user_created": "Configuración del usuario administrador", + "admin_user_created_description": "Ya ha creado un usuario administrador. Ahora puede iniciar sesión en su cuenta.", "new_member": "Nuevo Miembro", "invite": "Invitación", "add_team_members": "Añadir miembros del equipo", @@ -661,6 +666,7 @@ "edit_availability": "Editar disponibilidad", "configure_availability": "Configure los horarios en los que está disponible para realizar reservas.", "copy_times_to": "Copiar tiempos en", + "copy_times_to_tooltip": "Copiar tiempos a…", "change_weekly_schedule": "Cambia tu Horario Semanal", "logo": "Logotipo", "error": "Error", @@ -672,6 +678,7 @@ "add_attendees": "Añadir Asistentes", "show_advanced_settings": "Mostrar Opciones Avanzadas", "event_name": "Nombre del Evento", + "event_name_in_calendar": "Nombre del evento en el calendario", "event_name_tooltip": "Nombre que aparecerá en los calendarios", "meeting_with_user": "Reunión con {{attendeeName}}", "additional_inputs": "Campos Adicionales", @@ -790,6 +797,7 @@ "number_apps_one": "{{count}} aplicación", "number_apps_other": "{{count}} aplicaciones", "trending_apps": "Aplicaciones populares", + "most_popular": "Más popular", "explore_apps": "Aplicaciones {{category}}", "installed_apps": "Aplicaciones instaladas", "free_to_use_apps": "Gratis", @@ -800,12 +808,14 @@ "no_category_apps_description_analytics": "Añada una aplicación de análisis para sus páginas de reserva", "no_category_apps_description_automation": "Añada una aplicación de automatización para utilizar", "no_category_apps_description_other": "Añade cualquier otro tipo de aplicación para hacer todo tipo de tareas", + "no_category_apps_description_web3": "Agregue una aplicación web3 para sus páginas de reserva", "installed_app_calendar_description": "Configure el(los) calendario(s) para comprobar conflictos y evitar reservas duplicadas.", "installed_app_conferencing_description": "Añade tus aplicaciones de videoconferencia favoritas para las reuniones", "installed_app_payment_description": "Configura los servicios de procesamiento de pagos que vas a utilizar para cobrar a tus clientes.", "installed_app_analytics_description": "Configure qué aplicaciones de análisis va a utilizar para sus páginas de reserva", "installed_app_other_description": "Todas tus aplicaciones instaladas de otras categorías.", "installed_app_automation_description": "Configure qué aplicaciones de automatización va a utilizar", + "installed_app_web3_description": "Configure qué aplicaciones web3 usar para sus páginas de reserva", "analytics": "Análisis", "empty_installed_apps_headline": "No hay aplicaciones instaladas", "empty_installed_apps_description": "Las aplicaciones te permiten mejorar significativamente tu flujo de trabajo y mejorar tu agendamiento.", @@ -933,6 +943,11 @@ "current_location": "Ubicación actual", "user_phone": "Su número de teléfono", "new_location": "Nueva ubicación", + "session": "Sesión", + "session_description": "Controle la sesión de su cuenta", + "session_timeout_after": "Tiempo de sesión agotado después de", + "session_timeout": "Tiempo de sesión agotado", + "session_timeout_description": "Invalide su sesión después de una cierta cantidad de tiempo.", "no_location": "No se ha definido ninguna ubicación", "set_location": "Establecer ubicación", "update_location": "Actualizar ubicación", @@ -1076,6 +1091,7 @@ "broken_video_action": "No pudimos agregar el enlace de <1>{{location}} a tu evento agendado. Contacta a tus invitados o actualiza tu calendario para agregar los detalles. Puedes <3>cambiar la ubicación de tu tipo de evento o <5>remover la App y agregarla de nuevo.", "broken_calendar_action": "No pudimos actualizar tu <1>{{calendar}}. <2> Comprueba la configuración de tu calendario o elimina y añade tu calendario de nuevo ", "attendee_name": "Nombre del asistente", + "scheduler_full_name": "El nombre completo de la persona que reserva", "broken_integration": "Integración rota", "problem_adding_video_link": "Hubo un problema al añadir un enlace de vídeo", "problem_updating_calendar": "Hubo un problema al actualizar tu calendario", @@ -1218,6 +1234,7 @@ "connect_automation_apps": "Conecte aplicaciones de automatización", "connect_analytics_apps": "Conecte aplicaciones de análisis", "connect_other_apps": "Conectar otras aplicaciones", + "connect_web3_apps": "Conectar aplicaciones web3", "current_step_of_total": "Paso {{currentStep}} de {{maxSteps}}", "add_variable": "Añadir variable", "custom_phone_number": "Número de teléfono personalizado", @@ -1234,6 +1251,7 @@ "to": "Para", "workflow_turned_on_successfully": "El flujo de trabajo {{workflowName}} se ha activado {{offOn}} con éxito", "download_responses": "Descargar respuestas", + "download_responses_description": "Descargue todas las respuestas de su formulario en formato CSV.", "download": "Descargar", "create_your_first_form": "Crea tu primer formulario", "create_your_first_form_description": "Con los formularios de orientación puedes hacer preguntas calificadoras y encaminarte hacia la persona o tipo de evento correctos.", @@ -1275,6 +1293,8 @@ "routing_forms_send_email_owner": "Enviar correo electrónico al propietario", "routing_forms_send_email_owner_description": "Mande un correo electrónico al propietario cuando se envía el formulario", "add_new_form": "Añadir formulario nuevo", + "create_your_first_route": "Cree su primera ruta", + "route_to_the_right_person": "Ruta a la persona adecuada en función de las respuestas a su formulario", "form_description": "Crea tu formulario para dirigirlo a un agente de reservas", "copy_link_to_form": "Copiar enlace al formulario", "theme": "Tema", @@ -1305,6 +1325,7 @@ "password_reset_leading": "Si no recibe un correo electrónico pronto, compruebe que la dirección de correo que ha introducido sea correcta, revise su carpeta de correo no deseado o comuníquese con el equipo de soporte si el problema persiste.", "password_updated": "¡Contraseña actualizada!", "pending_payment": "Pago pendiente", + "pending_invites": "Invitaciones pendientes", "confirmation_page_rainbow": "Cierra el acceso a tu evento con tokens o NFTs en Ethereum, Polygon, etc.", "not_on_cal": "No estás en {{appName}}", "no_calendar_installed": "No hay ningún calendario instalado", @@ -1431,6 +1452,9 @@ "disabled_calendar": "Si tiene otro calendario instalado, las nuevas reservas se añadirán a él. De lo contrario, conecte un nuevo calendario para que no se pierda ninguna reserva nueva.", "enable_apps": "Activar aplicaciones", "enable_apps_description": "Active aplicaciones que los usuarios puedan integrar con Cal.com", + "purchase_license": "Compre una licencia", + "already_have_key": "Ya tengo una clave:", + "already_have_key_suggestion": "Copie aquí su variable de entorno CALCOM_LICENSE_KEY existente.", "app_is_enabled": "{{appName}} está activada", "app_is_disabled": "{{appName}} está desactivada", "keys_have_been_saved": "Se han guardado las claves", @@ -1451,6 +1475,7 @@ "individual": "Individuo", "all_bookings_filter_label": "Todas las reservas", "all_users_filter_label": "Todos los usuarios", + "your_bookings_filter_label": "Sus reservas", "meeting_url_variable": "URL de la reunión", "meeting_url_info": "URL de la reunión del evento", "date_overrides": "Anular fechas", @@ -1489,6 +1514,7 @@ "round_robin_hosts": "Anfitriones por turnos", "minimum_round_robin_hosts_count": "Número de anfitriones requeridos para asistir", "hosts": "Anfitriones", + "upgrade_to_enable_feature": "Debe crear un equipo para activar esta función. Haga clic para crear un equipo.", "new_attendee": "Nuevo asistente", "awaiting_approval": "En espera de aprobación", "requires_google_calendar": "Esta aplicación requiere una conexión con Google Calendar", @@ -1497,9 +1523,99 @@ "continue_to_install_google_calendar": "Siga con la instalación de Google Calendar", "install_google_meet": "Instale Google Meet", "install_google_calendar": "Instale Google Calendar", + "sender_name": "Nombre del remitente", + "already_invited": "Asistente ya invitado", + "no_recordings_found": "No se encontraron grabaciones", + "reporting": "Reportando", + "reporting_feature": "Vea todos los datos entrantes y descárguelos como un CSV", + "teams_plan_required": "Se requiere un plan de equipos", + "routing_forms_are_a_great_way": "Los formularios de enrutamiento son una excelente manera de enrutar sus clientes potenciales entrantes a la persona adecuada. Actualice a un plan de equipos para acceder a esta función.", + "choose_a_license": "Elija una licencia", + "choose_license_description": "Cal.com viene con una licencia AGPLv3 accesible y gratuita con algunas limitaciones que se puede actualizar a una licencia Empresarial en cualquier momento. Puede actualizar en cualquier momento más tarde.", + "license": "Licencia", + "agplv3_license": "Licencia AGPLv3", + "ee_enterprise_license": "Licencia Empresarial \"/ee\"", + "enterprise_booking_fee": "A partir de {{enterprise_booking_fee}}/mes", + "enterprise_license_includes": "Todo para un caso de uso comercial", + "no_need_to_keep_your_code_open_source": "No es necesario mantener su código abierto", + "repackage_rebrand_resell": "Vuelva a empaquetar, cambie la marca y revenda fácilmente", + "a_vast_suite_of_enterprise_features": "Un amplio conjunto de funciones empresariales", + "free_license_fee": "$0,00/mes", + "forever_open_and_free": "Siempre abierto y gratis", + "required_to_keep_your_code_open_source": "Necesario para mantener su código abierto", + "cannot_repackage_and_resell": "No se puede volver a empaquetar, cambiar la marca y revender fácilmente", + "no_enterprise_features": "Sin características empresariales", + "step_enterprise_license": "Licencia Empresarial", + "step_enterprise_license_description": "Todo para un caso de uso comercial con alojamiento privado, reempaquetado, cambio de marca y reventa, además de acceso a componentes empresariales exclusivos.", + "setup": "Configuración", + "setup_description": "Configurar la instancia de Cal.com", "configure": "Configurar", "sso_configuration": "Configuración de SAML", + "sso_configuration_description": "Configure SAML/OIDC SSO y permita que los miembros del equipo inicien sesión con un proveedor de identidad", + "sso_oidc_heading": "SSO con OIDC", + "sso_oidc_description": "Configure OIDC SSO con el proveedor de identidad de su elección.", + "sso_oidc_configuration_title": "Configuración OIDC", + "sso_oidc_configuration_description": "Configure la conexión OIDC a su proveedor de identidad. Puede encontrar la información requerida en su proveedor de identidad.", + "sso_oidc_callback_copied": "URL de devolución de llamada copiada", + "sso_saml_heading": "SSO con SAML", + "sso_saml_description": "Configure SAML SSO con el proveedor de identidad de su elección.", + "sso_saml_configuration_title": "Configuración de SAML", + "sso_saml_configuration_description": "Configure la conexión SAML a su proveedor de identidad. Puede encontrar la información requerida en su proveedor de identidad.", + "sso_saml_acsurl_copied": "URL de ACS copiada", + "sso_saml_entityid_copied": "ID de entidad copiado", + "sso_connection_created_successfully": "Configuración de {{connectionType}} creada con éxito", + "sso_connection_deleted_successfully": "Configuración de {{connectionType}} eliminada con éxito", + "delete_sso_configuration": "Eliminar la configuración de {{connectionType}}", + "delete_sso_configuration_confirmation": "Sí, eliminar la configuración de {{connectionType}}", + "delete_sso_configuration_confirmation_description": "¿Está seguro de que desea eliminar la configuración de {{connectionType}}? Los miembros de su equipo que utilicen el inicio de sesión {{connectionType}} ya no podrán acceder a Cal.com.", + "organizer_timezone": "Zona horaria del organizador", "email_no_user_cta": "Crea tu Cuenta", + "email_user_cta": "Ver la invitación", + "email_no_user_invite_heading": "Lo han invitado a unirse a un equipo en {{appName}}", + "email_no_user_invite_subheading": "{{invitedBy}} lo invitó a unirse a su equipo en {{appName}}. {{appName}} es el programador de eventos que les permite a usted y a su equipo programar reuniones sin correos electrónicos de ida y vuelta.", + "email_no_user_invite_steps_intro": "Lo guiaremos a través de unos pocos pasos y disfrutará de una programación sin estrés con su equipo en muy poco tiempo.", + "email_no_user_step_one": "Elija su nombre de usuario", + "email_no_user_step_two": "Conecte su cuenta de calendario", + "email_no_user_step_three": "Establezca su disponibilidad", + "email_no_user_step_four": "Únase a {{teamName}}", + "email_no_user_signoff": "Feliz programación le desea el equipo de {{appName}}", + "impersonation_user_tip": "Está a punto de suplantar a un usuario, lo que significa que puede hacer cambios en su nombre. Tenga cuidado.", + "available_variables": "Variables disponibles", + "scheduler": "{Scheduler}", + "recommended_next_steps": "Siguientes pasos recomendados", + "create_a_managed_event": "Crear un tipo de evento administrado", + "meetings_are_better_with_the_right": "Las reuniones son mejores con los miembros del equipo correctos. Invítelos ahora.", + "collective_or_roundrobin": "Colectivo o turnos rotativos", + "book_your_team_members": "Reserve a los miembros de su equipo en conjunto con eventos colectivos o realice un ciclo para encontrar a la persona adecuada con turnos rotativos.", + "default_app_link_title": "Establecer un enlace de aplicación predeterminado", + "default_app_link_description": "Establecer un enlace de aplicación predeterminado permite que todos los tipos de eventos recién creados utilicen el enlace de aplicación que establezca.", "change_default_conferencing_app": "Establecer como predeterminado", - "booking_confirmation_failed": "Error al confirmar la reserva" + "under_maintenance": "Fuera de servicio por mantenimiento", + "under_maintenance_description": "El equipo de {{appName}} está realizando un mantenimiento programado. Si tiene alguna pregunta, comuníquese con soporte.", + "event_type_seats": "{{numberOfSeats}} plazas", + "booking_with_payment_cancelled": "Ya no es posible pagar por este evento", + "booking_with_payment_cancelled_already_paid": "Un reembolso por el pago de esta reserva está en camino.", + "booking_with_payment_cancelled_refunded": "El pago de esta reserva se ha reembolsado.", + "booking_confirmation_failed": "Error al confirmar la reserva", + "get_started_zapier_templates": "Comience con las plantillas de Zapier", + "a_routing_form": "Un formulario de enrutamiento", + "form_description_placeholder": "Descripción del formulario", + "keep_me_connected_with_form": "Mantenerme conectado con el formulario", + "fields_in_form_duplicated": "Cualquier cambio en el enrutador y los campos del formulario que se está duplicando se reflejará en el duplicado.", + "form_deleted": "Formulario eliminado", + "delete_form": "Eliminar formulario", + "delete_form_action": "Sí, eliminar formulario", + "delete_form_confirmation": "¿Está seguro de que desea eliminar este formulario? Cualquier persona con la que haya compartido el enlace ya no podrá reservar con él. Además, se eliminarían todas las respuestas asociadas.", + "typeform_redirect_url_copied": "¡Se copió la URL de redireccionamiento de Typeform! Puede ir y establecer la URL en el formulario Typeform.", + "modifications_in_fields_warning": "Las modificaciones en los campos y rutas de los siguientes formularios se reflejarán en este formulario.", + "connected_forms": "Formularios conectados", + "form_modifications_warning": "Los siguientes formularios se verían afectados cuando modifique campos o rutas aquí.", + "responses_collection_waiting_description": "Espere un tiempo para que se recopilen las respuestas. También puede ir y enviar el formulario usted mismo.", + "this_is_what_your_users_would_see": "Esto es lo que verían sus usuarios", + "identifies_name_field": "Identifica el campo con este nombre.", + "add_1_option_per_line": "Agregue 1 opción por línea", + "select_a_router": "Seleccione un enrutador", + "add_a_new_route": "Agregar una ruta nueva", + "no_responses_yet": "Aún no hay respuestas", + "this_will_be_the_placeholder": "Este será el marcador de posición" } diff --git a/apps/web/public/static/locales/fr/common.json b/apps/web/public/static/locales/fr/common.json index 8a6647e12c51bc..753b263086c6d4 100644 --- a/apps/web/public/static/locales/fr/common.json +++ b/apps/web/public/static/locales/fr/common.json @@ -1591,8 +1591,8 @@ "create_a_managed_event": "Créer un type d'événement géré", "meetings_are_better_with_the_right": "Les rendez-vous sont meilleurs avec les bons membres d'équipe. Invitez-les maintenant.", "create_a_one_one_template": "Créez un modèle unique pour un type d'événement et distribuez-le à plusieurs membres.", - "collective_or_roundrobin": "Collective ou round-robin", - "book_your_team_members": "Réservez les membres de votre équipe entre eux avec des événements collectifs ou mettez en place un cycle pour obtenir la bonne personne avec le round-robin.", + "collective_or_roundrobin": "Collective ou Round-Robin", + "book_your_team_members": "Réservez les membres de votre équipe entre eux avec des événements collectifs ou mettez en place un cycle pour obtenir la bonne personne avec le Round-Robin.", "create_event_on": "Créer un événement dans", "default_app_link_title": "Définir un lien d'application par défaut", "default_app_link_description": "Définir un lien d'application par défaut permet à tous les nouveaux types d'événements d'utiliser le lien d'application que vous avez défini.", diff --git a/apps/web/public/static/locales/zh-TW/common.json b/apps/web/public/static/locales/zh-TW/common.json index 411606cd8562c0..b4553610788648 100644 --- a/apps/web/public/static/locales/zh-TW/common.json +++ b/apps/web/public/static/locales/zh-TW/common.json @@ -7,6 +7,7 @@ "upgrade_now": "立刻升級", "accept_invitation": "接受邀請", "calcom_explained": "{{appName}} 可為所有人提供預定基礎架構。", + "calcom_explained_new_user": "完成設定您的 {{appName}} 帳號!再完成幾個步驟,就能解決您所有的預定問題。", "have_any_questions": "有問題嗎?我們隨時在此幫助。", "reset_password_subject": "{{appName}}: 重新設置密碼說明", "event_declined_subject": "已拒絕:{{date}} 與 {{title}}", @@ -23,6 +24,8 @@ "rejection_reason_description": "確定要拒絕預約嗎?我們會讓想要進行預約的對方知道。可以在下方提供原因。", "rejection_confirmation": "拒絕預約", "manage_this_event": "管理活動", + "invite_team_member": "邀請團隊成員", + "invite_team_notifcation_badge": "邀請", "your_event_has_been_scheduled": "活動已預定時間", "your_event_has_been_scheduled_recurring": "您的定期活動已預定", "accept_our_license": "接受授權的方式是修改 .env 變數 <1>NEXT_PUBLIC_LICENSE_CONSENT 為 '{{agree}}'。", @@ -410,6 +413,8 @@ "password_updated_successfully": "成功更新密碼", "password_has_been_changed": "密碼已成功更新。", "error_changing_password": "更換密碼時發生錯誤", + "session_timeout_changed": "您的工作階段設定已經成功更新。", + "session_timeout_change_error": "更新工作階段設定時發生錯誤", "something_went_wrong": "有些不對勁。", "something_doesnt_look_right": "有看起來怪怪的東西嗎?", "please_try_again": "請再試一次。", @@ -428,6 +433,7 @@ "password_hint_num": "至少包含 1 個數字", "invalid_password_hint": "密碼長度至少要有 {{passwordLength}} 個字元,其中包含至少一個數字和大小寫字母組合", "incorrect_password": "密碼不正確。", + "incorrect_username_password": "使用者名稱或密碼不正確。", "24_h": "24 小時", "use_setting": "使用設定", "am_pm": "上午/下午", @@ -455,6 +461,7 @@ "slots_load_fail": "無法讀取剩下的時間區間。", "additional_guests": "新增賓客", "your_name": "名字", + "your_full_name": "您的全名", "email_address": "電子郵件位址", "enter_valid_email": "請輸入有效的電子郵件", "location": "地點", @@ -508,6 +515,8 @@ "admin": "管理者", "administrator_user": "管理員使用者", "lets_create_first_administrator_user": "我們來建立第一個管理員使用者吧。", + "admin_user_created": "管理員使用者設定", + "admin_user_created_description": "您已建立管理員使用者。您現在可以登入您的帳號。", "new_member": "新成員", "invite": "邀請", "add_team_members": "新增團隊成員", @@ -657,6 +666,7 @@ "edit_availability": "編輯可預定會議的時間", "configure_availability": "設定開放接受預約的時段。", "copy_times_to": "將時間複製到", + "copy_times_to_tooltip": "將時間複製到…", "change_weekly_schedule": "更改每週行程", "logo": "標誌", "error": "錯誤", @@ -668,6 +678,7 @@ "add_attendees": "加入與會者", "show_advanced_settings": "顯示進階設定", "event_name": "活動名稱", + "event_name_in_calendar": "行事曆中的活動名稱", "event_name_tooltip": "會顯示在行事曆上的名字", "meeting_with_user": "與 {{attendeeName}} 的會議", "additional_inputs": "額外輸入欄", @@ -786,6 +797,7 @@ "number_apps_one": "{{count}} 個應用程式", "number_apps_other": "{{count}} 個應用程式", "trending_apps": "熱門應用程式", + "most_popular": "最熱門", "explore_apps": "{{category}}應用程式", "installed_apps": "已安裝的應用程式", "free_to_use_apps": "免費", @@ -796,12 +808,14 @@ "no_category_apps_description_analytics": "為您的預約頁面加入分析應用程式", "no_category_apps_description_automation": "加入自動化應用程式來使用", "no_category_apps_description_other": "新增任何其他類型的應用程式以完成各種操作", + "no_category_apps_description_web3": "為您的預約頁面加入 web3 應用程式", "installed_app_calendar_description": "設定行事曆來檢查衝突,以避免重複預約。", "installed_app_conferencing_description": "新增您愛用的視訊會議應用程式", "installed_app_payment_description": "設定向客戶收費時要使用的付款處理服務。", "installed_app_analytics_description": "設定要為您的預約頁面使用哪些分析應用程式", "installed_app_other_description": "其他類別的所有已安裝應用程式。", "installed_app_automation_description": "設定要使用哪些自動化應用程式", + "installed_app_web3_description": "設定要為您的預約頁面使用哪些 web3 應用程式", "analytics": "分析", "empty_installed_apps_headline": "沒有已安裝的應用程式", "empty_installed_apps_description": "應用程式使您能夠增強您的工作流程並顯著改善您的日程安排。", @@ -929,6 +943,11 @@ "current_location": "目前地點", "user_phone": "您的電話號碼", "new_location": "新地點", + "session": "工作階段", + "session_description": "控制您的帳號工作階段", + "session_timeout_after": "逾時工作階段前置時間", + "session_timeout": "工作階段逾時", + "session_timeout_description": "在特定時間過後使工作階段無效。", "no_location": "定已義新的地點", "set_location": "設定地點", "update_location": "更新地點", @@ -1072,6 +1091,7 @@ "broken_video_action": "我們無法將 <1>{{location}} 會議連結新增至您已預定的活動。請聯絡您的受邀者或更新行事曆活動來新增詳細資料。您可以<3>變更活動類型的地點,或試著<5>移除應用程式,然後再次重新安裝。", "broken_calendar_action": "我們無法更新您的 <1>{{calendar}}。<2>請檢查您的行事曆設定,或移除您的行事曆然後再次新增", "attendee_name": "與會者姓名", + "scheduler_full_name": "預約人全名", "broken_integration": "整合中斷", "problem_adding_video_link": "新增影片連結時發生問題", "problem_updating_calendar": "更新行事曆時發生問題", @@ -1214,6 +1234,7 @@ "connect_automation_apps": "連至自動化應用程式", "connect_analytics_apps": "連至分析應用程式", "connect_other_apps": "連接其他應用程式", + "connect_web3_apps": "連接 web3 應用程式", "current_step_of_total": "第 {{currentStep}} 步,共 {{maxSteps}} 步", "add_variable": "新增變數", "custom_phone_number": "自訂電話號碼", @@ -1230,6 +1251,7 @@ "to": "至", "workflow_turned_on_successfully": "「{{workflowName}}」工作流程已成功{{offOn}}", "download_responses": "下載回應", + "download_responses_description": "以 CSV 格式下載您表單的所有回應。", "download": "下載", "create_your_first_form": "建立您的第一份表單", "create_your_first_form_description": "您可使用引導表單提出符合條件的問題,並引導至適當的人員或活動類型。", @@ -1271,6 +1293,8 @@ "routing_forms_send_email_owner": "傳送電子郵件給擁有者", "routing_forms_send_email_owner_description": "表單提交後傳送電子郵件給擁有者", "add_new_form": "新增新表單", + "create_your_first_route": "建立第一份引導表單", + "route_to_the_right_person": "根據表單回覆引導至合適的人員", "form_description": "建立您的表單來引導預約者", "copy_link_to_form": "複製連結至表單", "theme": "主題", @@ -1301,6 +1325,7 @@ "password_reset_leading": "如果您稍後還是沒有收到電子郵件,請檢查您輸入的電子郵件地址是否正確,並查看您的垃圾郵件資料夾;若問題持續發生,請聯絡支援團隊。", "password_updated": "密碼已更新!", "pending_payment": "待付款", + "pending_invites": "待回應的邀請", "confirmation_page_rainbow": "使用 Ethereum、Polygon 等的 Token 或 NFT 來以代幣管制您的活動。", "not_on_cal": "不在 {{appName}} 上", "no_calendar_installed": "未安裝行事曆", @@ -1427,6 +1452,9 @@ "disabled_calendar": "如果您安裝了其他行事曆,新的預約就會新增到該行事曆中。如果沒有,請連至新行事曆,這樣才不會錯過任何新的預約。", "enable_apps": "啟用應用程式", "enable_apps_description": "啟用使用者可以與 Cal.com 整合的應用程式", + "purchase_license": "購買授權", + "already_have_key": "我已經有金鑰:", + "already_have_key_suggestion": "請在這裡複製您目前的 CALCOM_LICENSE_KEY 環境變數。", "app_is_enabled": "已啟用 {{appName}}", "app_is_disabled": "已停用 {{appName}}", "keys_have_been_saved": "已儲存金鑰", @@ -1447,6 +1475,7 @@ "individual": "個人", "all_bookings_filter_label": "所有預約", "all_users_filter_label": "所有使用者", + "your_bookings_filter_label": "您的預約", "meeting_url_variable": "會議網址", "meeting_url_info": "活動會議網址", "date_overrides": "日期覆寫", @@ -1485,6 +1514,7 @@ "round_robin_hosts": "輪流主辦人", "minimum_round_robin_hosts_count": "須參加的主辦人數", "hosts": "主辦人", + "upgrade_to_enable_feature": "您需要建立團隊才能啟用此功能。按一下即可建立團隊。", "new_attendee": "新參與者", "awaiting_approval": "正在等待核准", "requires_google_calendar": "此應用程式需要 Google 日曆連結", @@ -1493,9 +1523,49 @@ "continue_to_install_google_calendar": "繼續安裝 Google 日曆", "install_google_meet": "安裝 Google Meet", "install_google_calendar": "安裝 Google 日曆", + "sender_name": "傳送者名稱", + "already_invited": "與會者已獲邀", + "no_recordings_found": "找不到錄製內容", + "reporting": "報表", + "reporting_feature": "查看所有傳入的資料,並以 CSV 檔案格式下載", + "teams_plan_required": "需要團隊方案", + "routing_forms_are_a_great_way": "引導表單可將到來的潛在客戶引導至合適的人員,是絕佳的處理方式。升級至團隊方案即可使用此功能。", + "choose_a_license": "選擇授權", + "choose_license_description": "Cal.com 隨附可供使用的免費 AGPLv3 授權,您可隨時將其中的部分限制升級至 Enterprise 授權。您之後隨時可以升級。", + "license": "授權", + "agplv3_license": "AGPLv3 授權", + "ee_enterprise_license": "“/ee” Enterprise 授權", + "enterprise_booking_fee": "每月 {{enterprise_booking_fee}} 起", + "enterprise_license_includes": "商業使用案例的所有功能", + "no_need_to_keep_your_code_open_source": "程式碼無須保持開源狀態", + "repackage_rebrand_resell": "輕鬆重新包裝、換新品牌和轉售", + "a_vast_suite_of_enterprise_features": "應有盡有的企業版功能套組", + "free_license_fee": "$0.00/月", + "forever_open_and_free": "永遠開放且免費", + "required_to_keep_your_code_open_source": "程式碼須保持開源狀態", + "cannot_repackage_and_resell": "無法輕鬆重新包裝、換新品牌和轉售", + "no_enterprise_features": "沒有企業版功能", + "step_enterprise_license": "Enterprise 授權", + "step_enterprise_license_description": "商業使用案例的所有功能,隨附私人託管、重新包裝、換新品牌和轉售與專屬企業版元件存取權。", + "setup": "設定", + "setup_description": "設定 Cal.com 實例", "configure": "設定", "sso_configuration": "SAML 設定", + "sso_configuration_description": "設定 SAML/OIDC SSO,並允許團隊成員使用 Identity Provider 登入", + "sso_oidc_heading": "OIDC 型 SSO", + "sso_oidc_description": "使用自選的 Identity Provider 設定 OIDC SSO。", + "sso_oidc_configuration_title": "OIDC 設定", + "sso_oidc_configuration_description": "設定 OIDC 連線至您的身分提供者。您可以在身分提供者中找到必要的資訊。", + "sso_oidc_callback_copied": "已複製回呼網址", + "sso_saml_heading": "SAML 型 SSO", + "sso_saml_description": "使用自選的 Identity Provider 設定 SAML SSO。", + "sso_saml_configuration_title": "SAML 設定", "email_no_user_cta": "新增帳號", "change_default_conferencing_app": "設為預設", - "booking_confirmation_failed": "預約確認失敗" + "booking_confirmation_failed": "預約確認失敗", + "add_1_option_per_line": "每行新增 1 個選項", + "select_a_router": "選取引導器", + "add_a_new_route": "新增新引導", + "no_responses_yet": "還沒有回應", + "this_will_be_the_placeholder": "這裡會是預留位置" } From 34d3bdf8684055ab506f0fe9e370b24994dbc832 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 8 Mar 2023 11:36:32 +0100 Subject: [PATCH 058/228] New Crowdin translations by Github Action (#7579) Co-authored-by: Crowdin Bot --- .../public/static/locales/zh-TW/common.json | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/apps/web/public/static/locales/zh-TW/common.json b/apps/web/public/static/locales/zh-TW/common.json index b4553610788648..a15cb78ac34d2e 100644 --- a/apps/web/public/static/locales/zh-TW/common.json +++ b/apps/web/public/static/locales/zh-TW/common.json @@ -1560,9 +1560,59 @@ "sso_saml_heading": "SAML 型 SSO", "sso_saml_description": "使用自選的 Identity Provider 設定 SAML SSO。", "sso_saml_configuration_title": "SAML 設定", + "sso_saml_configuration_description": "設定與您身分提供者的 SAML 連結。您可以在身分提供者中找到必要的資訊。", + "sso_saml_acsurl_copied": "已複製 ACS 網址", + "sso_saml_entityid_copied": "已複製實體 ID", + "sso_connection_created_successfully": "已成功建立 {{connectionType}} 設定", + "sso_connection_deleted_successfully": "已成功刪除 {{connectionType}} 設定", + "delete_sso_configuration": "刪除 {{connectionType}} 設定", + "delete_sso_configuration_confirmation": "是,刪除 {{connectionType}} 設定", + "delete_sso_configuration_confirmation_description": "確定要刪除 {{connectionType}} 設定?使用 {{connectionType}} 登入的團隊成員將再也無法存取 Cal.com。", + "organizer_timezone": "主辦者時區", "email_no_user_cta": "新增帳號", + "email_user_cta": "檢視邀請", + "email_no_user_invite_heading": "您已獲邀加入 {{appName}} 上的團隊", + "email_no_user_invite_subheading": "{{invitedBy}} 已邀請您加入對方在 {{appName}} 上的團隊。{{appName}} 是活動多工排程工具,可讓您和您的團隊無須透過繁複的電子郵件往來就能輕鬆預定會議。", + "email_no_user_invite_steps_intro": "我們會逐步引導您完成幾個簡短的步驟,接著您就能馬上與團隊享受沒有壓力的排程預定功能。", + "email_no_user_step_one": "選擇使用者名稱", + "email_no_user_step_two": "連結行事曆帳號", + "email_no_user_step_three": "設定開放時間", + "email_no_user_step_four": "加入 {{teamName}}", + "email_no_user_signoff": "{{appName}} 團隊祝您排程愉快", + "impersonation_user_tip": "您即將模擬某位使用者,這表示您可以代表對方進行變更。請謹慎操作。", + "available_variables": "可用的變數", + "scheduler": "{Scheduler}", + "recommended_next_steps": "建議的後續步驟", + "create_a_managed_event": "建立受管活動類型", + "meetings_are_better_with_the_right": "找對團隊成員開會,開會更有效率。立即邀請他們。", + "collective_or_roundrobin": "集體或輪流制", + "book_your_team_members": "使用集體活動一併預約所有團隊成員,或是使用輪流制循環找出合適的人員。", + "default_app_link_title": "設定預設應用程式連結", + "default_app_link_description": "設定預設應用程式連結,即可讓所有全新建立的活動類型使用您設定的應用程式連結。", "change_default_conferencing_app": "設為預設", + "under_maintenance": "維修停機中", + "under_maintenance_description": "{{appName}} 團隊正在執行預定維修。如有任何疑問,請聯絡支援團隊。", + "event_type_seats": "{{numberOfSeats}} 個座位", + "booking_with_payment_cancelled": "無法再為此活動付費", + "booking_with_payment_cancelled_already_paid": "此預約付款的退款已在辦理中。", + "booking_with_payment_cancelled_refunded": "此預約付款已退款。", "booking_confirmation_failed": "預約確認失敗", + "get_started_zapier_templates": "開始使用 Zapier 範本", + "a_routing_form": "引導表單", + "form_description_placeholder": "表單說明", + "keep_me_connected_with_form": "將我與此表單保持連結", + "fields_in_form_duplicated": "目前複製的引導工具和表單欄位如有任何變更,也會反映在複本中。", + "form_deleted": "已刪除表單", + "delete_form": "刪除表單", + "delete_form_action": "是,刪除表單", + "delete_form_confirmation": "確定要刪除此表單嗎?您分享此連結的任何使用者,將無法再使用此表單預約。此外,所有相關的回應也會遭到刪除。", + "typeform_redirect_url_copied": "已複製 Typeform 重新導向網址!您可以在 Typeform 表單中設定網址。", + "modifications_in_fields_warning": "欄位與以下表單的引導路由如有任何修改之處,也會反映在此表單中。", + "connected_forms": "連結的表單", + "form_modifications_warning": "您在這裡修改欄位或引導路由時,以下表單也會受到影響。", + "responses_collection_waiting_description": "請稍微等待系統回收答覆。您也可以自行提交表單。", + "this_is_what_your_users_would_see": "以下是您的使用者會看到的內容", + "identifies_name_field": "按照此名稱辨識欄位。", "add_1_option_per_line": "每行新增 1 個選項", "select_a_router": "選取引導器", "add_a_new_route": "新增新引導", From d28c914d3c2c39b57bdeb1ae8a2b14fc04a87a4c Mon Sep 17 00:00:00 2001 From: Nafees Nazik <84864519+G3root@users.noreply.github.com> Date: Wed, 8 Mar 2023 16:29:06 +0530 Subject: [PATCH 059/228] Fix modal z index issue in settings (#7578) * feat: add z-index to modal * feat: reduce z-index --------- Co-authored-by: Peer Richelsen --- packages/features/settings/layouts/SettingsLayout.tsx | 2 +- packages/ui/components/dialog/Dialog.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/features/settings/layouts/SettingsLayout.tsx b/packages/features/settings/layouts/SettingsLayout.tsx index 2cff9d5e59102f..f3ee94812e8b8c 100644 --- a/packages/features/settings/layouts/SettingsLayout.tsx +++ b/packages/features/settings/layouts/SettingsLayout.tsx @@ -174,7 +174,7 @@ const SettingsSidebarContainer = ({ return (