diff --git a/firebase/dataconnect/connector/.keep b/dataconnect/.keep similarity index 100% rename from firebase/dataconnect/connector/.keep rename to dataconnect/.keep diff --git a/dataconnect/connector/activityLog/mutations.gql b/dataconnect/connector/activityLog/mutations.gql deleted file mode 100644 index 85e6f795..00000000 --- a/dataconnect/connector/activityLog/mutations.gql +++ /dev/null @@ -1,51 +0,0 @@ -mutation CreateActivityLog( - $title: String!, - $description: String!, - $activityType: ActivityType!, - $userId: String!, - $isRead: Boolean, - $iconType: String, - $iconColor: String -) @auth(level: USER) { - activityLog_insert( - data: { - title: $title - description: $description - activityType: $activityType - userId: $userId - isRead: $isRead - iconType: $iconType - iconColor: $iconColor - } - ) -} - -mutation UpdateActivityLog( - $id: UUID!, - $title: String, - $description: String, - $activityType: ActivityType, - $userId: String, - $isRead: Boolean, - $iconType: String, - $iconColor: String -) @auth(level: USER) { - activityLog_update( - id: $id, - data: { - title: $title - description: $description - activityType: $activityType - userId: $userId - isRead: $isRead - iconType: $iconType - iconColor: $iconColor - } - ) -} - -mutation DeleteActivityLog( - $id: UUID! -) @auth(level: USER) { - activityLog_delete(id: $id) -} diff --git a/dataconnect/connector/activityLog/queries.gql b/dataconnect/connector/activityLog/queries.gql deleted file mode 100644 index d48bb119..00000000 --- a/dataconnect/connector/activityLog/queries.gql +++ /dev/null @@ -1,50 +0,0 @@ -query listActivityLog @auth(level: USER) { - activityLogs { - id - title - description - activityType - userId - isRead - iconType - iconColor - } -} - -query getActivityLogById( - $id: UUID! -) @auth(level: USER) { - activityLog(id: $id) { - id - title - description - activityType - userId - isRead - iconType - iconColor - } -} - -query filterActivityLog( - $userId: String, - $activityType: ActivityType, - $isRead: Boolean -) @auth(level: USER) { - activityLogs( - where: { - userId: { eq: $userId } - activityType: { eq: $activityType } - isRead: { eq: $isRead } - } - ) { - id - title - description - activityType - userId - isRead - iconType - iconColor - } -} diff --git a/dataconnect/connector/assignment/mutations.gql b/dataconnect/connector/assignment/mutations.gql deleted file mode 100644 index b91cb417..00000000 --- a/dataconnect/connector/assignment/mutations.gql +++ /dev/null @@ -1,51 +0,0 @@ -mutation CreateAssignment( - $assignmentNumber: String, - $orderId: UUID!, - $workforceId: UUID!, - $vendorId: UUID!, - $role: String!, - $assignmentStatus: AssignmentStatus!, - $scheduledStart: Timestamp! -) @auth(level: USER) { - assignment_insert( - data: { - assignmentNumber: $assignmentNumber - orderId: $orderId - workforceId: $workforceId - vendorId: $vendorId - role: $role - assignmentStatus: $assignmentStatus - scheduledStart: $scheduledStart - } - ) -} - -mutation UpdateAssignment( - $id: UUID!, - $assignmentNumber: String, - $orderId: UUID, - $workforceId: UUID, - $vendorId: UUID, - $role: String, - $assignmentStatus: AssignmentStatus, - $scheduledStart: Timestamp -) @auth(level: USER) { - assignment_update( - id: $id, - data: { - assignmentNumber: $assignmentNumber - orderId: $orderId - workforceId: $workforceId - vendorId: $vendorId - role: $role - assignmentStatus: $assignmentStatus - scheduledStart: $scheduledStart - } - ) -} - -mutation DeleteAssignment( - $id: UUID! -) @auth(level: USER) { - assignment_delete(id: $id) -} diff --git a/dataconnect/connector/assignment/queries.gql b/dataconnect/connector/assignment/queries.gql deleted file mode 100644 index 06c16ba4..00000000 --- a/dataconnect/connector/assignment/queries.gql +++ /dev/null @@ -1,56 +0,0 @@ -# dataconnect/connector/assignment/queries.gql - -query listAssignment @auth(level: USER) { - assignments { - id - assignmentNumber - orderId - workforceId - vendorId - role - assignmentStatus - scheduledStart - } -} - -query getAssignmentById( - $id: UUID! -) @auth(level: USER) { - assignment(id: $id) { - id - assignmentNumber - orderId - workforceId - vendorId - role - assignmentStatus - scheduledStart - } -} - -query filterAssignment( - $assignmentNumber: String, - $orderId: UUID, - $workforceId: UUID, - $vendorId: UUID, - $assignmentStatus: AssignmentStatus -) @auth(level: USER) { - assignments( - where: { - assignmentNumber: { eq: $assignmentNumber } - orderId: { eq: $orderId } - workforceId: { eq: $workforceId } - vendorId: { eq: $vendorId } - assignmentStatus: { eq: $assignmentStatus } - } - ) { - id - assignmentNumber - orderId - workforceId - vendorId - role - assignmentStatus - scheduledStart - } -} diff --git a/dataconnect/connector/business/mutations.gql b/dataconnect/connector/business/mutations.gql deleted file mode 100644 index 9be33782..00000000 --- a/dataconnect/connector/business/mutations.gql +++ /dev/null @@ -1,47 +0,0 @@ -mutation CreateBusiness( - $businessName: String!, - $contactName: String!, - $email: String, - $sector: BusinessSector, - $rateGroup: BusinessRateGroup!, - $status: BusinessStatus -) @auth(level: USER) { - business_insert( - data: { - businessName: $businessName - contactName: $contactName - email: $email - sector: $sector - rateGroup: $rateGroup - status: $status - } - ) -} - -mutation UpdateBusiness( - $id: UUID!, - $businessName: String, - $contactName: String, - $email: String, - $sector: BusinessSector, - $rateGroup: BusinessRateGroup, - $status: BusinessStatus -) @auth(level: USER) { - business_update( - id: $id, - data: { - businessName: $businessName - contactName: $contactName - email: $email - sector: $sector - rateGroup: $rateGroup - status: $status - } - ) -} - -mutation DeleteBusiness( - $id: UUID! -) @auth(level: USER) { - business_delete(id: $id) -} diff --git a/dataconnect/connector/business/queries.gql b/dataconnect/connector/business/queries.gql deleted file mode 100644 index 4eeceead..00000000 --- a/dataconnect/connector/business/queries.gql +++ /dev/null @@ -1,51 +0,0 @@ -query listBusiness @auth(level: USER) { - businesses { - id - businessName - contactName - email - sector - rateGroup - status - } -} - -query getBusinessById( - $id: UUID! -) @auth(level: USER) { - business(id: $id) { - id - businessName - contactName - email - sector - rateGroup - status - } -} - -query filterBusiness( - $businessName: String, - $contactName: String, - $sector: BusinessSector, - $rateGroup: BusinessRateGroup, - $status: BusinessStatus -) @auth(level: USER) { - businesses( - where: { - businessName: { eq: $businessName } - contactName: { eq: $contactName } - sector: { eq: $sector } - rateGroup: { eq: $rateGroup } - status: { eq: $status } - } - ) { - id - businessName - contactName - email - sector - rateGroup - status - } -} diff --git a/dataconnect/connector/certification/mutations.gql b/dataconnect/connector/certification/mutations.gql deleted file mode 100644 index b38f5296..00000000 --- a/dataconnect/connector/certification/mutations.gql +++ /dev/null @@ -1,47 +0,0 @@ -mutation CreateCertification( - $employeeName: String!, - $certificationName: String!, - $certificationType: CertificationType, - $status: CertificationStatus, - $expiryDate: String!, - $validationStatus: CertificationValidationStatus -) @auth(level: USER) { - certification_insert( - data: { - employeeName: $employeeName - certificationName: $certificationName - certificationType: $certificationType - status: $status - expiryDate: $expiryDate - validationStatus: $validationStatus - } - ) -} - -mutation UpdateCertification( - $id: UUID!, - $employeeName: String, - $certificationName: String, - $certificationType: CertificationType, - $status: CertificationStatus, - $expiryDate: String, - $validationStatus: CertificationValidationStatus -) @auth(level: USER) { - certification_update( - id: $id, - data: { - employeeName: $employeeName - certificationName: $certificationName - certificationType: $certificationType - status: $status - expiryDate: $expiryDate - validationStatus: $validationStatus - } - ) -} - -mutation DeleteCertification( - $id: UUID! -) @auth(level: USER) { - certification_delete(id: $id) -} diff --git a/dataconnect/connector/certification/queries.gql b/dataconnect/connector/certification/queries.gql deleted file mode 100644 index 888e6127..00000000 --- a/dataconnect/connector/certification/queries.gql +++ /dev/null @@ -1,54 +0,0 @@ -query listCertification @auth(level: USER) { - certifications { - id - employeeName - certificationName - certificationType - status - expiryDate - validationStatus - } -} - -query getCertificationById( - $id: UUID! -) @auth(level: USER) { - certification(id: $id) { - id - employeeName - certificationName - certificationType - status - expiryDate - validationStatus - createdDate - updatedDate - createdBy - } -} - -query filterCertification( - $employeeName: String, - $certificationName: String, - $certificationType: CertificationType, - $status: CertificationStatus, - $validationStatus: CertificationValidationStatus -) @auth(level: USER) { - certifications( - where: { - employeeName: { eq: $employeeName } - certificationName: { eq: $certificationName } - certificationType: { eq: $certificationType } - status: { eq: $status } - validationStatus: { eq: $validationStatus } - } - ) { - id - employeeName - certificationName - certificationType - status - expiryDate - validationStatus - } -} diff --git a/dataconnect/connector/connector.yaml b/dataconnect/connector/connector.yaml deleted file mode 100644 index c516c6ba..00000000 --- a/dataconnect/connector/connector.yaml +++ /dev/null @@ -1,18 +0,0 @@ -connectorId: krow-connector -generate: - javascriptSdk: - - outputDir: ../../frontend-web/src/dataconnect-generated - package: "@dataconnect/generated" - packageJsonDir: ../../frontend-web - react: true - angular: false - - outputDir: ../../internal-api-harness/src/dataconnect-generated - package: "@dataconnect/generated" - packageJsonDir: ../../internal-api-harness - react: true - angular: false - - outputDir: ../../frontend-web-free/src/dataconnect-generated - package: "@dataconnect/generated" - packageJsonDir: ../../frontend-web-free - react: true - angular: false diff --git a/dataconnect/connector/conversation/mutations.gql b/dataconnect/connector/conversation/mutations.gql deleted file mode 100644 index 22619f63..00000000 --- a/dataconnect/connector/conversation/mutations.gql +++ /dev/null @@ -1,39 +0,0 @@ -mutation CreateConversation( - $participants: String!, - $conversationType: ConversationType!, - $relatedTo: UUID!, - $status: ConversationStatus -) @auth(level: USER) { - conversation_insert( - data: { - participants: $participants - conversationType: $conversationType - relatedTo: $relatedTo - status: $status - } - ) -} - -mutation UpdateConversation( - $id: UUID!, - $participants: String, - $conversationType: ConversationType, - $relatedTo: UUID, - $status: ConversationStatus -) @auth(level: USER) { - conversation_update( - id: $id, - data: { - participants: $participants - conversationType: $conversationType - relatedTo: $relatedTo - status: $status - } - ) -} - -mutation DeleteConversation( - $id: UUID! -) @auth(level: USER) { - conversation_delete(id: $id) -} diff --git a/dataconnect/connector/conversation/queries.gql b/dataconnect/connector/conversation/queries.gql deleted file mode 100644 index db6f2526..00000000 --- a/dataconnect/connector/conversation/queries.gql +++ /dev/null @@ -1,43 +0,0 @@ -# dataconnect/connector/conversation/queries.gql - -query listConversation @auth(level: USER) { - conversations { - id - participants - conversationType - relatedTo - status - } -} - -query getConversationById( - $id: UUID! -) @auth(level: USER) { - conversation(id: $id) { - id - participants - conversationType - relatedTo - status - } -} - -query filterConversation( - $conversationType: ConversationType, - $status: ConversationStatus, - $relatedTo: UUID -) @auth(level: USER) { - conversations( - where: { - conversationType: { eq: $conversationType } - status: { eq: $status } - relatedTo: { eq: $relatedTo } - } - ) { - id - participants - conversationType - relatedTo - status - } -} diff --git a/dataconnect/connector/enterprise/mutations.gql b/dataconnect/connector/enterprise/mutations.gql deleted file mode 100644 index f079bebe..00000000 --- a/dataconnect/connector/enterprise/mutations.gql +++ /dev/null @@ -1,35 +0,0 @@ -mutation CreateEnterprise( - $enterpriseNumber: String!, - $enterpriseName: String!, - $enterpriseCode: String! -) @auth(level: USER) { - enterprise_insert( - data: { - enterpriseNumber: $enterpriseNumber - enterpriseName: $enterpriseName - enterpriseCode: $enterpriseCode - } - ) -} - -mutation UpdateEnterprise( - $id: UUID!, - $enterpriseNumber: String, - $enterpriseName: String, - $enterpriseCode: String -) @auth(level: USER) { - enterprise_update( - id: $id, - data: { - enterpriseNumber: $enterpriseNumber - enterpriseName: $enterpriseName - enterpriseCode: $enterpriseCode - } - ) -} - -mutation DeleteEnterprise( - $id: UUID! -) @auth(level: USER) { - enterprise_delete(id: $id) -} diff --git a/dataconnect/connector/enterprise/queries.gql b/dataconnect/connector/enterprise/queries.gql deleted file mode 100644 index 5c81baf4..00000000 --- a/dataconnect/connector/enterprise/queries.gql +++ /dev/null @@ -1,38 +0,0 @@ -query listEnterprise @auth(level: USER) { - enterprises { - id - enterpriseNumber - enterpriseName - enterpriseCode - } -} - -query getEnterpriseById( - $id: UUID! -) @auth(level: USER) { - enterprise(id: $id) { - id - enterpriseNumber - enterpriseName - enterpriseCode - } -} - -query filterEnterprise( - $enterpriseNumber: String, - $enterpriseName: String, - $enterpriseCode: String -) @auth(level: USER) { - enterprises( - where: { - enterpriseNumber: { eq: $enterpriseNumber } - enterpriseName: { eq: $enterpriseName } - enterpriseCode: { eq: $enterpriseCode } - } - ) { - id - enterpriseNumber - enterpriseName - enterpriseCode - } -} diff --git a/dataconnect/connector/event/mutations.gql b/dataconnect/connector/event/mutations.gql deleted file mode 100644 index c04425ee..00000000 --- a/dataconnect/connector/event/mutations.gql +++ /dev/null @@ -1,208 +0,0 @@ -mutation CreateEvent( - $eventName: String!, - $isRapid: Boolean, - $isRecurring: Boolean, - $isMultiDay: Boolean, - $recurrenceType: RecurrenceType, - $recurrenceStartDate: Timestamp, - $recurrenceEndDate: Timestamp, - $scatterDates: Any, - $multiDayStartDate: Timestamp, - $multiDayEndDate: Timestamp, - $bufferTimeBefore: Float, - $bufferTimeAfter: Float, - $conflictDetectionEnabled: Boolean, - $detectedConflicts: Any, - $businessId: UUID!, - $businessName: String, - $vendorId: String, - $vendorName: String, - $hub: String, - $eventLocation: String, - $contractType: ContractType, - $poReference: String, - $status: EventStatus!, - $date: String!, - $shifts: Any, - $addons: Any, - $total: Float, - $clientName: String, - $clientEmail: String, - $clientPhone: String, - $invoiceId: UUID, - $notes: String, - $requested: Int, - $assignedStaff: Any, - $department: String, - $createdBy: String, - $orderType: String, - $recurringStartDate: String, - $recurringEndDate: String, - $recurringDays: Any, - $permanentStartDate: String, - $permanentDays: Any, - $includeBackup: Boolean, - $backupStaffCount: Int, - $recurringTime: String, - $permanentTime: String -) @auth(level: USER) { - event_insert( - data: { - eventName: $eventName - isRapid: $isRapid - isRecurring: $isRecurring - isMultiDay: $isMultiDay - recurrenceType: $recurrenceType - recurrenceStartDate: $recurrenceStartDate - recurrenceEndDate: $recurrenceEndDate - scatterDates: $scatterDates - multiDayStartDate: $multiDayStartDate - multiDayEndDate: $multiDayEndDate - bufferTimeBefore: $bufferTimeBefore - bufferTimeAfter: $bufferTimeAfter - conflictDetectionEnabled: $conflictDetectionEnabled - detectedConflicts: $detectedConflicts - businessId: $businessId - businessName: $businessName - vendorId: $vendorId - vendorName: $vendorName - hub: $hub - eventLocation: $eventLocation - contractType: $contractType - poReference: $poReference - status: $status - date: $date - shifts: $shifts - addons: $addons - total: $total - clientName: $clientName - clientEmail: $clientEmail - clientPhone: $clientPhone - invoiceId: $invoiceId - notes: $notes - orderType: $orderType - requested: $requested - assignedStaff: $assignedStaff - department: $department - createdBy: $createdBy - recurringStartDate: $recurringStartDate - recurringEndDate: $recurringEndDate - recurringDays: $recurringDays - permanentStartDate: $permanentStartDate - permanentDays: $permanentDays - includeBackup: $includeBackup - backupStaffCount: $backupStaffCount - recurringTime: $recurringTime - permanentTime: $permanentTime - } - ) -} - - -mutation UpdateEvent( - $id: UUID!, - $eventName: String, - $isRapid: Boolean, - $isRecurring: Boolean, - $isMultiDay: Boolean, - $recurrenceType: RecurrenceType, - $recurrenceStartDate: Timestamp, - $recurrenceEndDate: Timestamp, - $scatterDates: Any, - $multiDayStartDate: Timestamp, - $multiDayEndDate: Timestamp, - $bufferTimeBefore: Float, - $bufferTimeAfter: Float, - $conflictDetectionEnabled: Boolean, - $detectedConflicts: Any, - $businessId: UUID, - $businessName: String, - $vendorId: String, - $vendorName: String, - $hub: String, - $eventLocation: String, - $contractType: ContractType, - $poReference: String, - $status: EventStatus, - $date: String, - $shifts: Any, - $addons: Any, - $total: Float, - $clientName: String, - $clientEmail: String, - $clientPhone: String, - $invoiceId: UUID, - $notes: String, - $requested: Int, - $orderType: String, - $department: String, - $assignedStaff: Any, - $createdBy: String, - $recurringStartDate: String, - $recurringEndDate: String, - $recurringDays: Any, - $permanentStartDate: String, - $permanentDays: Any, - $includeBackup: Boolean, - $backupStaffCount: Int, - $recurringTime: String, - $permanentTime: String -) @auth(level: USER) { - event_update( - id: $id, - data: { - eventName: $eventName - isRapid: $isRapid - isRecurring: $isRecurring - isMultiDay: $isMultiDay - recurrenceType: $recurrenceType - recurrenceStartDate: $recurrenceStartDate - recurrenceEndDate: $recurrenceEndDate - scatterDates: $scatterDates - multiDayStartDate: $multiDayStartDate - multiDayEndDate: $multiDayEndDate - bufferTimeBefore: $bufferTimeBefore - bufferTimeAfter: $bufferTimeAfter - conflictDetectionEnabled: $conflictDetectionEnabled - detectedConflicts: $detectedConflicts - businessId: $businessId - businessName: $businessName - vendorId: $vendorId - vendorName: $vendorName - hub: $hub - eventLocation: $eventLocation - contractType: $contractType - poReference: $poReference - status: $status - date: $date - shifts: $shifts - addons: $addons - total: $total - clientName: $clientName - clientEmail: $clientEmail - clientPhone: $clientPhone - invoiceId: $invoiceId - notes: $notes - orderType: $orderType - requested: $requested - assignedStaff: $assignedStaff - department: $department - createdBy: $createdBy - recurringStartDate: $recurringStartDate - recurringEndDate: $recurringEndDate - recurringDays: $recurringDays - permanentStartDate: $permanentStartDate - permanentDays: $permanentDays - includeBackup: $includeBackup - backupStaffCount: $backupStaffCount - recurringTime: $recurringTime - permanentTime: $permanentTime - } - ) -} - -mutation DeleteEvent( - $id: UUID! -) @auth(level: USER) { - event_delete(id: $id) -} diff --git a/dataconnect/connector/event/queries.gql b/dataconnect/connector/event/queries.gql deleted file mode 100644 index 2a4a5996..00000000 --- a/dataconnect/connector/event/queries.gql +++ /dev/null @@ -1,193 +0,0 @@ -query listEvents ( - $orderByDate: OrderDirection - $orderByCreatedDate: OrderDirection, - $limit: Int -) @auth(level: USER) { - events( - orderBy: [ - { date: $orderByDate } - { createdDate: $orderByCreatedDate } - ] - limit: $limit - ) { - id - eventName - status - date - isRapid - isRecurring - isMultiDay - recurrenceType - recurrenceStartDate - recurrenceEndDate - scatterDates - multiDayStartDate - multiDayEndDate - bufferTimeBefore - bufferTimeAfter - conflictDetectionEnabled - detectedConflicts - businessId - businessName - vendorId - vendorName - hub - eventLocation - contractType - poReference - shifts - addons - total - clientName - clientEmail - clientPhone - invoiceId - notes - requested - assignedStaff - orderType - department - createdBy - recurringStartDate - recurringEndDate - recurringDays - permanentStartDate - permanentDays - includeBackup - backupStaffCount - recurringTime - permanentTime - } -} - -query getEventById( - $id: UUID! -) @auth(level: USER) { - event(id: $id) { - id - eventName - status - date - isRapid - isRecurring - isMultiDay - recurrenceType - recurrenceStartDate - recurrenceEndDate - scatterDates - multiDayStartDate - multiDayEndDate - bufferTimeBefore - bufferTimeAfter - conflictDetectionEnabled - detectedConflicts - businessId - businessName - vendorId - vendorName - hub - eventLocation - contractType - poReference - shifts - addons - total - clientName - clientEmail - clientPhone - invoiceId - notes - requested - orderType - department - assignedStaff - recurringStartDate - recurringEndDate - recurringDays - permanentStartDate - permanentDays - includeBackup - backupStaffCount - recurringTime - permanentTime - } -} - -query filterEvents( - $status: EventStatus, - $businessId: UUID, - $vendorId: String, - $isRecurring: Boolean, - $isRapid: Boolean, - $isMultiDay: Boolean, - $recurrenceType: RecurrenceType, - $date: String, - $hub: String, - $eventLocation: String, - $contractType: ContractType, - $clientEmail: String -) @auth(level: USER) { - events( - where: { - status: { eq: $status } - businessId: { eq: $businessId } - vendorId: { eq: $vendorId } - isRecurring: { eq: $isRecurring } - isRapid: { eq: $isRapid } - isMultiDay: { eq: $isMultiDay } - recurrenceType: { eq: $recurrenceType } - date: { eq: $date } - hub: { eq: $hub } - eventLocation: { eq: $eventLocation } - contractType: { eq: $contractType } - clientEmail: { eq: $clientEmail } - }) { - id - eventName - status - date - isRapid - isRecurring - isMultiDay - recurrenceType - recurrenceStartDate - recurrenceEndDate - scatterDates - multiDayStartDate - multiDayEndDate - bufferTimeBefore - bufferTimeAfter - conflictDetectionEnabled - detectedConflicts - businessId - businessName - vendorId - vendorName - hub - eventLocation - contractType - poReference - shifts - addons - total - clientName - clientEmail - clientPhone - invoiceId - notes - requested - assignedStaff - orderType - department - createdBy - recurringStartDate - recurringEndDate - recurringDays - permanentStartDate - permanentDays - includeBackup - backupStaffCount - recurringTime - permanentTime - } -} diff --git a/dataconnect/connector/invoice/mutations.gql b/dataconnect/connector/invoice/mutations.gql deleted file mode 100644 index 0fabc96d..00000000 --- a/dataconnect/connector/invoice/mutations.gql +++ /dev/null @@ -1,51 +0,0 @@ -mutation CreateInvoice( - $invoiceNumber: String!, - $amount: Float!, - $status: InvoiceStatus!, - $issueDate: Timestamp!, - $dueDate: Timestamp!, - $disputedItems: String, - $isAutoGenerated: Boolean -) @auth(level: USER) { - invoice_insert( - data: { - invoiceNumber: $invoiceNumber - amount: $amount - status: $status - issueDate: $issueDate - dueDate: $dueDate - disputedItems: $disputedItems - isAutoGenerated: $isAutoGenerated - } - ) -} - -mutation UpdateInvoice( - $id: UUID!, - $invoiceNumber: String, - $amount: Float, - $status: InvoiceStatus, - $issueDate: Timestamp, - $dueDate: Timestamp, - $disputedItems: String, - $isAutoGenerated: Boolean -) @auth(level: USER) { - invoice_update( - id: $id, - data: { - invoiceNumber: $invoiceNumber - amount: $amount - status: $status - issueDate: $issueDate - dueDate: $dueDate - disputedItems: $disputedItems - isAutoGenerated: $isAutoGenerated - } - ) -} - -mutation DeleteInvoice( - $id: UUID! -) @auth(level: USER) { - invoice_delete(id: $id) -} diff --git a/dataconnect/connector/invoice/queries.gql b/dataconnect/connector/invoice/queries.gql deleted file mode 100644 index d4a68fc6..00000000 --- a/dataconnect/connector/invoice/queries.gql +++ /dev/null @@ -1,51 +0,0 @@ -query listInvoice @auth(level: USER) { - invoices { - id - invoiceNumber - amount - status - issueDate - dueDate - disputedItems - isAutoGenerated - } -} - -query getInvoiceById( - $id: UUID! -) @auth(level: USER) { - invoice(id: $id) { - id - invoiceNumber - amount - status - issueDate - dueDate - disputedItems - isAutoGenerated - } -} - -query filterInvoices( - $invoiceNumber: String, - $status: InvoiceStatus, - $isAutoGenerated: Boolean, - $amount: Float -) @auth(level: USER) { - invoices( - where: { - invoiceNumber: { eq: $invoiceNumber } - status: { eq: $status } - isAutoGenerated: { eq: $isAutoGenerated } - amount: { eq: $amount } - } - ) { - id - invoiceNumber - amount - status - issueDate - dueDate - isAutoGenerated - } -} diff --git a/dataconnect/connector/message/mutations.gql b/dataconnect/connector/message/mutations.gql deleted file mode 100644 index ea03b0b2..00000000 --- a/dataconnect/connector/message/mutations.gql +++ /dev/null @@ -1,39 +0,0 @@ -mutation CreateMessage( - $conversationId: UUID!, - $senderName: String!, - $content: String!, - $readBy: String -) @auth(level: USER) { - message_insert( - data: { - conversationId: $conversationId - senderName: $senderName - content: $content - readBy: $readBy - } - ) -} - -mutation UpdateMessage( - $id: UUID!, - $conversationId: UUID, - $senderName: String, - $content: String, - $readBy: String -) @auth(level: USER) { - message_update( - id: $id, - data: { - conversationId: $conversationId - senderName: $senderName - content: $content - readBy: $readBy - } - ) -} - -mutation DeleteMessage( - $id: UUID! -) @auth(level: USER) { - message_delete(id: $id) -} diff --git a/dataconnect/connector/message/queries.gql b/dataconnect/connector/message/queries.gql deleted file mode 100644 index a999f19d..00000000 --- a/dataconnect/connector/message/queries.gql +++ /dev/null @@ -1,39 +0,0 @@ -query listMessage @auth(level: USER) { - messages { - id - conversationId - senderName - content - readBy - } -} - -query getMessageById( - $id: UUID! -) @auth(level: USER) { - message(id: $id) { - id - conversationId - senderName - content - readBy - } -} - -query filterMessage( - $conversationId: UUID, - $senderName: String -) @auth(level: USER) { - messages( - where: { - conversationId: { eq: $conversationId } - senderName: { eq: $senderName } - } - ) { - id - conversationId - senderName - content - readBy - } -} diff --git a/dataconnect/connector/order/mutations.gql b/dataconnect/connector/order/mutations.gql deleted file mode 100644 index 5d4e8143..00000000 --- a/dataconnect/connector/order/mutations.gql +++ /dev/null @@ -1,39 +0,0 @@ -mutation CreateOrder( - $orderNumber: String!, - $partnerId: UUID!, - $orderType: OrderType, - $orderStatus: OrderStatus -) @auth(level: USER) { - order_insert( - data: { - orderNumber: $orderNumber - partnerId: $partnerId - orderType: $orderType - orderStatus: $orderStatus - } - ) -} - -mutation UpdateOrder( - $id: UUID!, - $orderNumber: String, - $partnerId: UUID, - $orderType: OrderType, - $orderStatus: OrderStatus -) @auth(level: USER) { - order_update( - id: $id, - data: { - orderNumber: $orderNumber - partnerId: $partnerId - orderType: $orderType - orderStatus: $orderStatus - } - ) -} - -mutation DeleteOrder( - $id: UUID! -) @auth(level: USER) { - order_delete(id: $id) -} diff --git a/dataconnect/connector/order/queries.gql b/dataconnect/connector/order/queries.gql deleted file mode 100644 index 1f924089..00000000 --- a/dataconnect/connector/order/queries.gql +++ /dev/null @@ -1,43 +0,0 @@ -query listOrder @auth(level: USER) { - orders { - id - orderNumber - partnerId - orderType - orderStatus - } -} - -query getOrderById( - $id: UUID! -) @auth(level: USER) { - order(id: $id) { - id - orderNumber - partnerId - orderType - orderStatus - } -} - -query filterOrder( - $orderNumber: String, - $partnerId: UUID, - $orderType: OrderType, - $orderStatus: OrderStatus -) @auth(level: USER) { - orders( - where: { - orderNumber: { eq: $orderNumber } - partnerId: { eq: $partnerId } - orderType: { eq: $orderType } - orderStatus: { eq: $orderStatus } - } - ) { - id - orderNumber - partnerId - orderType - orderStatus - } -} diff --git a/dataconnect/connector/partner/mutations.gql b/dataconnect/connector/partner/mutations.gql deleted file mode 100644 index 790ec7f7..00000000 --- a/dataconnect/connector/partner/mutations.gql +++ /dev/null @@ -1,35 +0,0 @@ -mutation CreatePartner( - $partnerName: String!, - $partnerNumber: String!, - $partnerType: PartnerType -) @auth(level: USER) { - partner_insert( - data: { - partnerName: $partnerName - partnerNumber: $partnerNumber - partnerType: $partnerType - } - ) -} - -mutation UpdatePartner( - $id: UUID!, - $partnerName: String, - $partnerNumber: String, - $partnerType: PartnerType -) @auth(level: USER) { - partner_update( - id: $id, - data: { - partnerName: $partnerName - partnerNumber: $partnerNumber - partnerType: $partnerType - } - ) -} - -mutation DeletePartner( - $id: UUID! -) @auth(level: USER) { - partner_delete(id: $id) -} diff --git a/dataconnect/connector/partner/queries.gql b/dataconnect/connector/partner/queries.gql deleted file mode 100644 index bac247c3..00000000 --- a/dataconnect/connector/partner/queries.gql +++ /dev/null @@ -1,40 +0,0 @@ -# dataconnect/connector/partner/queries.gql - -query listPartner @auth(level: USER) { - partners { - id - partnerName - partnerNumber - partnerType - } -} - -query getPartnerById( - $id: UUID! -) @auth(level: USER) { - partner(id: $id) { - id - partnerName - partnerNumber - partnerType - } -} - -query filterPartner( - $partnerName: String, - $partnerNumber: String, - $partnerType: PartnerType -) @auth(level: USER) { - partners( - where: { - partnerName: { eq: $partnerName } - partnerNumber: { eq: $partnerNumber } - partnerType: { eq: $partnerType } - } - ) { - id - partnerName - partnerNumber - partnerType - } -} diff --git a/dataconnect/connector/sector/mutations.gql b/dataconnect/connector/sector/mutations.gql deleted file mode 100644 index 785fb9fa..00000000 --- a/dataconnect/connector/sector/mutations.gql +++ /dev/null @@ -1,35 +0,0 @@ -mutation CreateSector( - $sectorNumber: String!, - $sectorName: String!, - $sectorType: SectorType -) @auth(level: USER) { - sector_insert( - data: { - sectorNumber: $sectorNumber - sectorName: $sectorName - sectorType: $sectorType - } - ) -} - -mutation UpdateSector( - $id: UUID!, - $sectorNumber: String, - $sectorName: String, - $sectorType: SectorType -) @auth(level: USER) { - sector_update( - id: $id, - data: { - sectorNumber: $sectorNumber - sectorName: $sectorName - sectorType: $sectorType - } - ) -} - -mutation DeleteSector( - $id: UUID! -) @auth(level: USER) { - sector_delete(id: $id) -} diff --git a/dataconnect/connector/sector/queries.gql b/dataconnect/connector/sector/queries.gql deleted file mode 100644 index 26297f81..00000000 --- a/dataconnect/connector/sector/queries.gql +++ /dev/null @@ -1,38 +0,0 @@ -query listSector @auth(level: USER) { - sectors { - id - sectorNumber - sectorName - sectorType - } -} - -query getSectorById( - $id: UUID! -) @auth(level: USER) { - sector(id: $id) { - id - sectorNumber - sectorName - sectorType - } -} - -query filterSector( - $sectorNumber: String, - $sectorName: String, - $sectorType: SectorType -) @auth(level: USER) { - sectors( - where: { - sectorNumber: { eq: $sectorNumber } - sectorName: { eq: $sectorName } - sectorType: { eq: $sectorType } - } - ) { - id - sectorNumber - sectorName - sectorType - } -} diff --git a/dataconnect/connector/shift/mutations.gql b/dataconnect/connector/shift/mutations.gql deleted file mode 100644 index a98f7302..00000000 --- a/dataconnect/connector/shift/mutations.gql +++ /dev/null @@ -1,39 +0,0 @@ -mutation CreateShift( - $shiftName: String!, - $startDate: Timestamp!, - $endDate: Timestamp, - $assignedStaff: String -) @auth(level: USER) { - shift_insert( - data: { - shiftName: $shiftName - startDate: $startDate - endDate: $endDate - assignedStaff: $assignedStaff - } - ) -} - -mutation UpdateShift( - $id: UUID!, - $shiftName: String, - $startDate: Timestamp, - $endDate: Timestamp, - $assignedStaff: String -) @auth(level: USER) { - shift_update( - id: $id, - data: { - shiftName: $shiftName - startDate: $startDate - endDate: $endDate - assignedStaff: $assignedStaff - } - ) -} - -mutation DeleteShift( - $id: UUID! -) @auth(level: USER) { - shift_delete(id: $id) -} diff --git a/dataconnect/connector/shift/queries.gql b/dataconnect/connector/shift/queries.gql deleted file mode 100644 index 2e9811a5..00000000 --- a/dataconnect/connector/shift/queries.gql +++ /dev/null @@ -1,44 +0,0 @@ -query listShift @auth(level: USER) { - shifts { - id - shiftName - startDate - endDate - assignedStaff - } -} - -query getShiftById( - $id: UUID! -) @auth(level: USER) { - shift(id: $id) { - id - shiftName - startDate - endDate - assignedStaff - createdDate - updatedDate - createdBy - } -} - -query filterShift( - $shiftName: String, - $startDate: Timestamp, - $endDate: Timestamp -) @auth(level: USER) { - shifts( - where: { - shiftName: { eq: $shiftName } - startDate: { eq: $startDate } - endDate: { eq: $endDate } - } - ) { - id - shiftName - startDate - endDate - assignedStaff - } -} diff --git a/dataconnect/connector/staff/mutations.gql b/dataconnect/connector/staff/mutations.gql deleted file mode 100644 index 6bc3d3fa..00000000 --- a/dataconnect/connector/staff/mutations.gql +++ /dev/null @@ -1,171 +0,0 @@ -mutation CreateStaff( - $employeeName: String!, - $vendorId: String, - $vendorName: String, - $manager: String, - $contactNumber: String, - $phone:String # nuevo, - $email: String, - $department: StaffDepartment, - $hubLocation: String, - $eventLocation:String, # nuevo - $address:String, # nuevo - $city:String, # nuevo - $track: String, - $position: String, - $position2:String, # nuevo - $initial:String, # nuevo - $profileType: ProfileType, - $employmentType: EmploymentType, - $english: EnglishLevel, - $rate: Float, - $rating: Float, - $reliabilityScore: Int, - $backgroundCheckStatus: BackgroundCheckStatus, - $notes: String, - $accountingComments:String, # nuevo - $shiftCoveragePercentage:Int, # nuevo - $cancellationCount:Int, # nuevo - $noShowCount:Int, # nuevo - $totalShifts:Int, # nuevo - $invoiced:Boolean, # nuevo - $englishRequired:Boolean, # nuevo - $checkIn:String, # nuevo - $scheduleDays:String, # nuevo - $replacedBy:String, # nuevo - $action:String, # nuevo - $ro:String, # nuevo - $mon:String, # nuevo -) @auth(level: USER) { - staff_insert( - data: { - employeeName: $employeeName - vendorId: $vendorId - vendorName: $vendorName - manager: $manager - contactNumber: $contactNumber - phone:$phone - email: $email - department: $department - hubLocation: $hubLocation - eventLocation:$eventLocation - address:$address - city:$city - track: $track - position: $position - position2:$position2 - initial:$initial - profileType: $profileType - employmentType: $employmentType - english: $english - rate: $rate - rating: $rating - reliabilityScore: $reliabilityScore - backgroundCheckStatus: $backgroundCheckStatus - notes: $notes - accountingComments:$accountingComments - shiftCoveragePercentage:$shiftCoveragePercentage - cancellationCount:$cancellationCount - noShowCount:$noShowCount - totalShifts:$totalShifts - invoiced:$invoiced - englishRequired:$englishRequired - checkIn:$checkIn - scheduleDays:$scheduleDays - replacedBy:$replacedBy - action:$action - ro:$ro - mon:$mon - } - ) -} - -mutation UpdateStaff( - $id: UUID!, - $employeeName: String, - $vendorId: String, - $vendorName: String, - $manager: String, - $contactNumber: String, - $phone: String, - $email: String, - $department: StaffDepartment, - $hubLocation: String, - $eventLocation: String, - $address: String, - $city: String, - $track: String, - $position: String, - $position2:String, - $initial:String, - $profileType: ProfileType, - $employmentType: EmploymentType, - $english: EnglishLevel, - $englishRequired:Boolean # nuevo - $rate: Float, - $rating: Float, - $reliabilityScore: Int, - $backgroundCheckStatus: BackgroundCheckStatus, - $notes: String, - $accountingComments:String, - $shiftCoveragePercentage:Int, - $cancellationCount:Int, - $noShowCount:Int, - $totalShifts:Int, - $invoiced:Boolean, - $checkIn:String, - $scheduleDays:String, - $replacedBy:String, - $action:String, - $ro:String, - $mon:String, -) @auth(level: USER) { - staff_update( - id: $id, - data: { - employeeName: $employeeName - vendorId: $vendorId - vendorName: $vendorName - manager: $manager - contactNumber: $contactNumber - phone:$phone # nuevo - email: $email - department: $department - hubLocation: $hubLocation - eventLocation:$eventLocation # nuevo - address:$address # nuevo - city:$city # nuevo - track: $track - position: $position - position2:$position2 # nuevo - initial:$initial # nuevo - profileType: $profileType - employmentType: $employmentType - english: $english - englishRequired:$englishRequired # nuevo - rate: $rate - rating: $rating - reliabilityScore: $reliabilityScore - backgroundCheckStatus: $backgroundCheckStatus - notes: $notes - accountingComments:$accountingComments # nuevo - shiftCoveragePercentage:$shiftCoveragePercentage # nuevo - cancellationCount:$cancellationCount # nuevo - noShowCount:$noShowCount # nuevo - totalShifts:$totalShifts # nuevo - invoiced:$invoiced # nuevo - checkIn:$checkIn # nuevo - scheduleDays:$scheduleDays # nuevo - replacedBy:$replacedBy # nuevo - action:$action # nuevo - ro:$ro # nuevo - mon:$mon # nuevo - } - ) -} - -mutation DeleteStaff( - $id: UUID! -) @auth(level: USER) { - staff_delete(id: $id) -} diff --git a/dataconnect/connector/staff/queries.gql b/dataconnect/connector/staff/queries.gql deleted file mode 100644 index eebe2d73..00000000 --- a/dataconnect/connector/staff/queries.gql +++ /dev/null @@ -1,125 +0,0 @@ -query listStaff @auth(level: USER) { - staffs { - id - employeeName - vendorId - vendorName - manager - contactNumber - phone # nuevo - email - department - hubLocation - eventLocation # nuevo - address # nuevo - city # nuevo - track - position - position2 - initial # nuevo - profileType - employmentType - english - englishRequired # nuevo - rate - rating - reliabilityScore - backgroundCheckStatus - notes - accountingComments # nuevo - shiftCoveragePercentage # nuevo - cancellationCount # nuevo - noShowCount # nuevo - totalShifts # nuevo - invoiced # nuevo - checkIn # nuevo - scheduleDays # nuevo - replacedBy # nuevo - action # nuevo - ro # nuevo - mon # nuevo - } -} - -query getStaffById( - $id: UUID! -) @auth(level: USER) { - staff(id: $id) { - id - employeeName - vendorId - vendorName - manager - contactNumber - phone # nuevo - email - department - hubLocation - eventLocation # nuevo - address # nuevo - city # nuevo - track - position - position2 # nuevo - initial # nuevo - profileType - employmentType - english - rate - rating - reliabilityScore - backgroundCheckStatus - notes - accountingComments # nuevo - shiftCoveragePercentage # nuevo - cancellationCount # nuevo - noShowCount # nuevo - totalShifts # nuevo - invoiced # nuevo - englishRequired # nuevo - checkIn # nuevo - scheduleDays # nuevo - replacedBy # nuevo - action # nuevo - ro # nuevo - mon # nuevo - } -} - -query filterStaff( - $employeeName: String, - $vendorId: String, - $department: StaffDepartment, - $employmentType: EmploymentType, - $english: EnglishLevel, - $backgroundCheckStatus: BackgroundCheckStatus -) @auth(level: USER) { - staffs( - where: { - employeeName: { eq: $employeeName } - vendorId: { eq: $vendorId } - department: { eq: $department } - employmentType: { eq: $employmentType } - english: { eq: $english } - backgroundCheckStatus: { eq: $backgroundCheckStatus } - } - ) { - id - employeeName - vendorId - vendorName - department - hubLocation - eventLocation # nuevo - position - position2 - employmentType - english - rate - rating - reliabilityScore - backgroundCheckStatus - notes - invoiced # nuevo - } -} diff --git a/dataconnect/connector/team/mutations.gql b/dataconnect/connector/team/mutations.gql deleted file mode 100644 index 2fab4bd8..00000000 --- a/dataconnect/connector/team/mutations.gql +++ /dev/null @@ -1,47 +0,0 @@ -mutation CreateTeam( - $teamName: String!, - $ownerId: String!, - $ownerName: String!, - $ownerRole: TeamOwnerRole!, - $favoriteStaff: String, - $blockedStaff: String -) @auth(level: USER) { - team_insert( - data: { - teamName: $teamName - ownerId: $ownerId - ownerName: $ownerName - ownerRole: $ownerRole - favoriteStaff: $favoriteStaff - blockedStaff: $blockedStaff - } - ) -} - -mutation UpdateTeam( - $id: UUID!, - $teamName: String, - $ownerId: String, - $ownerName: String, - $ownerRole: TeamOwnerRole, - $favoriteStaff: String, - $blockedStaff: String -) @auth(level: USER) { - team_update( - id: $id, - data: { - teamName: $teamName - ownerId: $ownerId - ownerName: $ownerName - ownerRole: $ownerRole - favoriteStaff: $favoriteStaff - blockedStaff: $blockedStaff - } - ) -} - -mutation DeleteTeam( - $id: UUID! -) @auth(level: USER) { - team_delete(id: $id) -} diff --git a/dataconnect/connector/team/queries.gql b/dataconnect/connector/team/queries.gql deleted file mode 100644 index c5a96d3a..00000000 --- a/dataconnect/connector/team/queries.gql +++ /dev/null @@ -1,53 +0,0 @@ -query listTeam ( - $orderByCreatedDate: OrderDirection - $limit: Int - ) @auth(level: USER) { - teams( - orderBy: { createdDate: $orderByCreatedDate } - limit: $limit - ) { - id - teamName - ownerId - ownerName - ownerRole - favoriteStaff - blockedStaff - } -} - -query getTeamById( - $id: UUID! -) @auth(level: USER) { - team(id: $id) { - id - teamName - ownerId - ownerName - ownerRole - favoriteStaff - blockedStaff - } -} - -query filterTeam( - $teamName: String, - $ownerId: String, - $ownerRole: TeamOwnerRole -) @auth(level: USER) { - teams( - where: { - teamName: { eq: $teamName } - ownerId: { eq: $ownerId } - ownerRole: { eq: $ownerRole } - } - ) { - id - teamName - ownerId - ownerName - ownerRole - favoriteStaff - blockedStaff - } -} diff --git a/dataconnect/connector/teamHub/mutations.gql b/dataconnect/connector/teamHub/mutations.gql deleted file mode 100644 index eeee0ce5..00000000 --- a/dataconnect/connector/teamHub/mutations.gql +++ /dev/null @@ -1,35 +0,0 @@ -mutation CreateTeamHub( - $teamId: UUID!, - $hubName: String!, - $departments: String -) @auth(level: USER) { - teamHub_insert( - data: { - teamId: $teamId - hubName: $hubName - departments: $departments - } - ) -} - -mutation UpdateTeamHub( - $id: UUID!, - $teamId: UUID, - $hubName: String, - $departments: String -) @auth(level: USER) { - teamHub_update( - id: $id, - data: { - teamId: $teamId - hubName: $hubName - departments: $departments - } - ) -} - -mutation DeleteTeamHub( - $id: UUID! -) @auth(level: USER) { - teamHub_delete(id: $id) -} diff --git a/dataconnect/connector/teamHub/queries.gql b/dataconnect/connector/teamHub/queries.gql deleted file mode 100644 index 93564956..00000000 --- a/dataconnect/connector/teamHub/queries.gql +++ /dev/null @@ -1,36 +0,0 @@ -query listTeamHub @auth(level: USER) { - teamHubs { - id - teamId - hubName - departments - } -} - -query getTeamHubById( - $id: UUID! -) @auth(level: USER) { - teamHub(id: $id) { - id - teamId - hubName - departments - } -} - -query filterTeamHub( - $teamId: UUID, - $hubName: String -) @auth(level: USER) { - teamHubs( - where: { - teamId: { eq: $teamId } - hubName: { eq: $hubName } - } - ) { - id - teamId - hubName - departments - } -} diff --git a/dataconnect/connector/teamMember/mutations.gql b/dataconnect/connector/teamMember/mutations.gql deleted file mode 100644 index e8ebfcc7..00000000 --- a/dataconnect/connector/teamMember/mutations.gql +++ /dev/null @@ -1,43 +0,0 @@ -mutation CreateTeamMember( - $teamId: UUID!, - $memberName: String!, - $email: String!, - $role: TeamMemberRole, - $isActive: Boolean -) @auth(level: USER) { - teamMember_insert( - data: { - teamId: $teamId - memberName: $memberName - email: $email - role: $role - isActive: $isActive - } - ) -} - -mutation UpdateTeamMember( - $id: UUID!, - $teamId: UUID, - $memberName: String, - $email: String, - $role: TeamMemberRole, - $isActive: Boolean -) @auth(level: USER) { - teamMember_update( - id: $id, - data: { - teamId: $teamId - memberName: $memberName - email: $email - role: $role - isActive: $isActive - } - ) -} - -mutation DeleteTeamMember( - $id: UUID! -) @auth(level: USER) { - teamMember_delete(id: $id) -} diff --git a/dataconnect/connector/teamMember/queries.gql b/dataconnect/connector/teamMember/queries.gql deleted file mode 100644 index 913b7c01..00000000 --- a/dataconnect/connector/teamMember/queries.gql +++ /dev/null @@ -1,48 +0,0 @@ -query listTeamMember @auth(level: USER) { - teamMembers { - id - teamId - memberName - email - role - isActive - } -} - -query getTeamMemberById( - $id: UUID! -) @auth(level: USER) { - teamMember(id: $id) { - id - teamId - memberName - email - role - isActive - } -} - -query filterTeamMember( - $teamId: UUID, - $memberName: String, - $email: String, - $role: TeamMemberRole, - $isActive: Boolean -) @auth(level: USER) { - teamMembers( - where: { - teamId: { eq: $teamId } - memberName: { eq: $memberName } - email: { eq: $email } - role: { eq: $role } - isActive: { eq: $isActive } - } - ) { - id - teamId - memberName - email - role - isActive - } -} diff --git a/dataconnect/connector/teamMemberInvite/mutations.gql b/dataconnect/connector/teamMemberInvite/mutations.gql deleted file mode 100644 index 54929422..00000000 --- a/dataconnect/connector/teamMemberInvite/mutations.gql +++ /dev/null @@ -1,36 +0,0 @@ -mutation CreateTeamMemberInvite( - $teamId: UUID!, - $email: String!, - $inviteStatus: TeamMemberInviteStatus! -) @auth(level: USER) { - teamMemberInvite_insert( - data: { - teamId: $teamId - email: $email - inviteStatus: $inviteStatus - # inviteCode se genera por default con uuidV4() - } - ) -} - -mutation UpdateTeamMemberInvite( - $id: UUID!, - $teamId: UUID, - $email: String, - $inviteStatus: TeamMemberInviteStatus -) @auth(level: USER) { - teamMemberInvite_update( - id: $id, - data: { - teamId: $teamId - email: $email - inviteStatus: $inviteStatus - } - ) -} - -mutation DeleteTeamMemberInvite( - $id: UUID! -) @auth(level: USER) { - teamMemberInvite_delete(id: $id) -} diff --git a/dataconnect/connector/teamMemberInvite/queries.gql b/dataconnect/connector/teamMemberInvite/queries.gql deleted file mode 100644 index 6314b8fd..00000000 --- a/dataconnect/connector/teamMemberInvite/queries.gql +++ /dev/null @@ -1,41 +0,0 @@ -query listTeamMemberInvite @auth(level: USER) { - teamMemberInvites { - id - teamId - inviteCode - email - inviteStatus - } -} - -query getTeamMemberInviteById( - $id: UUID! -) @auth(level: USER) { - teamMemberInvite(id: $id) { - id - teamId - inviteCode - email - inviteStatus - } -} - -query filterTeamMemberInvite( - $teamId: UUID, - $email: String, - $inviteStatus: TeamMemberInviteStatus -) @auth(level: USER) { - teamMemberInvites( - where: { - teamId: { eq: $teamId } - email: { eq: $email } - inviteStatus: { eq: $inviteStatus } - } - ) { - id - teamId - inviteCode - email - inviteStatus - } -} diff --git a/dataconnect/connector/user/mutations.gql b/dataconnect/connector/user/mutations.gql deleted file mode 100644 index 80fdbd8d..00000000 --- a/dataconnect/connector/user/mutations.gql +++ /dev/null @@ -1,45 +0,0 @@ -mutation CreateUser( - $id: String!, # Firebase UID - $email: String!, - $fullName: String!, - $role: UserBaseRole!, - $userRole: String, - $photoUrl: String -) @auth(level: USER) { - user_insert( - data: { - id: $id - email: $email - fullName: $fullName - role: $role - userRole: $userRole - photoUrl: $photoUrl - } - ) -} - -mutation UpdateUser( - $id: String!, - $email: String, - $fullName: String, - $role: UserBaseRole, - $userRole: String, - $photoUrl: String -) @auth(level: USER) { - user_update( - id: $id, - data: { - email: $email - fullName: $fullName - role: $role - userRole: $userRole - photoUrl: $photoUrl - } - ) -} - -mutation DeleteUser( - $id: String! -) @auth(level: USER) { - user_delete(id: $id) -} diff --git a/dataconnect/connector/user/queries.gql b/dataconnect/connector/user/queries.gql deleted file mode 100644 index 044abebf..00000000 --- a/dataconnect/connector/user/queries.gql +++ /dev/null @@ -1,48 +0,0 @@ -query listUsers @auth(level: USER) { - users { - id - email - fullName - role - userRole - photoUrl - createdDate - updatedDate - } -} - -query getUserById( - $id: String! -) @auth(level: USER) { - user(id: $id) { - id - email - fullName - role - userRole - photoUrl - } -} - -query filterUsers( - $id: String, - $email: String, - $role: UserBaseRole, - $userRole: String -) @auth(level: USER) { - users( - where: { - id: { eq: $id } - email: { eq: $email } - role: { eq: $role } - userRole: { eq: $userRole } - } - ) { - id - email - fullName - role - userRole - photoUrl - } -} diff --git a/dataconnect/connector/vendor/mutations.gql b/dataconnect/connector/vendor/mutations.gql deleted file mode 100644 index c40b1119..00000000 --- a/dataconnect/connector/vendor/mutations.gql +++ /dev/null @@ -1,52 +0,0 @@ -mutation CreateVendor( - $vendorNumber: String!, - $legalName: String!, - $region: VendorRegion!, - $platformType: VendorPlatformType!, - $primaryContactEmail: String!, - $approvalStatus: VendorApprovalStatus!, - $isActive: Boolean -) @auth(level: USER) { - vendor_insert( - data: { - vendorNumber: $vendorNumber - legalName: $legalName - region: $region - platformType: $platformType - primaryContactEmail: $primaryContactEmail - approvalStatus: $approvalStatus - isActive: $isActive - } - ) -} - -mutation UpdateVendor( - $id: UUID!, - $vendorNumber: String, - $legalName: String, - $region: VendorRegion, - $platformType: VendorPlatformType, - $primaryContactEmail: String, - $approvalStatus: VendorApprovalStatus, - $isActive: Boolean -) @auth(level: USER) { - vendor_update( - id: $id, - data: { - vendorNumber: $vendorNumber - legalName: $legalName - region: $region - platformType: $platformType - primaryContactEmail: $primaryContactEmail - approvalStatus: $approvalStatus - isActive: $isActive - } - ) -} - -mutation DeleteVendor( - $id: UUID! -) @auth(level: USER) { - vendor_delete(id: $id) -} - diff --git a/dataconnect/connector/vendor/queries.gql b/dataconnect/connector/vendor/queries.gql deleted file mode 100644 index c1d0e700..00000000 --- a/dataconnect/connector/vendor/queries.gql +++ /dev/null @@ -1,57 +0,0 @@ -query listVendor @auth(level: USER) { - vendors { - id - vendorNumber - legalName - region - platformType - primaryContactEmail - approvalStatus - isActive - } -} - -query getVendorById( - $id: UUID! -) @auth(level: USER) { - vendor(id: $id) { - id - vendorNumber - legalName - region - platformType - primaryContactEmail - approvalStatus - isActive - } -} - -query filterVendors( - $region: VendorRegion, - $approvalStatus: VendorApprovalStatus, - $isActive: Boolean, - $vendorNumber:String, - $primaryContactEmail:String, - $legalName: String, - $platformType: VendorPlatformType -) @auth(level: USER) { - vendors(where:{ - region: { eq: $region } - approvalStatus: { eq: $approvalStatus } - isActive: { eq: $isActive } - vendorNumber: { eq: $vendorNumber } - primaryContactEmail: { eq: $primaryContactEmail } - legalName: { eq: $legalName } - platformType: { eq: $platformType } - - }) { - id - vendorNumber - legalName - region - platformType - primaryContactEmail - approvalStatus - isActive - } -} \ No newline at end of file diff --git a/dataconnect/connector/vendorDefaultSettings/mutations.gql b/dataconnect/connector/vendorDefaultSettings/mutations.gql deleted file mode 100644 index 79289ede..00000000 --- a/dataconnect/connector/vendorDefaultSettings/mutations.gql +++ /dev/null @@ -1,35 +0,0 @@ -mutation CreateVendorDefaultSetting( - $vendorName: String!, - $defaultMarkupPercentage: Float!, - $defaultVendorFeePercentage: Float! -) @auth(level: USER) { - vendorDefaultSetting_insert( - data: { - vendorName: $vendorName - defaultMarkupPercentage: $defaultMarkupPercentage - defaultVendorFeePercentage: $defaultVendorFeePercentage - } - ) -} - -mutation UpdateVendorDefaultSetting( - $id: UUID!, - $vendorName: String, - $defaultMarkupPercentage: Float, - $defaultVendorFeePercentage: Float -) @auth(level: USER) { - vendorDefaultSetting_update( - id: $id, - data: { - vendorName: $vendorName - defaultMarkupPercentage: $defaultMarkupPercentage - defaultVendorFeePercentage: $defaultVendorFeePercentage - } - ) -} - -mutation DeleteVendorDefaultSetting( - $id: UUID! -) @auth(level: USER) { - vendorDefaultSetting_delete(id: $id) -} diff --git a/dataconnect/connector/vendorDefaultSettings/queries.gql b/dataconnect/connector/vendorDefaultSettings/queries.gql deleted file mode 100644 index 7407d306..00000000 --- a/dataconnect/connector/vendorDefaultSettings/queries.gql +++ /dev/null @@ -1,38 +0,0 @@ -query listVendorDefaultSettings @auth(level: USER) { - vendorDefaultSettings { - id - vendorName - defaultMarkupPercentage - defaultVendorFeePercentage - } -} - -query getVendorDefaultSettingById( - $id: UUID! -) @auth(level: USER) { - vendorDefaultSetting(id: $id) { - id - vendorName - defaultMarkupPercentage - defaultVendorFeePercentage - } -} - -query filterVendorDefaultSettings( - $vendorName: String, - $defaultMarkupPercentage: Float, - $defaultVendorFeePercentage: Float -) @auth(level: USER) { - vendorDefaultSettings( - where: { - vendorName: { eq: $vendorName } - defaultMarkupPercentage: { eq: $defaultMarkupPercentage } - defaultVendorFeePercentage: { eq: $defaultVendorFeePercentage } - } - ) { - id - vendorName - defaultMarkupPercentage - defaultVendorFeePercentage - } -} diff --git a/dataconnect/connector/vendorRate/mutations.gql b/dataconnect/connector/vendorRate/mutations.gql deleted file mode 100644 index b4f2092b..00000000 --- a/dataconnect/connector/vendorRate/mutations.gql +++ /dev/null @@ -1,51 +0,0 @@ -mutation CreateVendorRate( - $vendorName: String!, - $category: VendorRateCategory!, - $roleName: String!, - $employeeWage: Float!, - $markupPercentage: Float, - $vendorFeePercentage: Float, - $clientRate: Float! -) @auth(level: USER) { - vendorRate_insert( - data: { - vendorName: $vendorName - category: $category - roleName: $roleName - employeeWage: $employeeWage - markupPercentage: $markupPercentage - vendorFeePercentage: $vendorFeePercentage - clientRate: $clientRate - } - ) -} - -mutation UpdateVendorRate( - $id: UUID!, - $vendorName: String, - $category: VendorRateCategory, - $roleName: String, - $employeeWage: Float, - $markupPercentage: Float, - $vendorFeePercentage: Float, - $clientRate: Float -) @auth(level: USER) { - vendorRate_update( - id: $id, - data: { - vendorName: $vendorName - category: $category - roleName: $roleName - employeeWage: $employeeWage - markupPercentage: $markupPercentage - vendorFeePercentage: $vendorFeePercentage - clientRate: $clientRate - } - ) -} - -mutation DeleteVendorRate( - $id: UUID! -) @auth(level: USER) { - vendorRate_delete(id: $id) -} diff --git a/dataconnect/connector/vendorRate/queries.gql b/dataconnect/connector/vendorRate/queries.gql deleted file mode 100644 index 2f1dcac2..00000000 --- a/dataconnect/connector/vendorRate/queries.gql +++ /dev/null @@ -1,56 +0,0 @@ -query listVendorRate @auth(level: USER) { - vendorRates { - id - vendorName - category - roleName - employeeWage - markupPercentage - vendorFeePercentage - clientRate - } -} - -query getVendorRateById( - $id: UUID! -) @auth(level: USER) { - vendorRate(id: $id) { - id - vendorName - category - roleName - employeeWage - markupPercentage - vendorFeePercentage - clientRate - createdDate - updatedDate - createdBy - } -} - -query filterVendorRates( - $vendorName: String, - $category: VendorRateCategory, - $roleName: String, - $minClientRate: Float, - $maxClientRate: Float -) @auth(level: USER) { - vendorRates( - where: { - vendorName: { eq: $vendorName } - category: { eq: $category } - roleName: { eq: $roleName } - clientRate: { ge: $minClientRate, le: $maxClientRate } - } - ) { - id - vendorName - category - roleName - employeeWage - markupPercentage - vendorFeePercentage - clientRate - } -} diff --git a/dataconnect/connector/workforce/mutations.gql b/dataconnect/connector/workforce/mutations.gql deleted file mode 100644 index 5cf76640..00000000 --- a/dataconnect/connector/workforce/mutations.gql +++ /dev/null @@ -1,43 +0,0 @@ -mutation CreateWorkforce( - $workforceNumber: String!, - $vendorId: UUID!, - $firstName: String!, - $lastName: String!, - $employmentType: WorkforceEmploymentType -) @auth(level: USER) { - workforce_insert( - data: { - workforceNumber: $workforceNumber - vendorId: $vendorId - firstName: $firstName - lastName: $lastName - employmentType: $employmentType - } - ) -} - -mutation UpdateWorkforce( - $id: UUID!, - $workforceNumber: String, - $vendorId: UUID, - $firstName: String, - $lastName: String, - $employmentType: WorkforceEmploymentType -) @auth(level: USER) { - workforce_update( - id: $id, - data: { - workforceNumber: $workforceNumber - vendorId: $vendorId - firstName: $firstName - lastName: $lastName - employmentType: $employmentType - } - ) -} - -mutation DeleteWorkforce( - $id: UUID! -) @auth(level: USER) { - workforce_delete(id: $id) -} diff --git a/dataconnect/connector/workforce/queries.gql b/dataconnect/connector/workforce/queries.gql deleted file mode 100644 index ee7e20ad..00000000 --- a/dataconnect/connector/workforce/queries.gql +++ /dev/null @@ -1,48 +0,0 @@ -query listWorkforce @auth(level: USER) { - workforces { - id - workforceNumber - vendorId - firstName - lastName - employmentType - } -} - -query getWorkforceById( - $id: UUID! -) @auth(level: USER) { - workforce(id: $id) { - id - workforceNumber - vendorId - firstName - lastName - employmentType - } -} - -query filterWorkforce( - $workforceNumber: String, - $vendorId: UUID, - $firstName: String, - $lastName: String, - $employmentType: WorkforceEmploymentType -) @auth(level: USER) { - workforces( - where: { - workforceNumber: { eq: $workforceNumber } - vendorId: { eq: $vendorId } - firstName: { eq: $firstName } - lastName: { eq: $lastName } - employmentType: { eq: $employmentType } - } - ) { - id - workforceNumber - vendorId - firstName - lastName - employmentType - } -} diff --git a/dataconnect/dataconnect.yaml b/dataconnect/dataconnect.yaml deleted file mode 100644 index 39e01fdb..00000000 --- a/dataconnect/dataconnect.yaml +++ /dev/null @@ -1,13 +0,0 @@ -specVersion: "v1" -serviceId: "krow-workforce-db" -location: "us-central1" -schema: - source: "./schema" - datasource: - postgresql: - database: "krow_db" - cloudSql: - instanceId: "krow-sql" - # schemaValidation: "STRICT" # STRICT mode makes Postgres schema match Data Connect exactly. - # schemaValidation: "COMPATIBLE" # COMPATIBLE mode makes Postgres schema compatible with Data Connect. -connectorDirs: ["./connector"] diff --git a/dataconnect/example/connector.yaml b/dataconnect/example/connector.yaml deleted file mode 100644 index 638ba927..00000000 --- a/dataconnect/example/connector.yaml +++ /dev/null @@ -1,8 +0,0 @@ -connectorId: example -generate: - javascriptSdk: - - outputDir: ../../frontend-web/src/dataconnect-generated - package: "@dataconnect/generated" - packageJsonDir: ../../frontend-web - react: true - angular: false diff --git a/dataconnect/example/mutations.gql b/dataconnect/example/mutations.gql deleted file mode 100644 index 1ae8a192..00000000 --- a/dataconnect/example/mutations.gql +++ /dev/null @@ -1,33 +0,0 @@ -# Example mutations for a simple movie app - -# Create a movie based on user input -mutation CreateMovie($title: String!, $genre: String!, $imageUrl: String!) -@auth(level: USER_EMAIL_VERIFIED, insecureReason: "Any email verified users can create a new movie.") { - movie_insert(data: { title: $title, genre: $genre, imageUrl: $imageUrl }) -} - -# Upsert (update or insert) a user's username based on their auth.uid -mutation UpsertUser($username: String!) @auth(level: USER) { - # The "auth.uid" server value ensures that users can only register their own user. - user_upsert(data: { id_expr: "auth.uid", username: $username }) -} - -# Add a review for a movie -mutation AddReview($movieId: UUID!, $rating: Int!, $reviewText: String!) -@auth(level: USER) { - review_upsert( - data: { - userId_expr: "auth.uid" - movieId: $movieId - rating: $rating - reviewText: $reviewText - # reviewDate defaults to today in the schema. No need to set it manually. - } - ) -} - -# Logged in user can delete their review for a movie -mutation DeleteReview($movieId: UUID!) @auth(level: USER) { - # The "auth.uid" server value ensures that users can only delete their own reviews. - review_delete(key: { userId_expr: "auth.uid", movieId: $movieId }) -} diff --git a/dataconnect/example/queries.gql b/dataconnect/example/queries.gql deleted file mode 100644 index df14db09..00000000 --- a/dataconnect/example/queries.gql +++ /dev/null @@ -1,78 +0,0 @@ -# Example queries for a simple movie app. - -# @auth() directives control who can call each operation. -# Anyone should be able to list all movies, so the auth level is set to PUBLIC -query ListMovies @auth(level: PUBLIC, insecureReason: "Anyone can list all movies.") { - movies { - id - title - imageUrl - genre - } -} - -# List all users, only admins should be able to list all users, so we use NO_ACCESS -query ListUsers @auth(level: NO_ACCESS) { - users { - id - username - } -} - -# Logged in users can list all their reviews and movie titles associated with the review -# Since the query uses the uid of the current authenticated user, we set auth level to USER -query ListUserReviews @auth(level: USER) { - user(key: { id_expr: "auth.uid" }) { - id - username - # _on_ makes it easy to grab info from another table - # Here, we use it to grab all the reviews written by the user. - reviews: reviews_on_user { - rating - reviewDate - reviewText - movie { - id - title - } - } - } -} - -# Get movie by id -query GetMovieById($id: UUID!) @auth(level: PUBLIC, insecureReason: "Anyone can get a movie by id.") { - movie(id: $id) { - id - title - imageUrl - genre - metadata: movieMetadata_on_movie { - rating - releaseYear - description - } - reviews: reviews_on_movie { - reviewText - reviewDate - rating - user { - id - username - } - } - } -} - -# Search for movies, actors, and reviews -query SearchMovie($titleInput: String, $genre: String) @auth(level: PUBLIC, insecureReason: "Anyone can search for movies.") { - movies( - where: { - _and: [{ genre: { eq: $genre } }, { title: { contains: $titleInput } }] - } - ) { - id - title - genre - imageUrl - } -} diff --git a/dataconnect/example/schema.gql b/dataconnect/example/schema.gql deleted file mode 100644 index 9ceb0373..00000000 --- a/dataconnect/example/schema.gql +++ /dev/null @@ -1,52 +0,0 @@ -# Example schema for simple movie review app - -# User table is keyed by Firebase Auth UID. -type User @table { - # `@default(expr: "auth.uid")` sets it to Firebase Auth UID during insert and upsert. - id: String! @default(expr: "auth.uid") - username: String! @col(dataType: "varchar(50)") - # The `user: User!` field in the Review table generates the following one-to-many query field. - # reviews_on_user: [Review!]! - # The `Review` join table the following many-to-many query field. - # movies_via_Review: [Movie!]! -} - -# Movie is keyed by a randomly generated UUID. -type Movie @table { - # If you do not pass a 'key' to `@table`, Data Connect automatically adds the following 'id' column. - # Feel free to uncomment and customize it. - # id: UUID! @default(expr: "uuidV4()") - title: String! - imageUrl: String! - genre: String -} - -# MovieMetadata is a metadata attached to a Movie. -# Movie <-> MovieMetadata is a one-to-one relationship -type MovieMetadata @table { - # @unique ensures each Movie can only one MovieMetadata. - movie: Movie! @unique - # The movie field adds the following foreign key field. Feel free to uncomment and customize it. - # movieId: UUID! - rating: Float - releaseYear: Int - description: String -} - -# Reviews is a join table between User and Movie. -# It has a composite primary keys `userUid` and `movieId`. -# A user can leave reviews for many movies. A movie can have reviews from many users. -# User <-> Review is a one-to-many relationship -# Movie <-> Review is a one-to-many relationship -# Movie <-> User is a many-to-many relationship -type Review @table(name: "Reviews", key: ["movie", "user"]) { - user: User! - # The user field adds the following foreign key field. Feel free to uncomment and customize it. - # userUid: String! - movie: Movie! - # The movie field adds the following foreign key field. Feel free to uncomment and customize it. - # movieId: UUID! - rating: Int - reviewText: String - reviewDate: Date! @default(expr: "request.time") -} diff --git a/dataconnect/schema/VendorRate.gql b/dataconnect/schema/VendorRate.gql deleted file mode 100644 index 3f1de48f..00000000 --- a/dataconnect/schema/VendorRate.gql +++ /dev/null @@ -1,25 +0,0 @@ -enum VendorRateCategory { - KITCHEN_AND_CULINARY - CONCESSIONS - FACILITIES - BARTENDING - SECURITY - EVENT_STAFF - MANAGEMENT - TECHNICAL - OTHER -} - -type VendorRate @table(name: "vendor_rates") { - id: UUID! @default(expr: "uuidV4()") - vendorName: String! - category: VendorRateCategory! - roleName: String! - employeeWage: Float! - markupPercentage: Float - vendorFeePercentage: Float - clientRate: Float! - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/activityLog.gql b/dataconnect/schema/activityLog.gql deleted file mode 100644 index 985fa8af..00000000 --- a/dataconnect/schema/activityLog.gql +++ /dev/null @@ -1,23 +0,0 @@ -enum ActivityType { - EVENT_CREATED - EVENT_UPDATED - STAFF_ASSIGNED - INVOICE_PAID - INVOICE_CREATED - VENDOR_APPROVED - MESSAGE_RECEIVED -} - -type ActivityLog @table(name: "activity_logs") { - id: UUID! @default(expr: "uuidV4()") - title: String! - description: String! - activityType: ActivityType! - userId: String! # user_id (FK lógica a User.id) - isRead: Boolean @default(expr: "false") - iconType: String - iconColor: String - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} \ No newline at end of file diff --git a/dataconnect/schema/assignment.gql b/dataconnect/schema/assignment.gql deleted file mode 100644 index 0f791604..00000000 --- a/dataconnect/schema/assignment.gql +++ /dev/null @@ -1,23 +0,0 @@ -enum AssignmentStatus { - PENDING - CONFIRMED - CHECKED_IN - IN_PROGRESS - COMPLETED - CANCELLED - NO_SHOW -} - -type Assignment @table(name: "assignments") { - id: UUID! @default(expr: "uuidV4()") - assignmentNumber: String - orderId: UUID! # order_id (FK lógica a Order.id) - workforceId: UUID! # workforce_id (FK lógica a Workforce.id) - vendorId: UUID! # vendor_id (FK lógica a Vendor.id) - role: String! - assignmentStatus: AssignmentStatus! - scheduledStart: Timestamp! - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/business.gql b/dataconnect/schema/business.gql deleted file mode 100644 index b517aaf6..00000000 --- a/dataconnect/schema/business.gql +++ /dev/null @@ -1,34 +0,0 @@ -enum BusinessSector { - BON_APPETIT - EUREST - ARAMARK - EPICUREAN_GROUP - CHARTWELLS - OTHER -} - -enum BusinessRateGroup { - STANDARD - PREMIUM - ENTERPRISE - CUSTOM -} - -enum BusinessStatus { - ACTIVE - INACTIVE - PENDING -} - -type Business @table(name: "business") { - id: UUID! @default(expr: "uuidV4()") - businessName: String! - contactName: String! - email: String - sector: BusinessSector - rateGroup: BusinessRateGroup! - status: BusinessStatus - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/certification.gql b/dataconnect/schema/certification.gql deleted file mode 100644 index b755ffc1..00000000 --- a/dataconnect/schema/certification.gql +++ /dev/null @@ -1,37 +0,0 @@ -enum CertificationType { - LEGAL - OPERATIONAL - SAFETY - TRAINING - LICENSE - OTHER -} - -enum CertificationStatus { - CURRENT - EXPIRING_SOON - EXPIRED - PENDING_VALIDATION -} - -enum CertificationValidationStatus { - APPROVED - PENDING_EXPERT_REVIEW - REJECTED - AI_VERIFIED - AI_FLAGGED - MANUAL_REVIEW_NEEDED -} - -type Certification @table(name: "certification") { - id: UUID! @default(expr: "uuidV4()") - employeeName: String! - certificationName: String! - certificationType: CertificationType - status: CertificationStatus - expiryDate: String! - validationStatus: CertificationValidationStatus - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/conversation.gql b/dataconnect/schema/conversation.gql deleted file mode 100644 index 45114f19..00000000 --- a/dataconnect/schema/conversation.gql +++ /dev/null @@ -1,26 +0,0 @@ -enum ConversationType { - CLIENT_VENDOR - STAFF_CLIENT - STAFF_ADMIN - VENDOR_ADMIN - CLIENT_ADMIN - GROUP_STAFF - GROUP_EVENT_STAFF -} - -enum ConversationStatus { - ACTIVE - ARCHIVED - CLOSED -} - -type Conversation @table(name: "conversations") { - id: UUID! @default(expr: "uuidV4()") - participants: String! # participants (jsonb -> String, required array of strings) - conversationType: ConversationType! - relatedTo: UUID! # related_to (generic FK as string) - status: ConversationStatus - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/enterprise.gql b/dataconnect/schema/enterprise.gql deleted file mode 100644 index ad3d52dd..00000000 --- a/dataconnect/schema/enterprise.gql +++ /dev/null @@ -1,9 +0,0 @@ -type Enterprise @table(name: "enterprise") { - id: UUID! @default(expr: "uuidV4()") - enterpriseNumber: String! - enterpriseName: String! - enterpriseCode: String! - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/event.gql b/dataconnect/schema/event.gql deleted file mode 100644 index d1de38ea..00000000 --- a/dataconnect/schema/event.gql +++ /dev/null @@ -1,84 +0,0 @@ - -enum EventStatus { - DRAFT - ACTIVE - PENDING - ASSIGNED - CONFIRMED - COMPLETED - CANCELED - PARTIAL - PARTIAL_STAFFED - FULLY_STAFFED - EVENT_CREATED -} - -enum RecurrenceType { - SINGLE - DATE_RANGE - SCATTER -} - -#enums cant start by a number, reason of C1099 -enum ContractType { - W2 - C1099 - TEMP - CONTRACT -} - -type Event @table(name: "events") { - - id: UUID! @default(expr: "uuidV4()") - eventName: String! - isRapid: Boolean @default(expr: "false") - isRecurring: Boolean @default(expr: "false") - isMultiDay: Boolean @default(expr: "false") - recurrenceType: RecurrenceType - recurrenceStartDate: Timestamp - recurrenceEndDate: Timestamp - scatterDates: Any - multiDayStartDate: Timestamp - multiDayEndDate: Timestamp - bufferTimeBefore: Float @default(expr: "0") - bufferTimeAfter: Float @default(expr: "0") - conflictDetectionEnabled: Boolean @default(expr: "true") - detectedConflicts: Any - businessId: UUID! - businessName: String - vendorId: String @default(expr: "auth.uid") - vendorName: String - hub: String - eventLocation: String - contractType: ContractType - poReference: String - status: EventStatus! - date: String! - shifts: Any - addons: Any - total: Float - clientName: String - clientEmail: String - clientPhone: String - invoiceId: UUID - notes: String - requested: Int @default(expr: "0") - assignedStaff: Any - orderType: String - department: String - recurringStartDate: String - recurringEndDate: String - recurringDays: Any - permanentStartDate: String - permanentDays: Any - includeBackup: Boolean - backupStaffCount: Int - recurringTime: String - permanentTime: String - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") - -} - - diff --git a/dataconnect/schema/invoice.gql b/dataconnect/schema/invoice.gql deleted file mode 100644 index a391d417..00000000 --- a/dataconnect/schema/invoice.gql +++ /dev/null @@ -1,26 +0,0 @@ -enum InvoiceStatus { - DRAFT - PENDING_REVIEW - APPROVED - DISPUTED - UNDER_REVIEW - RESOLVED - OVERDUE - PAID - RECONCILED - CANCELLED -} - -type Invoice @table(name: "invoices") { - id: UUID! @default(expr: "uuidV4()") - invoiceNumber: String! - amount: Float! - status: InvoiceStatus! - issueDate: Timestamp! - dueDate: Timestamp! - disputedItems: String - isAutoGenerated: Boolean @default(expr: "false") # is_auto_generated - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/message.gql b/dataconnect/schema/message.gql deleted file mode 100644 index bbdd322c..00000000 --- a/dataconnect/schema/message.gql +++ /dev/null @@ -1,10 +0,0 @@ -type Message @table(name: "messages") { - id: UUID! @default(expr: "uuidV4()") - conversationId: UUID! # conversation_id (FK lógica a Conversation.id) - senderName: String! - content: String! - readBy: String # read_by (jsonb -> String, array de user IDs) - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/order.gql b/dataconnect/schema/order.gql deleted file mode 100644 index 7d216f34..00000000 --- a/dataconnect/schema/order.gql +++ /dev/null @@ -1,26 +0,0 @@ -enum OrderType { - STANDARD - LAST_MINUTE - EMERGENCY - RECURRING -} - -enum OrderStatus { - DRAFT - SUBMITTED - CONFIRMED - IN_PROGRESS - COMPLETED - CANCELLED -} - -type Order @table(name: "orders") { - id: UUID! @default(expr: "uuidV4()") - orderNumber: String! - partnerId: UUID! - orderType: OrderType - orderStatus: OrderStatus - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/partner.gql b/dataconnect/schema/partner.gql deleted file mode 100644 index 07047155..00000000 --- a/dataconnect/schema/partner.gql +++ /dev/null @@ -1,17 +0,0 @@ -enum PartnerType { - CORPORATE - EDUCATION - HEALTHCARE - SPORTS_ENTERTAINMENT - GOVERNMENT -} - -type Partner @table(name: "partner") { - id: UUID! @default(expr: "uuidV4()") - partnerName: String! - partnerNumber: String! - partnerType: PartnerType # partner_type - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/sector.gql b/dataconnect/schema/sector.gql deleted file mode 100644 index 61255652..00000000 --- a/dataconnect/schema/sector.gql +++ /dev/null @@ -1,18 +0,0 @@ -enum SectorType { - FOOD_SERVICE - FACILITIES - HEALTHCARE - EDUCATION - CORPORATE - SPORTS_ENTERTAINMENT -} - -type Sector @table(name: "sector") { - id: UUID! @default(expr: "uuidV4()") - sectorNumber: String! - sectorName: String! - sectorType: SectorType - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/shift.gql b/dataconnect/schema/shift.gql deleted file mode 100644 index 8affd9ca..00000000 --- a/dataconnect/schema/shift.gql +++ /dev/null @@ -1,10 +0,0 @@ -type Shift @table(name: "shifts") { - id: UUID! @default(expr: "uuidV4()") - shiftName: String! - startDate: Timestamp! - endDate: Timestamp - assignedStaff: String # assigned_staff (jsonb -> String, array de objects) - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/staff.gql b/dataconnect/schema/staff.gql deleted file mode 100644 index 3c2cffb4..00000000 --- a/dataconnect/schema/staff.gql +++ /dev/null @@ -1,85 +0,0 @@ -enum EmploymentType { - FULL_TIME - PART_TIME - ON_CALL - WEEKENDS - SPECIFIC_DAYS - SEASONAL - MEDICAL_LEAVE -} - -enum StaffDepartment { - OPERATIONS - SALES - HR - FINANCE - IT - MARKETING - CUSTOMER_SERVICE - LOGISTICS -} - -enum ProfileType { - SKILLED - BEGINNER - CROSS_TRAINED -} - -enum EnglishLevel { - FLUENT - INTERMEDIATE - BASIC - NONE -} - -enum BackgroundCheckStatus { - PENDING - CLEARED - FAILED - EXPIRED - NOT_REQUIRED -} - -type Staff @table(name: "staffs") { - id: UUID! @default(expr: "uuidV4()") - employeeName: String! @col(name: "employee_name") - initial:String@col(name:"initial") # nuevo - vendorId: String @default(expr: "auth.uid")#String @col(name: "vendor_id") # vendor_id (FK lógica a Vendor.id) - vendorName: String @col(name: "vendor_name") - manager: String - contactNumber: String @col(name: "contact_number") - phone: String @col(name:"phone") # nuevo - email: String - department: StaffDepartment - hubLocation: String @col(name: "hub_location") - eventLocation:String@col(name:"event_location") # nuevo - address:String@col(name:"address") # nuevo - city:String@col(name:"city") # nuevo - track: String - position: String - position2: String @col(name:"position_2") # nuevo - profileType: ProfileType @col(name: "profile_type") - employmentType: EmploymentType @col(name: "employment_type") - english: EnglishLevel - rate: Float - rating: Float - reliabilityScore: Int @col(name: "reliability_score") - backgroundCheckStatus: BackgroundCheckStatus @col(name: "background_check_status") - notes: String - accountingComments: String @col(name:"accounting_comments") # nuevo - shiftCoveragePercentage: Int @col(name:"shift_coverage_percentage") # nuevo - cancellationCount: Int @col(name:"cancellation_count") # nuevo - noShowCount: Int @col(name:"no_show_count") # nuevo - totalShifts: Int @col(name:"total_shifts") # nuevo - invoiced: Boolean @default(expr:"false") # nuevo - englishRequired: Boolean @col(name:"english_required")@default(expr:"false") # nuevo - checkIn: String @col(name:"check_in") # nuevo - scheduleDays: String @col(name:"schedule_days") # nuevo - replacedBy: String @col(name:"replaced_by") # nuevo - action: String # nuevo - ro: String # nuevo - mon: String # nuevo - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/team.gql b/dataconnect/schema/team.gql deleted file mode 100644 index 73cc76c7..00000000 --- a/dataconnect/schema/team.gql +++ /dev/null @@ -1,22 +0,0 @@ -enum TeamOwnerRole { - ADMIN - PROCUREMENT - OPERATOR - SECTOR - CLIENT - VENDOR - WORKFORCE -} - -type Team @table(name: "team") { - id: UUID! @default(expr: "uuidV4()") - teamName: String! - ownerId: String! - ownerName: String! - ownerRole: TeamOwnerRole! - favoriteStaff: String - blockedStaff: String - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/teamHub.gql b/dataconnect/schema/teamHub.gql deleted file mode 100644 index f299c999..00000000 --- a/dataconnect/schema/teamHub.gql +++ /dev/null @@ -1,9 +0,0 @@ -type TeamHub @table(name: "team_hubs") { - id: UUID! @default(expr: "uuidV4()") - teamId: UUID! - hubName: String! - departments: String - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/teamMember.gql b/dataconnect/schema/teamMember.gql deleted file mode 100644 index f58eaeec..00000000 --- a/dataconnect/schema/teamMember.gql +++ /dev/null @@ -1,18 +0,0 @@ -enum TeamMemberRole { - ADMIN - MANAGER - MEMBER - VIEWER -} - -type TeamMember @table(name: "team_members") { - id: UUID! @default(expr: "uuidV4()") - teamId: UUID! - memberName: String! - email: String! - role: TeamMemberRole - isActive: Boolean @default(expr: "true") - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/teamMemberInvite.gql b/dataconnect/schema/teamMemberInvite.gql deleted file mode 100644 index afdee310..00000000 --- a/dataconnect/schema/teamMemberInvite.gql +++ /dev/null @@ -1,17 +0,0 @@ -enum TeamMemberInviteStatus { - PENDING - ACCEPTED - EXPIRED - CANCELLED -} - -type TeamMemberInvite @table(name: "team_member_invites") { - id: UUID! @default(expr: "uuidV4()") - teamId: UUID! - inviteCode: String! @default(expr: "uuidV4()") - email: String! - inviteStatus: TeamMemberInviteStatus! - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/user.gql b/dataconnect/schema/user.gql deleted file mode 100644 index 0d216676..00000000 --- a/dataconnect/schema/user.gql +++ /dev/null @@ -1,16 +0,0 @@ -enum UserBaseRole { - ADMIN - USER -} - -type User @table(name: "users") { - id: String! # user_id / uid de Firebase - email: String! - fullName: String! - role: UserBaseRole! - userRole: String - photoUrl: String - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/vendor.gql b/dataconnect/schema/vendor.gql deleted file mode 100644 index 29d57ea5..00000000 --- a/dataconnect/schema/vendor.gql +++ /dev/null @@ -1,38 +0,0 @@ -enum VendorRegion { - NATIONAL - BAY_AREA - SOUTHERN_CALIFORNIA - NORTHERN_CALIFORNIA - WEST - EAST - MIDWEST - SOUTH -} - -enum VendorPlatformType { - FULL_PLATFORM - BUILDING_PLATFORM - PARTIAL_TECH - TRADITIONAL -} - -enum VendorApprovalStatus { - PENDING - APPROVED - SUSPENDED - TERMINATED -} - -type Vendor @table(name: "vendors") { - id: UUID! @default(expr: "uuidV4()") - vendorNumber: String! - legalName: String! - region: VendorRegion! - platformType: VendorPlatformType! - primaryContactEmail: String! - approvalStatus: VendorApprovalStatus! - isActive: Boolean @default(value: true) - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/vendorDefaultSettings.gql b/dataconnect/schema/vendorDefaultSettings.gql deleted file mode 100644 index 3ced1140..00000000 --- a/dataconnect/schema/vendorDefaultSettings.gql +++ /dev/null @@ -1,9 +0,0 @@ -type VendorDefaultSetting @table(name: "vendor_default_settings") { - id: UUID! @default(expr: "uuidV4()") - vendorName: String! - defaultMarkupPercentage: Float! - defaultVendorFeePercentage: Float! - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/schema/workforce.gql b/dataconnect/schema/workforce.gql deleted file mode 100644 index 4962aa92..00000000 --- a/dataconnect/schema/workforce.gql +++ /dev/null @@ -1,19 +0,0 @@ -# enums cant start by a number, reason of W1099 -enum WorkforceEmploymentType { - W2 - W1099 - TEMPORARY - CONTRACT -} - -type Workforce @table(name: "workforce") { - id: UUID! @default(expr: "uuidV4()") - workforceNumber: String! - vendorId: UUID! # vendor_id (FK lógica a Vendor.id) - firstName: String! - lastName: String! - employmentType: WorkforceEmploymentType # employment_type - createdDate: Timestamp @default(expr: "request.time") - updatedDate: Timestamp @default(expr: "request.time") - createdBy: String @default(expr: "auth.uid") -} diff --git a/dataconnect/seed_data.gql b/dataconnect/seed_data.gql deleted file mode 100644 index 76b2bc8c..00000000 --- a/dataconnect/seed_data.gql +++ /dev/null @@ -1,279 +0,0 @@ -mutation @transaction { - movie_insertMany( - data: [ - { - id: "550e8400-e29b-41d4-a716-446655440000", - title: "Quantum Paradox", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fquantum_paradox.jpeg?alt=media&token=4142e2a1-bf43-43b5-b7cf-6616be3fd4e3", - genre: "sci-fi" - }, - { - id: "550e8400-e29b-41d4-a716-446655440001", - title: "The Lone Outlaw", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Flone_outlaw.jpeg?alt=media&token=15525ffc-208f-4b59-b506-ae8348e06e85", - genre: "western" - }, - { - id: "550e8400-e29b-41d4-a716-446655440002", - title: "Celestial Harmony", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fcelestial_harmony.jpeg?alt=media&token=3edf1cf9-c2f5-4c75-9819-36ff6a734c9a", - genre: "romance" - }, - { - id: "550e8400-e29b-41d4-a716-446655440003", - title: "Noir Mystique", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fnoir_mystique.jpeg?alt=media&token=3299adba-cb98-4302-8b23-aeb679a4f913", - genre: "mystery" - }, - { - id: "550e8400-e29b-41d4-a716-446655440004", - title: "The Forgotten Island", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fforgotten_island.jpeg?alt=media&token=bc2b16e1-caed-4649-952c-73b6113f205c", - genre: "adventure" - }, - { - id: "550e8400-e29b-41d4-a716-446655440005", - title: "Digital Nightmare", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fdigital_nightmare.jpeg?alt=media&token=335ec842-1ca4-4b09-abd1-e96d9f5c0c2f", - genre: "horror" - }, - { - id: "550e8400-e29b-41d4-a716-446655440006", - title: "Eclipse of Destiny", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Feclipse_destiny.jpeg?alt=media&token=346649b3-cb5c-4d7e-b0d4-6f02e3df5959", - genre: "fantasy" - }, - { - id: "550e8400-e29b-41d4-a716-446655440007", - title: "Heart of Steel", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fheart_steel.jpeg?alt=media&token=17883d71-329b-415a-86f8-dd4d9e941d7f", - genre: "sci-fi" - }, - { - id: "550e8400-e29b-41d4-a716-446655440008", - title: "Rise of the Crimson Empire", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Frise_crimson_empire.jpeg?alt=media&token=6faa73ad-7504-4146-8f3a-50b90f607f33", - genre: "action" - }, - { - id: "550e8400-e29b-41d4-a716-446655440009", - title: "Silent Waves", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fsilent_waves.jpeg?alt=media&token=bd626bf1-ec60-4e57-aa07-87ba14e35bb7", - genre: "drama" - }, - { - id: "550e8400-e29b-41d4-a716-446655440010", - title: "Echoes of the Past", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fecho_of_past.jpeg?alt=media&token=d866aa27-8534-4d72-8988-9da4a1b9e452", - genre: "historical" - }, - { - id: "550e8400-e29b-41d4-a716-446655440011", - title: "Beyond the Horizon", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fbeyond_horizon.jpeg?alt=media&token=31493973-0692-4e6e-8b88-afb1aaea17ee", - genre: "sci-fi" - }, - { - id: "550e8400-e29b-41d4-a716-446655440012", - title: "Shadows and Lies", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fshadows_lies.jpeg?alt=media&token=01afb80d-caee-47f8-a00e-aea8b9e459a2", - genre: "crime" - }, - { - id: "550e8400-e29b-41d4-a716-446655440013", - title: "The Last Symphony", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Flast_symphony.jpeg?alt=media&token=f9bf80cd-3d8e-4e24-8503-7feb11f4e397", - genre: "drama" - }, - { - id: "550e8400-e29b-41d4-a716-446655440014", - title: "Moonlit Crusade", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fmoonlit_crusade.jpeg?alt=media&token=b13241f5-d7d0-4370-b651-07847ad99dc2", - genre: "fantasy" - }, - { - id: "550e8400-e29b-41d4-a716-446655440015", - title: "Abyss of the Deep", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fabyss_deep.jpeg?alt=media&token=2417321d-2451-4ec0-9ed6-6297042170e6", - genre: "horror" - }, - { - id: "550e8400-e29b-41d4-a716-446655440017", - title: "The Infinite Knot", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Finfinite_knot.jpeg?alt=media&token=93d54d93-d933-4663-a6fe-26b707ef823e", - genre: "romance" - }, - { - id: "550e8400-e29b-41d4-a716-446655440019", - title: "Veil of Illusion", - imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-web-quickstart.appspot.com/o/movie%2Fveil_illusion.jpeg?alt=media&token=7bf09a3c-c531-478a-9d02-5d99fca9393b", - genre: "mystery" - } - ] - ) - movieMetadata_insertMany( - data: [ - { - movieId: "550e8400-e29b-41d4-a716-446655440000", - rating: 7.9, - releaseYear: 2025, - description: "A group of scientists accidentally open a portal to a parallel universe, causing a rift in time. As the team races to close the portal, they encounter alternate versions of themselves, leading to shocking revelations." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440001", - rating: 8.2, - releaseYear: 2023, - description: "In the lawless Wild West, a mysterious gunslinger with a hidden past takes on a corrupt sheriff and his band of outlaws to bring justice to a small town." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440002", - rating: 7.5, - releaseYear: 2024, - description: "Two astronauts, stationed on a remote space station, fall in love amidst the isolation of deep space. But when a mysterious signal disrupts their communication, they must find a way to reconnect and survive." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440003", - rating: 8.0, - releaseYear: 2022, - description: "A private detective gets caught up in a web of lies, deception, and betrayal while investigating the disappearance of a famous actress in 1940s Hollywood." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440004", - rating: 7.6, - releaseYear: 2025, - description: "An explorer leads an expedition to a remote island rumored to be home to mythical creatures. As the team ventures deeper into the island, they uncover secrets that change the course of history." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440005", - rating: 6.9, - releaseYear: 2024, - description: "A tech-savvy teenager discovers a cursed app that brings nightmares to life. As the horrors of the digital world cross into reality, she must find a way to break the curse before it's too late." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440006", - rating: 8.1, - releaseYear: 2026, - description: "In a kingdom on the brink of war, a prophecy speaks of an eclipse that will grant power to the rightful ruler. As factions vie for control, a young warrior must decide where his true loyalty lies." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440007", - rating: 7.7, - releaseYear: 2023, - description: "A brilliant scientist creates a robot with a human heart. As the robot struggles to understand emotions, it becomes entangled in a plot that could change the fate of humanity." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440008", - rating: 8.4, - releaseYear: 2025, - description: "A legendary warrior rises to challenge the tyrannical rule of a powerful empire. As rebellion brews, the warrior must unite different factions to lead an uprising." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440009", - rating: 8.2, - releaseYear: 2024, - description: "A talented pianist, who loses his hearing in a tragic accident, must rediscover his passion for music with the help of a young music teacher who believes in him." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440010", - rating: 7.8, - releaseYear: 2023, - description: "A historian stumbles upon an ancient artifact that reveals hidden truths about an empire long forgotten. As she deciphers the clues, a shadowy organization tries to stop her from unearthing the past." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440011", - rating: 8.5, - releaseYear: 2026, - description: "In the future, Earth's best pilots are sent on a mission to explore a mysterious planet beyond the solar system. What they find changes humanity's understanding of the universe forever." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440012", - rating: 7.9, - releaseYear: 2022, - description: "A young detective with a dark past investigates a series of mysterious murders in a city plagued by corruption. As she digs deeper, she realizes nothing is as it seems." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440013", - rating: 8.0, - releaseYear: 2024, - description: "An aging composer struggling with memory loss attempts to complete his final symphony. With the help of a young prodigy, he embarks on an emotional journey through his memories and legacy." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440014", - rating: 8.3, - releaseYear: 2025, - description: "A knight is chosen by an ancient order to embark on a quest under the light of the full moon. Facing mythical beasts and treacherous landscapes, he seeks a relic that could save his kingdom." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440015", - rating: 7.2, - releaseYear: 2023, - description: "When a group of marine biologists descends into the unexplored depths of the ocean, they encounter a terrifying and ancient force. Now, they must survive as the abyss comes alive." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440017", - rating: 7.4, - releaseYear: 2026, - description: "Two souls destined to meet across multiple lifetimes struggle to find each other in a chaotic world. With each incarnation, they get closer, but time itself becomes their greatest obstacle." - }, - { - movieId: "550e8400-e29b-41d4-a716-446655440019", - rating: 7.8, - releaseYear: 2022, - description: "A magician-turned-detective uses his skills in illusion to solve crimes. When a series of murders leaves the city in fear, he must reveal the truth hidden behind a veil of deceit." - } - ] - ) - user_insertMany( - data: [ - { id: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", username: "sherlock_h" }, - { id: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", username: "hercule_p" }, - { id: "TBedjwCX0Jf955Uuoxk6k74sY0l1", username: "jane_d" } - ] - ) - review_insertMany( - data: [ - { - userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", - movieId: "550e8400-e29b-41d4-a716-446655440000", - rating: 5, - reviewText: "An incredible movie with a mind-blowing plot!", - reviewDate: "2025-10-01" - }, - { - userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", - movieId: "550e8400-e29b-41d4-a716-446655440001", - rating: 5, - reviewText: "A revolutionary film that changed cinema forever.", - reviewDate: "2025-10-01" - }, - { - userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", - movieId: "550e8400-e29b-41d4-a716-446655440002", - rating: 5, - reviewText: "A visually stunning and emotionally impactful movie.", - reviewDate: "2025-10-01" - }, - { - userId: "SnLgOC3lN4hcIl69s53cW0Q8R1T2", - movieId: "550e8400-e29b-41d4-a716-446655440003", - rating: 4, - reviewText: "A fantastic superhero film with great performances.", - reviewDate: "2025-10-01" - }, - { - userId: "fep4fXpGWsaRpuphq9CIrBIXQ0S2", - movieId: "550e8400-e29b-41d4-a716-446655440004", - rating: 5, - reviewText: "An amazing film that keeps you on the edge of your seat.", - reviewDate: "2025-10-01" - }, - { - userId: "TBedjwCX0Jf955Uuoxk6k74sY0l1", - movieId: "550e8400-e29b-41d4-a716-446655440005", - rating: 5, - reviewText: "An absolute classic with unforgettable dialogue.", - reviewDate: "2025-10-01" - } - ] - ) -} diff --git a/firebase/dataconnect/schema/.keep b/firebase/dataconnect/schema/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/firebase/dataconnect/schema/event.gpl b/firebase/dataconnect/schema/event.gpl deleted file mode 100644 index fed066c4..00000000 --- a/firebase/dataconnect/schema/event.gpl +++ /dev/null @@ -1,62 +0,0 @@ -scalar UUID -scalar Timestamp -scalar JSON - -enum EventStatus { - DRAFT - ACTIVE - PENDING - ASSIGNED - CONFIRMED - COMPLETED - CANCELED -} - -enum RecurrenceType { - SINGLE - DATE_RANGE - SCATTER -} - -type Event @table(name: "events") { - - id: UUID! @col(name: "id", primaryKey: true) @default(expr: "uuidV4()") - eventName: String! - isRecurring: Boolean! - recurrenceType: RecurrenceType - businessId: UUID! - vendorId: UUID - status: EventStatus! - date: Timestamp! - shifts: JSON @col(dataType: "jsonb") - total: Float - requested: Int - assignedStaff: JSON @col(dataType: "jsonb") - createdDate: Timestamp @default(expr: "now()") - updatedDate: Timestamp @updateAt - createdBy: String - -} - -input CreateEventInput { - eventName: String! - isRecurring: Boolean! - recurrenceType: RecurrenceType - businessId: UUID! - vendorId: UUID - status: EventStatus! - date: Timestamp! - shifts: JSON - total: Float - requested: Int - assignedStaff: JSON -} - -type Mutation { - createEvent(input: CreateEventInput!): Event @auth -} - -type Query { - listEvents: [Event!] @auth -} - diff --git a/firebase/functions/.keep b/firebase/functions/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/frontend-web-free/.gitignore b/frontend-web-free/.gitignore deleted file mode 100644 index 3b0b4037..00000000 --- a/frontend-web-free/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? - -.env \ No newline at end of file diff --git a/frontend-web-free/README.md b/frontend-web-free/README.md deleted file mode 100644 index 6e24d638..00000000 --- a/frontend-web-free/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Base44 App - - -This app was created automatically by Base44. -It's a Vite+React app that communicates with the Base44 API. - -## Running the app - -```bash -npm install -npm run dev -``` - -## Building the app - -```bash -npm run build -``` - -For more information and support, please contact Base44 support at app@base44.com. \ No newline at end of file diff --git a/frontend-web-free/components.json b/frontend-web-free/components.json deleted file mode 100644 index ebf7e6ed..00000000 --- a/frontend-web-free/components.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://ui.shadcn.com/schema.json", - "style": "new-york", - "rsc": false, - "tsx": false, - "tailwind": { - "config": "tailwind.config.js", - "css": "src/index.css", - "baseColor": "neutral", - "cssVariables": true, - "prefix": "" - }, - "aliases": { - "components": "@/components", - "utils": "@/lib/utils", - "ui": "@/components/ui", - "lib": "@/lib", - "hooks": "@/hooks" - }, - "iconLibrary": "lucide" -} \ No newline at end of file diff --git a/frontend-web-free/eslint.config.js b/frontend-web-free/eslint.config.js deleted file mode 100644 index 238d2e4e..00000000 --- a/frontend-web-free/eslint.config.js +++ /dev/null @@ -1,38 +0,0 @@ -import js from '@eslint/js' -import globals from 'globals' -import react from 'eslint-plugin-react' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' - -export default [ - { ignores: ['dist'] }, - { - files: ['**/*.{js,jsx}'], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - parserOptions: { - ecmaVersion: 'latest', - ecmaFeatures: { jsx: true }, - sourceType: 'module', - }, - }, - settings: { react: { version: '18.3' } }, - plugins: { - react, - 'react-hooks': reactHooks, - 'react-refresh': reactRefresh, - }, - rules: { - ...js.configs.recommended.rules, - ...react.configs.recommended.rules, - ...react.configs['jsx-runtime'].rules, - ...reactHooks.configs.recommended.rules, - 'react/jsx-no-target-blank': 'off', - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], - }, - }, -] diff --git a/frontend-web-free/index.html b/frontend-web-free/index.html deleted file mode 100644 index 8131cdb4..00000000 --- a/frontend-web-free/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Base44 APP - - -
- - - diff --git a/frontend-web-free/jsconfig.json b/frontend-web-free/jsconfig.json deleted file mode 100644 index c9608645..00000000 --- a/frontend-web-free/jsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"] - }, - "jsx": "react-jsx" - }, - "include": ["src/**/*.js", "src/**/*.jsx"] -} \ No newline at end of file diff --git a/frontend-web-free/package-lock.json b/frontend-web-free/package-lock.json deleted file mode 100644 index f24bccae..00000000 --- a/frontend-web-free/package-lock.json +++ /dev/null @@ -1,9985 +0,0 @@ -{ - "name": "base44-app", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "base44-app", - "version": "0.0.0", - "dependencies": { - "@base44/sdk": "^0.1.2", - "@dataconnect/generated": "file:src/dataconnect-generated", - "@hello-pangea/dnd": "^18.0.1", - "@hookform/resolvers": "^4.1.2", - "@radix-ui/react-accordion": "^1.2.3", - "@radix-ui/react-alert-dialog": "^1.1.6", - "@radix-ui/react-aspect-ratio": "^1.1.2", - "@radix-ui/react-avatar": "^1.1.3", - "@radix-ui/react-checkbox": "^1.1.4", - "@radix-ui/react-collapsible": "^1.1.3", - "@radix-ui/react-context-menu": "^2.2.6", - "@radix-ui/react-dialog": "^1.1.6", - "@radix-ui/react-dropdown-menu": "^2.1.6", - "@radix-ui/react-hover-card": "^1.1.6", - "@radix-ui/react-label": "^2.1.2", - "@radix-ui/react-menubar": "^1.1.6", - "@radix-ui/react-navigation-menu": "^1.2.5", - "@radix-ui/react-popover": "^1.1.6", - "@radix-ui/react-progress": "^1.1.2", - "@radix-ui/react-radio-group": "^1.2.3", - "@radix-ui/react-scroll-area": "^1.2.3", - "@radix-ui/react-select": "^2.1.6", - "@radix-ui/react-separator": "^1.1.2", - "@radix-ui/react-slider": "^1.2.3", - "@radix-ui/react-slot": "^1.1.2", - "@radix-ui/react-switch": "^1.1.3", - "@radix-ui/react-tabs": "^1.1.3", - "@radix-ui/react-toggle": "^1.1.2", - "@radix-ui/react-toggle-group": "^1.1.2", - "@radix-ui/react-tooltip": "^1.1.8", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "cmdk": "^1.0.0", - "date-fns": "^3.6.0", - "embla-carousel-react": "^8.5.2", - "framer-motion": "^12.4.7", - "input-otp": "^1.4.2", - "lucide-react": "^0.475.0", - "next-themes": "^0.4.4", - "react": "^18.2.0", - "react-day-picker": "^8.10.1", - "react-dom": "^18.2.0", - "react-hook-form": "^7.54.2", - "react-resizable-panels": "^2.1.7", - "react-router-dom": "^7.2.0", - "recharts": "^2.15.1", - "sonner": "^2.0.1", - "tailwind-merge": "^3.0.2", - "tailwindcss-animate": "^1.0.7", - "vaul": "^1.1.2", - "zod": "^3.24.2" - }, - "devDependencies": { - "@eslint/js": "^9.19.0", - "@flydotio/dockerfile": "^0.7.8", - "@types/node": "^22.13.5", - "@types/react": "^18.2.66", - "@types/react-dom": "^18.2.22", - "@vitejs/plugin-react": "^4.3.4", - "autoprefixer": "^10.4.20", - "eslint": "^9.19.0", - "eslint-plugin-react": "^7.37.4", - "eslint-plugin-react-hooks": "^5.0.0", - "eslint-plugin-react-refresh": "^0.4.18", - "globals": "^15.14.0", - "postcss": "^8.5.3", - "tailwindcss": "^3.4.17", - "vite": "^6.1.0" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.5" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@base44/sdk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@base44/sdk/-/sdk-0.1.2.tgz", - "integrity": "sha512-8hExlLSujXy5jurpgO+ahCiTdQfiGHzywpvsFQoVbQQpKgtlQaYY8+heV7Hjj9p4/ib2dM6jJLqBqLUbbTzIqQ==", - "license": "MIT", - "dependencies": { - "axios": "^1.6.2" - }, - "peerDependencies": { - "typescript": ">=4.0.0" - } - }, - "node_modules/@dataconnect/generated": { - "resolved": "src/dataconnect-generated", - "link": true - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", - "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", - "dev": true, - "license": "MIT", - "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.1", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@firebase/ai": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@firebase/ai/-/ai-2.6.0.tgz", - "integrity": "sha512-NGyE7NQDFznOv683Xk4+WoUv39iipa9lEfrwvvPz33ChzVbCCiB69FJQTK2BI/11pRtzYGbHo1/xMz7gxWWhJw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/app-check-interop-types": "0.3.3", - "@firebase/component": "0.7.0", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/analytics": { - "version": "0.10.19", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.19.tgz", - "integrity": "sha512-3wU676fh60gaiVYQEEXsbGS4HbF2XsiBphyvvqDbtC1U4/dO4coshbYktcCHq+HFaGIK07iHOh4pME0hEq1fcg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/installations": "0.6.19", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/analytics-compat": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.25.tgz", - "integrity": "sha512-fdzoaG0BEKbqksRDhmf4JoyZf16Wosrl0Y7tbZtJyVDOOwziE0vrFjmZuTdviL0yhak+Nco6rMsUUbkbD+qb6Q==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/analytics": "0.10.19", - "@firebase/analytics-types": "0.8.3", - "@firebase/component": "0.7.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/analytics-types": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.3.tgz", - "integrity": "sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@firebase/app": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.14.6.tgz", - "integrity": "sha512-4uyt8BOrBsSq6i4yiOV/gG6BnnrvTeyymlNcaN/dKvyU1GoolxAafvIvaNP1RCGPlNab3OuE4MKUQuv2lH+PLQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "idb": "7.1.1", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@firebase/app-check": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.11.0.tgz", - "integrity": "sha512-XAvALQayUMBJo58U/rxW02IhsesaxxfWVmVkauZvGEz3vOAjMEQnzFlyblqkc2iAaO82uJ2ZVyZv9XzPfxjJ6w==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/app-check-compat": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.4.0.tgz", - "integrity": "sha512-UfK2Q8RJNjYM/8MFORltZRG9lJj11k0nW84rrffiKvcJxLf1jf6IEjCIkCamykHE73C6BwqhVfhIBs69GXQV0g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/app-check": "0.11.0", - "@firebase/app-check-types": "0.5.3", - "@firebase/component": "0.7.0", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/app-check-interop-types": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz", - "integrity": "sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@firebase/app-check-types": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.3.tgz", - "integrity": "sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@firebase/app-compat": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.6.tgz", - "integrity": "sha512-YYGARbutghQY4zZUWMYia0ib0Y/rb52y72/N0z3vglRHL7ii/AaK9SA7S/dzScVOlCdnbHXz+sc5Dq+r8fwFAg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/app": "0.14.6", - "@firebase/component": "0.7.0", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@firebase/app-types": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz", - "integrity": "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@firebase/auth-compat": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.6.1.tgz", - "integrity": "sha512-I0o2ZiZMnMTOQfqT22ur+zcGDVSAfdNZBHo26/Tfi8EllfR1BO7aTVo2rt/ts8o/FWsK8pOALLeVBGhZt8w/vg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/auth": "1.11.1", - "@firebase/auth-types": "0.13.0", - "@firebase/component": "0.7.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/auth-compat/node_modules/@firebase/auth": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.11.1.tgz", - "integrity": "sha512-Mea0G/BwC1D0voSG+60Ylu3KZchXAFilXQ/hJXWCw3gebAu+RDINZA0dJMNeym7HFxBaBaByX8jSa7ys5+F2VA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@react-native-async-storage/async-storage": "^1.18.1" - }, - "peerDependenciesMeta": { - "@react-native-async-storage/async-storage": { - "optional": true - } - } - }, - "node_modules/@firebase/auth-interop-types": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz", - "integrity": "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@firebase/auth-types": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.13.0.tgz", - "integrity": "sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg==", - "license": "Apache-2.0", - "peer": true, - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" - } - }, - "node_modules/@firebase/component": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", - "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@firebase/data-connect": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.12.tgz", - "integrity": "sha512-baPddcoNLj/+vYo+HSJidJUdr5W4OkhT109c5qhR8T1dJoZcyJpkv/dFpYlw/VJ3dV66vI8GHQFrmAZw/xUS4g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.7.0", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/database": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.1.0.tgz", - "integrity": "sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/app-check-interop-types": "0.3.3", - "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.7.0", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "faye-websocket": "0.11.4", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@firebase/database-compat": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.1.0.tgz", - "integrity": "sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/database": "1.1.0", - "@firebase/database-types": "1.0.16", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@firebase/database-types": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.16.tgz", - "integrity": "sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/app-types": "0.9.3", - "@firebase/util": "1.13.0" - } - }, - "node_modules/@firebase/firestore": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.9.2.tgz", - "integrity": "sha512-iuA5+nVr/IV/Thm0Luoqf2mERUvK9g791FZpUJV1ZGXO6RL2/i/WFJUj5ZTVXy5pRjpWYO+ZzPcReNrlilmztA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "@firebase/webchannel-wrapper": "1.0.5", - "@grpc/grpc-js": "~1.9.0", - "@grpc/proto-loader": "^0.7.8", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/firestore-compat": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.2.tgz", - "integrity": "sha512-cy7ov6SpFBx+PHwFdOOjbI7kH00uNKmIFurAn560WiPCZXy9EMnil1SOG7VF4hHZKdenC+AHtL4r3fNpirpm0w==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/firestore": "4.9.2", - "@firebase/firestore-types": "3.0.3", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/firestore-types": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.3.tgz", - "integrity": "sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==", - "license": "Apache-2.0", - "peer": true, - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" - } - }, - "node_modules/@firebase/functions": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.13.1.tgz", - "integrity": "sha512-sUeWSb0rw5T+6wuV2o9XNmh9yHxjFI9zVGFnjFi+n7drTEWpl7ZTz1nROgGrSu472r+LAaj+2YaSicD4R8wfbw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/app-check-interop-types": "0.3.3", - "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.7.0", - "@firebase/messaging-interop-types": "0.2.3", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/functions-compat": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.4.1.tgz", - "integrity": "sha512-AxxUBXKuPrWaVNQ8o1cG1GaCAtXT8a0eaTDfqgS5VsRYLAR0ALcfqDLwo/QyijZj1w8Qf8n3Qrfy/+Im245hOQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/functions": "0.13.1", - "@firebase/functions-types": "0.6.3", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/functions-types": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.3.tgz", - "integrity": "sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@firebase/installations": { - "version": "0.6.19", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.19.tgz", - "integrity": "sha512-nGDmiwKLI1lerhwfwSHvMR9RZuIH5/8E3kgUWnVRqqL7kGVSktjLTWEMva7oh5yxQ3zXfIlIwJwMcaM5bK5j8Q==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/util": "1.13.0", - "idb": "7.1.1", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/installations-compat": { - "version": "0.2.19", - "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.19.tgz", - "integrity": "sha512-khfzIY3EI5LePePo7vT19/VEIH1E3iYsHknI/6ek9T8QCozAZshWT9CjlwOzZrKvTHMeNcbpo/VSOSIWDSjWdQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/installations": "0.6.19", - "@firebase/installations-types": "0.5.3", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/installations-types": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.3.tgz", - "integrity": "sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==", - "license": "Apache-2.0", - "peer": true, - "peerDependencies": { - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/logger": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", - "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@firebase/messaging": { - "version": "0.12.23", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.23.tgz", - "integrity": "sha512-cfuzv47XxqW4HH/OcR5rM+AlQd1xL/VhuaeW/wzMW1LFrsFcTn0GND/hak1vkQc2th8UisBcrkVcQAnOnKwYxg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/installations": "0.6.19", - "@firebase/messaging-interop-types": "0.2.3", - "@firebase/util": "1.13.0", - "idb": "7.1.1", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/messaging-compat": { - "version": "0.2.23", - "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.23.tgz", - "integrity": "sha512-SN857v/kBUvlQ9X/UjAqBoQ2FEaL1ZozpnmL1ByTe57iXkmnVVFm9KqAsTfmf+OEwWI4kJJe9NObtN/w22lUgg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/messaging": "0.12.23", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/messaging-interop-types": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz", - "integrity": "sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@firebase/performance": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.7.9.tgz", - "integrity": "sha512-UzybENl1EdM2I1sjYm74xGt/0JzRnU/0VmfMAKo2LSpHJzaj77FCLZXmYQ4oOuE+Pxtt8Wy2BVJEENiZkaZAzQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/installations": "0.6.19", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0", - "web-vitals": "^4.2.4" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/performance-compat": { - "version": "0.2.22", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.22.tgz", - "integrity": "sha512-xLKxaSAl/FVi10wDX/CHIYEUP13jXUjinL+UaNXT9ByIvxII5Ne5150mx6IgM8G6Q3V+sPiw9C8/kygkyHUVxg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/logger": "0.5.0", - "@firebase/performance": "0.7.9", - "@firebase/performance-types": "0.2.3", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/performance-types": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.3.tgz", - "integrity": "sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@firebase/remote-config": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.7.0.tgz", - "integrity": "sha512-dX95X6WlW7QlgNd7aaGdjAIZUiQkgWgNS+aKNu4Wv92H1T8Ue/NDUjZHd9xb8fHxLXIHNZeco9/qbZzr500MjQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/installations": "0.6.19", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/remote-config-compat": { - "version": "0.2.20", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.20.tgz", - "integrity": "sha512-P/ULS9vU35EL9maG7xp66uljkZgcPMQOxLj3Zx2F289baTKSInE6+YIkgHEi1TwHoddC/AFePXPpshPlEFkbgg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/logger": "0.5.0", - "@firebase/remote-config": "0.7.0", - "@firebase/remote-config-types": "0.5.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/remote-config-types": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.5.0.tgz", - "integrity": "sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@firebase/storage": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.14.0.tgz", - "integrity": "sha512-xWWbb15o6/pWEw8H01UQ1dC5U3rf8QTAzOChYyCpafV6Xki7KVp3Yaw2nSklUwHEziSWE9KoZJS7iYeyqWnYFA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "node_modules/@firebase/storage-compat": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.4.0.tgz", - "integrity": "sha512-vDzhgGczr1OfcOy285YAPur5pWDEvD67w4thyeCUh6Ys0izN9fNYtA1MJERmNBfqjqu0lg0FM5GLbw0Il21M+g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/storage": "0.14.0", - "@firebase/storage-types": "0.8.3", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "node_modules/@firebase/storage-types": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.3.tgz", - "integrity": "sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg==", - "license": "Apache-2.0", - "peer": true, - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" - } - }, - "node_modules/@firebase/util": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", - "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", - "hasInstallScript": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@firebase/webchannel-wrapper": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.5.tgz", - "integrity": "sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/@floating-ui/core": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", - "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.7.3", - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", - "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.7.4" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", - "license": "MIT" - }, - "node_modules/@flydotio/dockerfile": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/@flydotio/dockerfile/-/dockerfile-0.7.10.tgz", - "integrity": "sha512-dTXqBjCl7nFmnhlyeDjjPtX+sdfYBWFH9PUKNqAYttvBiczKcYXxr7/0A0wZ+g1FB1tmMzsOzedgr6xap/AB9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.4.1", - "diff": "^7.0.0", - "ejs": "^3.1.10", - "inquirer": "^12.4.1", - "shell-quote": "^1.8.2", - "yargs": "^17.7.2" - }, - "bin": { - "dockerfile": "index.js" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@grpc/grpc-js": { - "version": "1.9.15", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz", - "integrity": "sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@grpc/proto-loader": "^0.7.8", - "@types/node": ">=12.12.47" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", - "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.5", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@hello-pangea/dnd": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@hello-pangea/dnd/-/dnd-18.0.1.tgz", - "integrity": "sha512-xojVWG8s/TGrKT1fC8K2tIWeejJYTAeJuj36zM//yEm/ZrnZUSFGS15BpO+jGZT1ybWvyXmeDJwPYb4dhWlbZQ==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.26.7", - "css-box-model": "^1.2.1", - "raf-schd": "^4.0.3", - "react-redux": "^9.2.0", - "redux": "^5.0.1" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@hookform/resolvers": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-4.1.3.tgz", - "integrity": "sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==", - "license": "MIT", - "dependencies": { - "@standard-schema/utils": "^0.3.0" - }, - "peerDependencies": { - "react-hook-form": "^7.0.0" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@inquirer/ansi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", - "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/checkbox": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", - "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/confirm": { - "version": "5.1.21", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", - "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/core": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", - "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/editor": { - "version": "4.2.23", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", - "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/external-editor": "^1.0.3", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand": { - "version": "4.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", - "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", - "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^2.1.1", - "iconv-lite": "^0.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", - "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/input": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", - "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", - "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password": { - "version": "4.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", - "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", - "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^4.3.2", - "@inquirer/confirm": "^5.1.21", - "@inquirer/editor": "^4.2.23", - "@inquirer/expand": "^4.0.23", - "@inquirer/input": "^4.3.1", - "@inquirer/number": "^3.0.23", - "@inquirer/password": "^4.0.23", - "@inquirer/rawlist": "^4.1.11", - "@inquirer/search": "^3.2.2", - "@inquirer/select": "^4.4.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/rawlist": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", - "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", - "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/select": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", - "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/type": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", - "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@radix-ui/number": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", - "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", - "license": "MIT" - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-accordion": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", - "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collapsible": "1.1.12", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-alert-dialog": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz", - "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dialog": "1.1.15", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-aspect-ratio": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.8.tgz", - "integrity": "sha512-5nZrJTF7gH+e0nZS7/QxFz6tJV4VimhQb1avEgtsJxvvIp5JilL+c58HICsKzPxghdwaDt48hEfPM1au4zGy+w==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.4" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-aspect-ratio/node_modules/@radix-ui/react-primitive": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", - "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.4" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-avatar": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.11.tgz", - "integrity": "sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-context": "1.1.3", - "@radix-ui/react-primitive": "2.1.4", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-is-hydrated": "0.1.0", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", - "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", - "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.4" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-checkbox": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", - "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-collapsible": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", - "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-context-menu": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz", - "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-menu": "2.1.16", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", - "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", - "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.16", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", - "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-hover-card": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz", - "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-label": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", - "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.4" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", - "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.4" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-menu": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", - "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menubar": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz", - "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.16", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-navigation-menu": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz", - "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-popover": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", - "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-popper": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", - "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-rect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/rect": "1.1.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.3" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.8.tgz", - "integrity": "sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-context": "1.1.3", - "@radix-ui/react-primitive": "2.1.4" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-context": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", - "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-primitive": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", - "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.4" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-radio-group": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", - "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", - "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-scroll-area": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", - "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-select": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", - "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-separator": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.8.tgz", - "integrity": "sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.4" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", - "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.4" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-slider": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", - "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", - "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-switch": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", - "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-tabs": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", - "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-toggle": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", - "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", - "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-toggle": "1.1.10", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-tooltip": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", - "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-visually-hidden": "1.2.3" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-is-hydrated": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", - "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", - "license": "MIT", - "dependencies": { - "use-sync-external-store": "^1.5.0" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", - "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", - "license": "MIT", - "dependencies": { - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "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 - } - } - }, - "node_modules/@radix-ui/rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", - "license": "MIT" - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", - "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", - "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz", - "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz", - "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz", - "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz", - "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz", - "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz", - "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz", - "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz", - "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz", - "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz", - "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz", - "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz", - "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz", - "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz", - "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", - "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz", - "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz", - "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz", - "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz", - "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz", - "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz", - "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@standard-schema/utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", - "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", - "license": "MIT" - }, - "node_modules/@tanstack-query-firebase/react": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@tanstack-query-firebase/react/-/react-2.1.1.tgz", - "integrity": "sha512-1hOEcfxLgorg0TwadBJeeEvoD7P4JMCJLhdO1doUQWZRs83WmwTlBJGv8GiO1y2KWaKjQh+JdgsuYCqG2dPXcA==", - "license": "Apache-2.0", - "peer": true, - "peerDependencies": { - "@tanstack/react-query": "^5", - "firebase": "^11.3.0 || ^12.0.0" - } - }, - "node_modules/@tanstack/query-core": { - "version": "5.90.11", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.11.tgz", - "integrity": "sha512-f9z/nXhCgWDF4lHqgIE30jxLe4sYv15QodfdPDKYAk7nAEjNcndy4dHz3ezhdUaR23BpWa4I2EH4/DZ0//Uf8A==", - "license": "MIT", - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, - "node_modules/@tanstack/react-query": { - "version": "5.90.11", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.11.tgz", - "integrity": "sha512-3uyzz01D1fkTLXuxF3JfoJoHQMU2fxsfJwE+6N5hHy0dVNoZOvwKP8Z2k7k1KDeD54N20apcJnG75TBAStIrBA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@tanstack/query-core": "5.90.11" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^18 || ^19" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/d3-array": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", - "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", - "license": "MIT" - }, - "node_modules/@types/d3-color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", - "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", - "license": "MIT" - }, - "node_modules/@types/d3-ease": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", - "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", - "license": "MIT" - }, - "node_modules/@types/d3-interpolate": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", - "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", - "license": "MIT", - "dependencies": { - "@types/d3-color": "*" - } - }, - "node_modules/@types/d3-path": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", - "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", - "license": "MIT" - }, - "node_modules/@types/d3-scale": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", - "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", - "license": "MIT", - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-shape": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", - "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", - "license": "MIT", - "dependencies": { - "@types/d3-path": "*" - } - }, - "node_modules/@types/d3-time": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", - "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", - "license": "MIT" - }, - "node_modules/@types/d3-timer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", - "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.19.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.1.tgz", - "integrity": "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.27", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz", - "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.2.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", - "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", - "devOptional": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^18.0.0" - } - }, - "node_modules/@types/use-sync-external-store": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", - "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", - "license": "MIT" - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", - "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.28.0", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.27", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.17.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-hidden": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/autoprefixer": { - "version": "10.4.22", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz", - "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.27.0", - "caniuse-lite": "^1.0.30001754", - "fraction.js": "^5.3.4", - "normalize-range": "^0.1.2", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/baseline-browser-mapping": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.0.tgz", - "integrity": "sha512-Mh++g+2LPfzZToywfE1BUzvZbfOY52Nil0rn9H1CPC5DJ7fX+Vir7nToBeoiSbB1zTNeGYbELEvJESujgGrzXw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001759", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz", - "integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chardet": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", - "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/class-variance-authority": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", - "license": "Apache-2.0", - "dependencies": { - "clsx": "^2.1.1" - }, - "funding": { - "url": "https://polar.sh/cva" - } - }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cmdk": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", - "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "^1.1.1", - "@radix-ui/react-dialog": "^1.1.6", - "@radix-ui/react-id": "^1.1.0", - "@radix-ui/react-primitive": "^2.0.2" - }, - "peerDependencies": { - "react": "^18 || ^19 || ^19.0.0-rc", - "react-dom": "^18 || ^19 || ^19.0.0-rc" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-box-model": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", - "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", - "license": "MIT", - "dependencies": { - "tiny-invariant": "^1.0.6" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "license": "ISC", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "license": "ISC", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "license": "ISC", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "license": "ISC", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/date-fns": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", - "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/kossnocorp" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js-light": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", - "license": "MIT" - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "license": "Apache-2.0" - }, - "node_modules/diff": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", - "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "license": "MIT" - }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.263", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.263.tgz", - "integrity": "sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg==", - "dev": true, - "license": "ISC" - }, - "node_modules/embla-carousel": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", - "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", - "license": "MIT" - }, - "node_modules/embla-carousel-react": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.6.0.tgz", - "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==", - "license": "MIT", - "dependencies": { - "embla-carousel": "8.6.0", - "embla-carousel-reactive-utils": "8.6.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/embla-carousel-reactive-utils": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", - "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", - "license": "MIT", - "peerDependencies": { - "embla-carousel": "8.6.0" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.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" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "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.9", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.24.tgz", - "integrity": "sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "eslint": ">=8.40" - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-equals": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.3.tgz", - "integrity": "sha512-/boTcHZeIAQ2r/tL11voclBHDeP9WPxLt+tyAbVSyyXuUFyh0Tne7gJZTqGbxnvj79TjLdCXLOY7UIPhyG5MTw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/firebase": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-12.6.0.tgz", - "integrity": "sha512-8ZD1Gcv916Qp8/nsFH2+QMIrfX/76ti6cJwxQUENLXXnKlOX/IJZaU2Y3bdYf5r1mbownrQKfnWtrt+MVgdwLA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/ai": "2.6.0", - "@firebase/analytics": "0.10.19", - "@firebase/analytics-compat": "0.2.25", - "@firebase/app": "0.14.6", - "@firebase/app-check": "0.11.0", - "@firebase/app-check-compat": "0.4.0", - "@firebase/app-compat": "0.5.6", - "@firebase/app-types": "0.9.3", - "@firebase/auth": "1.11.1", - "@firebase/auth-compat": "0.6.1", - "@firebase/data-connect": "0.3.12", - "@firebase/database": "1.1.0", - "@firebase/database-compat": "2.1.0", - "@firebase/firestore": "4.9.2", - "@firebase/firestore-compat": "0.4.2", - "@firebase/functions": "0.13.1", - "@firebase/functions-compat": "0.4.1", - "@firebase/installations": "0.6.19", - "@firebase/installations-compat": "0.2.19", - "@firebase/messaging": "0.12.23", - "@firebase/messaging-compat": "0.2.23", - "@firebase/performance": "0.7.9", - "@firebase/performance-compat": "0.2.22", - "@firebase/remote-config": "0.7.0", - "@firebase/remote-config-compat": "0.2.20", - "@firebase/storage": "0.14.0", - "@firebase/storage-compat": "0.4.0", - "@firebase/util": "1.13.0" - } - }, - "node_modules/firebase/node_modules/@firebase/auth": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.11.1.tgz", - "integrity": "sha512-Mea0G/BwC1D0voSG+60Ylu3KZchXAFilXQ/hJXWCw3gebAu+RDINZA0dJMNeym7HFxBaBaByX8jSa7ys5+F2VA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@firebase/component": "0.7.0", - "@firebase/logger": "0.5.0", - "@firebase/util": "1.13.0", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@react-native-async-storage/async-storage": "^1.18.1" - }, - "peerDependenciesMeta": { - "@react-native-async-storage/async-storage": { - "optional": true - } - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fraction.js": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", - "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/framer-motion": { - "version": "12.23.25", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.25.tgz", - "integrity": "sha512-gUHGl2e4VG66jOcH0JHhuJQr6ZNwrET9g31ZG0xdXzT0CznP7fHX4P8Bcvuc4MiUB90ysNnWX2ukHRIggkl6hQ==", - "license": "MIT", - "dependencies": { - "motion-dom": "^12.23.23", - "motion-utils": "^12.23.6", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "@emotion/is-prop-valid": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/is-prop-valid": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/generator-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-nonce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", - "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", - "license": "MIT", - "peer": true - }, - "node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "license": "ISC", - "peer": true - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/input-otp": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz", - "integrity": "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/inquirer": { - "version": "12.11.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.11.1.tgz", - "integrity": "sha512-9VF7mrY+3OmsAfjH3yKz/pLbJ5z22E23hENKw3/LNSaA/sAt3v49bDRY+Ygct1xwuKT+U+cBfTzjCPySna69Qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/prompts": "^7.10.1", - "@inquirer/type": "^3.0.10", - "mute-stream": "^2.0.0", - "run-async": "^4.0.6", - "rxjs": "^7.8.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jake": { - "version": "10.9.4", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", - "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.6", - "filelist": "^1.0.4", - "picocolors": "^1.1.1" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT", - "peer": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/long": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lucide-react": { - "version": "0.475.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.475.0.tgz", - "integrity": "sha512-NJzvVu1HwFVeZ+Gwq2q00KygM1aBhy/ZrhY9FsAgJtpB+E4R7uxRk9M2iKvHa6/vNxZydIB59htha4c2vvwvVg==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/motion-dom": { - "version": "12.23.23", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz", - "integrity": "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==", - "license": "MIT", - "dependencies": { - "motion-utils": "^12.23.6" - } - }, - "node_modules/motion-utils": { - "version": "12.23.6", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", - "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mute-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/next-themes": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", - "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" - } - }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-import/node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/postcss-js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", - "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.1.1" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "jiti": ">=1.21.0", - "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/protobufjs": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/raf-schd": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", - "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==", - "license": "MIT" - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-day-picker": { - "version": "8.10.1", - "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz", - "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==", - "license": "MIT", - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/gpbl" - }, - "peerDependencies": { - "date-fns": "^2.28.0 || ^3.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-hook-form": { - "version": "7.67.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.67.0.tgz", - "integrity": "sha512-E55EOwKJHHIT/I6J9DmQbCWToAYSw9nN5R57MZw9rMtjh+YQreMDxRLfdjfxQbiJ3/qbg3Z02wGzBX4M+5fMtQ==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18 || ^19" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/react-redux": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", - "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", - "license": "MIT", - "dependencies": { - "@types/use-sync-external-store": "^0.0.6", - "use-sync-external-store": "^1.4.0" - }, - "peerDependencies": { - "@types/react": "^18.2.25 || ^19", - "react": "^18.0 || ^19", - "redux": "^5.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "redux": { - "optional": true - } - } - }, - "node_modules/react-refresh": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-remove-scroll": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", - "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.7", - "react-style-singleton": "^2.2.3", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.3", - "use-sidecar": "^1.1.3" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.2.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-resizable-panels": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.9.tgz", - "integrity": "sha512-z77+X08YDIrgAes4jl8xhnUu1LNIRp4+E7cv4xHmLOxxUPO/ML7PSrE813b90vj7xvQ1lcf7g2uA9GeMZonjhQ==", - "license": "MIT", - "peerDependencies": { - "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/react-router": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.10.0.tgz", - "integrity": "sha512-FVyCOH4IZ0eDDRycODfUqoN8ZSR2LbTvtx6RPsBgzvJ8xAXlMZNCrOFpu+jb8QbtZnpAd/cEki2pwE848pNGxw==", - "license": "MIT", - "dependencies": { - "cookie": "^1.0.1", - "set-cookie-parser": "^2.6.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - } - } - }, - "node_modules/react-router-dom": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.10.0.tgz", - "integrity": "sha512-Q4haR150pN/5N75O30iIsRJcr3ef7p7opFaKpcaREy0GQit6uCRu1NEiIFIwnHJQy0bsziRFBweR/5EkmHgVUQ==", - "license": "MIT", - "dependencies": { - "react-router": "7.10.0" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" - } - }, - "node_modules/react-smooth": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", - "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", - "license": "MIT", - "dependencies": { - "fast-equals": "^5.0.1", - "prop-types": "^15.8.1", - "react-transition-group": "^4.4.5" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", - "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recharts": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz", - "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", - "license": "MIT", - "dependencies": { - "clsx": "^2.0.0", - "eventemitter3": "^4.0.1", - "lodash": "^4.17.21", - "react-is": "^18.3.1", - "react-smooth": "^4.0.4", - "recharts-scale": "^0.4.4", - "tiny-invariant": "^1.3.1", - "victory-vendor": "^36.6.8" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/recharts-scale": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", - "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", - "license": "MIT", - "dependencies": { - "decimal.js-light": "^2.4.1" - } - }, - "node_modules/recharts/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/redux": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", - "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT" - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", - "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.3", - "@rollup/rollup-android-arm64": "4.53.3", - "@rollup/rollup-darwin-arm64": "4.53.3", - "@rollup/rollup-darwin-x64": "4.53.3", - "@rollup/rollup-freebsd-arm64": "4.53.3", - "@rollup/rollup-freebsd-x64": "4.53.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", - "@rollup/rollup-linux-arm-musleabihf": "4.53.3", - "@rollup/rollup-linux-arm64-gnu": "4.53.3", - "@rollup/rollup-linux-arm64-musl": "4.53.3", - "@rollup/rollup-linux-loong64-gnu": "4.53.3", - "@rollup/rollup-linux-ppc64-gnu": "4.53.3", - "@rollup/rollup-linux-riscv64-gnu": "4.53.3", - "@rollup/rollup-linux-riscv64-musl": "4.53.3", - "@rollup/rollup-linux-s390x-gnu": "4.53.3", - "@rollup/rollup-linux-x64-gnu": "4.53.3", - "@rollup/rollup-linux-x64-musl": "4.53.3", - "@rollup/rollup-openharmony-arm64": "4.53.3", - "@rollup/rollup-win32-arm64-msvc": "4.53.3", - "@rollup/rollup-win32-ia32-msvc": "4.53.3", - "@rollup/rollup-win32-x64-gnu": "4.53.3", - "@rollup/rollup-win32-x64-msvc": "4.53.3", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-async": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", - "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-cookie-parser": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", - "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", - "license": "MIT" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sonner": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz", - "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==", - "license": "MIT", - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sucrase": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", - "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "tinyglobby": "^0.2.11", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tailwind-merge": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", - "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" - } - }, - "node_modules/tailwindcss": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", - "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.6.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.7", - "lilconfig": "^3.1.3", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss-animate": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", - "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", - "license": "MIT", - "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders" - } - }, - "node_modules/tailwindcss/node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "license": "Apache-2.0" - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/update-browserslist-db": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.0.tgz", - "integrity": "sha512-Dn+NlSF/7+0lVSEZ57SYQg6/E44arLzsVOGgrElBn/BlG1B8WKdbLppOocFrXwRNTkNlgdGNaBgH1o0lggDPiw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", - "license": "MIT", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sync-external-store": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", - "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/vaul": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz", - "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-dialog": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/victory-vendor": { - "version": "36.9.2", - "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", - "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", - "license": "MIT AND ISC", - "dependencies": { - "@types/d3-array": "^3.0.3", - "@types/d3-ease": "^3.0.0", - "@types/d3-interpolate": "^3.0.1", - "@types/d3-scale": "^4.0.2", - "@types/d3-shape": "^3.1.0", - "@types/d3-time": "^3.0.0", - "@types/d3-timer": "^3.0.0", - "d3-array": "^3.1.6", - "d3-ease": "^3.0.1", - "d3-interpolate": "^3.0.1", - "d3-scale": "^4.0.2", - "d3-shape": "^3.1.0", - "d3-time": "^3.0.0", - "d3-timer": "^3.0.1" - } - }, - "node_modules/vite": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", - "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/web-vitals": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz", - "integrity": "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yoctocolors-cjs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", - "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "src/dataconnect-generated": { - "name": "@dataconnect/generated", - "version": "1.0.0", - "license": "Apache-2.0", - "engines": { - "node": " >=18.0" - }, - "peerDependencies": { - "@tanstack-query-firebase/react": "^2.0.0", - "firebase": "^11.3.0 || ^12.0.0" - } - } - } -} diff --git a/frontend-web-free/package.json b/frontend-web-free/package.json deleted file mode 100644 index f0a8c6eb..00000000 --- a/frontend-web-free/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "name": "base44-app", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "lint": "eslint .", - "preview": "vite preview" - }, - "dependencies": { - "@base44/sdk": "^0.1.2", - "@dataconnect/generated": "file:src/dataconnect-generated", - "@hello-pangea/dnd": "^18.0.1", - "@hookform/resolvers": "^4.1.2", - "@radix-ui/react-accordion": "^1.2.3", - "@radix-ui/react-alert-dialog": "^1.1.6", - "@radix-ui/react-aspect-ratio": "^1.1.2", - "@radix-ui/react-avatar": "^1.1.3", - "@radix-ui/react-checkbox": "^1.1.4", - "@radix-ui/react-collapsible": "^1.1.3", - "@radix-ui/react-context-menu": "^2.2.6", - "@radix-ui/react-dialog": "^1.1.6", - "@radix-ui/react-dropdown-menu": "^2.1.6", - "@radix-ui/react-hover-card": "^1.1.6", - "@radix-ui/react-label": "^2.1.2", - "@radix-ui/react-menubar": "^1.1.6", - "@radix-ui/react-navigation-menu": "^1.2.5", - "@radix-ui/react-popover": "^1.1.6", - "@radix-ui/react-progress": "^1.1.2", - "@radix-ui/react-radio-group": "^1.2.3", - "@radix-ui/react-scroll-area": "^1.2.3", - "@radix-ui/react-select": "^2.1.6", - "@radix-ui/react-separator": "^1.1.2", - "@radix-ui/react-slider": "^1.2.3", - "@radix-ui/react-slot": "^1.1.2", - "@radix-ui/react-switch": "^1.1.3", - "@radix-ui/react-tabs": "^1.1.3", - "@radix-ui/react-toggle": "^1.1.2", - "@radix-ui/react-toggle-group": "^1.1.2", - "@radix-ui/react-tooltip": "^1.1.8", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "cmdk": "^1.0.0", - "date-fns": "^3.6.0", - "embla-carousel-react": "^8.5.2", - "framer-motion": "^12.4.7", - "input-otp": "^1.4.2", - "lucide-react": "^0.475.0", - "next-themes": "^0.4.4", - "react": "^18.2.0", - "react-day-picker": "^8.10.1", - "react-dom": "^18.2.0", - "react-hook-form": "^7.54.2", - "react-resizable-panels": "^2.1.7", - "react-router-dom": "^7.2.0", - "recharts": "^2.15.1", - "sonner": "^2.0.1", - "tailwind-merge": "^3.0.2", - "tailwindcss-animate": "^1.0.7", - "vaul": "^1.1.2", - "zod": "^3.24.2" - }, - "devDependencies": { - "@eslint/js": "^9.19.0", - "@flydotio/dockerfile": "^0.7.8", - "@types/node": "^22.13.5", - "@types/react": "^18.2.66", - "@types/react-dom": "^18.2.22", - "@vitejs/plugin-react": "^4.3.4", - "autoprefixer": "^10.4.20", - "eslint": "^9.19.0", - "eslint-plugin-react": "^7.37.4", - "eslint-plugin-react-hooks": "^5.0.0", - "eslint-plugin-react-refresh": "^0.4.18", - "globals": "^15.14.0", - "postcss": "^8.5.3", - "tailwindcss": "^3.4.17", - "vite": "^6.1.0" - } -} diff --git a/frontend-web-free/postcss.config.js b/frontend-web-free/postcss.config.js deleted file mode 100644 index 2e7af2b7..00000000 --- a/frontend-web-free/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/frontend-web-free/src/App.css b/frontend-web-free/src/App.css deleted file mode 100644 index e69de29b..00000000 diff --git a/frontend-web-free/src/App.jsx b/frontend-web-free/src/App.jsx deleted file mode 100644 index ac388d76..00000000 --- a/frontend-web-free/src/App.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import './App.css' -import Pages from "@/pages/index.jsx" -import { Toaster } from "@/components/ui/toaster" - -function App() { - return ( - <> - - - - ) -} - -export default App \ No newline at end of file diff --git a/frontend-web-free/src/api/base44Client.js b/frontend-web-free/src/api/base44Client.js deleted file mode 100644 index c4f5d897..00000000 --- a/frontend-web-free/src/api/base44Client.js +++ /dev/null @@ -1,11 +0,0 @@ -/*import { createClient } from '@base44/sdk'; -// import { getAccessToken } from '@base44/sdk/utils/auth-utils'; - -// Create a client with authentication required -export const base44 = createClient({ - appId: "68fc6cf01386035c266e7a5d", - requiresAuth: true // Ensure authentication is required for all operations -});*/ - -import { krowSDK } from "@/api/krowSDK"; -export const base44 = krowSDK; \ No newline at end of file diff --git a/frontend-web-free/src/api/client.js b/frontend-web-free/src/api/client.js deleted file mode 100644 index e63a00f7..00000000 --- a/frontend-web-free/src/api/client.js +++ /dev/null @@ -1,22 +0,0 @@ -import axios from "axios"; -import { auth } from "../firebase"; - -const apiClient = axios.create({ - baseURL: import.meta.env.VITE_API_BASE_URL, // You will need to add this to your .env file -}); - -apiClient.interceptors.request.use( - async (config) => { - const user = auth.currentUser; - if (user) { - const token = await user.getIdToken(); - config.headers.Authorization = `Bearer ${token}`; - } - return config; - }, - (error) => { - return Promise.reject(error); - } -); - -export default apiClient; \ No newline at end of file diff --git a/frontend-web-free/src/api/entities.js b/frontend-web-free/src/api/entities.js deleted file mode 100644 index 3fe58bc2..00000000 --- a/frontend-web-free/src/api/entities.js +++ /dev/null @@ -1,81 +0,0 @@ -import { base44 } from './base44Client'; - - -export const Staff = base44.entities.Staff; - -export const Event = base44.entities.Event; - -export const Business = base44.entities.Business; - -export const Shift = base44.entities.Shift; - -export const Conversation = base44.entities.Conversation; - -export const Message = base44.entities.Message; - -export const VendorRate = base44.entities.VendorRate; - -export const VendorDefaultSettings = base44.entities.VendorDefaultSettings; - -export const Invoice = base44.entities.Invoice; - -export const ActivityLog = base44.entities.ActivityLog; - -export const Team = base44.entities.Team; - -export const TeamMember = base44.entities.TeamMember; - -export const TeamHub = base44.entities.TeamHub; - -export const Vendor = base44.entities.Vendor; - -export const Enterprise = base44.entities.Enterprise; - -export const Sector = base44.entities.Sector; - -export const Partner = base44.entities.Partner; - -export const Order = base44.entities.Order; - -export const Assignment = base44.entities.Assignment; - -export const Workforce = base44.entities.Workforce; - -export const RateCard = base44.entities.RateCard; - -export const CompliancePackage = base44.entities.CompliancePackage; - -export const Scorecard = base44.entities.Scorecard; - -export const VendorSectorLink = base44.entities.VendorSectorLink; - -export const VendorPartnerLink = base44.entities.VendorPartnerLink; - -export const OrderVendorInvite = base44.entities.OrderVendorInvite; - -export const Site = base44.entities.Site; - -export const VendorInvite = base44.entities.VendorInvite; - -export const Certification = base44.entities.Certification; - -export const TeamMemberInvite = base44.entities.TeamMemberInvite; - -export const VendorDocumentReview = base44.entities.VendorDocumentReview; - -export const Task = base44.entities.Task; - -export const TaskComment = base44.entities.TaskComment; - -export const WorkerAvailability = base44.entities.WorkerAvailability; - -export const ShiftProposal = base44.entities.ShiftProposal; - -export const VendorRateBook = base44.entities.VendorRateBook; - -export const VendorNetworkApproval = base44.entities.VendorNetworkApproval; - - - -// auth sdk: -export const User = base44.auth; \ No newline at end of file diff --git a/frontend-web-free/src/api/integrations.js b/frontend-web-free/src/api/integrations.js deleted file mode 100644 index 46389fce..00000000 --- a/frontend-web-free/src/api/integrations.js +++ /dev/null @@ -1,26 +0,0 @@ -import { base44 } from './base44Client'; - - - - -export const Core = base44.integrations.Core; - -export const InvokeLLM = base44.integrations.Core.InvokeLLM; - -export const SendEmail = base44.integrations.Core.SendEmail; - -export const UploadFile = base44.integrations.Core.UploadFile; - -export const GenerateImage = base44.integrations.Core.GenerateImage; - -export const ExtractDataFromUploadedFile = base44.integrations.Core.ExtractDataFromUploadedFile; - -export const CreateFileSignedUrl = base44.integrations.Core.CreateFileSignedUrl; - -export const UploadPrivateFile = base44.integrations.Core.UploadPrivateFile; - - - - - - diff --git a/frontend-web-free/src/api/krowSDK.js b/frontend-web-free/src/api/krowSDK.js deleted file mode 100644 index 1d9d0cf6..00000000 --- a/frontend-web-free/src/api/krowSDK.js +++ /dev/null @@ -1,830 +0,0 @@ -import apiClient from './client'; -import { auth, dataConnect } from '../firebase'; -import { signOut } from 'firebase/auth'; - -import * as dcSdk from '@dataconnect/generated'; // listEvents, createEvent, etc. - -const MOCK_USER_ROLE_KEY = 'krow_mock_user_role'; - -// --- Auth Module --- -const authModule = { - /** - * Fetches the currently authenticated user's profile from the backend. - * @returns {Promise} The user profile. - */ - me: async () => { - // 1. Firebase auth user - const fbUser = auth.currentUser; - - if (!fbUser) { - return null; // NO ESTÁ LOGGEADO - } - - // 2. Attempt to load matching Krow User from DataConnect - // (because your Krow user metadata is stored in the "users" table) - let krowUser = null; - try { - const response = await dcSdk.getUserById(dataConnect, { id: fbUser.uid }); - krowUser = response.data?.user || null; - } catch (err) { - console.warn("Krow user not found in DataConnect, returning Firebase-only info."); - } - - let mockRole = null; - mockRole = localStorage.getItem(MOCK_USER_ROLE_KEY); - - // 3. Build unified "me" object - return { - id: fbUser.uid, - email: fbUser.email, - fullName: krowUser?.fullName || fbUser.displayName || null, - role: krowUser?.role || "user", - user_role: mockRole || krowUser?.userRole || null, - firebase: fbUser, - krow: krowUser - }; - }, - - /** - * Logs the user out. - * @param {string} [redirectUrl] - Optional URL to redirect to after logout. - */ - logout: async (redirectUrl) => { - - localStorage.removeItem(MOCK_USER_ROLE_KEY); - - await signOut(auth); - if (redirectUrl) { - window.location.href = redirectUrl; - } - }, - - /** - * Checks if a user is currently authenticated. - * @returns {boolean} True if a user is authenticated. - */ - isAuthenticated: () => { - return !!auth.currentUser; - }, - - // ============================== - // FIX: auth.updateMe para soportar RoleSwitcher (antes lo hacía el mock base44) - // ============================== - /** - * Updates current user metadata (including role/user_role). - * Used by RoleSwitcher to change between ADMIN / VENDOR / etc. - * @param {{ user_role?: string, role?: string, fullName?: string }} data - * @returns {Promise} updated "me" object - */ - updateMe: async (data) => { - const fbUser = auth.currentUser; - if (!fbUser) { - throw new Error("Not authenticated"); - } - - if (data.user_role) { - try { - localStorage.setItem(MOCK_USER_ROLE_KEY, data.user_role); - } catch (err) { - console.warn("Krow user role could not be saved to localStorage."); - } - } - - return authModule.me(); - - }, - -}; - -// --- Core Integrations Module --- -const coreIntegrationsModule = { - /** - * Sends an email. - * @param {object} params - { to, subject, body } - * @returns {Promise} API response. - */ - SendEmail: async (params) => { - const { data } = await apiClient.post('/sendEmail', params); - return data; - }, - - /** - * Invokes a large language model. - * @param {object} params - { prompt, response_json_schema, file_urls } - * @returns {Promise} API response. - */ - InvokeLLM: async (params) => { - const { data } = await apiClient.post('/invokeLLM', params); - return data; - }, - - /** - * Uploads a public file. - * @param {File} file - The file to upload. - * @returns {Promise} API response with file_url. - */ - UploadFile: async ({ file }) => { - const formData = new FormData(); - formData.append('file', file); - const { data } = await apiClient.post('/uploadFile', formData, { - headers: { 'Content-Type': 'multipart/form-data' }, - }); - return data; - }, - - /** - * Uploads a private file. - * @param {File} file - The file to upload. - * @returns {Promise} API response with file_uri. - */ - UploadPrivateFile: async ({ file }) => { - const formData = new FormData(); - formData.append('file', file); - const { data } = await apiClient.post('/uploadPrivateFile', formData, { - headers: { 'Content-Type': 'multipart/form-data' }, - }); - return data; - }, - - /** - * Creates a temporary signed URL for a private file. - * @param {object} params - { file_uri, expires_in } - * @returns {Promise} API response with signed_url. - */ - CreateFileSignedUrl: async (params) => { - const { data } = await apiClient.post('/createSignedUrl', params); - return data; - }, -}; - -const dataconnectEntityConfig = { - User: { - list: 'listUsers', - get: 'getUserById', - create: 'createUser', - update: 'updateUser', - delete: 'deleteUser', - filter: 'filterUsers', - }, - Event: { - list: 'listEvents', - create: 'createEvent', - get: 'getEventById', - update: 'updateEvent', - delete: 'deleteEvent', - filter: 'filterEvents', - }, - - Staff: { - list: 'listStaff', - create: 'createStaff', - get: 'getStaffById', - update: 'updateStaff', - delete: 'deleteStaff', - filter: 'filterStaff', - }, - - Vendor: { - list: 'listVendor', - get: 'getVendorById', - create: 'createVendor', - update: 'updateVendor', - delete: 'deleteVendor', - filter: 'filterVendors', - }, - - VendorRate: { - list: 'listVendorRate', - get: 'getVendorRateById', - create: 'createVendorRate', - update: 'updateVendorRate', - delete: 'deleteVendorRate', - filter: 'filterVendorRates', - }, - - VendorDefaultSetting:{ - list: 'listVendorDefaultSettings', - get: 'getVendorDefaultSettingById', - create: 'createVendorDefaultSetting', - update: 'updateVendorDefaultSetting', - delete: 'deleteVendorDefaultSetting', - filter: 'filterVendorDefaultSettings', - }, - - Invoice:{ - list: 'listInvoice', - get: 'getInvoiceById', - create: 'createInvoice', - update: 'updateInvoice', - delete: 'deleteInvoice', - filter: 'filterInvoices', - - }, - - Business:{ - list: 'listBusiness', - get: 'getBusinessById', - create: 'createBusiness', - update: 'updateBusiness', - delete: 'deleteBusiness', - filter: 'filterBusiness', - }, - - Certification:{ - list: 'listCertification', - get: 'getCertificationById', - create: 'createCertification', - update: 'updateCertification', - delete: 'deleteCertification', - filter: 'filterCertification', - }, - - Team:{ - list: 'listTeam', - get: 'getTeamById', - create: 'createTeam', - update: 'updateTeam', - delete: 'deleteTeam', - filter: 'filterTeam', - }, - - TeamMember: { - list: 'listTeamMember', - get: 'getTeamMemberById', - create: 'createTeamMember', - update: 'updateTeamMember', - delete: 'deleteTeamMember', - filter: 'filterTeamMember', - }, - - TeamHub: { - list: 'listTeamHub', - get: 'getTeamHubById', - create: 'createTeamHub', - update: 'updateTeamHub', - delete: 'deleteTeamHub', - filter: 'filterTeamHub', - }, - - TeamMemberInvite: { - list: 'listTeamMemberInvite', - get: 'getTeamMemberInviteById', - create: 'createTeamMemberInvite', - update: 'updateTeamMemberInvite', - delete: 'deleteTeamMemberInvite', - filter: 'filterTeamMemberInvite', - }, - - Conversation:{ - list: 'listConversation', - get: 'getConversationById', - create: 'createConversation', - update: 'updateConversation', - delete: 'deleteConversation', - filter: 'filterConversation', - }, - - Message:{ - list: 'listMessage', - get: 'getMessageById', - create: 'createMessage', - update: 'updateMessage', - delete: 'deleteMessage', - filter: 'filterMessage', - }, - - ActivityLog:{ - list: 'listActivityLog', - get: 'getActivityLogById', - create: 'createActivityLog', - update: 'updateActivityLog', - delete: 'deleteActivityLog', - filter: 'filterActivityLog', - }, - - Enterprise:{ - list: 'listEnterprise', - get: 'getEnterpriseById', - create: 'createEnterprise', - update: 'updateEnterprise', - delete: 'deleteEnterprise', - filter: 'filterEnterprise', - }, - - Sector:{ - list: 'listSector', - get: 'getSectorById', - create: 'createSector', - update: 'updateSector', - delete: 'deleteSector', - filter: 'filterSector' - }, - - Partner:{ - list: 'listPartner', - get: 'getPartnerById', - create: 'createPartner', - update: 'updatePartner', - delete: 'deletePartner', - filter: 'filterPartner' - }, - - Order:{ - list: 'listOrder', - get: 'getOrderById', - create: 'createOrder', - update: 'updateOrder', - delete: 'deleteOrder', - filter: 'filterOrder' - }, - - Shift:{ - list: 'listShift', - get: 'getShiftById', - create: 'createShift', - update: 'updateShift', - delete: 'deleteShift', - filter: 'filterShift' - } - -}; - -// Helper for methods not implemented -const notImplemented = (entityName, method) => async () => { - throw new Error(`${entityName}.${method} is not implemented yet for Data Connect`); -}; - -// helper para normalizar siempre a array (list + filter devolverán arrays) -const normalizeResultToArray = (res) => { - // if it is an array, perfect - if (Array.isArray(res)) return res; - if (!res || typeof res !== 'object') return []; - - const data = res.data; - if (data && typeof data === 'object') { - const keys = Object.keys(data); - if (keys.length === 0) return []; - const firstValue = data[keys[0]]; - - if (Array.isArray(firstValue)) return firstValue; - if (firstValue == null) return []; - // if it is a single object, return it as an array - return [firstValue]; - } - - return []; -}; - -// --- Entities Module ( Data Connect, without REST Base44) --- -const entitiesModule = {}; - -// --- Helper to convert snake_case to camelCase recursively --- -const toCamel = (value) => { - if (Array.isArray(value)) { - return value.map(toCamel); - } - if (value && typeof value === "object") { - return Object.entries(value).reduce((acc, [key, val]) => { - const camelKey = key.replace(/_([a-z0-9])/g, (_, c) => c.toUpperCase()); - acc[camelKey] = toCamel(val); - return acc; - }, {}); - } - return value; -}; - -// --- Helper to convert camelCase to snake_case recursively --- -const toSnake = (value) => { - if (Array.isArray(value)) { - return value.map(toSnake); - } - if (value && typeof value === "object") { - return Object.entries(value).reduce((acc, [key, val]) => { - const snakeKey = key - .replace(/([A-Z])/g, "_$1") - .replace(/([a-z])([0-9]+)/g, "$1_$2") - .toLowerCase(); - acc[snakeKey] = toSnake(val); - return acc; - }, {}); - } - return value; -}; - - -Object.entries(dataconnectEntityConfig).forEach(([entityName, ops]) => { - entitiesModule[entityName] = { - - get: notImplemented(entityName, 'get'), - update: notImplemented(entityName, 'update'), - delete: notImplemented(entityName, 'delete'), - filter: notImplemented(entityName, 'filter'), - list: notImplemented(entityName, 'list'), - create: notImplemented(entityName, 'create'), - - // list - ...(ops.list && { - list: async (...args) => { - /*const fn = dcSdk[ops.list]; - if (typeof fn !== 'function') { - throw new Error( - `Data Connect operation "${ops.list}" not found for entity "${entityName}".` - ); - } - - let sort; - let limit; - let baseVariables; // por si algún list usa variables (como Team) - - if (args.length === 1) { - const [a0] = args; - if (typeof a0 === "string") { - // list('-created_date') - sort = a0; - } else if (a0 && typeof a0 === "object" && !Array.isArray(a0)) { - // list({ ...vars }) -> reservado para queries que acepten variables - baseVariables = a0; - } - } else if (args.length === 2) { - const [a0, a1] = args; - if (typeof a0 === "string" && typeof a1 === "number") { - // list('-created_date', 50) - sort = a0; - limit = a1; - } else if (a0 && typeof a0 === "object" && !Array.isArray(a0)) { - // list({ ...vars }, '-created_date') - baseVariables = a0; - if (typeof a1 === "string") sort = a1; - } - } else if (args.length >= 3) { - const [a0, a1, a2] = args; - if (a0 && typeof a0 === "object" && !Array.isArray(a0)) { - // list({ ...vars }, '-created_date', 50) - baseVariables = a0; - if (typeof a1 === "string") sort = a1; - if (typeof a2 === "number") limit = a2; - } - } - - let variables = baseVariables; - - if (entityName === "Team") { - variables = variables || {}; - if (sort) { - const desc = sort.startsWith("-"); - variables.orderByCreatedDate = desc ? "DESC" : "ASC"; - } - if (typeof limit === "number") { - variables.limit = limit; - } - } - - const res = await fn(dataConnect, variables); - let items = normalizeResultToArray(res); - - // para entidades que NO tienen orderBy/limit en el query, - // aplicamos sort/limit en el front como fallback. - if (entityName !== "Team" && sort) { - const desc = sort.startsWith("-"); - const field = desc ? sort.slice(1) : sort; // '-created_date' -> 'created_date' - - items = items.slice().sort((a, b) => { - const av = a?.[field]; - const bv = b?.[field]; - - if (av == null && bv == null) return 0; - if (av == null) return 1; - if (bv == null) return -1; - - const da = new Date(av); - const db = new Date(bv); - if (!isNaN(da) && !isNaN(db)) { - return desc ? db - da : da - db; - } - - if (av < bv) return desc ? 1 : -1; - if (av > bv) return desc ? -1 : 1; - return 0; - }); - } - - if (entityName !== "Team" && typeof limit === "number") { - items = items.slice(0, limit); - } - //console.log(items) - //return items; - */ - const fn = dcSdk[ops.list]; - if (typeof fn !== 'function') { - throw new Error( - `Data Connect operation "${ops.list}" not found for entity "${entityName}".` - ); - } - try { - // --- Lógica de parseo de argumentos (se mantiene para compatibilidad) --- - let sort; - let limit; - let baseVariables; - - if (args.length === 1) { - const [a0] = args; - if (typeof a0 === "string") sort = a0; - else if (a0 && typeof a0 === "object") baseVariables = a0; - } else if (args.length === 2) { - const [a0, a1] = args; - if (typeof a0 === "string" && typeof a1 === "number") { - sort = a0; - limit = a1; - } else if (a0 && typeof a0 === "object") { - baseVariables = a0; - if (typeof a1 === "string") sort = a1; - } - } else if (args.length >= 3) { - const [a0, a1, a2] = args; - if (a0 && typeof a0 === "object") { - baseVariables = a0; - if (typeof a1 === "string") sort = a1; - if (typeof a2 === "number") limit = a2; - } - } - - // --- FIX: Se llama al backend SIN parámetros de orden/límite --- - // Se asume que la mayoría de queries 'list' no aceptan variables, solo se pasan si existen. - - //const res = await fn(dataConnect, baseVariables); - const res = await fn(dataConnect, baseVariables); - - let items = normalizeResultToArray(res); - - // --- FIX: SE RESTAURA el ordenamiento y límite en el CLIENTE --- - // Esto es necesario hasta que el backend pueda manejar estos parámetros. - if (sort) { - const isDesc = sort.startsWith("-"); - const field = isDesc ? sort.slice(1) : sort; - - items = items.slice().sort((a, b) => { - const av = a?.[field]; - const bv = b?.[field]; - - if (av == null && bv == null) return 0; - if (av == null) return 1; - if (bv == null) return -1; - - const da = new Date(av); - const db = new Date(bv); - if (!isNaN(da) && !isNaN(db)) { - return isDesc ? db - da : da - db; - } - - if (av < bv) return isDesc ? 1 : -1; - if (av > bv) return isDesc ? -1 : 1; - return 0; - }); - } - - if (typeof limit === "number") { - items = items.slice(0, limit); - } - return items.map(toSnake); - } catch (err) { - console.error('list staff failed', err); - throw err; - } - }, - }), - - // create - ...(ops.create && { - create: async (params) => { - const fn = dcSdk[ops.create]; - if (typeof fn !== 'function') { - throw new Error( - `Data Connect operation "${ops.create}" not found for entity "${entityName}".` - ); - } - - if (!params || typeof params !== 'object') { - throw new Error( - `${entityName}.create expects an object with the fields to insert` - ); - } - - let payload; - - if (params.data && typeof params.data === 'object') { - // caso nuevo: create({ data: { ... } }) - payload = params.data; - } else { - // caso legacy: create({ ...fields }) - payload = params; - } - - //converting to camelCase for data connect - payload = toCamel(payload); - - return fn(dataConnect, payload); - }, - }), - - //get - ...(ops.get && { - get: async (params) => { - const fn = dcSdk[ops.get]; - if (typeof fn !== 'function') { - throw new Error( - `Data Connect operation "${ops.get}" not found for entity "${entityName}".` - ); - } - - if (!params || typeof params !== 'object') { - throw new Error(`${entityName}.get expects an object of variables (e.g. { id })`); - } - - //return fn(dataConnect, params); - const result = await fn(dataConnect, params); - return toSnake(result); - - }, - }), - - //update - ...(ops.update && { - update: async (id,params) => { - const fn = dcSdk[ops.update]; - if (typeof fn !== 'function') { - throw new Error( - `Data Connect operation "${ops.update}" not found for entity "${entityName}".` - ); - } - - if (!params || typeof params !== 'object') { - throw new Error( - `${entityName}.update expects an object of variables matching the GraphQL mutation` - ); - } - - //const { id, data } = params; - let data = params; - - if (!id) { - throw new Error(`${entityName}.update requires an "id" field`); - } - - if (!data || typeof data !== 'object') { - throw new Error( - `${entityName}.update requires a "data" object with the fields to update` - ); - } - - if (data && typeof data === "object") { - data = toCamel(data); - } - const vars = { id, ...data }; - - return fn(dataConnect, vars); - - }, - }), - - - // delete - ...(ops.delete && { - delete: async (params) => { - const fn = dcSdk[ops.delete]; - if (typeof fn !== 'function') { - throw new Error( - `Data Connect operation "${ops.delete}" not found for entity "${entityName}".` - ); - } - - if (!params || typeof params !== 'object') { - throw new Error( - `${entityName}.delete expects an object like { id }` - ); - } - - const { id } = params; - - if (!id) { - throw new Error(`${entityName}.delete requires an "id" field`); - } - - // Data Connect solo espera { id } como variables - return fn(dataConnect, { id }); - }, - }), - - - // filter - ...(ops.filter && { - filter: async (...args) => { - const fn = dcSdk[ops.filter]; - if (typeof fn !== 'function') { - throw new Error( - `Data Connect operation "${ops.filter}" not found for entity "${entityName}".` - ); - } - - // FIX: soportar firma vieja: filter(filters, sort, limit) - const [params, sort, limit] = args; - // FIX: soportar firma vieja: filter(filters, sort, limit) - - if (!params) { - if (ops.list) {//if no params, call to list() - const listFn = dcSdk[ops.list]; - if (typeof listFn !== 'function') { - throw new Error( - `Data Connect operation "${ops.list}" not found for entity "${entityName}".` - ); - } - //return listFn(dataConnect); - //fix - const resList = await listFn(dataConnect); - return normalizeResultToArray(resList); - //fix - } - throw new Error(`${entityName}.filter expects params or a list operation`); - } - const rawFilters = params.filters ?? params; - const variables = {}; - - for (const [key, value] of Object.entries(rawFilters)) {//cleaning undefined/null/'' values - if (value !== undefined && value !== null && value !== '') { - variables[key] = value; - } - } - - // if no valid filters, call to list() - if (Object.keys(variables).length === 0) { - if (ops.list) { - const listFn = dcSdk[ops.list]; - if (typeof listFn !== 'function') { - throw new Error( - `Data Connect operation "${ops.list}" not found for entity "${entityName}".` - ); - } - //return listFn(dataConnect); - //fix - const resList = await listFn(dataConnect); - return normalizeResultToArray(resList); - //fix - } - throw new Error(`${entityName}.filter received no valid filters and no list operation`); - } - - //return fn(dataConnect, variables); - //fix - const res = await fn(dataConnect, variables); - - // FIX: normalizar a array (activityLogs[], messages[], etc.) - let items = normalizeResultToArray(res); - - // FIX: soportar sort tipo '-created_date' o 'created_date' - if (sort) { - const desc = sort.startsWith('-'); - const field = desc ? sort.slice(1) : sort; - - items = items.slice().sort((a, b) => { - const av = a?.[field]; - const bv = b?.[field]; - - if (av == null && bv == null) return 0; - if (av == null) return 1; - if (bv == null) return -1; - - // Intentar tratarlos como fecha si parecen fechas - const da = new Date(av); - const db = new Date(bv); - if (!isNaN(da) && !isNaN(db)) { - return desc ? db - da : da - db; - } - - // Fallback: comparación normal - if (av < bv) return desc ? 1 : -1; - if (av > bv) return desc ? -1 : 1; - return 0; - }); - } - - // FIX: soportar limit (ej: 50) - if (typeof limit === 'number') { - items = items.slice(0, limit); - } - - return items; - //fix - }, - }), - - }; -}); - - -// --- Main SDK Export --- -export const krowSDK = { - auth: authModule, - integrations: { - Core: coreIntegrationsModule, - }, - entities: entitiesModule, -}; diff --git a/frontend-web-free/src/components/auth/ProtectedRoute.jsx b/frontend-web-free/src/components/auth/ProtectedRoute.jsx deleted file mode 100644 index 22384a45..00000000 --- a/frontend-web-free/src/components/auth/ProtectedRoute.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { Navigate } from 'react-router-dom'; -import { useAuth } from '@/hooks/useAuth'; -import { Loader2 } from 'lucide-react'; - -export default function ProtectedRoute({ children }) { - const { user, loading } = useAuth(); - - if (loading) { - return ( -
-
- -

Loading...

-
-
- ); - } - - if (!user) { - return ; - } - - return children; -} \ No newline at end of file diff --git a/frontend-web-free/src/components/auth/PublicRoute.jsx b/frontend-web-free/src/components/auth/PublicRoute.jsx deleted file mode 100644 index 55d4d0d8..00000000 --- a/frontend-web-free/src/components/auth/PublicRoute.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { Navigate } from 'react-router-dom'; -import { useAuth } from '@/hooks/useAuth'; -import { Loader2 } from 'lucide-react'; - -export default function PublicRoute({ children }) { - const { user, loading } = useAuth(); - - if (loading) { - return ( -
-
- -

Loading...

-
-
- ); - } - - if (user) { - return ; - } - - return children; -} \ No newline at end of file diff --git a/frontend-web-free/src/components/business/BusinessCard.jsx b/frontend-web-free/src/components/business/BusinessCard.jsx deleted file mode 100644 index 5641a474..00000000 --- a/frontend-web-free/src/components/business/BusinessCard.jsx +++ /dev/null @@ -1,273 +0,0 @@ -import React from "react"; -import { Card, CardContent } from "@/components/ui/card"; -import { Badge } from "@/components/ui/badge"; -import { Button } from "@/components/ui/button"; -import { Building2, MapPin, Briefcase, Phone, Mail, TrendingUp, Clock, Award, Users, Eye, Edit2, DollarSign } from "lucide-react"; -import { Link } from "react-router-dom"; -import { createPageUrl } from "@/utils"; - -export default function BusinessCard({ company, metrics, isListView = false, onView, onEdit }) { - const { companyName, logo, sector, monthlySpend, totalStaff, location, serviceType, phone, email, technology, performance, gradeColor, clientGrade, isActive, lastOrderDate, rateCard, businessId } = company; - - if (isListView) { - return ( - - -
- {/* Logo */} -
- {logo ? ( - {companyName} - ) : ( -
- -
- )} -
- - {/* Company Info */} -
-
-

{companyName}

-
- {clientGrade} -
- {isActive === false && ( - Inactive - )} -
-

{serviceType}

-
- - - {location} - - Monthly: ${(monthlySpend / 1000).toFixed(0)}k - {totalStaff} Staff - {lastOrderDate && ( - - - Last: {new Date(lastOrderDate).toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} - - )} -
-
- - {/* All Performance Metrics */} -
-
-

Cancellations

-

{performance.cancelRate}%

-
-
-

On-Time

-

{performance.onTimeRate}%

-
-
-

Rapid Orders

-

{performance.rapidOrders}

-
-
-

Main Position

-

{performance.mainPosition}

-
-
- - {/* Rate Card Badge */} - {rateCard && ( -
- - - - {rateCard} - - -
- )} - - {/* Actions */} -
- - -
-
-
-
- ); - } - - return ( - - {/* Header - Blue Gradient */} -
-
-
- {logo ? ( - {companyName} - ) : ( -
- -
- )} -
-

{companyName}

- - # N/A - -
-
-
- {clientGrade} -
-
-

{serviceType}

- - {/* Metrics Row */} -
-
-

Monthly Sales

-

${(monthlySpend / 1000).toFixed(0)}k

-
-
-

Total Staff

-

{totalStaff}

-
-
-

Last Order

-

- {lastOrderDate - ? new Date(lastOrderDate).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }) - : 'None'} -

-
-
-
- - {/* Content */} - - {/* Company Information */} -
-

COMPANY INFORMATION

-
-
- -
-

{location}

-

California

-
-
-
- -
-

{serviceType}

-

Primary Service

-
-
-
- -

{phone}

-
-
- -

{email}

-
-
-
- - {/* Rate Card & Technology */} -
-

RATE CARD & TECHNOLOGY

-
- {rateCard ? ( - - - - {rateCard} - - - ) : ( - - No Rate Card - - )} - {technology?.isUsingKROW ? ( - - Using KROW - - ) : ( - - Invite to KROW - - )} -
-
- - {/* Performance Metrics */} -
-

PERFORMANCE METRICS

-
- {/* Cancellation Rate */} -
-
- -

Cancellations

-
-

{performance.cancelRate}%

-
-
-
-
- - {/* On-Time Ordering */} -
-
- -

On-Time Order

-
-

{performance.onTimeRate}%

-
-
-
-
- - {/* Rapid Orders */} -
-
- -

Rapid Orders

-
-

{performance.rapidOrders}

-

Last 30 days

-
- - {/* Main Position */} -
-
- -

Main Position

-
-

{performance.mainPosition}

-

Most requested

-
-
-
- - {/* Footer */} - -
-
- ); -} \ No newline at end of file diff --git a/frontend-web-free/src/components/business/CreateBusinessModal.jsx b/frontend-web-free/src/components/business/CreateBusinessModal.jsx deleted file mode 100644 index f6b31e40..00000000 --- a/frontend-web-free/src/components/business/CreateBusinessModal.jsx +++ /dev/null @@ -1,292 +0,0 @@ - -import React, { useState } from "react"; -import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; -import { - Dialog, - DialogContent, - DialogHeader, - DialogTitle, -} from "@/components/ui/dialog"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { Save, X } from "lucide-react"; - -export default function CreateBusinessModal({ open, onOpenChange, onSubmit, isSubmitting }) { - const [formData, setFormData] = useState({ - business_name: "", - company_logo: "", // Added company_logo field - contact_name: "", - phone: "", - email: "", - hub_building: "", - address: "", - city: "", - area: "Bay Area", - sector: "", - rate_group: "", - status: "Active", - notes: "" - }); - - const handleChange = (field, value) => { - setFormData(prev => ({ ...prev, [field]: value })); - }; - - const handleSubmit = (e) => { - e.preventDefault(); - onSubmit(formData); - // Reset form after submission - setFormData({ - business_name: "", - company_logo: "", // Reset company_logo field - contact_name: "", - phone: "", - email: "", - hub_building: "", - address: "", - city: "", - area: "Bay Area", - sector: "", - rate_group: "", - status: "Active", - notes: "" - }); - }; - - return ( - - - - - Create New Business - - - -
- {/* Business Name & Company Logo */} -
-
- - handleChange('business_name', e.target.value)} - placeholder="Enter business name" - required - className="border-slate-300" - /> -
- -
- - handleChange('company_logo', e.target.value)} - placeholder="https://example.com/logo.png" - className="border-slate-300" - /> -

Optional: URL to company logo image

-
-
- - {/* Primary Contact (Moved from first grid to its own section) */} -
- - handleChange('contact_name', e.target.value)} - placeholder="Contact name" - required - className="border-slate-300" - /> -
- - {/* Contact Number & Email */} -
-
- - handleChange('phone', e.target.value)} - placeholder="(555) 123-4567" - className="border-slate-300" - /> -
- -
- - handleChange('email', e.target.value)} - placeholder="business@example.com" - className="border-slate-300" - /> -
-
- - {/* Hub / Building */} -
- - handleChange('hub_building', e.target.value)} - placeholder="Building name or location" - className="border-slate-300" - /> -
- - {/* Address */} -
- - handleChange('address', e.target.value)} - placeholder="Street address" - className="border-slate-300" - /> -
- - {/* City & Area */} -
-
- - handleChange('city', e.target.value)} - placeholder="City" - className="border-slate-300" - /> -
- -
- - -
-
- - {/* Sector & Rate Group */} -
-
- - -
- -
- - -
-
- - {/* Status */} -
- - -
- - {/* Action Buttons */} -
- - -
-
-
-
- ); -} diff --git a/frontend-web-free/src/components/business/ERPSettingsTab.jsx b/frontend-web-free/src/components/business/ERPSettingsTab.jsx deleted file mode 100644 index 599f7052..00000000 --- a/frontend-web-free/src/components/business/ERPSettingsTab.jsx +++ /dev/null @@ -1,256 +0,0 @@ -import React, { useState, useEffect } from "react"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; -import { Badge } from "@/components/ui/badge"; -import { Switch } from "@/components/ui/switch"; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; -import { Save, Loader2, Link2, Building2, FileText, Mail, CheckCircle, AlertCircle } from "lucide-react"; - -const ERP_SYSTEMS = [ - { value: "None", label: "No ERP Integration" }, - { value: "SAP Ariba", label: "SAP Ariba" }, - { value: "Fieldglass", label: "SAP Fieldglass" }, - { value: "CrunchTime", label: "CrunchTime" }, - { value: "Coupa", label: "Coupa" }, - { value: "Oracle NetSuite", label: "Oracle NetSuite" }, - { value: "Workday", label: "Workday" }, - { value: "Other", label: "Other" }, -]; - -const EDI_FORMATS = [ - { value: "CSV", label: "CSV (Excel Compatible)" }, - { value: "EDI 810", label: "EDI 810 (Standard Invoice)" }, - { value: "cXML", label: "cXML (Ariba/Coupa)" }, - { value: "JSON", label: "JSON (API Format)" }, - { value: "Custom", label: "Custom Template" }, -]; - -export default function ERPSettingsTab({ business, onSave, isSaving }) { - const [settings, setSettings] = useState({ - erp_system: business?.erp_system || "None", - erp_vendor_id: business?.erp_vendor_id || "", - erp_cost_center: business?.erp_cost_center || "", - edi_enabled: business?.edi_enabled || false, - edi_format: business?.edi_format || "CSV", - invoice_email: business?.invoice_email || "", - po_required: business?.po_required || false, - }); - - useEffect(() => { - if (business) { - setSettings({ - erp_system: business.erp_system || "None", - erp_vendor_id: business.erp_vendor_id || "", - erp_cost_center: business.erp_cost_center || "", - edi_enabled: business.edi_enabled || false, - edi_format: business.edi_format || "CSV", - invoice_email: business.invoice_email || "", - po_required: business.po_required || false, - }); - } - }, [business]); - - const handleChange = (field, value) => { - setSettings(prev => ({ ...prev, [field]: value })); - }; - - const handleSubmit = () => { - onSave(settings); - }; - - const isConfigured = settings.erp_system !== "None" && settings.erp_vendor_id; - - return ( -
- {/* Status Card */} - - -
- {isConfigured ? ( - - ) : ( - - )} -
-

- {isConfigured ? 'ERP Integration Active' : 'ERP Integration Not Configured'} -

-

- {isConfigured - ? `Connected to ${settings.erp_system} • Vendor ID: ${settings.erp_vendor_id}` - : 'Configure ERP settings to enable automated invoice delivery'} -

-
-
-
-
- - {/* ERP System Settings */} - - - - - ERP System Configuration - - - -
-
- - -

Client's procurement or ERP system

-
- -
- - handleChange('erp_vendor_id', e.target.value)} - placeholder="e.g., VND-12345" - className="border-slate-200" - /> -

Your vendor identifier in client's system

-
- -
- - handleChange('erp_cost_center', e.target.value)} - placeholder="e.g., CC-1001" - className="border-slate-200" - /> -

Default cost center for invoice allocation

-
- -
- - handleChange('invoice_email', e.target.value)} - placeholder="ap@client.com" - className="border-slate-200" - /> -

Accounts payable email for invoice delivery

-
-
-
-
- - {/* EDI Settings */} - - - - - EDI / Export Settings - - - -
-
-

Enable EDI Integration

-

Automatically format invoices for EDI transmission

-
- handleChange('edi_enabled', checked)} - /> -
- -
-
- - -

Default format for invoice exports

-
- -
-
-

PO Required

-

Require PO number on invoices

-
- handleChange('po_required', checked)} - /> -
-
- - {/* Format Info */} -
-

- - Supported Formats -

-
-
- EDI 810 - Standard -
-
- cXML - Ariba/Coupa -
-
- CSV - Excel -
-
- JSON - API -
-
-
-
-
- - {/* Save Button */} -
- -
-
- ); -} \ No newline at end of file diff --git a/frontend-web-free/src/components/chat/ChatBubble.jsx b/frontend-web-free/src/components/chat/ChatBubble.jsx deleted file mode 100644 index 0e49195e..00000000 --- a/frontend-web-free/src/components/chat/ChatBubble.jsx +++ /dev/null @@ -1,321 +0,0 @@ -import React, { useState } from "react"; -import { base44 } from "@/api/base44Client"; -import { useQuery } from "@tanstack/react-query"; -import { MessageSquare, X, Send, Minimize2, Maximize2 } from "lucide-react"; -import { Button } from "@/components/ui/button"; -import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; -import { Input } from "@/components/ui/input"; -import { Badge } from "@/components/ui/badge"; -import { Avatar, AvatarFallback } from "@/components/ui/avatar"; -import { ScrollArea } from "@/components/ui/scroll-area"; -import { motion, AnimatePresence } from "framer-motion"; -import { format } from "date-fns"; -import { useNavigate } from "react-router-dom"; -import { createPageUrl } from "@/utils"; - -export default function ChatBubble() { - const [isOpen, setIsOpen] = useState(false); - const [isMinimized, setIsMinimized] = useState(false); - const [selectedConv, setSelectedConv] = useState(null); - const [messageInput, setMessageInput] = useState(""); - const navigate = useNavigate(); - - const { data: user } = useQuery({ - queryKey: ['current-user'], - queryFn: () => base44.auth.me(), - }); - - const { data: conversations, refetch: refetchConversations } = useQuery({ - queryKey: ['conversations-bubble'], - queryFn: () => base44.entities.Conversation.list('-last_message_at', 5), - initialData: [], - refetchInterval: 10000, // Refresh every 10 seconds - }); - - const { data: messages, refetch: refetchMessages } = useQuery({ - queryKey: ['messages-bubble', selectedConv?.id], - queryFn: () => base44.entities.Message.filter({ conversation_id: selectedConv?.id }), - initialData: [], - enabled: !!selectedConv?.id, - refetchInterval: 5000, // Refresh every 5 seconds when viewing - }); - - const totalUnread = conversations.reduce((sum, conv) => sum + (conv.unread_count || 0), 0); - - const handleSendMessage = async () => { - if (!messageInput.trim() || !selectedConv) return; - - await base44.entities.Message.create({ - conversation_id: selectedConv.id, - sender_id: user.id, - sender_name: user.full_name || user.email, - sender_role: user.role || "admin", - content: messageInput.trim(), - read_by: [user.id] - }); - - await base44.entities.Conversation.update(selectedConv.id, { - last_message: messageInput.trim().substring(0, 100), - last_message_at: new Date().toISOString() - }); - - setMessageInput(""); - refetchMessages(); - refetchConversations(); - }; - - const getRoleColor = (role) => { - const colors = { - client: "bg-purple-100 text-purple-700", - vendor: "bg-amber-100 text-amber-700", - staff: "bg-blue-100 text-blue-700", - admin: "bg-slate-100 text-slate-700" - }; - return colors[role] || "bg-slate-100 text-slate-700"; - }; - - return ( - <> - {/* Chat Bubble Button */} - - {!isOpen && ( - - - - )} - - - {/* Chat Window */} - - {isOpen && ( - - - {/* Header */} - -
-
-
- -
-
- - {selectedConv ? selectedConv.subject : 'Messages'} - - {selectedConv && ( -

- {selectedConv.is_group - ? `${selectedConv.participants?.length || 0} members` - : selectedConv.participants?.[1]?.name || 'Chat'} -

- )} - {!selectedConv && ( -

- {totalUnread > 0 ? `${totalUnread} unread` : 'Online'} -

- )} -
-
-
- {selectedConv && ( - - )} - - -
-
-
- - {!isMinimized && ( - - {!selectedConv ? ( - <> - {/* Conversations List */} - -
- {conversations.length === 0 ? ( -
- -

No conversations yet

- -
- ) : ( - conversations.map((conv) => { - const otherParticipant = conv.participants?.[1] || conv.participants?.[0] || {}; - return ( - setSelectedConv(conv)} - > - -
- - - {conv.is_group ? : otherParticipant.name?.charAt(0) || '?'} - - -
-
-

- {conv.is_group ? conv.group_name : (conv.subject || otherParticipant.name)} -

- {conv.unread_count > 0 && ( - - {conv.unread_count} - - )} -
-

- {conv.last_message || "No messages yet"} -

- {conv.last_message_at && ( -

- {format(new Date(conv.last_message_at), "MMM d, h:mm a")} -

- )} -
-
-
-
- ); - }) - )} -
-
- - {/* Quick Action */} -
- -
- - ) : ( - <> - {/* Messages Thread */} - -
- {messages.map((message) => { - const isOwnMessage = message.sender_id === user?.id || message.created_by === user?.id; - return ( -
-
- - - {message.sender_name?.charAt(0) || '?'} - - -
-
-

{message.content}

-
-

- {message.created_date && format(new Date(message.created_date), "h:mm a")} -

-
-
-
- ); - })} -
-
- - {/* Message Input */} -
-
- setMessageInput(e.target.value)} - onKeyPress={(e) => e.key === 'Enter' && handleSendMessage()} - className="flex-1" - /> - -
-
- - )} -
- )} -
-
- )} -
- - ); -} \ No newline at end of file diff --git a/frontend-web-free/src/components/common/DragDropFileUpload.jsx b/frontend-web-free/src/components/common/DragDropFileUpload.jsx deleted file mode 100644 index 2b27aedc..00000000 --- a/frontend-web-free/src/components/common/DragDropFileUpload.jsx +++ /dev/null @@ -1,128 +0,0 @@ -import React, { useState } from "react"; -import { Upload, FileText, Loader2, CheckCircle2 } from "lucide-react"; -import { Input } from "@/components/ui/input"; - -export default function DragDropFileUpload({ - onFileSelect, - accept = ".pdf,.jpg,.jpeg,.png,.doc,.docx", - label, - hint, - uploading = false, - uploaded = false, - uploadedFileName = null, - disabled = false -}) { - const [isDragging, setIsDragging] = useState(false); - - const handleDragEnter = (e) => { - e.preventDefault(); - e.stopPropagation(); - if (!disabled) setIsDragging(true); - }; - - const handleDragLeave = (e) => { - e.preventDefault(); - e.stopPropagation(); - setIsDragging(false); - }; - - const handleDragOver = (e) => { - e.preventDefault(); - e.stopPropagation(); - }; - - const handleDrop = (e) => { - e.preventDefault(); - e.stopPropagation(); - setIsDragging(false); - - if (disabled) return; - - const files = e.dataTransfer.files; - if (files && files.length > 0) { - onFileSelect(files[0]); - } - }; - - const handleFileInput = (e) => { - const files = e.target.files; - if (files && files.length > 0) { - onFileSelect(files[0]); - } - }; - - return ( -
- {label && ( -
-

- - {label} -

- {hint &&

{hint}

} -
- )} - -
- {uploading ? ( -
- -

Uploading and validating...

-
- ) : uploaded ? ( -
- -
-

Document uploaded successfully

- {uploadedFileName && ( -

{uploadedFileName}

- )} -
- -
- ) : ( -
- -
-

- {isDragging ? 'Drop file here' : 'Drag and drop your file here'} -

-

or

- -

- Accepted: {accept.split(',').join(', ')} -

-
-
- )} -
- - -
- ); -} \ No newline at end of file diff --git a/frontend-web-free/src/components/common/GoogleAddressInput.jsx b/frontend-web-free/src/components/common/GoogleAddressInput.jsx deleted file mode 100644 index 5aa14161..00000000 --- a/frontend-web-free/src/components/common/GoogleAddressInput.jsx +++ /dev/null @@ -1,72 +0,0 @@ -import React, { useRef, useEffect, useState } from "react"; -import { Input } from "@/components/ui/input"; -import { MapPin } from "lucide-react"; - -export default function GoogleAddressInput({ value, onChange, placeholder = "Enter address...", className = "" }) { - const inputRef = useRef(null); - const autocompleteRef = useRef(null); - const [isLoaded, setIsLoaded] = useState(false); - - useEffect(() => { - // Check if Google Maps is already loaded - if (window.google && window.google.maps && window.google.maps.places) { - setIsLoaded(true); - return; - } - - // Load Google Maps script - const script = document.createElement('script'); - script.src = `https://maps.googleapis.com/maps/api/js?key=AIzaSyBkP7xH4NvR6C6vZ8Y3J7qX2QW8Z9vN3Zc&libraries=places`; - script.async = true; - script.defer = true; - script.onload = () => setIsLoaded(true); - document.head.appendChild(script); - - return () => { - if (script.parentNode) { - script.parentNode.removeChild(script); - } - }; - }, []); - - useEffect(() => { - if (!isLoaded || !inputRef.current) return; - - try { - // Initialize Google Maps Autocomplete - autocompleteRef.current = new window.google.maps.places.Autocomplete(inputRef.current, { - types: ['address'], - componentRestrictions: { country: 'us' }, - }); - - // Handle place selection - autocompleteRef.current.addListener('place_changed', () => { - const place = autocompleteRef.current.getPlace(); - if (place.formatted_address) { - onChange(place.formatted_address); - } - }); - } catch (error) { - console.error('Error initializing Google Maps autocomplete:', error); - } - - return () => { - if (autocompleteRef.current) { - window.google.maps.event.clearInstanceListeners(autocompleteRef.current); - } - }; - }, [isLoaded, onChange]); - - return ( -
- - onChange(e.target.value)} - placeholder={placeholder} - className={`pl-10 ${className}`} - /> -
- ); -} \ No newline at end of file diff --git a/frontend-web-free/src/components/common/PageHeader.jsx b/frontend-web-free/src/components/common/PageHeader.jsx deleted file mode 100644 index e446b57b..00000000 --- a/frontend-web-free/src/components/common/PageHeader.jsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from "react"; -import { Link } from "react-router-dom"; -import { createPageUrl } from "@/utils"; -import { ArrowLeft } from "lucide-react"; -import { Button } from "@/components/ui/button"; - -export default function PageHeader({ - title, - subtitle, - actions = null, - backTo = null, - backButtonLabel = "Back" -}) { - return ( -
- {/* Back Button */} - {backTo && ( - - - - )} - - {/* Main Header */} -
-
-

- {title} -

- {subtitle && ( -

{subtitle}

- )} -
- - {/* Custom Actions (if provided) */} - {actions && ( -
- {actions} -
- )} -
-
- ); -} \ No newline at end of file diff --git a/frontend-web-free/src/components/dashboard/DashboardCustomizer.jsx b/frontend-web-free/src/components/dashboard/DashboardCustomizer.jsx deleted file mode 100644 index fc0cc12c..00000000 --- a/frontend-web-free/src/components/dashboard/DashboardCustomizer.jsx +++ /dev/null @@ -1,396 +0,0 @@ -import React, { useState, useEffect } from "react"; -import { base44 } from "@/api/base44Client"; -import { useMutation, useQueryClient } from "@tanstack/react-query"; -import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, -} from "@/components/ui/dialog"; -import { Button } from "@/components/ui/button"; -import { Badge } from "@/components/ui/badge"; -import { - Settings, - GripVertical, - X, - Plus, - Eye, - EyeOff, - Info, - Save, - RotateCcw, - Sparkles -} from "lucide-react"; -import { DragDropContext, Droppable, Draggable } from "@hello-pangea/dnd"; -import { useToast } from "@/components/ui/use-toast"; -import { motion, AnimatePresence } from "framer-motion"; - -export default function DashboardCustomizer({ - user, - availableWidgets = [], - currentLayout = [], - onLayoutChange, - dashboardType = "default" // admin, client, vendor, operator, etc -}) { - const [isOpen, setIsOpen] = useState(false); - const [showHowItWorks, setShowHowItWorks] = useState(false); - const [visibleWidgets, setVisibleWidgets] = useState([]); - const [hiddenWidgets, setHiddenWidgets] = useState([]); - const [hasChanges, setHasChanges] = useState(false); - const { toast } = useToast(); - const queryClient = useQueryClient(); - - // Initialize widgets from user's saved layout or defaults - useEffect(() => { - const layoutKey = `dashboard_layout_${dashboardType}`; - const savedLayout = user?.[layoutKey]; - - if (savedLayout?.widgets && savedLayout.widgets.length > 0) { - const savedVisible = savedLayout.widgets - .map(id => availableWidgets.find(w => w.id === id)) - .filter(Boolean); - setVisibleWidgets(savedVisible); - - const savedHidden = savedLayout.hidden_widgets || []; - const hiddenWidgetsList = availableWidgets.filter(w => - savedHidden.includes(w.id) - ); - setHiddenWidgets(hiddenWidgetsList); - } else { - // Default: all widgets visible in provided order - setVisibleWidgets(availableWidgets); - setHiddenWidgets([]); - } - }, [user, availableWidgets, isOpen, dashboardType]); - - // Save layout mutation - const saveLayoutMutation = useMutation({ - mutationFn: async (layoutData) => { - const layoutKey = `dashboard_layout_${dashboardType}`; - await base44.auth.updateMe({ - [layoutKey]: layoutData - }); - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['current-user'] }); - queryClient.invalidateQueries({ queryKey: ['current-user-layout'] }); - queryClient.invalidateQueries({ queryKey: ['current-user-client'] }); - queryClient.invalidateQueries({ queryKey: ['current-user-vendor'] }); - queryClient.invalidateQueries({ queryKey: ['current-user-operator'] }); - toast({ - title: "✅ Layout Saved", - description: "Your dashboard layout has been updated", - }); - setHasChanges(false); - if (onLayoutChange) { - onLayoutChange(visibleWidgets); - } - setTimeout(() => { - setIsOpen(false); - }, 500); - }, - onError: () => { - toast({ - title: "❌ Save Failed", - description: "Could not save your layout. Please try again.", - variant: "destructive", - }); - } - }); - - const handleDragEnd = (result) => { - if (!result.destination) return; - - const { source, destination } = result; - - if (source.droppableId === "visible" && destination.droppableId === "visible") { - const items = Array.from(visibleWidgets); - const [reorderedItem] = items.splice(source.index, 1); - items.splice(destination.index, 0, reorderedItem); - setVisibleWidgets(items); - setHasChanges(true); - } - }; - - const handleHideWidget = (widget) => { - setVisibleWidgets(visibleWidgets.filter(w => w.id !== widget.id)); - setHiddenWidgets([...hiddenWidgets, widget]); - setHasChanges(true); - }; - - const handleShowWidget = (widget) => { - setHiddenWidgets(hiddenWidgets.filter(w => w.id !== widget.id)); - setVisibleWidgets([...visibleWidgets, widget]); - setHasChanges(true); - }; - - const handleSave = () => { - const layoutData = { - widgets: visibleWidgets.map(w => w.id), - hidden_widgets: hiddenWidgets.map(w => w.id), - layout_version: "2.0" - }; - saveLayoutMutation.mutate(layoutData); - }; - - const handleReset = () => { - setVisibleWidgets(availableWidgets); - setHiddenWidgets([]); - setHasChanges(true); - }; - - const handleOpenCustomizer = () => { - setIsOpen(true); - setShowHowItWorks(true); - setHasChanges(false); - }; - - const handleClose = () => { - if (hasChanges) { - if (window.confirm("You have unsaved changes. Are you sure you want to close?")) { - setIsOpen(false); - setHasChanges(false); - } - } else { - setIsOpen(false); - } - }; - - return ( - <> - {/* Customize Button */} - - - {/* Customizer Dialog */} - - - - - - Customize Your Dashboard - - - Personalize your workspace by adding, removing, and reordering widgets - - - - {/* How It Works Banner */} - - {showHowItWorks && ( - -
-
-
- -

How it works

-
-
-

- - Drag widgets to reorder them -

-

- - Hide widgets you don't need -

-

- - Show hidden widgets to bring them back -

-
-
- -
-
- )} -
- -
- {/* Visible Widgets */} -
-
-

- Visible Widgets ({visibleWidgets.length}) -

- -
- - - - {(provided, snapshot) => ( -
- {visibleWidgets.length === 0 ? ( -
- -

No visible widgets

-

Add widgets from the hidden section below!

-
- ) : ( - visibleWidgets.map((widget, index) => ( - - {(provided, snapshot) => ( -
-
-
- -
-
-

{widget.title}

-

{widget.description}

-
- - {widget.category} - - -
-
- )} -
- )) - )} - {provided.placeholder} -
- )} -
-
-
- - {/* Hidden Widgets */} - {hiddenWidgets.length > 0 && ( -
-

- Hidden Widgets ({hiddenWidgets.length}) - Click + to add -

-
- {hiddenWidgets.map((widget) => ( -
-
-
-

{widget.title}

-

{widget.description}

-
- -
-
- ))} -
-
- )} - - {/* All Hidden Message */} - {hiddenWidgets.length === 0 && visibleWidgets.length === availableWidgets.length && ( -
- -

- All widgets are visible on your dashboard! -

-
- )} -
- - {/* Actions */} -
-
- - {hasChanges && ( - - Unsaved Changes - - )} -
-
- - -
-
-
-
- - ); -} \ No newline at end of file diff --git a/frontend-web-free/src/components/dashboard/EcosystemWheel.jsx b/frontend-web-free/src/components/dashboard/EcosystemWheel.jsx deleted file mode 100644 index 2e277730..00000000 --- a/frontend-web-free/src/components/dashboard/EcosystemWheel.jsx +++ /dev/null @@ -1,316 +0,0 @@ - -import React, { useState } from "react"; -import { motion, AnimatePresence } from "framer-motion"; - -export default function EcosystemWheel({ layers, onLayerClick, selectedLayer, onLayerHover }) { - const [hoveredIndex, setHoveredIndex] = useState(null); - - const centerX = 300; - const centerY = 300; - - // Icon positions - precisely positioned in center of each puzzle piece - const iconPositions = [ - { x: 385, y: 160 }, // 30° - Buyer (top-right) - { x: 460, y: 300 }, // 60° - Enterprises (top-right) - { x: 380, y: 440 }, // 120° - Sectors (bottom-right) - { x: 220, y: 440 }, // 180° - Partner (bottom-center) - { x: 140, y: 300}, // 240° - Approved Vendor (bottom-left) - { x: 220, y: 160} // 300° - Workforce (top-left) - ]; - - // Create interlocking puzzle pieces - const createOuterPuzzle = (index, total) => { - const startAngle = index * 360 / total - 90; - const endAngle = (index + 1) * 360 / total - 90; - const midAngle = (startAngle + endAngle) / 2; - - const innerRadius = 110; - const outerRadius = 210; - const tabSize = 18; - - const toRad = (deg) => deg * Math.PI / 180; - - const startInner = { - x: centerX + innerRadius * Math.cos(toRad(startAngle)), - y: centerY + innerRadius * Math.sin(toRad(startAngle)) - }; - - const endInner = { - x: centerX + innerRadius * Math.cos(toRad(endAngle)), - y: centerY + innerRadius * Math.sin(toRad(endAngle)) - }; - - const startOuter = { - x: centerX + outerRadius * Math.cos(toRad(startAngle)), - y: centerY + outerRadius * Math.sin(toRad(startAngle)) - }; - - const endOuter = { - x: centerX + outerRadius * Math.cos(toRad(endAngle)), - y: centerY + outerRadius * Math.sin(toRad(endAngle)) - }; - - const innerTabAngle = startAngle + (endAngle - startAngle) * 0.5; - const outerTabAngle = startAngle + (endAngle - startAngle) * 0.5; - - const innerTabOut = { - x: centerX + (innerRadius - tabSize) * Math.cos(toRad(innerTabAngle)), - y: centerY + (innerRadius - tabSize) * Math.sin(toRad(innerTabAngle)) - }; - - const outerTabOut = { - x: centerX + (outerRadius + tabSize) * Math.cos(toRad(outerTabAngle)), - y: centerY + (outerRadius + tabSize) * Math.sin(toRad(outerTabAngle)) - }; - - let path = `M ${startInner.x} ${startInner.y}`; - - const innerArc1End = startAngle + (endAngle - startAngle) * 0.4; - const innerArc2Start = startAngle + (endAngle - startAngle) * 0.6; - - path += ` A ${innerRadius} ${innerRadius} 0 0 1 ${centerX + innerRadius * Math.cos(toRad(innerArc1End))} ${centerY + innerRadius * Math.sin(toRad(innerArc1End))}`; - path += ` Q ${innerTabOut.x} ${innerTabOut.y} ${centerX + innerRadius * Math.cos(toRad(innerArc2Start))} ${centerY + innerRadius * Math.sin(toRad(innerArc2Start))}`; - path += ` A ${innerRadius} ${innerRadius} 0 0 1 ${endInner.x} ${endInner.y}`; - - path += ` L ${endOuter.x} ${endOuter.y}`; - - const outerArc1End = endAngle - (endAngle - startAngle) * 0.4; - const outerArc2Start = endAngle - (endAngle - startAngle) * 0.6; - - path += ` A ${outerRadius} ${outerRadius} 0 0 0 ${centerX + outerRadius * Math.cos(toRad(outerArc1End))} ${centerY + outerRadius * Math.sin(toRad(outerArc1End))}`; - path += ` Q ${outerTabOut.x} ${outerTabOut.y} ${centerX + outerRadius * Math.cos(toRad(outerArc2Start))} ${centerY + outerRadius * Math.sin(toRad(outerArc2Start))}`; - path += ` A ${outerRadius} ${outerRadius} 0 0 0 ${startOuter.x} ${startOuter.y}`; - - path += ` L ${startInner.x} ${startInner.y}`; - path += " Z"; - - return path; - }; - - const createCenterPuzzle = () => { - const radius = 90; - const numTabs = layers.length; - let path = ""; - - for (let i = 0; i < numTabs; i++) { - const angle1 = i * 360 / numTabs - 90; - const angle2 = (i + 1) * 360 / numTabs - 90; - const midAngle = (angle1 + angle2) / 2; - const tabSize = 18; - - const toRad = (deg) => deg * Math.PI / 180; - - const start = { - x: centerX + radius * Math.cos(toRad(angle1)), - y: centerY + radius * Math.sin(toRad(angle1)) - }; - - const end = { - x: centerX + radius * Math.cos(toRad(angle2)), - y: centerY + radius * Math.sin(toRad(angle2)) - }; - - const tabIn = { - x: centerX + (radius + tabSize) * Math.cos(toRad(midAngle)), - y: centerY + (radius + tabSize) * Math.sin(toRad(midAngle)) - }; - - if (i === 0) { - path += `M ${start.x} ${start.y}`; - } - - const arc1End = angle1 + (angle2 - angle1) * 0.4; - const arc2Start = angle1 + (angle2 - angle1) * 0.6; - - path += ` A ${radius} ${radius} 0 0 1 ${centerX + radius * Math.cos(toRad(arc1End))} ${centerY + radius * Math.sin(toRad(arc1End))}`; - path += ` Q ${tabIn.x} ${tabIn.y} ${centerX + radius * Math.cos(toRad(arc2Start))} ${centerY + radius * Math.sin(toRad(arc2Start))}`; - path += ` A ${radius} ${radius} 0 0 1 ${end.x} ${end.y}`; - } - - path += " Z"; - return path; - }; - - return ( -
-
-

KROW Ecosystem

-

Hover over each piece to see details • Click to explore

-
- -
- - - - - - - - - - - - - - - - {/* Outer Puzzle Pieces */} - {layers.map((layer, index) => { - const angle = index * 360 / layers.length - 90; - const rad = angle * Math.PI / 180; - - // Use exact icon position from array - const iconX = iconPositions[index].x; - const iconY = iconPositions[index].y; - - // Label position - Outside puzzle - const labelRadius = 240; - const labelX = centerX + labelRadius * Math.cos(rad); - const labelY = centerY + labelRadius * Math.sin(rad); - - const isHovered = hoveredIndex === index; - const Icon = layer.icon; - - return ( - - {/* Puzzle Piece */} - { - setHoveredIndex(index); - onLayerHover?.(layer); - }} - onMouseLeave={() => { - setHoveredIndex(null); - onLayerHover?.(null); - }} - onClick={() => onLayerClick?.(layer)} - animate={{ - scale: isHovered ? 1.05 : 1 - }} - transition={{ duration: 0.3 }} - style={{ - transformOrigin: `${centerX}px ${centerY}px` - }} /> - - - {/* Icon - Exact positioned in puzzle piece */} - - - - -
- -
-
- - {/* Label - Outside puzzle */} - - -
-
-

- {layer.name} -

-
-
-
-
); - - })} - - {/* Center Puzzle Piece */} - - - - {/* Center Logo */} - - -
- KROW - -
-
-
- - {/* Centered Metrics Display */} - - {hoveredIndex !== null && - - -
-
-
- {React.createElement(layers[hoveredIndex].icon, { className: "w-6 h-6 text-white" })} -
-

{layers[hoveredIndex].name}

-
-
- {Object.entries(layers[hoveredIndex].metrics).map(([key, value]) => -
- - {key.replace(/([A-Z])/g, ' $1').trim()} - - - {value} - -
- )} -
-
-

Click to view full dashboard

-
-
-
- } -
-
-
); - -} diff --git a/frontend-web-free/src/components/dashboard/QuickMetrics.jsx b/frontend-web-free/src/components/dashboard/QuickMetrics.jsx deleted file mode 100644 index 5a86b828..00000000 --- a/frontend-web-free/src/components/dashboard/QuickMetrics.jsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from "react"; -import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; -import { Button } from "@/components/ui/button"; -import { ArrowRight } from "lucide-react"; -import { useNavigate } from "react-router-dom"; -import { createPageUrl } from "@/utils"; - -export default function QuickMetrics({ title, description, icon: Icon, metrics, route, gradient }) { - const navigate = useNavigate(); - - return ( - - -
-
- - - {title} - -

{description}

-
-
-
- -
- {metrics.map((metric, index) => ( -
- {metric.label} - {metric.value} -
- ))} -
- -
-
- ); -} \ No newline at end of file diff --git a/frontend-web-free/src/components/dev/RoleSwitcher.jsx b/frontend-web-free/src/components/dev/RoleSwitcher.jsx deleted file mode 100644 index a3c0230e..00000000 --- a/frontend-web-free/src/components/dev/RoleSwitcher.jsx +++ /dev/null @@ -1,224 +0,0 @@ -import React, { useState } from "react"; -import { base44 } from "@/api/base44Client"; -import { useQuery, useQueryClient } from "@tanstack/react-query"; -import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { Badge } from "@/components/ui/badge"; -import { Settings, X, RefreshCw, Shield, Users, Package, Building2, UserCheck, Briefcase, HardHat } from "lucide-react"; -import { motion, AnimatePresence } from "framer-motion"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; - -const roles = [ - { value: "admin", label: "Administrator", icon: Shield, color: "from-red-500 to-red-700" }, - { value: "procurement", label: "Procurement", icon: Package, color: "from-purple-500 to-purple-700" }, - { value: "operator", label: "Operator", icon: Users, color: "from-blue-500 to-blue-700" }, - { value: "sector", label: "Sector Manager", icon: Building2, color: "from-cyan-500 to-cyan-700" }, - { value: "client", label: "Client", icon: Briefcase, color: "from-green-500 to-green-700" }, - { value: "vendor", label: "Vendor", icon: Package, color: "from-amber-500 to-amber-700" }, - { value: "workforce", label: "Workforce", icon: HardHat, color: "from-slate-500 to-slate-700" }, -]; - -export default function RoleSwitcher() { - const [isOpen, setIsOpen] = useState(false); - const [isMinimized, setIsMinimized] = useState(true); - const queryClient = useQueryClient(); - - const { data: user, refetch } = useQuery({ - queryKey: ['current-user'], - queryFn: () => base44.auth.me(), - }); - - const currentRole = user?.user_role || user?.role || "admin"; - const currentRoleData = roles.find(r => r.value === currentRole); - - const handleRoleChange = async (newRole) => { - try { - // Update the user's role - await base44.auth.updateMe({ - user_role: newRole, - }); - - // Invalidate all queries to refetch with new role - queryClient.invalidateQueries(); - - // Refetch user data - await refetch(); - - // Reload the page to apply new role completely - window.location.reload(); - } catch (error) { - console.error("Failed to switch role:", error); - } - }; - - return ( - <> - {/* Floating Toggle Button */} - - {!isOpen && ( - - - - )} - - - {/* Role Switcher Panel */} - - {isOpen && ( - - - {/* Header */} - -
-
- - Role Switcher - DEV -
-
- - -
-
-
- - - {/* Current Role Display */} -
-

Current Role

-
-
- {currentRoleData?.icon && } -
-
-

{currentRoleData?.label}

-

{user?.email}

-
-
-
- - {/* Role Selector */} -
- - -
- - {/* Quick Role Grid */} - {!isMinimized && ( -
-

Quick Switch

-
- {roles.map((role) => ( - - ))} -
-
- )} - - {/* Warning */} -
-

- ⚠️ Development Tool: This switcher is for testing only. - Changes will persist until you switch again or log out. -

-
- - {/* Info Box */} - {!isMinimized && ( -
-
-
-

Admin: Full access to all features

-
-
-
-

Procurement: Vendor management & orders

-
-
-
-

Operator/Sector: Event & staff management

-
-
-
-

Client: Create orders, view invoices

-
-
-
-

Vendor: Manage own staff & orders

-
-
-
-

Workforce: View shifts & earnings

-
-
- )} - - - - )} - - - ); -} \ No newline at end of file diff --git a/frontend-web-free/src/components/events/AIOrderAssistant.jsx b/frontend-web-free/src/components/events/AIOrderAssistant.jsx deleted file mode 100644 index d2729e0c..00000000 --- a/frontend-web-free/src/components/events/AIOrderAssistant.jsx +++ /dev/null @@ -1,632 +0,0 @@ -import React, { useState, useEffect, useRef } from "react"; -import { base44 } from "@/api/base44Client"; -import { useQuery } from "@tanstack/react-query"; -import { Card, CardContent } from "@/components/ui/card"; -import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { Badge } from "@/components/ui/badge"; -import { Avatar, AvatarFallback } from "@/components/ui/avatar"; -import { - Sparkles, Send, Mic, MicOff, Upload, FileText, Clock, - MapPin, Users, Calendar, DollarSign, Zap, Brain, - TrendingUp, CheckCircle2, Loader2, Eye, MessageSquare, - Image as ImageIcon, Wand2, AlertCircle, ChevronRight -} from "lucide-react"; -import { motion, AnimatePresence } from "framer-motion"; -import { useToast } from "@/components/ui/use-toast"; -import { format } from "date-fns"; - -export default function AIOrderAssistant({ onOrderDataExtracted, onClose }) { - const [messages, setMessages] = useState([]); - const [input, setInput] = useState(""); - const [isListening, setIsListening] = useState(false); - const [isProcessing, setIsProcessing] = useState(false); - const [extractedData, setExtractedData] = useState(null); - const [showSuggestions, setShowSuggestions] = useState(true); - const [voiceEnabled, setVoiceEnabled] = useState(true); - const messagesEndRef = useRef(null); - const { toast } = useToast(); - - const { data: recentEvents } = useQuery({ - queryKey: ['recent-events-ai'], - queryFn: () => base44.entities.Event.list('-created_date', 5), - initialData: [], - }); - - const { data: businesses } = useQuery({ - queryKey: ['businesses-ai'], - queryFn: () => base44.entities.Business.list(), - initialData: [], - }); - - useEffect(() => { - const greeting = { - id: Date.now(), - role: "assistant", - content: "👋 **AI Order Assistant 2030**\n\nI'm your intelligent workforce ordering assistant. Just tell me what you need naturally - I understand context, history, and can create complete orders instantly.\n\n**Try saying:**\n• \"I need 5 servers for Friday night\"\n• \"Repeat last week's order but add 2 bartenders\"\n• \"Same as Event #1234 but different date\"\n\nYou can also upload files, speak naturally, or let me analyze your patterns.", - timestamp: new Date().toISOString(), - type: "greeting" - }; - setMessages([greeting]); - }, []); - - useEffect(() => { - messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); - }, [messages]); - - // Smart suggestions based on context - const smartSuggestions = [ - { - icon: RefreshCw, - label: "Repeat Last Order", - query: "Repeat my last order for next Friday", - color: "bg-purple-500" - }, - { - icon: TrendingUp, - label: "Based on History", - query: "Create order based on my usual Friday pattern", - color: "bg-blue-500" - }, - { - icon: Zap, - label: "Quick Template", - query: "I need 3 servers and 2 bartenders for Saturday 6pm-midnight", - color: "bg-green-500" - }, - { - icon: Brain, - label: "AI Predict", - query: "What staff will I need for a 200-person corporate event?", - color: "bg-orange-500" - } - ]; - - const handleSendMessage = async (text = input) => { - if (!text.trim() && !isListening) return; - - const userMessage = { - id: Date.now(), - role: "user", - content: text, - timestamp: new Date().toISOString() - }; - - setMessages(prev => [...prev, userMessage]); - setInput(""); - setIsProcessing(true); - setShowSuggestions(false); - - try { - // Simulate AI processing with intelligent response - await new Promise(resolve => setTimeout(resolve, 1500)); - - // Enhanced AI prompt with context awareness - const prompt = `You are an advanced AI workforce ordering assistant in 2030. Analyze this request and extract structured order data. - -User Request: "${text}" - -Recent Order History: -${recentEvents.slice(0, 3).map((e, idx) => `${idx + 1}. ${e.event_name} - ${e.business_name} - ${e.requested || 0} staff - ${format(new Date(e.date || Date.now()), 'MMM d, yyyy')}`).join('\n')} - -Available Businesses: ${businesses.slice(0, 5).map(b => b.business_name).join(', ')} - -Instructions: -- If user references "last order" or "repeat", use the most recent event data -- If user says "usual" or "typical", analyze patterns from history -- Be intelligent about inferring missing details (dates, times, quantities) -- Suggest optimal staff counts based on event type -- Return ONLY valid JSON in this exact format: - -{ - "event_name": "string", - "business_name": "string (from available businesses)", - "hub": "string", - "date": "YYYY-MM-DD", - "order_type": "one_time|rapid|recurring", - "shifts": [{ - "shift_name": "Shift 1", - "roles": [{ - "role": "string (Server, Bartender, Chef, etc)", - "count": number, - "start_time": "HH:MM", - "end_time": "HH:MM", - "break_minutes": 30 - }] - }], - "notes": "string with any additional context", - "ai_confidence": number (0-100), - "ai_reasoning": "string explaining the order creation logic" -}`; - - const response = await base44.integrations.Core.InvokeLLM({ - prompt: prompt, - add_context_from_internet: false, - response_json_schema: { - type: "object", - properties: { - event_name: { type: "string" }, - business_name: { type: "string" }, - hub: { type: "string" }, - date: { type: "string" }, - order_type: { type: "string" }, - shifts: { - type: "array", - items: { - type: "object", - properties: { - shift_name: { type: "string" }, - roles: { - type: "array", - items: { - type: "object", - properties: { - role: { type: "string" }, - count: { type: "number" }, - start_time: { type: "string" }, - end_time: { type: "string" }, - break_minutes: { type: "number" } - } - } - } - } - } - }, - notes: { type: "string" }, - ai_confidence: { type: "number" }, - ai_reasoning: { type: "string" } - } - } - }); - - const orderData = response; - setExtractedData(orderData); - - const assistantMessage = { - id: Date.now() + 1, - role: "assistant", - content: `✨ **Order Created Instantly**\n\n${orderData.ai_reasoning}\n\n**Confidence:** ${orderData.ai_confidence}%\n\nReview the order details below and click "Use This Order" to proceed.`, - timestamp: new Date().toISOString(), - type: "success", - data: orderData - }; - - setMessages(prev => [...prev, assistantMessage]); - - toast({ - title: "🎯 AI Order Generated", - description: `Created order with ${orderData.shifts?.[0]?.roles?.reduce((sum, r) => sum + (r.count || 0), 0) || 0} staff members`, - }); - - } catch (error) { - const errorMessage = { - id: Date.now() + 1, - role: "assistant", - content: `❌ I couldn't process that request. Please try rephrasing or providing more details.\n\nError: ${error.message}`, - timestamp: new Date().toISOString(), - type: "error" - }; - setMessages(prev => [...prev, errorMessage]); - } finally { - setIsProcessing(false); - } - }; - - const handleVoiceInput = () => { - if (!voiceEnabled) { - toast({ - title: "Voice Not Supported", - description: "Your browser doesn't support voice input", - variant: "destructive" - }); - return; - } - - if (isListening) { - setIsListening(false); - // Stop voice recognition - } else { - setIsListening(true); - // Start voice recognition - toast({ - title: "🎤 Listening...", - description: "Speak naturally - I understand context and nuance", - }); - - // Simulate voice input after 3 seconds - setTimeout(() => { - setIsListening(false); - const voiceText = "I need 5 servers and 3 bartenders for this Friday from 6pm to midnight at our downtown location"; - setInput(voiceText); - toast({ - title: "✅ Voice Captured", - description: "Processing your request...", - }); - }, 3000); - } - }; - - const handleFileUpload = async (e) => { - const file = e.target.files?.[0]; - if (!file) return; - - toast({ - title: "📄 Analyzing Document...", - description: "AI is extracting order details from your file", - }); - - try { - const { file_url } = await base44.integrations.Core.UploadFile({ file }); - - const extractResult = await base44.integrations.Core.ExtractDataFromUploadedFile({ - file_url: file_url, - json_schema: { - type: "object", - properties: { - event_name: { type: "string" }, - date: { type: "string" }, - location: { type: "string" }, - staff_needs: { - type: "array", - items: { - type: "object", - properties: { - role: { type: "string" }, - count: { type: "number" }, - hours: { type: "string" } - } - } - } - } - } - }); - - if (extractResult.status === "success") { - const message = { - id: Date.now(), - role: "assistant", - content: `📄 **Document Analyzed**\n\nI've extracted the following order details:\n\n${JSON.stringify(extractResult.output, null, 2)}\n\nShall I create an order based on this?`, - timestamp: new Date().toISOString(), - type: "file", - data: extractResult.output - }; - setMessages(prev => [...prev, message]); - } - } catch (error) { - toast({ - title: "Failed to Process File", - description: error.message, - variant: "destructive" - }); - } - }; - - const handleUseSuggestion = (query) => { - setInput(query); - handleSendMessage(query); - }; - - const handleUseOrder = () => { - if (extractedData) { - onOrderDataExtracted(extractedData); - toast({ - title: "✅ Order Data Applied", - description: "Review and edit the order details in the form", - }); - } - }; - - return ( -
- {/* Header */} -
-
-
-
-
- -
-
-

- AI Order Assistant 2030 - - - Neural - -

-

Instant workforce ordering powered by advanced AI

-
-
- -
- - {/* Real-time Stats Bar */} -
-
- - 3.2s avg response -
-
- - 98.7% accuracy -
-
- - 5.2x faster than forms -
-
-
- - {/* Smart Suggestions - Only show initially */} - - {showSuggestions && messages.length <= 1 && ( - -

- - INSTANT ACTIONS -

-
- {smartSuggestions.map((suggestion, idx) => ( - - ))} -
-
- )} -
- - {/* Messages Area */} -
- - {messages.map((message) => ( - - {message.role === 'assistant' && ( - - - - - - )} - -
-
-
- {message.content.split('\n').map((line, idx) => ( -

- {line} -

- ))} -
- - {/* Order Preview Card */} - {message.type === 'success' && message.data && ( -
-
-

- - Order Preview -

- - {message.data.ai_confidence}% Confidence - -
- -
-
- - {message.data.date || 'TBD'} -
-
- - - {message.data.shifts?.[0]?.roles?.reduce((sum, r) => sum + (r.count || 0), 0) || 0} Staff - -
-
- - {message.data.hub || message.data.business_name || 'Location TBD'} -
-
- - - {message.data.shifts?.[0]?.roles?.[0]?.start_time || '09:00'} - {message.data.shifts?.[0]?.roles?.[0]?.end_time || '17:00'} - -
-
- - -
- )} -
-

- {format(new Date(message.timestamp), 'h:mm a')} -

-
- - {message.role === 'user' && ( - - - U - - - )} -
- ))} -
- - {isProcessing && ( - - - - - - -
-
- - - AI is analyzing and creating your order... - -
-
-
- )} - -
-
- - {/* Input Area - Enhanced */} -
-
- setInput(e.target.value)} - onKeyPress={(e) => e.key === 'Enter' && !e.shiftKey && handleSendMessage()} - placeholder="Type, speak, or upload... AI understands natural language 🧠" - className="flex-1 border-2 border-indigo-200 focus:border-indigo-400 rounded-xl h-12 px-4 text-sm" - disabled={isProcessing} - /> - - {/* Voice Button */} - - - {/* File Upload */} - - - {/* Send Button */} - -
- - {/* Quick Examples */} -
- - Try: - - - -
-
- - {/* AI Capabilities Footer */} -
-
-
-
- - Context-aware -
-
- - Natural language -
-
- - Instant generation -
-
- - Powered by Neural AI v3.0 - -
-
-
- ); -} \ No newline at end of file diff --git a/frontend-web-free/src/components/events/AssignedStaffManager.jsx b/frontend-web-free/src/components/events/AssignedStaffManager.jsx deleted file mode 100644 index 8296c5ff..00000000 --- a/frontend-web-free/src/components/events/AssignedStaffManager.jsx +++ /dev/null @@ -1,244 +0,0 @@ -import React, { useState } from "react"; -import { base44 } from "@/api/base44Client"; -import { useMutation, useQueryClient } from "@tanstack/react-query"; -import { Button } from "@/components/ui/button"; -import { Badge } from "@/components/ui/badge"; -import { Avatar, AvatarFallback } from "@/components/ui/avatar"; -import { - Dialog, - DialogContent, - DialogHeader, - DialogTitle, - DialogFooter, -} from "@/components/ui/dialog"; -import { Label } from "@/components/ui/label"; -import { Input } from "@/components/ui/input"; -import { useToast } from "@/components/ui/use-toast"; -import { Edit2, Trash2, ArrowLeftRight, Clock, MapPin, Check, X } from "lucide-react"; -import { format } from "date-fns"; -import { calculateOrderStatus } from "../orders/OrderStatusUtils"; - -export default function AssignedStaffManager({ event, shift, role }) { - const { toast } = useToast(); - const queryClient = useQueryClient(); - const [editTarget, setEditTarget] = useState(null); - const [swapTarget, setSwapTarget] = useState(null); - const [editTimes, setEditTimes] = useState({ start: "", end: "" }); - - // Get assigned staff for this role - const assignedStaff = (event.assigned_staff || []).filter( - s => s.role === role?.role - ); - - // Remove staff mutation - const removeMutation = useMutation({ - mutationFn: async (staffId) => { - const updatedAssignedStaff = (event.assigned_staff || []).filter( - s => s.staff_id !== staffId || s.role !== role.role - ); - - const updatedShifts = (event.shifts || []).map(s => { - if (s.shift_name === shift.shift_name) { - const updatedRoles = (s.roles || []).map(r => { - if (r.role === role.role) { - return { - ...r, - assigned: Math.max((r.assigned || 0) - 1, 0), - }; - } - return r; - }); - return { ...s, roles: updatedRoles }; - } - return s; - }); - - const updatedEvent = { - assigned_staff: updatedAssignedStaff, - shifts: updatedShifts, - // NEVER MODIFY REQUESTED - it's set by client, not by staff assignment - }; - - // Auto-update status based on staffing level - updatedEvent.status = calculateOrderStatus({ - ...event, - ...updatedEvent - }); - - await base44.entities.Event.update(event.id, updatedEvent); - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['events'] }); - toast({ - title: "✅ Staff Removed", - description: "Staff member has been removed from this assignment", - }); - }, - }); - - // Edit times mutation - const editMutation = useMutation({ - mutationFn: async () => { - const updatedShifts = (event.shifts || []).map(s => { - if (s.shift_name === shift.shift_name) { - const updatedRoles = (s.roles || []).map(r => { - if (r.role === role.role) { - return { - ...r, - start_time: editTimes.start, - end_time: editTimes.end, - }; - } - return r; - }); - return { ...s, roles: updatedRoles }; - } - return s; - }); - - await base44.entities.Event.update(event.id, { - shifts: updatedShifts, - }); - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['events'] }); - toast({ - title: "✅ Times Updated", - description: "Assignment times have been updated", - }); - setEditTarget(null); - }, - }); - - const handleEdit = (staff) => { - setEditTarget(staff); - setEditTimes({ - start: role.start_time || "09:00", - end: role.end_time || "17:00", - }); - }; - - const handleSaveEdit = () => { - editMutation.mutate(); - }; - - const handleRemove = (staffId) => { - if (confirm("Are you sure you want to remove this staff member?")) { - removeMutation.mutate(staffId); - } - }; - - if (!assignedStaff.length) { - return ( -
- No staff assigned yet -
- ); - } - - return ( - <> -
- {assignedStaff.map((staff) => ( -
- - - {staff.staff_name?.charAt(0) || 'S'} - - - -
-

{staff.staff_name}

-
- - {staff.role} - - {role.start_time && role.end_time && ( - - - {role.start_time} - {role.end_time} - - )} -
-
- -
- - -
-
- ))} -
- - {/* Edit Times Dialog */} - setEditTarget(null)}> - - - Edit Assignment Times - - -
-
- -

{editTarget?.staff_name}

-
- -
-
- - setEditTimes({ ...editTimes, start: e.target.value })} - /> -
-
- - setEditTimes({ ...editTimes, end: e.target.value })} - /> -
-
-
- - - - - -
-
- - ); -} \ No newline at end of file diff --git a/frontend-web-free/src/components/events/EventAssignmentModal.jsx b/frontend-web-free/src/components/events/EventAssignmentModal.jsx deleted file mode 100644 index df769c5c..00000000 --- a/frontend-web-free/src/components/events/EventAssignmentModal.jsx +++ /dev/null @@ -1,837 +0,0 @@ -import React, { useState, useMemo } from "react"; -import { base44 } from "@/api/base44Client"; -import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; -import { - Dialog, - DialogContent, - DialogHeader, - DialogTitle, -} from "@/components/ui/dialog"; -import { Button } from "@/components/ui/button"; -import { Badge } from "@/components/ui/badge"; -import { Avatar, AvatarFallback } from "@/components/ui/avatar"; -import { Checkbox } from "@/components/ui/checkbox"; -import { Calendar, Users, Check, Plus, X, Clock, MapPin, ChevronLeft, ChevronRight, AlertTriangle, RefreshCw, Search } from "lucide-react"; -import { format, parseISO, isWithinInterval } from "date-fns"; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; -import { Input } from "@/components/ui/input"; -import { useToast } from "@/components/ui/use-toast"; - -const convertTo12Hour = (time24) => { - if (!time24) return ''; - const [hours, minutes] = time24.split(':'); - const hour = parseInt(hours); - const ampm = hour >= 12 ? 'PM' : 'AM'; - const hour12 = hour % 12 || 12; - return `${hour12}:${minutes} ${ampm}`; -}; - -const getInitials = (name) => { - if (!name) return 'S'; - return name.split(' ').map(n => n[0]).join('').toUpperCase().slice(0, 2); -}; - -const avatarColors = [ - 'bg-blue-500', - 'bg-purple-500', - 'bg-green-500', - 'bg-orange-500', - 'bg-pink-500', - 'bg-indigo-500', - 'bg-teal-500', - 'bg-red-500', -]; - -// Helper to check if times overlap -const hasTimeConflict = (existingStart, existingEnd, newStart, newEnd, existingDate, newDate) => { - // If different dates, no conflict - if (existingDate !== newDate) return false; - - if (!existingStart || !existingEnd || !newStart || !newEnd) return false; - - const parseTime = (time) => { - const [hours, minutes] = time.split(':').map(Number); - return hours * 60 + minutes; - }; - - const existingStartMin = parseTime(existingStart); - const existingEndMin = parseTime(existingEnd); - const newStartMin = parseTime(newStart); - const newEndMin = parseTime(newEnd); - - return (newStartMin < existingEndMin && newEndMin > existingStartMin); -}; - -export default function EventAssignmentModal({ open, onClose, order, onUpdate, isRapid = false }) { - const [selectedShiftIndex, setSelectedShiftIndex] = useState(0); - const [selectedRoleIndex, setSelectedRoleIndex] = useState(0); - const [selectedStaffIds, setSelectedStaffIds] = useState([]); - const [searchTerm, setSearchTerm] = useState(""); - const [swapMode, setSwapMode] = useState(null); // { employeeId, assignmentIndex } - const queryClient = useQueryClient(); - const { toast } = useToast(); - - const { data: allStaff = [] } = useQuery({ - queryKey: ['staff-for-assignment'], - queryFn: () => base44.entities.Staff.list(), - enabled: open, - }); - - const { data: allOrders = [] } = useQuery({ - queryKey: ['orders-for-conflict-check'], - queryFn: () => base44.entities.Order.list(), - enabled: open, - }); - - const updateOrderMutation = useMutation({ - mutationFn: (updatedOrder) => base44.entities.Order.update(order.id, updatedOrder), - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['orders'] }); - if (onUpdate) onUpdate(); - setSelectedStaffIds([]); - toast({ - title: "✅ Staff assigned successfully", - description: "The order has been updated with new assignments.", - }); - }, - }); - - if (!order || !order.shifts_data || order.shifts_data.length === 0) { - return null; - } - - const currentShift = order.shifts_data[selectedShiftIndex]; - const currentRole = currentShift?.roles[selectedRoleIndex]; - - if (!currentRole) return null; - - // Check for conflicts - const getStaffConflicts = (staffId) => { - const conflicts = []; - - allOrders.forEach(existingOrder => { - if (existingOrder.id === order.id) return; // Skip current order - if (!existingOrder.shifts_data) return; - - existingOrder.shifts_data.forEach(shift => { - shift.roles.forEach(role => { - if (!role.assignments) return; - - role.assignments.forEach(assignment => { - if (assignment.employee_id === staffId) { - const hasConflict = hasTimeConflict( - role.start_time, - role.end_time, - currentRole.start_time, - currentRole.end_time, - existingOrder.event_date, - order.event_date - ); - - if (hasConflict) { - conflicts.push({ - orderName: existingOrder.event_name, - role: role.service, - time: `${convertTo12Hour(role.start_time)} - ${convertTo12Hour(role.end_time)}`, - date: existingOrder.event_date - }); - } - } - }); - }); - }); - }); - - return conflicts; - }; - - // Role-based filtering - const roleKeywords = { - 'bartender': ['bartender', 'bar'], - 'cook': ['cook', 'chef', 'kitchen'], - 'server': ['server', 'waiter', 'waitress'], - 'cashier': ['cashier', 'register'], - 'host': ['host', 'hostess', 'greeter'], - 'busser': ['busser', 'bus'], - 'dishwasher': ['dishwasher', 'dish'], - 'manager': ['manager', 'supervisor'], - }; - - const getRoleCategory = (roleName) => { - const lowerRole = roleName.toLowerCase(); - for (const [category, keywords] of Object.entries(roleKeywords)) { - if (keywords.some(keyword => lowerRole.includes(keyword))) { - return category; - } - } - return null; - }; - - const matchesRole = (staffPosition, requiredRole) => { - const staffLower = (staffPosition || '').toLowerCase(); - const requiredLower = (requiredRole || '').toLowerCase(); - - // Direct match - if (staffLower.includes(requiredLower) || requiredLower.includes(staffLower)) { - return true; - } - - // Category match - const staffCategory = getRoleCategory(staffPosition || ''); - const requiredCategory = getRoleCategory(requiredRole); - - return staffCategory && requiredCategory && staffCategory === requiredCategory; - }; - - const handleBulkAssign = () => { - if (selectedStaffIds.length === 0) { - toast({ - title: "No staff selected", - description: "Please select staff members to assign.", - variant: "destructive", - }); - return; - } - - const updatedOrder = { ...order }; - const assignments = updatedOrder.shifts_data[selectedShiftIndex].roles[selectedRoleIndex].assignments || []; - - const needed = parseInt(currentRole.count) || 0; - const currentAssigned = assignments.length; - const remaining = needed - currentAssigned; - - // Strictly enforce the requested count - if (remaining <= 0) { - toast({ - title: "Assignment Limit Reached", - description: `This position requested exactly ${needed} staff. Cannot assign more.`, - variant: "destructive", - }); - return; - } - - // Check for conflicts - const conflictingStaff = []; - selectedStaffIds.forEach(staffId => { - const conflicts = getStaffConflicts(staffId); - if (conflicts.length > 0) { - const staff = allStaff.find(s => s.id === staffId); - conflictingStaff.push(staff?.employee_name); - } - }); - - if (conflictingStaff.length > 0) { - toast({ - title: "⚠️ Time Conflict Detected", - description: `${conflictingStaff.join(', ')} ${conflictingStaff.length === 1 ? 'is' : 'are'} already assigned to overlapping shifts.`, - variant: "destructive", - }); - return; - } - - if (selectedStaffIds.length > remaining) { - toast({ - title: "Assignment Limit", - description: `Only ${remaining} more staff ${remaining === 1 ? 'is' : 'are'} needed.`, - variant: "destructive", - }); - return; - } - - // Add all selected staff - const newAssignments = selectedStaffIds.map(staffId => { - const staff = allStaff.find(s => s.id === staffId); - return { - employee_id: staff.id, - employee_name: staff.employee_name, - position: currentRole.service, - shift_date: order.event_date, - shift_start: currentRole.start_time, - shift_end: currentRole.end_time, - location: currentShift.address || order.event_address, - hub_location: order.hub_location, - }; - }); - - updatedOrder.shifts_data[selectedShiftIndex].roles[selectedRoleIndex].assignments = [ - ...assignments, - ...newAssignments - ]; - - updateOrderMutation.mutate(updatedOrder); - }; - - const handleAssignStaff = (staffMember) => { - const updatedOrder = { ...order }; - const assignments = updatedOrder.shifts_data[selectedShiftIndex].roles[selectedRoleIndex].assignments || []; - - // Strictly enforce the requested count - if (assignments.length >= needed) { - toast({ - title: "Assignment Limit Reached", - description: `This position requested exactly ${needed} staff. Cannot assign more.`, - variant: "destructive", - }); - return; - } - - // Check if already assigned - if (assignments.some(a => a.employee_id === staffMember.id)) { - toast({ - title: "Already assigned", - description: `${staffMember.employee_name} is already assigned to this role.`, - variant: "destructive", - }); - return; - } - - // Check for conflicts - const conflicts = getStaffConflicts(staffMember.id); - if (conflicts.length > 0) { - toast({ - title: "⚠️ Time Conflict", - description: `${staffMember.employee_name} is already assigned to ${conflicts[0].orderName} at ${conflicts[0].time}`, - variant: "destructive", - }); - return; - } - - // Add new assignment - const newAssignment = { - employee_id: staffMember.id, - employee_name: staffMember.employee_name, - position: currentRole.service, - shift_date: order.event_date, - shift_start: currentRole.start_time, - shift_end: currentRole.end_time, - location: currentShift.address || order.event_address, - hub_location: order.hub_location, - }; - - updatedOrder.shifts_data[selectedShiftIndex].roles[selectedRoleIndex].assignments = [ - ...assignments, - newAssignment - ]; - - updateOrderMutation.mutate(updatedOrder); - }; - - const handleRemoveStaff = (employeeId) => { - const updatedOrder = { ...order }; - const assignments = updatedOrder.shifts_data[selectedShiftIndex].roles[selectedRoleIndex].assignments || []; - - updatedOrder.shifts_data[selectedShiftIndex].roles[selectedRoleIndex].assignments = - assignments.filter(a => a.employee_id !== employeeId); - - updateOrderMutation.mutate(updatedOrder); - }; - - const handleSwapStaff = (newStaffMember) => { - if (!swapMode) return; - - const updatedOrder = { ...order }; - const assignments = updatedOrder.shifts_data[selectedShiftIndex].roles[selectedRoleIndex].assignments || []; - - // Check for conflicts - const conflicts = getStaffConflicts(newStaffMember.id); - if (conflicts.length > 0) { - toast({ - title: "⚠️ Time Conflict", - description: `${newStaffMember.employee_name} is already assigned to ${conflicts[0].orderName} at ${conflicts[0].time}`, - variant: "destructive", - }); - return; - } - - // Replace the assignment - assignments[swapMode.assignmentIndex] = { - employee_id: newStaffMember.id, - employee_name: newStaffMember.employee_name, - position: currentRole.service, - shift_date: order.event_date, - shift_start: currentRole.start_time, - shift_end: currentRole.end_time, - location: currentShift.address || order.event_address, - hub_location: order.hub_location, - }; - - updatedOrder.shifts_data[selectedShiftIndex].roles[selectedRoleIndex].assignments = assignments; - updateOrderMutation.mutate(updatedOrder); - setSwapMode(null); - }; - - const assignments = currentRole.assignments || []; - const needed = parseInt(currentRole.count) || 0; - const assigned = assignments.length; - const isFullyStaffed = assigned >= needed; - - // Filter staff by role and exclude already assigned - const assignedIds = new Set(assignments.map(a => a.employee_id)); - const roleFilteredStaff = allStaff.filter(s => - matchesRole(s.position, currentRole.service) || - matchesRole(s.position_2, currentRole.service) - ); - - const availableStaff = roleFilteredStaff - .filter(s => !assignedIds.has(s.id)) - .filter(s => { - if (!searchTerm) return true; - const lowerSearch = searchTerm.toLowerCase(); - return ( - s.employee_name?.toLowerCase().includes(lowerSearch) || - s.position?.toLowerCase().includes(lowerSearch) || - s.position_2?.toLowerCase().includes(lowerSearch) - ); - }); - - // Calculate total assignments across all roles in this shift - let totalNeeded = 0; - let totalAssigned = 0; - currentShift.roles.forEach(role => { - totalNeeded += parseInt(role.count) || 0; - totalAssigned += role.assignments?.length || 0; - }); - - const toggleStaffSelection = (staffId) => { - setSelectedStaffIds(prev => - prev.includes(staffId) - ? prev.filter(id => id !== staffId) - : [...prev, staffId] - ); - }; - - const selectAll = () => { - const remaining = needed - assigned; - const selectableStaff = availableStaff.slice(0, remaining); - setSelectedStaffIds(selectableStaff.map(s => s.id)); - }; - - const deselectAll = () => { - setSelectedStaffIds([]); - }; - - return ( - - - -
-
- - {order.event_name} - -

{order.client_business}

-
- = totalNeeded - ? 'bg-emerald-500 text-white border-0 animate-pulse' - : 'bg-orange-500 text-white border-0' - } font-semibold px-3 py-1 shadow-md`} - > - {totalAssigned >= totalNeeded ? ( - <> - - Fully Staffed - - ) : ( - <> - - Needs Staff - - )} - -
- -
- - - {order.event_date ? format(new Date(order.event_date), 'EEEE, MMMM d, yyyy') : 'No date'} - -
- - {currentShift.address && ( -
- - {currentShift.address} -
- )} -
- -
- {/* Staff Assignment Summary */} -
-
-
- -

Staff Assignment

-
- = totalNeeded - ? 'border-emerald-500 text-emerald-700 bg-emerald-50' - : 'border-orange-500 text-orange-700 bg-orange-50' - }`} - > - {totalAssigned} / {totalNeeded} - -
- - {totalAssigned >= totalNeeded && ( -
-
- - ✨ Fully staffed - All positions filled! -
-
- )} -
- - {/* Position Selection */} - {currentShift.roles.length > 1 && ( -
- - -
- )} - - {/* Current Position Details */} -
-
-

{currentRole.service}

- = needed - ? 'bg-emerald-500 text-white' - : 'bg-orange-500 text-white' - } font-bold px-3 py-1 text-base`} - > - {assigned}/{needed} - -
- - {currentRole.start_time && ( -
- - - {convertTo12Hour(currentRole.start_time)} - {convertTo12Hour(currentRole.end_time)} - -
- )} -
- - {/* Swap Mode Banner */} - {swapMode && ( -
-
-
- - - Swap Mode Active - Select replacement for {assignments[swapMode.assignmentIndex]?.employee_name} - -
- -
-
- )} - - {/* Assigned Staff List */} - {assignments.length > 0 && ( -
-

✅ Assigned Staff:

-
- {assignments.map((assignment, idx) => { - const conflicts = getStaffConflicts(assignment.employee_id); - return ( -
-
- - - {getInitials(assignment.employee_name)} - - -
-

{assignment.employee_name}

-

{currentRole.service}

- {conflicts.length > 0 && ( -
- - Time conflict detected -
- )} -
-
-
- - -
-
- ); - })} -
-
- )} - - {/* Add Staff Section */} - {(assigned < needed || swapMode) && ( -
-
-

- {swapMode ? '🔄 Select Replacement:' : '➕ Add Staff:'} -

- {!swapMode && availableStaff.length > 0 && ( -
- - {selectedStaffIds.length > 0 && ( - <> - - - - )} -
- )} -
- - {/* Search */} -
-
- - setSearchTerm(e.target.value)} - className="pl-10" - /> -
-

- Showing {availableStaff.length} {currentRole.service.toLowerCase()}(s) - {roleFilteredStaff.length !== allStaff.length && ( - (filtered by role) - )} -

-
- - {availableStaff.length > 0 ? ( -
- {availableStaff.map((staff, idx) => { - const isSelected = selectedStaffIds.includes(staff.id); - const conflicts = getStaffConflicts(staff.id); - const hasConflict = conflicts.length > 0; - - return ( -
-
- {!swapMode && ( - toggleStaffSelection(staff.id)} - disabled={hasConflict} - className="border-2" - /> - )} - - - {getInitials(staff.employee_name)} - - -
-

{staff.employee_name}

-
-

{staff.position || 'Staff Member'}

- {staff.position_2 && ( - {staff.position_2} - )} -
- {hasConflict && ( -
- - - Conflict: {conflicts[0].orderName} ({conflicts[0].time}) - -
- )} -
-
- -
- ); - })} -
- ) : ( -
- -

- {searchTerm - ? 'No staff match your search' - : `No available ${currentRole.service.toLowerCase()}s found` - } -

-

- {searchTerm ? 'Try a different search term' : 'All matching staff have been assigned'} -

-
- )} -
- )} -
- -
-
- {selectedShiftIndex > 0 && ( - - )} - {selectedShiftIndex < order.shifts_data.length - 1 && ( - - )} -
-
- = totalNeeded - ? 'bg-emerald-50 border-emerald-500 text-emerald-700' - : 'bg-orange-50 border-orange-500 text-orange-700' - }`} - > - {totalAssigned}/{totalNeeded} Filled - - -
-
-
-
- ); -} \ No newline at end of file diff --git a/frontend-web-free/src/components/events/EventForm.jsx b/frontend-web-free/src/components/events/EventForm.jsx deleted file mode 100644 index f018b68a..00000000 --- a/frontend-web-free/src/components/events/EventForm.jsx +++ /dev/null @@ -1,1102 +0,0 @@ - -import React, { useState, useEffect } from "react"; -import { base44 } from "@/api/base44Client"; -import { useQuery } from "@tanstack/react-query"; -import { Card, CardContent } from "@/components/ui/card"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; -import { Button } from "@/components/ui/button"; -import { Switch } from "@/components/ui/switch"; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; -import { Plus, Save, FileText, Building2, Calendar, Zap, Shield, Search, Minus, Trash2, MapPin, X, RefreshCw, Users, CheckCircle2 } from "lucide-react"; -import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; -import { Calendar as CalendarComponent } from "@/components/ui/calendar"; -import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; -import { format } from "date-fns"; -import { Checkbox } from "@/components/ui/checkbox"; -import { Badge } from "@/components/ui/badge"; -import { Textarea } from "@/components/ui/textarea"; -import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem } from "@/components/ui/command"; - -const UNIFORM_TYPES = ["Type 1", "Type 2", "Type 3", "All Black", "Business Casual", "Chef Whites"]; - -export default function EventForm({ event, onSubmit, isSubmitting, currentUser }) { - const [formData, setFormData] = useState(event || { - event_name: "", - order_type: "one_time", // rapid, one_time, recurring, permanent - recurrence_type: "single", // This field is largely superseded by recurring_frequency in the new UI, but kept for compatibility. - recurrence_start_date: "", - recurrence_end_date: "", - scatter_dates: [], - recurring_days: [], // Added for weekly recurring - recurring_frequency: "weekly", // weekly, monthly, custom - default for recurring events - business_id: "", - business_name: "", - hub: "", - po_reference: "", - status: "Draft", - date: "", - include_backup: false, - backup_staff_count: 0, - shifts: [{ - shift_name: "Shift 1", - location_address: "", - same_as_billing: true, - roles: [{ - role: "", - department: "", - count: 1, - start_time: "09:00", - end_time: "17:00", - hours: 8, - uniform: "Type 1", - break_minutes: 30, - rate_per_hour: 0, - total_value: 0 - }] - }], - notes: "", - total: 0 - }); - - const [roleSearchOpen, setRoleSearchOpen] = useState({}); - - const { data: user } = useQuery({ - queryKey: ['current-user-form'], - queryFn: () => base44.auth.me(), - enabled: !currentUser, - }); - - const currentUserData = currentUser || user; - const userRole = currentUserData?.user_role || currentUserData?.role || "admin"; - const isVendor = userRole === "vendor"; - - const { data: businesses = [] } = useQuery({ - queryKey: ['businesses'], - queryFn: () => base44.entities.Business.list(), - initialData: [], - }); - - const { data: allRates = [] } = useQuery({ - queryKey: ['vendor-rates-all'], - queryFn: () => base44.entities.VendorRate.list(), - initialData: [], - }); - - const { data: vendorSettings = [] } = useQuery({ - queryKey: ['vendor-settings'], - queryFn: () => base44.entities.VendorDefaultSettings.list(), - initialData: [], - }); - - // Get unique roles for dropdown - const availableRoles = [...new Set(allRates.map(r => r.role_name))].sort(); - - // Get hubs for current vendor - const vendorHubs = isVendor - ? [...new Set(businesses.filter(b => b.business_name === currentUserData?.company_name).map(b => b.hub_building))].filter(Boolean) - : []; - - // Auto-fill client details if current user is a client - useEffect(() => { - if (currentUserData && userRole === "client" && !event) { - const clientBusiness = businesses.find(b => - b.email === currentUserData.email || b.contact_name === currentUserData.full_name - ); - - if (clientBusiness) { - setFormData(prev => ({ - ...prev, - business_id: clientBusiness.id, - business_name: clientBusiness.business_name, - hub: clientBusiness.hub_building || prev.hub, - shifts: prev.shifts.map(shift => ({ - ...shift, - location_address: clientBusiness.address || shift.location_address - })) - })); - } - } - }, [currentUserData, businesses, event, userRole]); - - useEffect(() => { - if (event) { - setFormData(event); - } - }, [event]); - - const handleChange = (field, value) => { - setFormData(prev => ({ ...prev, [field]: value })); - }; - - const handleBusinessChange = (businessId) => { - const selectedBusiness = businesses.find(b => b.id === businessId); - if (selectedBusiness) { - setFormData(prev => ({ - ...prev, - business_id: businessId, - business_name: selectedBusiness.business_name || "", - shifts: prev.shifts.map(shift => ({ - ...shift, - location_address: shift.same_as_billing ? selectedBusiness.address || shift.location_address : shift.location_address - })) - })); - } - }; - - const calculateHours = (startTime, endTime, breakMinutes = 0) => { - if (!startTime || !endTime) return 0; - - const [startHour, startMin] = startTime.split(':').map(Number); - const [endHour, endMin] = endTime.split(':').map(Number); - - const startMinutes = startHour * 60 + startMin; - const endMinutes = endHour * 60 + endMin; - - let totalMinutes = endMinutes - startMinutes; - if (totalMinutes < 0) totalMinutes += 24 * 60; - - totalMinutes -= (breakMinutes || 0); - - return Math.max(0, totalMinutes / 60); - }; - - const getRateForRole = (roleName) => { - const rate = allRates.find(r => r.role_name === roleName && r.is_active); - return rate ? parseFloat(rate.client_rate || 0) : 0; - }; - - const handleRoleChange = (shiftIndex, roleIndex, field, value) => { - setFormData(prev => { - const newShifts = [...prev.shifts]; - const role = newShifts[shiftIndex].roles[roleIndex]; - - role[field] = value; - - // Auto-populate rate when role is selected - if (field === 'role') { - const rate = getRateForRole(value); - role.rate_per_hour = rate; - } - - // Recalculate hours when time changes - if (field === 'start_time' || field === 'end_time' || field === 'break_minutes') { - role.hours = calculateHours(role.start_time, role.end_time, role.break_minutes); - } - - // Recalculate total - role.total_value = (role.rate_per_hour || 0) * (role.hours || 0) * (role.count || 1); - - return { ...prev, shifts: newShifts }; - }); - - // Recalculate grand total - updateGrandTotal(); - }; - - const updateGrandTotal = () => { - setTimeout(() => { - setFormData(prev => { - const total = prev.shifts.reduce((sum, shift) => { - const shiftTotal = shift.roles.reduce((roleSum, role) => roleSum + (role.total_value || 0), 0); - return sum + shiftTotal; - }, 0); - return { ...prev, total }; - }); - }, 0); - }; - - const handleAddRole = (shiftIndex) => { - setFormData(prev => { - const newShifts = [...prev.shifts]; - newShifts[shiftIndex].roles.push({ - role: "", - department: "", - count: 1, - start_time: "09:00", - end_time: "17:00", - hours: 8, - uniform: "Type 1", - break_minutes: 30, - rate_per_hour: 0, - total_value: 0 - }); - return { ...prev, shifts: newShifts }; - }); - }; - - const handleRemoveRole = (shiftIndex, roleIndex) => { - setFormData(prev => { - const newShifts = [...prev.shifts]; - newShifts[shiftIndex].roles.splice(roleIndex, 1); - return { ...prev, shifts: newShifts }; - }); - updateGrandTotal(); - }; - - const handleAddShift = () => { - setFormData(prev => ({ - ...prev, - shifts: [...prev.shifts, { - shift_name: `Shift ${prev.shifts.length + 1}`, - location_address: "", - same_as_billing: true, - roles: [{ - role: "", - department: "", - count: 1, - start_time: "09:00", - end_time: "17:00", - hours: 8, - uniform: "Type 1", - break_minutes: 30, - rate_per_hour: 0, - total_value: 0 - }] - }] - })); - }; - - const handleOrderTypeChange = (type) => { - setFormData(prev => { - const newState = { - ...prev, - order_type: type, - date: "", // Always clear the single 'date' field on order type change, it will be set by rapid/one_time/permanent if needed. - recurrence_start_date: "", // Clear these when order type changes - recurrence_end_date: "", - scatter_dates: [], // Clear these when order type changes - recurring_days: [], // Clear these when order type changes - recurring_frequency: "weekly" // Default for recurring - }; - - // Set recurrence_type for backend compatibility if it's still used there, but new UI uses recurring_frequency - if (type === "recurring") { - newState.recurrence_type = "date_range"; // Default to 'date_range' to maintain previous behavior if possible - } else { - newState.recurrence_type = "single"; // For one_time, rapid, permanent - } - - if (type === "rapid" && !prev.date) { // Only set if not already set, or if changing from another type - newState.date = format(new Date(), 'yyyy-MM-dd'); // Default rapid to today if no date - } else if (type === "one_time" || type === "permanent") { - newState.date = prev.date; // Preserve date if user had one for one_time/permanent - } - // If type is recurring, date is already cleared. Other recurring fields default/cleared. - - return newState; - }); - }; - - const handleScatterDateSelect = (dates) => { - setFormData(prev => ({ - ...prev, - scatter_dates: dates?.map(d => format(d, 'yyyy-MM-dd')).sort() || [] - })); - }; - - const handleDayToggle = (day) => { - setFormData(prev => { - const days = prev.recurring_days || []; - const exists = days.includes(day); - return { - ...prev, - recurring_days: exists - ? days.filter(d => d !== day) - : [...days, day].sort((a,b) => a-b) // Ensure days are sorted - }; - }); - }; - - const handleSubmit = (e, isDraft = false) => { - e.preventDefault(); - let status; - if (isDraft) { - status = "DRAFT"; - } else { - switch (formData.order_type) { - case "rapid": - status = "ACTIVE"; // Rapid requests are active immediately upon submission - break; - case "one_time": - case "recurring": - case "permanent": - default: // In case of an unexpected order_type, default to Pending - status = "PENDING"; // These types typically need approval/processing - break; - } - } - - const dataToSubmit = { - ...formData, - status: status - }; - onSubmit(dataToSubmit); - }; - - return ( -
handleSubmit(e, false)} className="space-y-6"> - {/* Order Type Selection - 4 Options */} - - -

Select Order Type

-
- {/* Rapid */} - - - {/* One-Time */} - - - {/* Recurring */} - - - {/* Permanent */} - -
-
-
- - {/* Recurring Options - Android Style */} - {formData.order_type === 'recurring' && ( - - -
- - -
- - {/* Frequency Selection */} -
- -
- - - -
-
- - {/* Weekly - Android Alarm Style Day Selection */} - {formData.recurring_frequency === 'weekly' && ( -
- -
- {['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'].map((day, index) => { - const isSelected = (formData.recurring_days || []).includes(index); - return ( - - ); - })} -
- {formData.recurring_days && formData.recurring_days.length > 0 && ( -
- {formData.recurring_days.length} day{formData.recurring_days.length > 1 ? 's' : ''} selected -
- )} -
- )} - - {/* Monthly - Date Range */} - {formData.recurring_frequency === 'monthly' && ( -
- -
-
- - handleChange('recurrence_start_date', e.target.value)} - className="border-slate-300 bg-white h-12" - /> -
-
- - handleChange('recurrence_end_date', e.target.value)} - className="border-slate-300 bg-white h-12" - /> -
-
-
- )} - - {/* Custom - Multiple Specific Dates */} - {formData.recurring_frequency === 'custom' && ( -
- - - - - - - new Date(d)) || []} - onSelect={handleScatterDateSelect} - initialFocus - className="rounded-lg border-0" - /> - - - {formData.scatter_dates && formData.scatter_dates.length > 0 && ( -
- {formData.scatter_dates.map(date => ( - - {format(new Date(date), 'MMM d, yyyy')} - - - ))} -
- )} -
- )} - - {/* Summary Section */} - {((formData.recurring_frequency === 'weekly' && formData.recurring_days?.length > 0) || - (formData.recurring_frequency === 'monthly' && formData.recurrence_start_date && formData.recurrence_end_date) || - (formData.recurring_frequency === 'custom' && formData.scatter_dates?.length > 0)) && ( -
-
- - Recurrence Summary -
-
- {formData.recurring_frequency === 'weekly' && formData.recurring_days?.length > 0 && ( -

• Repeats every - {['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] - .filter((_, i) => formData.recurring_days.includes(i)) - .join(', ')} -

- )} - {formData.recurring_frequency === 'monthly' && formData.recurrence_start_date && formData.recurrence_end_date && ( -

• Repeats monthly from {format(new Date(formData.recurrence_start_date), 'MMM d, yyyy')} to {format(new Date(formData.recurrence_end_date), 'MMM d, yyyy')}

- )} - {formData.recurring_frequency === 'custom' && formData.scatter_dates?.length > 0 && ( -

{formData.scatter_dates.length} specific date{formData.scatter_dates.length > 1 ? 's' : ''} selected

- )} -
-
- )} -
-
- )} - - {/* Event Details */} - - -

Event

- -
-
- - handleChange('event_name', e.target.value)} - placeholder="Event Name" - required - className="border-slate-200" - /> -
- -
- {(formData.order_type === 'one_time' || formData.order_type === 'rapid' || formData.order_type === 'permanent') && ( -
- - handleChange('date', e.target.value)} - required - className="border-slate-200" - /> -
- )} - - {/* Hub Selection - Show if vendor has multiple locations */} - {isVendor && vendorHubs.length > 1 ? ( -
- - -
- ) : ( -
- - handleChange('hub', e.target.value)} - placeholder="Hub location" - className="border-slate-200" - /> -
- )} -
- - {/* PO Reference - Now Optional */} -
- - handleChange('po_reference', e.target.value)} - placeholder="PO reference" - className="border-slate-200" - /> -
- - {/* Client/Business Selection */} - {isVendor && ( -
- - - {formData.business_id && businesses.find(b => b.id === formData.business_id)?.rate_group && ( -

- ℹ️ Rate Group: {businesses.find(b => b.id === formData.business_id)?.rate_group} (Auto-detected from location) -

- )} -
- )} - - {/* Zero Risk Backup Staff */} -
-
- { - handleChange('include_backup', checked); - if (!checked) handleChange('backup_staff_count', 0); - }} - className="mt-1" - /> -
- -

- Extra pool of staff in case of call-outs or no-shows -

- {formData.include_backup && ( -
- - handleChange('backup_staff_count', parseInt(e.target.value) || 1)} - className="w-24 mt-1 border-green-300" - /> -
- )} -
-
-
-
-
-
- - {/* Shifts Section */} - {formData.shifts.map((shift, shiftIndex) => ( - - -
-
-
- {shiftIndex + 1} -
-
-

{shift.shift_name}

- {shift.location_address && ( -

- - {shift.location_address} -

- )} -
-
- -
- - {/* Roles */} -
- {shift.roles.map((role, roleIndex) => ( -
-
-
- {roleIndex + 1} -
-
- {/* Service/Role with Search */} -
- - setRoleSearchOpen(prev => ({ ...prev, [`${shiftIndex}-${roleIndex}`]: open }))} - > - - - - - - - No role found. - - {availableRoles.map((roleName) => ( - { - handleRoleChange(shiftIndex, roleIndex, 'role', roleName); - setRoleSearchOpen(prev => ({ ...prev, [`${shiftIndex}-${roleIndex}`]: false })); - }} - > - {roleName} - - ))} - - - - -
- - {/* Count */} -
- -
- - handleRoleChange(shiftIndex, roleIndex, 'count', parseInt(e.target.value) || 1)} - className="w-16 text-center" - /> - -
-
- - {/* Start Time */} -
- - handleRoleChange(shiftIndex, roleIndex, 'start_time', e.target.value)} - className="border-slate-200" - /> -
- - {/* End Time */} -
- - handleRoleChange(shiftIndex, roleIndex, 'end_time', e.target.value)} - className="border-slate-200" - /> -
-
- - {shift.roles.length > 1 && ( - - )} -
- -
- {/* Department */} -
- - handleRoleChange(shiftIndex, roleIndex, 'department', e.target.value)} - placeholder="Department" - className="border-slate-200" - /> -
- - {/* Hours (Auto-calculated) */} -
- -
- - {role.hours || 0} - -
-
- - {/* Break (min) */} -
- - handleRoleChange(shiftIndex, roleIndex, 'break_minutes', parseInt(e.target.value) || 0)} - className="border-slate-200" - /> -
- - {/* Uniform */} -
- - -
-
- - {/* Rate and Total */} -
-
- -
- $ - -
-
-
- -
- ${(role.total_value || 0).toFixed(2)} -
-
-
-
- ))} - - {/* Add Role Button */} - -
- - {/* Shift Total */} -
- Shift Total: - - ${shift.roles.reduce((sum, r) => sum + (r.total_value || 0), 0).toFixed(2)} - -
-
-
- ))} - - {/* Add Another Shift Button */} - - - {/* Other Instructions */} - - - -