From 69ca57e45a36de3409b01e75cebe8074583ed254 Mon Sep 17 00:00:00 2001 From: Lauris Skraucis Date: Fri, 25 Oct 2024 14:55:29 +0200 Subject: [PATCH] fix: v2 event types booking fields & enable booker atom google-meet location (#17321) * fix: v2 phone system booking field * feat: atom support google-meet * feat: unknown booking field return type * tests * bump platform libraries * driveby: improve create-booking-input --- apps/api/v2/package.json | 2 +- .../event-types.controller.e2e-spec.ts | 81 +- .../services/output-event-types.service.ts | 33 +- apps/api/v2/swagger/documentation.json | 7 +- .../transformers/api-to-internal/locations.ts | 6 +- .../internal-to-api/booking-fields.ts | 386 +++--- .../internal-to-api/internal-to-api.spec.ts | 67 + .../transformers/internal/locations.ts | 2 +- .../transformApiEventTypeForAtom.ts | 6 +- packages/platform/libraries/index.ts | 1 + .../inputs/create-booking-input.pipe.ts | 2 +- .../2024-08-13/inputs/create-booking.input.ts | 80 +- .../inputs/booking-fields.input.ts | 2 +- .../inputs/locations.input.ts | 8 +- .../outputs/booking-fields.output.ts | 71 +- yarn.lock | 1212 +---------------- 16 files changed, 496 insertions(+), 1470 deletions(-) diff --git a/apps/api/v2/package.json b/apps/api/v2/package.json index d810097157..7777b1c49c 100644 --- a/apps/api/v2/package.json +++ b/apps/api/v2/package.json @@ -28,7 +28,7 @@ "dependencies": { "@calcom/platform-constants": "*", "@calcom/platform-enums": "*", - "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.52", + "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.53", "@calcom/platform-libraries-0.0.2": "npm:@calcom/platform-libraries@0.0.2", "@calcom/platform-types": "*", "@calcom/platform-utils": "*", diff --git a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/controllers/event-types.controller.e2e-spec.ts b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/controllers/event-types.controller.e2e-spec.ts index 574edd89c2..ac5b0f1e17 100644 --- a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/controllers/event-types.controller.e2e-spec.ts +++ b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/controllers/event-types.controller.e2e-spec.ts @@ -915,7 +915,7 @@ describe("Event types Endpoints", () => { }); }); - describe("Handle legacy event-types booking fields", () => { + describe("Handle event-types booking fields", () => { let app: INestApplication; let oAuthClient: PlatformOAuthClient; @@ -940,6 +940,7 @@ describe("Event types Endpoints", () => { { isDefault: true, required: false, slug: "notes", type: "textarea" }, { isDefault: true, required: false, slug: "guests", type: "multiemail" }, { isDefault: true, required: false, slug: "rescheduleReason", type: "textarea" }, + { isDefault: true, type: "phone", slug: "attendeePhoneNumber", required: false }, ]; beforeAll(async () => { @@ -1092,6 +1093,21 @@ describe("Event types Endpoints", () => { defaultLabel: "reason_for_reschedule", defaultPlaceholder: "reschedule_placeholder", }, + { + name: "attendeePhoneNumber", + type: "phone", + hidden: true, + sources: [ + { + id: "default", + type: "default", + label: "Default", + }, + ], + editable: "system-but-optional", + required: false, + defaultLabel: "phone_number", + }, ], }; const legacyEventType = await eventTypesRepositoryFixture.create(legacyEventTypeInput, user.id); @@ -1207,6 +1223,21 @@ describe("Event types Endpoints", () => { defaultLabel: "reason_for_reschedule", defaultPlaceholder: "reschedule_placeholder", }, + { + name: "attendeePhoneNumber", + type: "phone", + hidden: true, + sources: [ + { + id: "default", + type: "default", + label: "Default", + }, + ], + editable: "system-but-optional", + required: false, + defaultLabel: "phone_number", + }, ], }; const legacyEventType = await eventTypesRepositoryFixture.create(legacyEventTypeInput, user.id); @@ -1234,6 +1265,54 @@ describe("Event types Endpoints", () => { }); }); + it("should return event type with unknown bookingField", async () => { + const unknownSystemField = { + name: "unknown-whatever", + type: "unknown-whatever", + label: "your team", + sources: [ + { + id: "user", + type: "user", + label: "User", + fieldRequired: true, + }, + ], + editable: "user", + required: true, + placeholder: "FC Barcelona", + }; + + const eventTypeInput = { + title: "unknown field event type two", + description: "unknown field event type description two", + length: 40, + hidden: false, + slug: "unknown-field-type-two", + locations: [], + schedulingType: SchedulingType.ROUND_ROBIN, + bookingFields: [unknownSystemField], + }; + const eventType = await eventTypesRepositoryFixture.create(eventTypeInput, user.id); + + return request(app.getHttpServer()) + .get(`/api/v2/event-types/${eventType.id}`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_06_14) + .expect(200) + .then(async (response) => { + const responseBody: ApiSuccessResponse = response.body; + const fetchedEventType = responseBody.data; + + expect(fetchedEventType.bookingFields).toEqual([ + { + type: "unknown", + slug: "unknown", + bookingField: JSON.stringify(unknownSystemField), + }, + ]); + }); + }); + afterAll(async () => { await oauthClientRepositoryFixture.delete(oAuthClient.id); await teamRepositoryFixture.delete(organization.id); diff --git a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/output-event-types.service.ts b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/output-event-types.service.ts index ea81de0fed..adb3e8265e 100644 --- a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/output-event-types.service.ts +++ b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/output-event-types.service.ts @@ -8,7 +8,6 @@ import { transformBookingFieldsInternalToApi, parseRecurringEvent, InternalLocationSchema, - BookingFieldsSchema, SystemField, CustomField, parseBookingLimit, @@ -21,6 +20,7 @@ import { parseEventTypeColor, transformSeatsInternalToApi, InternalLocation, + BookingFieldSchema, } from "@calcom/platform-libraries"; import { TransformFutureBookingsLimitSchema_2024_06_14, @@ -28,6 +28,7 @@ import { NoticeThresholdTransformedSchema, EventTypeOutput_2024_06_14, OutputUnknownLocation_2024_06_14, + OutputUnknownBookingField_2024_06_14, } from "@calcom/platform-types"; type EventTypeRelations = { @@ -120,7 +121,7 @@ export class OutputEventTypesService_2024_06_14 { const locations = this.transformLocations(databaseEventType.locations); const customName = databaseEventType?.eventName ?? undefined; const bookingFields = databaseEventType.bookingFields - ? this.transformBookingFields(BookingFieldsSchema.parse(databaseEventType.bookingFields)) + ? this.transformBookingFields(databaseEventType.bookingFields) : []; const recurrence = this.transformRecurringEvent(databaseEventType.recurringEvent); const metadata = this.transformMetadata(databaseEventType.metadata) || {}; @@ -196,14 +197,14 @@ export class OutputEventTypesService_2024_06_14 { const knownLocations: InternalLocation[] = []; const unknownLocations: OutputUnknownLocation_2024_06_14[] = []; - const parsedLocations = locations.map((location: any) => { + for (const location of locations) { const result = InternalLocationSchema.safeParse(location); if (result.success) { - return knownLocations.push(result.data); + knownLocations.push(result.data); } else { - return unknownLocations.push({ type: "unknown", location: JSON.stringify(location) }); + unknownLocations.push({ type: "unknown", location: JSON.stringify(location) }); } - }); + } return [...transformLocationsInternalToApi(knownLocations), ...unknownLocations]; } @@ -216,10 +217,26 @@ export class OutputEventTypesService_2024_06_14 { }; } - transformBookingFields(bookingFields: (SystemField | CustomField)[] | null) { + transformBookingFields(bookingFields: any) { if (!bookingFields) return []; - return transformBookingFieldsInternalToApi(bookingFields); + const knownBookingFields: (SystemField | CustomField)[] = []; + const unknownBookingFields: OutputUnknownBookingField_2024_06_14[] = []; + + for (const bookingField of bookingFields) { + const result = BookingFieldSchema.safeParse(bookingField); + if (result.success) { + knownBookingFields.push(result.data); + } else { + unknownBookingFields.push({ + type: "unknown", + slug: "unknown", + bookingField: JSON.stringify(bookingField), + }); + } + } + + return [...transformBookingFieldsInternalToApi(knownBookingFields), ...unknownBookingFields]; } transformRecurringEvent(recurringEvent: any) { diff --git a/apps/api/v2/swagger/documentation.json b/apps/api/v2/swagger/documentation.json index fe9dea42fe..908bcd52fd 100644 --- a/apps/api/v2/swagger/documentation.json +++ b/apps/api/v2/swagger/documentation.json @@ -5908,7 +5908,8 @@ "type": "string", "example": "cal-video", "enum": [ - "cal-video" + "cal-video", + "google-meet" ] } }, @@ -7067,7 +7068,7 @@ "link": { "type": "string" }, - "credentialdId": { + "credentialId": { "type": "number" } }, @@ -12740,7 +12741,7 @@ }, "bookingFieldsResponses": { "type": "object", - "description": "Booking field responses.", + "description": "Booking field responses consisting of an object with booking field slug as keys and user response as values.", "example": { "customField": "customValue" } diff --git a/packages/lib/event-types/transformers/api-to-internal/locations.ts b/packages/lib/event-types/transformers/api-to-internal/locations.ts index 556fc58802..5ae02b6039 100644 --- a/packages/lib/event-types/transformers/api-to-internal/locations.ts +++ b/packages/lib/event-types/transformers/api-to-internal/locations.ts @@ -11,8 +11,12 @@ import type { OrganizerPhoneLocation, } from "../internal/locations"; -const apiToInternalintegrationsMapping: Record = { +const apiToInternalintegrationsMapping: Record< + Integration_2024_06_14, + "integrations:daily" | "integrations:google:meet" +> = { "cal-video": "integrations:daily", + "google-meet": "integrations:google:meet", }; export function transformLocationsApiToInternal(inputLocations: InputLocation_2024_06_14[] | undefined) { diff --git a/packages/lib/event-types/transformers/internal-to-api/booking-fields.ts b/packages/lib/event-types/transformers/internal-to-api/booking-fields.ts index 00e8e7bdfa..e0de24910e 100644 --- a/packages/lib/event-types/transformers/internal-to-api/booking-fields.ts +++ b/packages/lib/event-types/transformers/internal-to-api/booking-fields.ts @@ -5,6 +5,7 @@ import type { DefaultFieldOutput_2024_06_14, CustomFieldOutput_2024_06_14, } from "@calcom/platform-types"; +import type { OutputUnknownBookingField_2024_06_14 } from "@calcom/platform-types/event-types/event-types_2024_06_14/outputs/booking-fields.output"; export function transformBookingFieldsInternalToApi( databaseBookingFields: (SystemField | CustomField)[] @@ -17,186 +18,201 @@ export function transformBookingFieldsInternalToApi( (field): field is CustomField => field.editable === "user" ); - const responseDefaultFields: DefaultFieldOutput_2024_06_14[] = defaultFields.map((field) => { - switch (field.name) { - case "name": - return { - isDefault: true, - type: field.type, - slug: field.name, - required: field.required, - label: field.label, - placeholder: field.placeholder, - disableOnPrefill: field.disableOnPrefill, - }; - case "email": - return { - isDefault: true, - type: field.type, - slug: field.name, - required: field.required, - label: field.label, - placeholder: field.placeholder, - disableOnPrefill: field.disableOnPrefill, - }; - case "location": - return { - isDefault: true, - type: field.type, - slug: field.name, - required: field.required, - }; - case "rescheduleReason": - return { - isDefault: true, - type: field.type, - slug: field.name, - required: field.required, - }; - case "title": - return { - isDefault: true, - type: field.type, - slug: field.name, - required: field.required, - }; - case "notes": - return { - isDefault: true, - type: field.type, - slug: field.name, - required: field.required, - }; - case "guests": - return { - isDefault: true, - type: field.type, - slug: field.name, - required: field.required, - }; - default: - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - throw new Error(`Unsupported default booking field '${field.name}'.`); - } - }); + const responseDefaultFields: (DefaultFieldOutput_2024_06_14 | OutputUnknownBookingField_2024_06_14)[] = + defaultFields.map((field) => { + switch (field.name) { + case "name": + return { + isDefault: true, + type: field.type, + slug: field.name, + required: field.required, + label: field.label, + placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, + }; + case "email": + return { + isDefault: true, + type: field.type, + slug: field.name, + required: field.required, + label: field.label, + placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, + }; + case "location": + return { + isDefault: true, + type: field.type, + slug: field.name, + required: field.required, + }; + case "rescheduleReason": + return { + isDefault: true, + type: field.type, + slug: field.name, + required: field.required, + }; + case "title": + return { + isDefault: true, + type: field.type, + slug: field.name, + required: field.required, + }; + case "notes": + return { + isDefault: true, + type: field.type, + slug: field.name, + required: field.required, + }; + case "guests": + return { + isDefault: true, + type: field.type, + slug: field.name, + required: field.required, + }; + case "attendeePhoneNumber": + return { + isDefault: true, + type: field.type, + slug: field.name, + required: field.required, + }; + default: + return { + type: "unknown", + slug: "unknown", + bookingField: JSON.stringify(field), + }; + } + }); - const responseCustomFields: CustomFieldOutput_2024_06_14[] = customFields.map((field) => { - switch (field.type) { - case "phone": - return { - isDefault: false, - type: field.type, - slug: field.name, - label: field.label, - required: field.required, - placeholder: field.placeholder, - disableOnPrefill: field.disableOnPrefill, - }; - case "address": - return { - isDefault: false, - type: field.type, - slug: field.name, - label: field.label, - required: field.required, - placeholder: field.placeholder, - disableOnPrefill: field.disableOnPrefill, - }; - case "text": - return { - isDefault: false, - type: field.type, - slug: field.name, - label: field.label, - required: field.required, - placeholder: field.placeholder, - disableOnPrefill: field.disableOnPrefill, - }; - case "number": - return { - isDefault: false, - type: field.type, - slug: field.name, - label: field.label, - required: field.required, - placeholder: field.placeholder, - disableOnPrefill: field.disableOnPrefill, - }; - case "textarea": - return { - isDefault: false, - type: field.type, - slug: field.name, - label: field.label, - required: field.required, - placeholder: field.placeholder, - disableOnPrefill: field.disableOnPrefill, - }; - case "multiemail": - return { - isDefault: false, - type: field.type, - slug: field.name, - label: field.label, - required: field.required, - placeholder: field.placeholder, - disableOnPrefill: field.disableOnPrefill, - }; - case "boolean": - return { - isDefault: false, - type: field.type, - slug: field.name, - label: field.label, - required: field.required, - disableOnPrefill: field.disableOnPrefill, - }; - case "select": - return { - isDefault: false, - type: field.type, - slug: field.name, - label: field.label, - required: field.required, - placeholder: field.placeholder, - options: field.options ? field.options.map((option) => option.value) : [], - disableOnPrefill: field.disableOnPrefill, - }; - case "multiselect": - return { - isDefault: false, - type: field.type, - slug: field.name, - label: field.label, - required: field.required, - options: field.options ? field.options?.map((option) => option.value) : [], - disableOnPrefill: field.disableOnPrefill, - }; - case "checkbox": - return { - isDefault: false, - type: field.type, - slug: field.name, - label: field.label, - required: field.required, - options: field.options ? field.options?.map((option) => option.value) : [], - disableOnPrefill: field.disableOnPrefill, - }; - case "radio": - return { - isDefault: false, - type: field.type, - slug: field.name, - label: field.label, - required: field.required, - options: field.options ? field.options?.map((option) => option.value) : [], - disableOnPrefill: field.disableOnPrefill, - }; - default: - throw new Error(`Unsupported booking field type '${field.type}'.`); - } - }); + const responseCustomFields: (CustomFieldOutput_2024_06_14 | OutputUnknownBookingField_2024_06_14)[] = + customFields.map((field) => { + switch (field.type) { + case "phone": + return { + isDefault: false, + type: field.type, + slug: field.name, + label: field.label, + required: field.required, + placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, + }; + case "address": + return { + isDefault: false, + type: field.type, + slug: field.name, + label: field.label, + required: field.required, + placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, + }; + case "text": + return { + isDefault: false, + type: field.type, + slug: field.name, + label: field.label, + required: field.required, + placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, + }; + case "number": + return { + isDefault: false, + type: field.type, + slug: field.name, + label: field.label, + required: field.required, + placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, + }; + case "textarea": + return { + isDefault: false, + type: field.type, + slug: field.name, + label: field.label, + required: field.required, + placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, + }; + case "multiemail": + return { + isDefault: false, + type: field.type, + slug: field.name, + label: field.label, + required: field.required, + placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, + }; + case "boolean": + return { + isDefault: false, + type: field.type, + slug: field.name, + label: field.label, + required: field.required, + disableOnPrefill: field.disableOnPrefill, + }; + case "select": + return { + isDefault: false, + type: field.type, + slug: field.name, + label: field.label, + required: field.required, + placeholder: field.placeholder, + options: field.options ? field.options.map((option) => option.value) : [], + disableOnPrefill: field.disableOnPrefill, + }; + case "multiselect": + return { + isDefault: false, + type: field.type, + slug: field.name, + label: field.label, + required: field.required, + options: field.options ? field.options?.map((option) => option.value) : [], + disableOnPrefill: field.disableOnPrefill, + }; + case "checkbox": + return { + isDefault: false, + type: field.type, + slug: field.name, + label: field.label, + required: field.required, + options: field.options ? field.options?.map((option) => option.value) : [], + disableOnPrefill: field.disableOnPrefill, + }; + case "radio": + return { + isDefault: false, + type: field.type, + slug: field.name, + label: field.label, + required: field.required, + options: field.options ? field.options?.map((option) => option.value) : [], + disableOnPrefill: field.disableOnPrefill, + }; + default: + return { + type: "unknown", + slug: "unknown", + bookingField: JSON.stringify(field), + }; + } + }); return [...responseDefaultFields, ...responseCustomFields]; } @@ -316,6 +332,12 @@ const NameSystemFieldSchema = SystemFieldSchema.extend({ .optional(), }); +const PhoneSystemFieldSchema = SystemFieldSchema.extend({ + name: z.literal("attendeePhoneNumber"), + type: z.literal("phone"), + required: z.boolean(), +}); + const EmailSystemFieldSchema = SystemFieldSchema.extend({ name: z.literal("email"), type: z.literal("email"), @@ -359,10 +381,12 @@ type LocationReasonSystemField = z.infer type TitleSystemField = z.infer; type NotesSystemField = z.infer; type GuestsSystemField = z.infer; +type PhoneSystemField = z.infer; export type SystemField = | NameSystemField | EmailSystemField + | PhoneSystemField | RescheduleReasonSystemField | LocationReasonSystemField | TitleSystemField @@ -374,6 +398,7 @@ export type CustomField = z.infer; const SystemFieldsSchema = z.union([ NameSystemFieldSchema, EmailSystemFieldSchema, + PhoneSystemFieldSchema, LocationReasonSystemFieldSchema, RescheduleReasonSystemFieldSchema, TitleSystemFieldSchema, @@ -381,7 +406,8 @@ const SystemFieldsSchema = z.union([ GuestsSystemFieldSchema, ]); -export const BookingFieldsSchema = z.array(z.union([CustomFieldsSchema, SystemFieldsSchema])); +export const BookingFieldSchema = z.union([CustomFieldsSchema, SystemFieldsSchema]); +export const BookingFieldsSchema = z.array(BookingFieldSchema); export const systemBeforeFieldName: NameSystemField = { type: "name", diff --git a/packages/lib/event-types/transformers/internal-to-api/internal-to-api.spec.ts b/packages/lib/event-types/transformers/internal-to-api/internal-to-api.spec.ts index b2fc18ef9b..1ca757027d 100644 --- a/packages/lib/event-types/transformers/internal-to-api/internal-to-api.spec.ts +++ b/packages/lib/event-types/transformers/internal-to-api/internal-to-api.spec.ts @@ -776,6 +776,73 @@ describe("transformBookingFieldsInternalToApi", () => { expect(result).toEqual(expectedOutput); }); + + it("should transform system phone field", () => { + const transformedField: SystemField[] = [ + { + name: "attendeePhoneNumber", + type: "phone", + hidden: true, + sources: [ + { + id: "default", + type: "default", + label: "Default", + }, + ], + editable: "system-but-optional", + required: false, + defaultLabel: "phone_number", + }, + ]; + + const expectedOutput = [ + { + isDefault: true, + type: "phone", + slug: "attendeePhoneNumber", + required: false, + }, + ]; + + const result = transformBookingFieldsInternalToApi(transformedField); + + expect(result).toEqual(expectedOutput); + }); + + it("should transform unknown field", () => { + const transformedField = [ + { + name: "blabla", + type: "blabla", + hidden: true, + sources: [ + { + id: "default", + type: "default", + label: "Default", + }, + ], + editable: "system-but-optional", + required: false, + defaultLabel: "phone_number", + }, + ]; + + const expectedOutput = [ + { + type: "unknown", + slug: "unknown", + bookingField: JSON.stringify(transformedField[0]), + }, + ]; + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const result = transformBookingFieldsInternalToApi(transformedField); + + expect(result).toEqual(expectedOutput); + }); }); describe("transformIntervalLimitsInternalToApi", () => { diff --git a/packages/lib/event-types/transformers/internal/locations.ts b/packages/lib/event-types/transformers/internal/locations.ts index 55513c0985..3bcdf6dd98 100644 --- a/packages/lib/event-types/transformers/internal/locations.ts +++ b/packages/lib/event-types/transformers/internal/locations.ts @@ -2,11 +2,11 @@ import { z } from "zod"; const integrationsApiAvailable = { "cal-video": z.literal("integrations:daily"), + "google-meet": z.literal("integrations:google:meet"), }; // note(Lauris): these are read only aka they exist in database and are to be returned by a READ operation const integrationsApiUnavailable = { - "google-meet": z.literal("integrations:google:meet"), zoom: z.literal("integrations:zoom"), "whereby-video": z.literal("integrations:whereby_video"), "whatsapp-video": z.literal("integrations:whatsapp_video"), diff --git a/packages/platform/atoms/event-types/atom-api-transformers/transformApiEventTypeForAtom.ts b/packages/platform/atoms/event-types/atom-api-transformers/transformApiEventTypeForAtom.ts index 0aa7a6f661..ebda1e2eb7 100644 --- a/packages/platform/atoms/event-types/atom-api-transformers/transformApiEventTypeForAtom.ts +++ b/packages/platform/atoms/event-types/atom-api-transformers/transformApiEventTypeForAtom.ts @@ -230,6 +230,8 @@ function getLocations(locations: EventTypeOutput_2024_06_14["locations"]) { function isAtomSupportedLocation( location: EventTypeOutput_2024_06_14["locations"][number] ): location is InputLocation_2024_06_14 { + const supportedIntegrations = ["cal-video", "google-meet"]; + return ( location.type === "address" || location.type === "attendeeAddress" || @@ -237,7 +239,7 @@ function isAtomSupportedLocation( location.type === "phone" || location.type === "attendeePhone" || location.type === "attendeeDefined" || - (location.type === "integration" && location.integration === "cal-video") + (location.type === "integration" && supportedIntegrations.includes(location.integration)) ); } @@ -291,7 +293,7 @@ function getBookingFields( function isCustomField( field: EventTypeOutput_2024_06_14["bookingFields"][number] ): field is CustomFieldOutput_2024_06_14 { - return !field.isDefault; + return field.type !== "unknown" && !field.isDefault; } function isDefaultEditableField( diff --git a/packages/platform/libraries/index.ts b/packages/platform/libraries/index.ts index fff5d460d4..83d97aa8e8 100644 --- a/packages/platform/libraries/index.ts +++ b/packages/platform/libraries/index.ts @@ -129,6 +129,7 @@ export { InternalLocationsSchema, InternalLocationSchema, BookingFieldsSchema, + BookingFieldSchema, // note(Lauris): constants systemBeforeFieldName, systemBeforeFieldEmail, diff --git a/packages/platform/types/bookings/2024-08-13/inputs/create-booking-input.pipe.ts b/packages/platform/types/bookings/2024-08-13/inputs/create-booking-input.pipe.ts index e524531eab..ad9665b46d 100644 --- a/packages/platform/types/bookings/2024-08-13/inputs/create-booking-input.pipe.ts +++ b/packages/platform/types/bookings/2024-08-13/inputs/create-booking-input.pipe.ts @@ -102,7 +102,7 @@ export class CreateBookingInputPipe implements PipeTransform { private isRecurringBookingInput( value: CreateBookingInput ): value is CreateRecurringBookingInput_2024_08_13 { - return value.hasOwnProperty("eventTypeId"); + return value.hasOwnProperty("recurrenceCount"); } private isInstantBookingInput(value: CreateBookingInput): value is CreateInstantBookingInput_2024_08_13 { diff --git a/packages/platform/types/bookings/2024-08-13/inputs/create-booking.input.ts b/packages/platform/types/bookings/2024-08-13/inputs/create-booking.input.ts index 88a91f24bf..185598d773 100644 --- a/packages/platform/types/bookings/2024-08-13/inputs/create-booking.input.ts +++ b/packages/platform/types/bookings/2024-08-13/inputs/create-booking.input.ts @@ -145,85 +145,7 @@ export class CreateInstantBookingInput_2024_08_13 extends CreateBookingInput_202 instant!: boolean; } -export class CreateRecurringBookingInput_2024_08_13 { - @ApiProperty({ - type: String, - description: "The start time of the booking in ISO 8601 format in UTC timezone.", - example: "2024-08-13T09:00:00Z", - }) - @IsDateString() - start!: string; - - @ApiProperty({ - type: Number, - description: "The ID of the event type that is booked.", - example: 123, - }) - @IsInt() - eventTypeId!: number; - - @ApiProperty({ - type: Attendee, - description: "The attendee's details.", - }) - @ValidateNested() - @Type(() => Attendee) - attendee!: Attendee; - - @ApiProperty({ - type: [String], - description: "An optional list of guest emails attending the event.", - example: ["guest1@example.com", "guest2@example.com"], - required: false, - }) - @IsArray() - @IsString({ each: true }) - @IsOptional() - guests?: string[]; - - @ApiProperty({ - type: String, - description: - "Deprecated - use 'location' instead. Meeting URL just for this booking. Displayed in email and calendar event. If not provided then cal video link will be generated.", - example: "https://example.com/meeting", - required: false, - deprecated: true, - }) - @IsUrl() - @IsOptional() - meetingUrl?: string; - - @ApiProperty({ - type: String, - description: "Location for this booking. Displayed in email and calendar event.", - example: "https://example.com/meeting", - required: false, - }) - @IsUrl() - @IsOptional() - location?: string; - - // todo(Lauris): expose after refactoring metadata https://app.campsite.co/cal/posts/zysq8w9rwm9c - // @ApiProperty({ - // type: Object, - // description: "Optional metadata for the booking.", - // example: { key: "value" }, - // required: false, - // }) - // @IsObject() - // @IsOptional() - // metadata!: Record; - - @ApiProperty({ - type: Object, - description: "Booking field responses.", - example: { customField: "customValue" }, - required: false, - }) - @IsObject() - @IsOptional() - bookingFieldsResponses?: Record; - +export class CreateRecurringBookingInput_2024_08_13 extends CreateBookingInput_2024_08_13 { @ApiPropertyOptional({ type: Number, description: `The number of recurrences. If not provided then event type recurrence count will be used. Can't be more than diff --git a/packages/platform/types/event-types/event-types_2024_06_14/inputs/booking-fields.input.ts b/packages/platform/types/event-types/event-types_2024_06_14/inputs/booking-fields.input.ts index f844f77307..af35f03fe1 100644 --- a/packages/platform/types/event-types/event-types_2024_06_14/inputs/booking-fields.input.ts +++ b/packages/platform/types/event-types/event-types_2024_06_14/inputs/booking-fields.input.ts @@ -521,7 +521,7 @@ class InputBookingFieldValidator_2024_06_14 implements ValidatorConstraintInterf boolean: BooleanFieldInput_2024_06_14, }; - private reservedSystemSlugs = ["location", "rescheduleReason"]; + private reservedSystemSlugs = ["location", "rescheduleReason", "attendeePhoneNumber"]; async validate(bookingFields: { type: string; slug: string }[]) { if (!Array.isArray(bookingFields)) { diff --git a/packages/platform/types/event-types/event-types_2024_06_14/inputs/locations.input.ts b/packages/platform/types/event-types/event-types_2024_06_14/inputs/locations.input.ts index ec149f0803..8995f149bd 100644 --- a/packages/platform/types/event-types/event-types_2024_06_14/inputs/locations.input.ts +++ b/packages/platform/types/event-types/event-types_2024_06_14/inputs/locations.input.ts @@ -43,16 +43,16 @@ export class InputLinkLocation_2024_06_14 { public!: boolean; } -const integrations = ["cal-video"] as const; -export type Integration_2024_06_14 = (typeof integrations)[number]; +export const supportedIntegrations = ["cal-video", "google-meet"] as const; +export type Integration_2024_06_14 = (typeof supportedIntegrations)[number]; export class InputIntegrationLocation_2024_06_14 { @IsIn(inputLocations) @DocsProperty({ example: "integration", description: "only allowed value for type is `integration`" }) type!: "integration"; - @IsIn(integrations) - @DocsProperty({ example: integrations[0], enum: integrations }) + @IsIn(supportedIntegrations) + @DocsProperty({ example: supportedIntegrations[0], enum: supportedIntegrations }) integration!: Integration_2024_06_14; } diff --git a/packages/platform/types/event-types/event-types_2024_06_14/outputs/booking-fields.output.ts b/packages/platform/types/event-types/event-types_2024_06_14/outputs/booking-fields.output.ts index d8a2555ea2..5efb1b007e 100644 --- a/packages/platform/types/event-types/event-types_2024_06_14/outputs/booking-fields.output.ts +++ b/packages/platform/types/event-types/event-types_2024_06_14/outputs/booking-fields.output.ts @@ -205,6 +205,32 @@ export class GuestsDefaultFieldOutput_2024_06_14 { required!: false; } +export class PhoneDefaultFieldOutput_2024_06_14 { + @IsBoolean() + @DocsProperty({ + description: "This property is always true because it's a default field", + example: true, + default: true, + }) + isDefault = true; + + @IsString() + @DocsProperty({ + default: "attendeePhoneNumber", + }) + slug!: "attendeePhoneNumber"; + + @IsString() + @DocsProperty({ + default: "phone", + }) + type!: "phone"; + + @IsBoolean() + @DocsProperty() + required!: boolean; +} + export class PhoneFieldOutput_2024_06_14 extends PhoneFieldInput_2024_06_14 { @IsBoolean() @DocsProperty({ @@ -315,6 +341,17 @@ export class BooleanFieldOutput_2024_06_14 extends BooleanFieldInput_2024_06_14 isDefault = false; } +export class OutputUnknownBookingField_2024_06_14 { + @DocsProperty({ example: "unknown", description: "only allowed value for type is `unknown`" }) + type!: "unknown"; + + @DocsProperty({ example: "unknown", description: "only allowed value for type is `unknown`" }) + slug!: "unknown"; + + @IsString() + bookingField!: string; +} + export type DefaultFieldOutput_2024_06_14 = | NameDefaultFieldOutput_2024_06_14 | EmailDefaultFieldOutput_2024_06_14 @@ -322,7 +359,8 @@ export type DefaultFieldOutput_2024_06_14 = | RescheduleReasonDefaultFieldOutput_2024_06_14 | TitleDefaultFieldOutput_2024_06_14 | NotesDefaultFieldOutput_2024_06_14 - | GuestsDefaultFieldOutput_2024_06_14; + | GuestsDefaultFieldOutput_2024_06_14 + | PhoneDefaultFieldOutput_2024_06_14; export type CustomFieldOutput_2024_06_14 = | PhoneFieldOutput_2024_06_14 @@ -337,7 +375,10 @@ export type CustomFieldOutput_2024_06_14 = | RadioGroupFieldOutput_2024_06_14 | BooleanFieldOutput_2024_06_14; -export type OutputBookingField_2024_06_14 = DefaultFieldOutput_2024_06_14 | CustomFieldOutput_2024_06_14; +export type OutputBookingField_2024_06_14 = + | DefaultFieldOutput_2024_06_14 + | CustomFieldOutput_2024_06_14 + | OutputUnknownBookingField_2024_06_14; @ValidatorConstraint({ async: true }) class OutputBookingFieldValidator_2024_06_14 implements ValidatorConstraintInterface { @@ -349,6 +390,7 @@ class OutputBookingFieldValidator_2024_06_14 implements ValidatorConstraintInter title: TitleDefaultFieldOutput_2024_06_14, notes: NotesDefaultFieldOutput_2024_06_14, guests: GuestsDefaultFieldOutput_2024_06_14, + attendeePhoneNumber: PhoneDefaultFieldOutput_2024_06_14, }; private customOutputTypeMap: { [key: string]: new () => CustomFieldOutput_2024_06_14 } = { @@ -390,9 +432,13 @@ class OutputBookingFieldValidator_2024_06_14 implements ValidatorConstraintInter `Duplicate bookingFields slug '${slug}' found. All bookingFields slugs must be unique.` ); } - slugs.push(slug); + if (slug !== "unknown") { + slugs.push(slug); + } - if (this.isDefaultField(field)) { + if (this.isUnknownField(field)) { + await this.validateUnknownField(field); + } else if (this.isDefaultField(field)) { await this.validateDefaultField(field); } else { await this.validateCustomField(field); @@ -403,13 +449,26 @@ class OutputBookingFieldValidator_2024_06_14 implements ValidatorConstraintInter } isDefaultField(field: OutputBookingField_2024_06_14): field is DefaultFieldOutput_2024_06_14 { - return field.isDefault === true; + return field.type !== "unknown" && "isDefault" in field && field.isDefault === true; + } + + isUnknownField(field: OutputBookingField_2024_06_14): field is OutputUnknownBookingField_2024_06_14 { + return field.type === "unknown"; + } + + async validateUnknownField(field: OutputUnknownBookingField_2024_06_14) { + const instance = plainToInstance(OutputUnknownBookingField_2024_06_14, field); + const errors = await validate(instance); + if (errors.length > 0) { + const message = errors.flatMap((error) => Object.values(error.constraints || {})).join(", "); + throw new BadRequestException(`Validation failed for ${field.slug} booking field: ${message}`); + } } async validateDefaultField(field: DefaultFieldOutput_2024_06_14) { const ClassType = this.defaultOutputNameMap[field.slug]; if (!ClassType) { - throw new BadRequestException(`Unsupported booking field slgu '${field.slug}'.`); + throw new BadRequestException(`Unsupported default booking field slug '${field.slug}'.`); } const instance = plainToInstance(ClassType, field); diff --git a/yarn.lock b/yarn.lock index ba10dd33e6..50ebb88bcc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4125,7 +4125,7 @@ __metadata: dependencies: "@calcom/platform-constants": "*" "@calcom/platform-enums": "*" - "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.52" + "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.53" "@calcom/platform-libraries-0.0.2": "npm:@calcom/platform-libraries@0.0.2" "@calcom/platform-types": "*" "@calcom/platform-utils": "*" @@ -4318,28 +4318,6 @@ __metadata: languageName: unknown linkType: soft -"@calcom/atoms@npm:1.0.60": - version: 1.0.60 - resolution: "@calcom/atoms@npm:1.0.60" - dependencies: - "@radix-ui/react-dialog": ^1.0.4 - "@radix-ui/react-slot": ^1.0.2 - "@radix-ui/react-switch": ^1.1.0 - "@radix-ui/react-toast": ^1.1.5 - "@tanstack/react-query": ^5.17.15 - class-variance-authority: ^0.7.0 - clsx: ^2.0.0 - react-use: ^17.4.2 - tailwind-merge: ^1.13.2 - tailwindcss: ^3.3.3 - tailwindcss-animate: ^1.0.6 - peerDependencies: - react: ">=18.0.0" - typescript: ">=5.4.5" - checksum: b216d40948ca1a96d8374c0f9878c1c9b5776b2b6cc569ba7fb344fec360fe4a43f23f97a4d82e4c5ad75c83ea6c8b63de079088598594564bf44d00d7cb9b42 - languageName: node - linkType: hard - "@calcom/autocheckin@workspace:packages/app-store/autocheckin": version: 0.0.0-use.local resolution: "@calcom/autocheckin@workspace:packages/app-store/autocheckin" @@ -4497,7 +4475,7 @@ __metadata: chart.js: ^3.7.1 client-only: ^0.0.1 eslint: ^8.34.0 - next: ^13.5.6 + next: ^13.5.4 next-auth: ^4.22.1 next-i18next: ^13.2.2 postcss: ^8.4.18 @@ -5163,14 +5141,14 @@ __metadata: languageName: node linkType: hard -"@calcom/platform-libraries@npm:@calcom/platform-libraries@0.0.52": - version: 0.0.52 - resolution: "@calcom/platform-libraries@npm:0.0.52" +"@calcom/platform-libraries@npm:@calcom/platform-libraries@0.0.53": + version: 0.0.53 + resolution: "@calcom/platform-libraries@npm:0.0.53" dependencies: "@calcom/core": "*" "@calcom/features": "*" "@calcom/lib": "*" - checksum: 35d86bd7f99885f5960a1d1b4c45e1f8e8c0d945dcfded1a3be53b1e931cba04aaad252e433decb6f650b376fbb788e2f6bab2b88e5455b7a39065f84fdec1ff + checksum: 5a9dadad9f1ffdb831353594acd40bbc96e12130eff1685c9be49dfdc7ce2e44b2086696273b3bb74a28db20d863e0814d95f50043a4ba5b451987bd6f401294 languageName: node linkType: hard @@ -5839,7 +5817,6 @@ __metadata: dependencies: "@algora/sdk": ^0.1.2 "@calcom/app-store": "*" - "@calcom/atoms": 1.0.60 "@calcom/config": "*" "@calcom/dayjs": "*" "@calcom/embed-react": "workspace:^" @@ -5849,8 +5826,6 @@ __metadata: "@calcom/tsconfig": "*" "@calcom/ui": "*" "@datocms/cma-client-node": ^2.0.0 - "@dub/analytics": ^0.0.15 - "@eslint/js": ^9.9.0 "@floating-ui/react-dom": ^1.0.0 "@flodlc/nebula": ^1.0.56 "@graphql-codegen/cli": ^5.0.0 @@ -5868,7 +5843,6 @@ __metadata: "@radix-ui/react-dropdown-menu": ^2.0.5 "@radix-ui/react-navigation-menu": ^1.0.0 "@radix-ui/react-portal": ^1.0.0 - "@radix-ui/react-select": ^2.1.1 "@radix-ui/react-slider": ^1.0.0 "@radix-ui/react-tabs": ^1.0.0 "@radix-ui/react-tooltip": ^1.0.0 @@ -5888,7 +5862,6 @@ __metadata: "@vercel/og": ^0.5.0 autoprefixer: ^10.4.12 bcryptjs: ^2.4.3 - class-variance-authority: ^0.7.0 clsx: ^1.2.1 cobe: ^0.4.1 concurrently: ^7.6.0 @@ -5897,14 +5870,10 @@ __metadata: datocms-structured-text-utils: ^2.0.4 debounce: ^1.2.1 dotenv: ^16.3.1 - embla-carousel-react: ^8.1.8 enquirer: ^2.4.1 env-cmd: ^10.1.0 - eslint: ^9.9.0 - eslint-plugin-react: ^7.35.0 + eslint: ^8.34.0 fathom-client: ^3.5.0 - framer-motion: ^11.0.25 - globals: ^15.9.0 globby: ^13.1.3 graphql: ^16.8.0 graphql-codegen: ^0.4.0 @@ -5914,7 +5883,7 @@ __metadata: i18n-unused: ^0.13.0 iframe-resizer-react: ^1.1.0 keen-slider: ^6.8.0 - lucide-react: ^0.364.0 + lucide-react: ^0.171.0 micro: ^10.0.1 next: ^14.1.3 next-auth: ^4.22.1 @@ -5923,11 +5892,10 @@ __metadata: next-seo: ^6.0.0 playwright-core: ^1.38.1 postcss: ^8.4.18 - prettier: 3.3.3 prism-react-renderer: ^1.3.5 react: ^18.2.0 react-confetti: ^6.0.1 - react-datocms: ^5.0.3 + react-datocms: ^3.1.0 react-device-detect: ^2.2.2 react-dom: ^18.2.0 react-fast-marquee: ^1.6.4 @@ -5937,10 +5905,8 @@ __metadata: react-live-chat-loader: ^2.8.1 react-markdown: ^9.0.1 react-merge-refs: 1.1.0 - react-parallax-tilt: ^1.7.226 react-resize-detector: ^9.1.0 react-twemoji: ^0.3.0 - react-twitter-embed: ^4.0.4 react-use-measure: ^2.1.1 react-wrap-balancer: ^1.0.0 remark: ^14.0.2 @@ -5950,8 +5916,7 @@ __metadata: tailwind-merge: ^1.13.2 tailwindcss: ^3.3.3 ts-node: ^10.9.1 - typescript: ^4.4.4 - typescript-eslint: ^8.2.0 + typescript: ^4.9.4 wait-on: ^7.0.1 xml2js: ^0.6.0 zod: ^3.22.2 @@ -7052,7 +7017,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": +"@eslint-community/eslint-utils@npm:^4.2.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" dependencies: @@ -7063,13 +7028,6 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.11.0": - version: 4.11.1 - resolution: "@eslint-community/regexpp@npm:4.11.1" - checksum: 6986685529d30e33c2640973c3d8e7ddd31bef3cc8cb10ad54ddc1dea12680779a2c23a45562aa1462c488137a3570e672d122fac7da22d82294382d915cec70 - languageName: node - linkType: hard - "@eslint-community/regexpp@npm:^4.6.1": version: 4.10.0 resolution: "@eslint-community/regexpp@npm:4.10.0" @@ -7077,24 +7035,6 @@ __metadata: languageName: node linkType: hard -"@eslint/config-array@npm:^0.18.0": - version: 0.18.0 - resolution: "@eslint/config-array@npm:0.18.0" - dependencies: - "@eslint/object-schema": ^2.1.4 - debug: ^4.3.1 - minimatch: ^3.1.2 - checksum: 5ff748e1788745bfb3160c3b3151d62a7c054e336e9fe8069e86cfa6106f3abbd59b24f1253122268295f98c66803e9a7b23d7f947a8c00f62d2060cc44bc7fc - languageName: node - linkType: hard - -"@eslint/core@npm:^0.7.0": - version: 0.7.0 - resolution: "@eslint/core@npm:0.7.0" - checksum: 91d4aa2805f356fb0bba693411deab91590472666e22c9c03304ba03b288b74403a5e120db16d0926ea94281e15563a8d4d519cd1e565d514e2d5015a84b8575 - languageName: node - linkType: hard - "@eslint/eslintrc@npm:^1.4.1": version: 1.4.1 resolution: "@eslint/eslintrc@npm:1.4.1" @@ -7129,23 +7069,6 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^3.1.0": - version: 3.1.0 - resolution: "@eslint/eslintrc@npm:3.1.0" - dependencies: - ajv: ^6.12.4 - debug: ^4.3.2 - espree: ^10.0.1 - globals: ^14.0.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 - checksum: b0a9bbd98c8b9e0f4d975b042ff9b874dde722b20834ea2ff46551c3de740d4f10f56c449b790ef34d7f82147cbddfc22b004a43cc885dbc2664bb134766b5e4 - languageName: node - linkType: hard - "@eslint/js@npm:8.57.0": version: 8.57.0 resolution: "@eslint/js@npm:8.57.0" @@ -7153,29 +7076,6 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.13.0, @eslint/js@npm:^9.9.0": - version: 9.13.0 - resolution: "@eslint/js@npm:9.13.0" - checksum: ad5dd72aa75bd8d5bd3c1ffe68cf748aed7edef5fcf97193eb52af35dbb89a1999f526a0e2c169ef5572afbbbbb5f37d6fd0af2991d9ccdc29f753da5cc0f532 - languageName: node - linkType: hard - -"@eslint/object-schema@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/object-schema@npm:2.1.4" - checksum: 5a03094115bcdab7991dbbc5d17a9713f394cebb4b44d3eaf990d7487b9b8e1877b817997334ab40be52e299a0384595c6f6ba91b389901e5e1d21efda779271 - languageName: node - linkType: hard - -"@eslint/plugin-kit@npm:^0.2.0": - version: 0.2.1 - resolution: "@eslint/plugin-kit@npm:0.2.1" - dependencies: - levn: ^0.4.1 - checksum: 3c4fc57ff1fa8f08c9c7c3f2272883fe455faf21e352bd5c7965406d60b366ae8eb913fd53e846a688eaa9eca7f8100428361ac598bd56499fced6991d7b200e - languageName: node - linkType: hard - "@ewsjs/ntlm-client@npm:^3.0.1": version: 3.0.1 resolution: "@ewsjs/ntlm-client@npm:3.0.1" @@ -8179,23 +8079,6 @@ __metadata: languageName: node linkType: hard -"@humanfs/core@npm:^0.19.0": - version: 0.19.0 - resolution: "@humanfs/core@npm:0.19.0" - checksum: d73c153e9a41efce401cdf8eaa831e5b01630b45a46678eded3803347251a24446f1500b0074750fcab0a88d947609b164a0d5bba57f58ec18167bea01c69ac5 - languageName: node - linkType: hard - -"@humanfs/node@npm:^0.16.5": - version: 0.16.5 - resolution: "@humanfs/node@npm:0.16.5" - dependencies: - "@humanfs/core": ^0.19.0 - "@humanwhocodes/retry": ^0.3.0 - checksum: ae4799c6bf436450e1b1836f23fdb4ce0eb862df8e02fd498ee7d8ebe552d85fe36ccac81fcfbe39bf43cb49b302ae438d94699a451d1cfc78f64198d4b45674 - languageName: node - linkType: hard - "@humanwhocodes/config-array@npm:^0.11.14": version: 0.11.14 resolution: "@humanwhocodes/config-array@npm:0.11.14" @@ -8239,13 +8122,6 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/retry@npm:^0.3.0, @humanwhocodes/retry@npm:^0.3.1": - version: 0.3.1 - resolution: "@humanwhocodes/retry@npm:0.3.1" - checksum: 7e5517bb51dbea3e02ab6cacef59a8f4b0ca023fc4b0b8cbc40de0ad29f46edd50b897c6e7fba79366a0217e3f48e2da8975056f6c35cfe19d9cc48f1d03c1dd - languageName: node - linkType: hard - "@iarna/toml@npm:2.2.5": version: 2.2.5 resolution: "@iarna/toml@npm:2.2.5" @@ -9640,60 +9516,6 @@ __metadata: languageName: node linkType: hard -"@mux/mux-player-react@npm:*": - version: 3.0.0 - resolution: "@mux/mux-player-react@npm:3.0.0" - dependencies: - "@mux/mux-player": 3.0.0 - "@mux/playback-core": 0.26.0 - prop-types: ^15.7.2 - peerDependencies: - "@types/react": ^17.0.0 || ^18 || ^19 - react: ^17.0.2 || ^18 || ^19 - react-dom: ^17.0.2 || ^18 || ^19 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: ab399677b9f044e74f1c56b02bf75e02154886b2b4a778073d8179440c6ac2fee51692f4ad75ba25d6fe7c35a5a1b2ebe2ae807b7a36e3669bea65392b373b10 - languageName: node - linkType: hard - -"@mux/mux-player@npm:3.0.0": - version: 3.0.0 - resolution: "@mux/mux-player@npm:3.0.0" - dependencies: - "@mux/mux-video": 0.21.0 - "@mux/playback-core": 0.26.0 - media-chrome: ~4.1.1 - player.style: ^0.0.8 - checksum: f2110d03eb49e2468b964cda2f70ea201cefafc35b738f6247637711d97f93f2a0828d51e0da04439a131ee6cdb530fc6ebaec228d268013cc6d30e68a6fda2f - languageName: node - linkType: hard - -"@mux/mux-video@npm:0.21.0": - version: 0.21.0 - resolution: "@mux/mux-video@npm:0.21.0" - dependencies: - "@mux/playback-core": 0.26.0 - castable-video: ~1.1.0 - custom-media-element: ~1.3.1 - media-tracks: ~0.3.2 - checksum: 33b9083c84ea3ad0f7c59e545790b605f4cdc47714f488fa6ab269dd8531060deac6c4a1237d132722d706f68c786561b712b83b5581398ffaa7f0a3fc642c31 - languageName: node - linkType: hard - -"@mux/playback-core@npm:0.26.0": - version: 0.26.0 - resolution: "@mux/playback-core@npm:0.26.0" - dependencies: - hls.js: ~1.5.11 - mux-embed: ^5.3.0 - checksum: 648300310eee8038654c6f2aa5be2ab0bf6ad281a6bb01ea5ffe84e501230959655917a4800d96841aa5342e1e06cc97c32228b0eeb462f57264e5dd524f1b95 - languageName: node - linkType: hard - "@ndelangen/get-tarball@npm:^3.0.7": version: 3.0.9 resolution: "@ndelangen/get-tarball@npm:3.0.9" @@ -11911,13 +11733,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/number@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/number@npm:1.1.0" - checksum: e4fc7483c19141c25dbaf3d140b75e2b7fed0bfa3ad969f4441f0266ed34b35413f57a35df7b025e2a977152bbe6131849d3444fc6f15a73345dfc2bfdc105fa - languageName: node - linkType: hard - "@radix-ui/primitive@npm:0.1.0": version: 0.1.0 resolution: "@radix-ui/primitive@npm:0.1.0" @@ -11999,25 +11814,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-arrow@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-arrow@npm:1.1.0" - dependencies: - "@radix-ui/react-primitive": 2.0.0 - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 8522e0a8095ecc32d3a719f9c3bc0514c677a9c9d5ac26985d5416576dbc487c2a49ba2484397d9de502b54657856cb41ca3ea0b2165563eeeae45a83750885b - languageName: node - linkType: hard - "@radix-ui/react-avatar@npm:^1.0.4": version: 1.0.4 resolution: "@radix-ui/react-avatar@npm:1.0.4" @@ -12281,19 +12077,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-context@npm:1.1.1": - version: 1.1.1 - resolution: "@radix-ui/react-context@npm:1.1.1" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 9a04db236685dacc2f5ab2bdcfc4c82b974998e712ab97d79b11d5b4ef073d24aa9392398c876ef6cb3c59f40299285ceee3646187ad818cdad4fe1c74469d3f - languageName: node - linkType: hard - "@radix-ui/react-dialog@npm:1.0.0": version: 1.0.0 resolution: "@radix-ui/react-dialog@npm:1.0.0" @@ -12486,29 +12269,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-dismissable-layer@npm:1.1.1": - version: 1.1.1 - resolution: "@radix-ui/react-dismissable-layer@npm:1.1.1" - dependencies: - "@radix-ui/primitive": 1.1.0 - "@radix-ui/react-compose-refs": 1.1.0 - "@radix-ui/react-primitive": 2.0.0 - "@radix-ui/react-use-callback-ref": 1.1.0 - "@radix-ui/react-use-escape-keydown": 1.1.0 - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 18450111de16435a6e98661c8530bf87d8dfe51aa8649fea4f420db389642800792bc454669cab010c35cd402e9ae945c882e78e4cf2ce209d9c701f7a9b940f - languageName: node - linkType: hard - "@radix-ui/react-dropdown-menu@npm:^2.0.5": version: 2.0.5 resolution: "@radix-ui/react-dropdown-menu@npm:2.0.5" @@ -12561,19 +12321,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-focus-guards@npm:1.1.1": - version: 1.1.1 - resolution: "@radix-ui/react-focus-guards@npm:1.1.1" - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: ac8dd31f48fa0500bafd9368f2f06c5a06918dccefa89fa5dc77ca218dc931a094a81ca57f6b181138029822f7acdd5280dceccf5ba4d9263c754fb8f7961879 - languageName: node - linkType: hard - "@radix-ui/react-focus-scope@npm:0.1.4": version: 0.1.4 resolution: "@radix-ui/react-focus-scope@npm:0.1.4" @@ -12625,27 +12372,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-focus-scope@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-focus-scope@npm:1.1.0" - dependencies: - "@radix-ui/react-compose-refs": 1.1.0 - "@radix-ui/react-primitive": 2.0.0 - "@radix-ui/react-use-callback-ref": 1.1.0 - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: bea6c993752780c46c69f0c21a0fd96f11b9ed7edac23deb0953fbd8524d90938bf4c8060ccac7cad14caba3eb493f2642be7f8933910f4b6fa184666b7fcb40 - languageName: node - linkType: hard - "@radix-ui/react-hover-card@npm:^1.0.7": version: 1.0.7 resolution: "@radix-ui/react-hover-card@npm:1.0.7" @@ -12905,34 +12631,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-popper@npm:1.2.0": - version: 1.2.0 - resolution: "@radix-ui/react-popper@npm:1.2.0" - dependencies: - "@floating-ui/react-dom": ^2.0.0 - "@radix-ui/react-arrow": 1.1.0 - "@radix-ui/react-compose-refs": 1.1.0 - "@radix-ui/react-context": 1.1.0 - "@radix-ui/react-primitive": 2.0.0 - "@radix-ui/react-use-callback-ref": 1.1.0 - "@radix-ui/react-use-layout-effect": 1.1.0 - "@radix-ui/react-use-rect": 1.1.0 - "@radix-ui/react-use-size": 1.1.0 - "@radix-ui/rect": 1.1.0 - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 95b2390181abe3296274b3e3836d295dc7b1624462ca88cc283b70c4efa25b1a640ff56cfe2cc8606bfe493f81b57a86345f962d86a027ad673aed58390545c6 - languageName: node - linkType: hard - "@radix-ui/react-portal@npm:0.1.4": version: 0.1.4 resolution: "@radix-ui/react-portal@npm:0.1.4" @@ -13000,26 +12698,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-portal@npm:1.1.2": - version: 1.1.2 - resolution: "@radix-ui/react-portal@npm:1.1.2" - dependencies: - "@radix-ui/react-primitive": 2.0.0 - "@radix-ui/react-use-layout-effect": 1.1.0 - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: 2f737dc0445f02f512f814ba140227e1a049b3d215d79e22ead412c9befe830292c48a559a8ad1514a474ae8f0c4c43954dfbe294b93a0279d8747d08f7b7924 - languageName: node - linkType: hard - "@radix-ui/react-presence@npm:1.0.0": version: 1.0.0 resolution: "@radix-ui/react-presence@npm:1.0.0" @@ -13293,45 +12971,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-select@npm:^2.1.1": - version: 2.1.2 - resolution: "@radix-ui/react-select@npm:2.1.2" - dependencies: - "@radix-ui/number": 1.1.0 - "@radix-ui/primitive": 1.1.0 - "@radix-ui/react-collection": 1.1.0 - "@radix-ui/react-compose-refs": 1.1.0 - "@radix-ui/react-context": 1.1.1 - "@radix-ui/react-direction": 1.1.0 - "@radix-ui/react-dismissable-layer": 1.1.1 - "@radix-ui/react-focus-guards": 1.1.1 - "@radix-ui/react-focus-scope": 1.1.0 - "@radix-ui/react-id": 1.1.0 - "@radix-ui/react-popper": 1.2.0 - "@radix-ui/react-portal": 1.1.2 - "@radix-ui/react-primitive": 2.0.0 - "@radix-ui/react-slot": 1.1.0 - "@radix-ui/react-use-callback-ref": 1.1.0 - "@radix-ui/react-use-controllable-state": 1.1.0 - "@radix-ui/react-use-layout-effect": 1.1.0 - "@radix-ui/react-use-previous": 1.1.0 - "@radix-ui/react-visually-hidden": 1.1.0 - aria-hidden: ^1.1.1 - react-remove-scroll: 2.6.0 - peerDependencies: - "@types/react": "*" - "@types/react-dom": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: cd662a5f0b1cc77dd81df51997ddc1dd47cc0025551e4ffa0c2675c056b3609257096d4f4e27189ddac98771a0191d68323c97d61fa0991d6fae78e708650959 - languageName: node - linkType: hard - "@radix-ui/react-separator@npm:1.0.3": version: 1.0.3 resolution: "@radix-ui/react-separator@npm:1.0.3" @@ -13927,21 +13566,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-use-rect@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-use-rect@npm:1.1.0" - dependencies: - "@radix-ui/rect": 1.1.0 - peerDependencies: - "@types/react": "*" - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - "@types/react": - optional: true - checksum: facc9528af43df3b01952dbb915ff751b5924db2c31d41f053ddea19a7cc5cac5b096c4d7a2059e8f564a3f0d4a95bcd909df8faed52fa01709af27337628e2c - languageName: node - linkType: hard - "@radix-ui/react-use-size@npm:1.0.1": version: 1.0.1 resolution: "@radix-ui/react-use-size@npm:1.0.1" @@ -14033,13 +13657,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/rect@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/rect@npm:1.1.0" - checksum: 1ad93efbc9fc3b878bae5e8bb26ffa1005235d8b5b9fca8339eb5dbcf7bf53abc9ccd2a8ce128557820168c8600521e48e0ea4dda96aa5f116381f66f46aeda3 - languageName: node - linkType: hard - "@reach/observe-rect@npm:^1.1.0": version: 1.2.0 resolution: "@reach/observe-rect@npm:1.2.0" @@ -17847,13 +17464,6 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:^1.0.6": - version: 1.0.6 - resolution: "@types/estree@npm:1.0.6" - checksum: 8825d6e729e16445d9a1dd2fb1db2edc5ed400799064cd4d028150701031af012ba30d6d03fe9df40f4d7a437d0de6d2b256020152b7b09bde9f2e420afdffd9 - languageName: node - linkType: hard - "@types/express-jwt@npm:0.0.42": version: 0.0.42 resolution: "@types/express-jwt@npm:0.0.42" @@ -18134,13 +17744,6 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.15": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 - languageName: node - linkType: hard - "@types/json5@npm:^0.0.29": version: 0.0.29 resolution: "@types/json5@npm:0.0.29" @@ -18962,29 +18565,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.11.0": - version: 8.11.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.11.0" - dependencies: - "@eslint-community/regexpp": ^4.10.0 - "@typescript-eslint/scope-manager": 8.11.0 - "@typescript-eslint/type-utils": 8.11.0 - "@typescript-eslint/utils": 8.11.0 - "@typescript-eslint/visitor-keys": 8.11.0 - graphemer: ^1.4.0 - ignore: ^5.3.1 - natural-compare: ^1.4.0 - ts-api-utils: ^1.3.0 - peerDependencies: - "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 5cfc337a957b1c1a868f0f05ed278d4b631aab3aad037c1ca52f458973dee53c2f79db5cb3ac0278d3a4d2846560335212e347c4b978efd84811d6c910e93975 - languageName: node - linkType: hard - "@typescript-eslint/eslint-plugin@npm:^5.52.0": version: 5.52.0 resolution: "@typescript-eslint/eslint-plugin@npm:5.52.0" @@ -19009,24 +18589,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.11.0": - version: 8.11.0 - resolution: "@typescript-eslint/parser@npm:8.11.0" - dependencies: - "@typescript-eslint/scope-manager": 8.11.0 - "@typescript-eslint/types": 8.11.0 - "@typescript-eslint/typescript-estree": 8.11.0 - "@typescript-eslint/visitor-keys": 8.11.0 - debug: ^4.3.4 - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: b7664933df72e150289889e16f10f042d427d8334786ce33fa2e0d2fd2fbf31a52c6e88f9b6b9a864f4e78c7b60cd52c034886eb1fa82893d69434bcd4f7e173 - languageName: node - linkType: hard - "@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0": version: 6.21.0 resolution: "@typescript-eslint/parser@npm:6.21.0" @@ -19109,16 +18671,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.11.0": - version: 8.11.0 - resolution: "@typescript-eslint/scope-manager@npm:8.11.0" - dependencies: - "@typescript-eslint/types": 8.11.0 - "@typescript-eslint/visitor-keys": 8.11.0 - checksum: f36212ac1df6a2ed0953beda6bf66e57fd56fcc1c4b4d21149f3451ae621f63aa7ccb92aa1281615250264fdd22e56a163a5d11c5c772c857741ac0e25533325 - languageName: node - linkType: hard - "@typescript-eslint/type-utils@npm:5.52.0": version: 5.52.0 resolution: "@typescript-eslint/type-utils@npm:5.52.0" @@ -19136,21 +18688,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.11.0": - version: 8.11.0 - resolution: "@typescript-eslint/type-utils@npm:8.11.0" - dependencies: - "@typescript-eslint/typescript-estree": 8.11.0 - "@typescript-eslint/utils": 8.11.0 - debug: ^4.3.4 - ts-api-utils: ^1.3.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 74704ee811de343ea2d349a16eec53b6cc8f2b5720510bf327e10667304c48410af78b9ec7aee5d43924a3f6c268cc2cddb7a0606f20c62391b0d7045d8b6264 - languageName: node - linkType: hard - "@typescript-eslint/types@npm:5.48.0": version: 5.48.0 resolution: "@typescript-eslint/types@npm:5.48.0" @@ -19179,13 +18716,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:8.11.0": - version: 8.11.0 - resolution: "@typescript-eslint/types@npm:8.11.0" - checksum: 2958f3b5b30d3a876aad79df15662e6c23fe3d0c7750c473f27adc725b2a20f303e914db785c64200bc4092c3489648407792e2bd89eccf3f7aaa4495be81681 - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:5.48.0": version: 5.48.0 resolution: "@typescript-eslint/typescript-estree@npm:5.48.0" @@ -19259,25 +18789,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.11.0": - version: 8.11.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.11.0" - dependencies: - "@typescript-eslint/types": 8.11.0 - "@typescript-eslint/visitor-keys": 8.11.0 - debug: ^4.3.4 - fast-glob: ^3.3.2 - is-glob: ^4.0.3 - minimatch: ^9.0.4 - semver: ^7.6.0 - ts-api-utils: ^1.3.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 03ae4740d4ff19ebc3ea68ac3be1a0265b4abe6348fdc48123e20d6f9206baaa70209e65c9fa4a91930da7d3952c55099a307014284c9b596b12f72bce741817 - languageName: node - linkType: hard - "@typescript-eslint/utils@npm:5.52.0, @typescript-eslint/utils@npm:^5.52.0": version: 5.52.0 resolution: "@typescript-eslint/utils@npm:5.52.0" @@ -19296,20 +18807,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.11.0": - version: 8.11.0 - resolution: "@typescript-eslint/utils@npm:8.11.0" - dependencies: - "@eslint-community/eslint-utils": ^4.4.0 - "@typescript-eslint/scope-manager": 8.11.0 - "@typescript-eslint/types": 8.11.0 - "@typescript-eslint/typescript-estree": 8.11.0 - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - checksum: 0a6286fb6c6aaf497bcd5657e4f8167f29c32bb913e4feab3822c504f537ac30975d626dff442cc691e040384ad197313b5685d79296fc8a42ed6c827dcb52fc - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:5.48.0": version: 5.48.0 resolution: "@typescript-eslint/visitor-keys@npm:5.48.0" @@ -19350,16 +18847,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.11.0": - version: 8.11.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.11.0" - dependencies: - "@typescript-eslint/types": 8.11.0 - eslint-visitor-keys: ^3.4.3 - checksum: 29057642bf63994646bd8c5b4baa704ae8b1ff094daa6254a6a92e9fbd252086e219b2b7e8050a131da58cd16cc4dee20bb9fc142bc0d3f22f92af2b59b5444e - languageName: node - linkType: hard - "@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" @@ -20171,15 +19658,6 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.12.0": - version: 8.13.0 - resolution: "acorn@npm:8.13.0" - bin: - acorn: bin/acorn - checksum: f1541f05eb5d6ff67990d1927290809b1ebb663ac96d9c7057c935cf29c5bcaba6d39f37bd007f4bb814f162f142b0f2b2dd4b14128b8fcfaf9f0508a6f05f1c - languageName: node - linkType: hard - "acorn@npm:^8.5.0": version: 8.7.1 resolution: "acorn@npm:8.7.1" @@ -20784,20 +20262,6 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.8": - version: 3.1.8 - resolution: "array-includes@npm:3.1.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - get-intrinsic: ^1.2.4 - is-string: ^1.0.7 - checksum: eb39ba5530f64e4d8acab39297c11c1c5be2a4ea188ab2b34aba5fb7224d918f77717a9d57a3e2900caaa8440e59431bdaf5c974d5212ef65d97f132e38e2d91 - languageName: node - linkType: hard - "array-timsort@npm:^1.0.3": version: 1.0.3 resolution: "array-timsort@npm:1.0.3" @@ -20838,20 +20302,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlast@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.findlast@npm:1.2.5" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - es-shim-unscopables: ^1.0.2 - checksum: 83ce4ad95bae07f136d316f5a7c3a5b911ac3296c3476abe60225bc4a17938bf37541972fcc37dd5adbc99cbb9c928c70bbbfc1c1ce549d41a415144030bb446 - languageName: node - linkType: hard - "array.prototype.findlastindex@npm:^1.2.3": version: 1.2.4 resolution: "array.prototype.findlastindex@npm:1.2.4" @@ -20988,19 +20438,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.tosorted@npm:^1.1.4": - version: 1.1.4 - resolution: "array.prototype.tosorted@npm:1.1.4" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.3 - es-errors: ^1.3.0 - es-shim-unscopables: ^1.0.2 - checksum: e4142d6f556bcbb4f393c02e7dbaea9af8f620c040450c2be137c9cbbd1a17f216b9c688c5f2c08fbb038ab83f55993fa6efdd9a05881d84693c7bcb5422127a - languageName: node - linkType: hard - "arraybuffer.prototype.slice@npm:^1.0.2": version: 1.0.2 resolution: "arraybuffer.prototype.slice@npm:1.0.2" @@ -22753,15 +22190,6 @@ __metadata: languageName: node linkType: hard -"castable-video@npm:~1.1.0": - version: 1.1.0 - resolution: "castable-video@npm:1.1.0" - dependencies: - custom-media-element: ~1.3.2 - checksum: 0b7280140e2e855f66ad824c8352d8422695f3a0195757341e8c0b5828df9c0279af70154d7ef514e9d7849814b74625c4df7a652853bd624ecb205a232c295e - languageName: node - linkType: hard - "ccount@npm:^2.0.0": version: 2.0.1 resolution: "ccount@npm:2.0.1" @@ -23222,15 +22650,6 @@ __metadata: languageName: node linkType: hard -"class-variance-authority@npm:^0.7.0": - version: 0.7.0 - resolution: "class-variance-authority@npm:0.7.0" - dependencies: - clsx: 2.0.0 - checksum: e7fd1fab433ef06f52a1b7b241b70b4a185864deef199d3b0a2c3412f1cc179517288264c383f3b971a00d76811625fc8f7ffe709e6170219e88cd7368f08a20 - languageName: node - linkType: hard - "classnames@npm:^2.2.5, classnames@npm:^2.2.6": version: 2.3.2 resolution: "classnames@npm:2.3.2" @@ -23503,13 +22922,6 @@ __metadata: languageName: node linkType: hard -"clsx@npm:2.0.0": - version: 2.0.0 - resolution: "clsx@npm:2.0.0" - checksum: a2cfb2351b254611acf92faa0daf15220f4cd648bdf96ce369d729813b85336993871a4bf6978ddea2b81b5a130478339c20d9d0b5c6fc287e5147f0c059276e - languageName: node - linkType: hard - "clsx@npm:^1.1.1": version: 1.1.1 resolution: "clsx@npm:1.1.1" @@ -24827,13 +24239,6 @@ __metadata: languageName: node linkType: hard -"custom-media-element@npm:~1.3.1, custom-media-element@npm:~1.3.2": - version: 1.3.2 - resolution: "custom-media-element@npm:1.3.2" - checksum: 9ec2ff88c3c5ba7d20b9484c0359b4cfe08ad6804f3116934ffbae2f2e0e04d2a832beb6f0bec56027a969ab366727d217406f750890613c988de6de5330cb4f - languageName: node - linkType: hard - "d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:^3.1.6": version: 3.2.3 resolution: "d3-array@npm:3.2.3" @@ -26125,34 +25530,6 @@ __metadata: languageName: node linkType: hard -"embla-carousel-react@npm:^8.1.8": - version: 8.3.0 - resolution: "embla-carousel-react@npm:8.3.0" - dependencies: - embla-carousel: 8.3.0 - embla-carousel-reactive-utils: 8.3.0 - peerDependencies: - react: ^16.8.0 || ^17.0.1 || ^18.0.0 - checksum: 414bf10ea5b983fdf2f64aeb7806ebaf69b2790617c8ff13b13e7bb6cc4671f243544a786fc6be33dde18965513402e4c4d78474ca928f4031af7db9e276be26 - languageName: node - linkType: hard - -"embla-carousel-reactive-utils@npm:8.3.0": - version: 8.3.0 - resolution: "embla-carousel-reactive-utils@npm:8.3.0" - peerDependencies: - embla-carousel: 8.3.0 - checksum: 687eb69c5db4bf1c9fc09090ea4441e60ab94dd04de7b8e69139eff26fed3d9ba62e6804cc1c44616838c14924fe1b07e31864222a6106365c7129fd95d7d741 - languageName: node - linkType: hard - -"embla-carousel@npm:8.3.0": - version: 8.3.0 - resolution: "embla-carousel@npm:8.3.0" - checksum: c2d3c89c93e105133e6931dfdba5899f44f01b32ea0fa331999030150819a2a51c4699df49b69540bc935b63def219f7484f6ca363becaacaf7609e863e39b72 - languageName: node - linkType: hard - "emittery@npm:^0.13.1": version: 0.13.1 resolution: "emittery@npm:0.13.1" @@ -26412,60 +25789,6 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.3": - version: 1.23.3 - resolution: "es-abstract@npm:1.23.3" - dependencies: - array-buffer-byte-length: ^1.0.1 - arraybuffer.prototype.slice: ^1.0.3 - available-typed-arrays: ^1.0.7 - call-bind: ^1.0.7 - data-view-buffer: ^1.0.1 - data-view-byte-length: ^1.0.1 - data-view-byte-offset: ^1.0.0 - es-define-property: ^1.0.0 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - es-set-tostringtag: ^2.0.3 - es-to-primitive: ^1.2.1 - function.prototype.name: ^1.1.6 - get-intrinsic: ^1.2.4 - get-symbol-description: ^1.0.2 - globalthis: ^1.0.3 - gopd: ^1.0.1 - has-property-descriptors: ^1.0.2 - has-proto: ^1.0.3 - has-symbols: ^1.0.3 - hasown: ^2.0.2 - internal-slot: ^1.0.7 - is-array-buffer: ^3.0.4 - is-callable: ^1.2.7 - is-data-view: ^1.0.1 - is-negative-zero: ^2.0.3 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.3 - is-string: ^1.0.7 - is-typed-array: ^1.1.13 - is-weakref: ^1.0.2 - object-inspect: ^1.13.1 - object-keys: ^1.1.1 - object.assign: ^4.1.5 - regexp.prototype.flags: ^1.5.2 - safe-array-concat: ^1.1.2 - safe-regex-test: ^1.0.3 - string.prototype.trim: ^1.2.9 - string.prototype.trimend: ^1.0.8 - string.prototype.trimstart: ^1.0.8 - typed-array-buffer: ^1.0.2 - typed-array-byte-length: ^1.0.1 - typed-array-byte-offset: ^1.0.2 - typed-array-length: ^1.0.6 - unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.15 - checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae - languageName: node - linkType: hard - "es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1": version: 1.19.2 resolution: "es-abstract@npm:1.19.2" @@ -26790,28 +26113,6 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.1.0": - version: 1.1.0 - resolution: "es-iterator-helpers@npm:1.1.0" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.3 - es-errors: ^1.3.0 - es-set-tostringtag: ^2.0.3 - function-bind: ^1.1.2 - get-intrinsic: ^1.2.4 - globalthis: ^1.0.4 - has-property-descriptors: ^1.0.2 - has-proto: ^1.0.3 - has-symbols: ^1.0.3 - internal-slot: ^1.0.7 - iterator.prototype: ^1.1.3 - safe-array-concat: ^1.1.2 - checksum: 4ba3a32ab7ba05b85f0ae30604feeb8ffd801fe762e9df9577bd220a96b9eaa2e90af8e6bdc498e523051f293955e2f7d2bddd34de71e1428a1b8ff3fd961016 - languageName: node - linkType: hard - "es-module-lexer@npm:^1.2.1, es-module-lexer@npm:^1.4.1": version: 1.4.1 resolution: "es-module-lexer@npm:1.4.1" @@ -27571,34 +26872,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.35.0": - version: 7.37.2 - resolution: "eslint-plugin-react@npm:7.37.2" - dependencies: - array-includes: ^3.1.8 - array.prototype.findlast: ^1.2.5 - array.prototype.flatmap: ^1.3.2 - array.prototype.tosorted: ^1.1.4 - doctrine: ^2.1.0 - es-iterator-helpers: ^1.1.0 - estraverse: ^5.3.0 - hasown: ^2.0.2 - jsx-ast-utils: ^2.4.1 || ^3.0.0 - minimatch: ^3.1.2 - object.entries: ^1.1.8 - object.fromentries: ^2.0.8 - object.values: ^1.2.0 - prop-types: ^15.8.1 - resolve: ^2.0.0-next.5 - semver: ^6.3.1 - string.prototype.matchall: ^4.0.11 - string.prototype.repeat: ^1.0.0 - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 7f5203afee7fbe3702b27fdd2b9a3c0ccbbb47d0672f58311b9d8a08dea819c9da4a87c15e8bd508f2562f327a9d29ee8bd9cd189bf758d8dc903de5648b0bfa - languageName: node - linkType: hard - "eslint-plugin-turbo@npm:0.0.7": version: 0.0.7 resolution: "eslint-plugin-turbo@npm:0.0.7" @@ -27669,16 +26942,6 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^8.1.0": - version: 8.1.0 - resolution: "eslint-scope@npm:8.1.0" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^5.2.0 - checksum: 3ce9392ec74f35f84eddad7755941cb5f7e3a1bc53cf902e95e541384ef78b604bec1489933f37c663e4686b36c31533d06cf0842be9a729a680c489efce7acb - languageName: node - linkType: hard - "eslint-utils@npm:^3.0.0": version: 3.0.0 resolution: "eslint-utils@npm:3.0.0" @@ -27711,13 +26974,6 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^4.1.0": - version: 4.1.0 - resolution: "eslint-visitor-keys@npm:4.1.0" - checksum: b5d53725df14a6a225fd74d5e687f5f0547b0aaa3e1963ab6f4acb8dc80f99ad0bec11148e14b4a67de024dde7b4449e7e4c0b1524de605955dee7eefcdd7824 - languageName: node - linkType: hard - "eslint@npm:^8": version: 8.57.0 resolution: "eslint@npm:8.57.0" @@ -27815,56 +27071,6 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^9.9.0": - version: 9.13.0 - resolution: "eslint@npm:9.13.0" - dependencies: - "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.11.0 - "@eslint/config-array": ^0.18.0 - "@eslint/core": ^0.7.0 - "@eslint/eslintrc": ^3.1.0 - "@eslint/js": 9.13.0 - "@eslint/plugin-kit": ^0.2.0 - "@humanfs/node": ^0.16.5 - "@humanwhocodes/module-importer": ^1.0.1 - "@humanwhocodes/retry": ^0.3.1 - "@types/estree": ^1.0.6 - "@types/json-schema": ^7.0.15 - ajv: ^6.12.4 - chalk: ^4.0.0 - cross-spawn: ^7.0.2 - debug: ^4.3.2 - escape-string-regexp: ^4.0.0 - eslint-scope: ^8.1.0 - eslint-visitor-keys: ^4.1.0 - espree: ^10.2.0 - esquery: ^1.5.0 - esutils: ^2.0.2 - fast-deep-equal: ^3.1.3 - file-entry-cache: ^8.0.0 - find-up: ^5.0.0 - glob-parent: ^6.0.2 - ignore: ^5.2.0 - imurmurhash: ^0.1.4 - is-glob: ^4.0.0 - json-stable-stringify-without-jsonify: ^1.0.1 - lodash.merge: ^4.6.2 - minimatch: ^3.1.2 - natural-compare: ^1.4.0 - optionator: ^0.9.3 - text-table: ^0.2.0 - peerDependencies: - jiti: "*" - peerDependenciesMeta: - jiti: - optional: true - bin: - eslint: bin/eslint.js - checksum: 99e878d6883864b8361bfaf2a2304f1e133347ac19976c79e1430623cd311cb38253bbd122100788082eded947693cce5c7e67dfd2b5173e6f05edb92dcb2206 - languageName: node - linkType: hard - "esm@npm:^3.2.25": version: 3.2.25 resolution: "esm@npm:3.2.25" @@ -27872,17 +27078,6 @@ __metadata: languageName: node linkType: hard -"espree@npm:^10.0.1, espree@npm:^10.2.0": - version: 10.2.0 - resolution: "espree@npm:10.2.0" - dependencies: - acorn: ^8.12.0 - acorn-jsx: ^5.3.2 - eslint-visitor-keys: ^4.1.0 - checksum: 16ee75c2f6029622a70a675ad8989fffc6f7199265d07af516a11e4adc9eb2d03866fceff33f1a081c42621df79871e508f8fc8fe5855eac2de925b58196711b - languageName: node - linkType: hard - "espree@npm:^9.4.0": version: 9.4.1 resolution: "espree@npm:9.4.1" @@ -27933,15 +27128,6 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.5.0": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" - dependencies: - estraverse: ^5.1.0 - checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2 - languageName: node - linkType: hard - "esrecurse@npm:^4.3.0": version: 4.3.0 resolution: "esrecurse@npm:4.3.0" @@ -28710,15 +27896,6 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^8.0.0": - version: 8.0.0 - resolution: "file-entry-cache@npm:8.0.0" - dependencies: - flat-cache: ^4.0.0 - checksum: f67802d3334809048c69b3d458f672e1b6d26daefda701761c81f203b80149c35dea04d78ea4238969dd617678e530876722a0634c43031a0957f10cc3ed190f - languageName: node - linkType: hard - "file-system-cache@npm:2.3.0": version: 2.3.0 resolution: "file-system-cache@npm:2.3.0" @@ -28915,16 +28092,6 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^4.0.0": - version: 4.0.1 - resolution: "flat-cache@npm:4.0.1" - dependencies: - flatted: ^3.2.9 - keyv: ^4.5.4 - checksum: 899fc86bf6df093547d76e7bfaeb900824b869d7d457d02e9b8aae24836f0a99fbad79328cfd6415ee8908f180699bf259dc7614f793447cb14f707caf5996f6 - languageName: node - linkType: hard - "flatted@npm:^3.1.0": version: 3.2.5 resolution: "flatted@npm:3.2.5" @@ -28932,7 +28099,7 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.2.9, flatted@npm:^3.3.1": +"flatted@npm:^3.3.1": version: 3.3.1 resolution: "flatted@npm:3.3.1" checksum: 85ae7181650bb728c221e7644cbc9f4bf28bc556f2fc89bb21266962bdf0ce1029cc7acc44bb646cd469d9baac7c317f64e841c4c4c00516afa97320cdac7f94 @@ -29283,26 +28450,6 @@ __metadata: languageName: node linkType: hard -"framer-motion@npm:^11.0.25": - version: 11.11.9 - resolution: "framer-motion@npm:11.11.9" - dependencies: - tslib: ^2.4.0 - peerDependencies: - "@emotion/is-prop-valid": "*" - react: ^18.0.0 - react-dom: ^18.0.0 - peerDependenciesMeta: - "@emotion/is-prop-valid": - optional: true - react: - optional: true - react-dom: - optional: true - checksum: d2918aa3de0746cadb60af7f940c72d17b0d2869b66992f47d6a187abc3599cbf6520188ea8131c9fd7fe65cd87783fbfce3d2115f833b1488a8d73509e5789a - languageName: node - linkType: hard - "fresh@npm:0.5.2, fresh@npm:^0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" @@ -30096,20 +29243,6 @@ __metadata: languageName: node linkType: hard -"globals@npm:^14.0.0": - version: 14.0.0 - resolution: "globals@npm:14.0.0" - checksum: 534b8216736a5425737f59f6e6a5c7f386254560c9f41d24a9227d60ee3ad4a9e82c5b85def0e212e9d92162f83a92544be4c7fd4c902cb913736c10e08237ac - languageName: node - linkType: hard - -"globals@npm:^15.9.0": - version: 15.11.0 - resolution: "globals@npm:15.11.0" - checksum: ef32d5ef987f3d4b47fc2e389a0b235f6a46f605160c4e405722fd7b576106ca407cb867e66fd1e0fc43b631800e2e2e71847f37691026d813f96f40339da702 - languageName: node - linkType: hard - "globalthis@npm:^1.0.3": version: 1.0.3 resolution: "globalthis@npm:1.0.3" @@ -30119,16 +29252,6 @@ __metadata: languageName: node linkType: hard -"globalthis@npm:^1.0.4": - version: 1.0.4 - resolution: "globalthis@npm:1.0.4" - dependencies: - define-properties: ^1.2.1 - gopd: ^1.0.1 - checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a - languageName: node - linkType: hard - "globalyzer@npm:0.1.0": version: 0.1.0 resolution: "globalyzer@npm:0.1.0" @@ -31027,13 +30150,6 @@ __metadata: languageName: node linkType: hard -"hls.js@npm:~1.5.11": - version: 1.5.17 - resolution: "hls.js@npm:1.5.17" - checksum: 8b50865f3f96664c55a3dcc4a843abdcdfa7e2fddb57afbed843f5aa0c4ff02a0b275ce2b1926d7c8cd351d8da3df5cc908b02c09449a471d0e80a850b1cde83 - languageName: node - linkType: hard - "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -31655,13 +30771,6 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.3.1": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be - languageName: node - linkType: hard - "image-q@npm:^4.0.0": version: 4.0.0 resolution: "image-q@npm:4.0.0" @@ -33309,19 +32418,6 @@ __metadata: languageName: node linkType: hard -"iterator.prototype@npm:^1.1.3": - version: 1.1.3 - resolution: "iterator.prototype@npm:1.1.3" - dependencies: - define-properties: ^1.2.1 - get-intrinsic: ^1.2.1 - has-symbols: ^1.0.3 - reflect.getprototypeof: ^1.0.4 - set-function-name: ^2.0.1 - checksum: 7d2a1f8bcbba7b76f72e956faaf7b25405f4de54430c9d099992e6fb9d571717c3044604e8cdfb8e624cb881337d648030ee8b1541d544af8b338835e3f47ebe - languageName: node - linkType: hard - "jackspeak@npm:^2.0.3, jackspeak@npm:^2.3.5": version: 2.3.6 resolution: "jackspeak@npm:2.3.6" @@ -34565,7 +33661,7 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.0.0, keyv@npm:^4.5.3, keyv@npm:^4.5.4": +"keyv@npm:^4.0.0, keyv@npm:^4.5.3": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -35620,12 +34716,12 @@ __metadata: languageName: node linkType: hard -"lucide-react@npm:^0.364.0": - version: 0.364.0 - resolution: "lucide-react@npm:0.364.0" +"lucide-react@npm:^0.171.0": + version: 0.171.0 + resolution: "lucide-react@npm:0.171.0" peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 - checksum: 954f6274df46ffa172130d9e60eb630a377435c7dbf0ddb5ceebf284602dde3b99755dcd5c0757e697ee734a32c808a3cd2c25ad88fec1d8f627a2317f00e3e6 + checksum: 768ffe368c52a518ee339203d86ff4479989ab4d79c0716f721900c4bb7392ef6ff7a14807f6a685abd74d27f4c1778170bff77a0ab4c3e06c17944b557d8300 languageName: node linkType: hard @@ -36176,27 +35272,6 @@ __metadata: languageName: node linkType: hard -"media-chrome@npm:^4.1.0": - version: 4.2.1 - resolution: "media-chrome@npm:4.2.1" - checksum: 780c58d375ebb14089582cf3aff884253c59caf46ec0c92c29a400b7101b62dff7c74201b6595c4949423e0896410b4595b361b3288b5677cd1aa5e0bb39a20f - languageName: node - linkType: hard - -"media-chrome@npm:~4.1.1": - version: 4.1.5 - resolution: "media-chrome@npm:4.1.5" - checksum: 50ba8416f5e6f35dc22f2c30d102a2a8659f7b888919392d511be80e2cd0dd097b0e9eb339ec21d4f6f9ced6d2c81a91c130419977d42b1b928e7e93c9d2ceb1 - languageName: node - linkType: hard - -"media-tracks@npm:~0.3.2": - version: 0.3.3 - resolution: "media-tracks@npm:0.3.3" - checksum: 4795af3f171d7ad3a68d1ac1c1e8166a735244fe57d3fc0ec53b1c7410799e524756fc0bfb389632aebb148436b03baade36ca34a3f5377776c3968f6d2cc580 - languageName: node - linkType: hard - "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -37569,13 +36644,6 @@ __metadata: languageName: node linkType: hard -"mux-embed@npm:^5.3.0": - version: 5.3.3 - resolution: "mux-embed@npm:5.3.3" - checksum: 446dde32612b015152cdd3357131d68e9db3de899e27c1340c1c5af18dd2e85f94b8d870096654c05af0d082da9a4fd4a0cd02e43de8379e3b27e45420be9ecb - languageName: node - linkType: hard - "mysql2@npm:3.9.1": version: 3.9.1 resolution: "mysql2@npm:3.9.1" @@ -37976,7 +37044,7 @@ __metadata: languageName: node linkType: hard -"next@npm:^13.5.6": +"next@npm:^13.5.4, next@npm:^13.5.6": version: 13.5.7 resolution: "next@npm:13.5.7" dependencies: @@ -38893,17 +37961,6 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.8": - version: 1.1.8 - resolution: "object.entries@npm:1.1.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: 5314877cb637ef3437a30bba61d9bacdb3ce74bf73ac101518be0633c37840c8cc67407edb341f766e8093b3d7516d5c3358f25adfee4a2c697c0ec4c8491907 - languageName: node - linkType: hard - "object.fromentries@npm:^2.0.5": version: 2.0.5 resolution: "object.fromentries@npm:2.0.5" @@ -38937,18 +37994,6 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.8": - version: 2.0.8 - resolution: "object.fromentries@npm:2.0.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - checksum: 29b2207a2db2782d7ced83f93b3ff5d425f901945f3665ffda1821e30a7253cd1fd6b891a64279976098137ddfa883d748787a6fea53ecdb51f8df8b8cec0ae1 - languageName: node - linkType: hard - "object.groupby@npm:^1.0.1": version: 1.0.2 resolution: "object.groupby@npm:1.0.2" @@ -39025,17 +38070,6 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.2.0": - version: 1.2.0 - resolution: "object.values@npm:1.2.0" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: 51fef456c2a544275cb1766897f34ded968b22adfc13ba13b5e4815fdaf4304a90d42a3aee114b1f1ede048a4890381d47a5594d84296f2767c6a0364b9da8fa - languageName: node - linkType: hard - "objectorarray@npm:^1.0.5": version: 1.0.5 resolution: "objectorarray@npm:1.0.5" @@ -40528,15 +39562,6 @@ __metadata: languageName: node linkType: hard -"player.style@npm:^0.0.8": - version: 0.0.8 - resolution: "player.style@npm:0.0.8" - dependencies: - media-chrome: ^4.1.0 - checksum: 009f59bc8e7f84e82adcacec4df3ea11094d7097413a5755bb6a586150c9aa6114f7d7840f215b8b98c20f3eabbf40b7eb1d20731384253fea3122bd62b9512e - languageName: node - linkType: hard - "playwright-core@npm:1.45.3": version: 1.45.3 resolution: "playwright-core@npm:1.45.3" @@ -41099,15 +40124,6 @@ __metadata: languageName: node linkType: hard -"prettier@npm:3.3.3": - version: 3.3.3 - resolution: "prettier@npm:3.3.3" - bin: - prettier: bin/prettier.cjs - checksum: bc8604354805acfdde6106852d14b045bb20827ad76a5ffc2455b71a8257f94de93f17f14e463fe844808d2ccc87248364a5691488a3304f1031326e62d9276e - languageName: node - linkType: hard - "prettier@npm:^2.7.1": version: 2.8.7 resolution: "prettier@npm:2.8.7" @@ -42032,21 +41048,20 @@ __metadata: languageName: node linkType: hard -"react-datocms@npm:^5.0.3": - version: 5.0.3 - resolution: "react-datocms@npm:5.0.3" +"react-datocms@npm:^3.1.0": + version: 3.1.4 + resolution: "react-datocms@npm:3.1.4" dependencies: - "@mux/mux-player-react": "*" datocms-listen: ^0.1.9 datocms-structured-text-generic-html-renderer: ^2.0.1 datocms-structured-text-utils: ^2.0.1 - react-intersection-observer: ^9.4.3 + react-intersection-observer: ^8.33.1 react-string-replace: ^1.1.0 universal-base64: ^2.1.0 use-deep-compare-effect: ^1.6.1 peerDependencies: react: ">= 16.12.0" - checksum: 22c20152afb54424acfe967a2c8c525cd9f132a33374f2aba0231f16ea64dade389b096e2dac8de9ffded612bc32e9891d725609ee947639fe1cef907cb143f5 + checksum: 54aba12aef4937175c2011548a8a576c96c8d8a596e84d191826910624c1d596e76a49782689dc236388a10803b02e700ac820cb7500cca7fd147a81f6c544c3 languageName: node linkType: hard @@ -42307,16 +41322,12 @@ __metadata: languageName: node linkType: hard -"react-intersection-observer@npm:^9.4.3": - version: 9.13.1 - resolution: "react-intersection-observer@npm:9.13.1" +"react-intersection-observer@npm:^8.33.1": + version: 8.34.0 + resolution: "react-intersection-observer@npm:8.34.0" peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - react-dom: - optional: true - checksum: 92b3e7d9293365635bf5ede89b912a670030c6244879dce36fa9437e6749c637151087fbcaa72cc160b2fa7045bd5ac861a8535e0a2b7b8f230f11f2e0391005 + react: ^15.0.0 || ^16.0.0 || ^17.0.0|| ^18.0.0 + checksum: 7713fecfd1512c7f5a60f9f0bf15403b8f8bbd4110bcafaeaea6de36a0e0eb60368c3638f99e9c97b75ad8fc787ea48c241dcb5c694f821d7f2976f709082cc5 languageName: node linkType: hard @@ -42426,16 +41437,6 @@ __metadata: languageName: node linkType: hard -"react-parallax-tilt@npm:^1.7.226": - version: 1.7.248 - resolution: "react-parallax-tilt@npm:1.7.248" - peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: f1c7c00d5cbaf535aec71721c2d2b34268d7d79154aa1b63f32030a08cd2e17e8b30bb8740a1ef3ed06833fe99f004f74f72fd2c38d63222d27d932eab3babd2 - languageName: node - linkType: hard - "react-phone-input-2@npm:^2.15.1": version: 2.15.1 resolution: "react-phone-input-2@npm:2.15.1" @@ -42558,22 +41559,6 @@ __metadata: languageName: node linkType: hard -"react-remove-scroll-bar@npm:^2.3.6": - version: 2.3.6 - resolution: "react-remove-scroll-bar@npm:2.3.6" - dependencies: - react-style-singleton: ^2.2.1 - tslib: ^2.0.0 - peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: e793fe110e2ea60d5724d0b60f09de1f6cd1b080df00df9e68bb9a1b985895830e703194647059fdc22402a67a89b7673a5260773b89bcd98031fd99bc91aefa - languageName: node - linkType: hard - "react-remove-scroll@npm:2.5.4": version: 2.5.4 resolution: "react-remove-scroll@npm:2.5.4" @@ -42612,25 +41597,6 @@ __metadata: languageName: node linkType: hard -"react-remove-scroll@npm:2.6.0": - version: 2.6.0 - resolution: "react-remove-scroll@npm:2.6.0" - dependencies: - react-remove-scroll-bar: ^2.3.6 - react-style-singleton: ^2.2.1 - tslib: ^2.1.0 - use-callback-ref: ^1.3.0 - use-sidecar: ^1.1.2 - peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: e7ad2383ce20d63cf28f3ed14e63f684e139301fc4a5c1573da330d4465b733e6084c33b2bfcaee448c9b1df0e37993a15d6cba8a1dd80fe631f803e48e9f798 - languageName: node - linkType: hard - "react-remove-scroll@npm:^2.4.0": version: 2.4.4 resolution: "react-remove-scroll@npm:2.4.4" @@ -42887,18 +41853,6 @@ __metadata: languageName: node linkType: hard -"react-twitter-embed@npm:^4.0.4": - version: 4.0.4 - resolution: "react-twitter-embed@npm:4.0.4" - dependencies: - scriptjs: ^2.5.9 - peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: cdb3c5bd04c4da0efa767476be47c0a3865fb6335f2a1b9e242170167b51615c38164223278cef60c77143c4bac27ba582cbea054d0af3f138104fa5ec537c4c - languageName: node - linkType: hard - "react-universal-interface@npm:^0.6.2": version: 0.6.2 resolution: "react-universal-interface@npm:0.6.2" @@ -44779,13 +43733,6 @@ __metadata: languageName: node linkType: hard -"scriptjs@npm:^2.5.9": - version: 2.5.9 - resolution: "scriptjs@npm:2.5.9" - checksum: fc84cb6b60b6fb9aa6f1b3bc59fc94b233bd5241ed3a04233579014382b5eb60640269c87d8657902acc09f9b785ee33230c218627cea00e653564bda8f5acb6 - languageName: node - linkType: hard - "scuid@npm:^1.1.0": version: 1.1.0 resolution: "scuid@npm:1.1.0" @@ -44892,15 +43839,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.6.0": - version: 7.6.3 - resolution: "semver@npm:7.6.3" - bin: - semver: bin/semver.js - checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8 - languageName: node - linkType: hard - "semver@npm:~2.3.1": version: 2.3.2 resolution: "semver@npm:2.3.2" @@ -45072,18 +44010,6 @@ __metadata: languageName: node linkType: hard -"set-function-name@npm:^2.0.2": - version: 2.0.2 - resolution: "set-function-name@npm:2.0.2" - dependencies: - define-data-property: ^1.1.4 - es-errors: ^1.3.0 - functions-have-names: ^1.2.3 - has-property-descriptors: ^1.0.2 - checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f - languageName: node - linkType: hard - "set-harmonic-interval@npm:^1.0.1": version: 1.0.1 resolution: "set-harmonic-interval@npm:1.0.1" @@ -46186,26 +45112,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.11": - version: 4.0.11 - resolution: "string.prototype.matchall@npm:4.0.11" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - get-intrinsic: ^1.2.4 - gopd: ^1.0.1 - has-symbols: ^1.0.3 - internal-slot: ^1.0.7 - regexp.prototype.flags: ^1.5.2 - set-function-name: ^2.0.2 - side-channel: ^1.0.6 - checksum: 6ac6566ed065c0c8489c91156078ca077db8ff64d683fda97ae652d00c52dfa5f39aaab0a710d8243031a857fd2c7c511e38b45524796764d25472d10d7075ae - languageName: node - linkType: hard - "string.prototype.matchall@npm:^4.0.7": version: 4.0.7 resolution: "string.prototype.matchall@npm:4.0.7" @@ -46249,16 +45155,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.repeat@npm:^1.0.0": - version: 1.0.0 - resolution: "string.prototype.repeat@npm:1.0.0" - dependencies: - define-properties: ^1.1.3 - es-abstract: ^1.17.5 - checksum: 95dfc514ed7f328d80a066dabbfbbb1615c3e51490351085409db2eb7cbfed7ea29fdadaf277647fbf9f4a1e10e6dd9e95e78c0fd2c4e6bb6723ea6e59401004 - languageName: node - linkType: hard - "string.prototype.trim@npm:^1.2.8": version: 1.2.8 resolution: "string.prototype.trim@npm:1.2.8" @@ -46357,17 +45253,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimstart@npm:1.0.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 - languageName: node - linkType: hard - "string_decoder@npm:^1.0.0, string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" @@ -47802,15 +46687,6 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^1.3.0": - version: 1.3.0 - resolution: "ts-api-utils@npm:1.3.0" - peerDependencies: - typescript: ">=4.2.0" - checksum: c746ddabfdffbf16cb0b0db32bb287236a19e583057f8649ee7c49995bb776e1d3ef384685181c11a1a480369e022ca97512cb08c517b2d2bd82c83754c97012 - languageName: node - linkType: hard - "ts-dedent@npm:^2.0.0, ts-dedent@npm:^2.2.0": version: 2.2.0 resolution: "ts-dedent@npm:2.2.0" @@ -48591,20 +47467,6 @@ __metadata: languageName: node linkType: hard -"typed-array-length@npm:^1.0.6": - version: 1.0.6 - resolution: "typed-array-length@npm:1.0.6" - dependencies: - call-bind: ^1.0.7 - for-each: ^0.3.3 - gopd: ^1.0.1 - has-proto: ^1.0.3 - is-typed-array: ^1.1.13 - possible-typed-array-names: ^1.0.0 - checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c - languageName: node - linkType: hard - "typedarray-to-buffer@npm:^3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" @@ -48708,20 +47570,6 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:^8.2.0": - version: 8.11.0 - resolution: "typescript-eslint@npm:8.11.0" - dependencies: - "@typescript-eslint/eslint-plugin": 8.11.0 - "@typescript-eslint/parser": 8.11.0 - "@typescript-eslint/utils": 8.11.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 0dfe0445fecb86436fc285523b1d81529f31d465c3e98b48858761e4f3b1de4be106d9fb9bbf7833d63927b21cf8ddc2fc524768280145ae53b84514b05829cf - languageName: node - linkType: hard - "typescript@npm:5.3.3": version: 5.3.3 resolution: "typescript@npm:5.3.3" @@ -48732,7 +47580,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.4.4, typescript@npm:^4.9.4": +"typescript@npm:^4.9.4": version: 4.9.5 resolution: "typescript@npm:4.9.5" bin: @@ -48762,7 +47610,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^4.4.4#~builtin, typescript@patch:typescript@^4.9.4#~builtin": +"typescript@patch:typescript@^4.9.4#~builtin": version: 4.9.5 resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=23ec76" bin: