@myrjfa/ui 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +19 -0
- package/dist/chat/ChatMain.d.ts +12 -0
- package/dist/chat/ChatMain.d.ts.map +1 -0
- package/dist/chat/ChatMain.js +390 -0
- package/dist/chat/ChatSidebar.d.ts +15 -0
- package/dist/chat/ChatSidebar.d.ts.map +1 -0
- package/dist/chat/ChatSidebar.js +32 -0
- package/dist/chat/ConversationList.d.ts +20 -0
- package/dist/chat/ConversationList.d.ts.map +1 -0
- package/dist/chat/ConversationList.js +95 -0
- package/dist/chat/EventPanel.d.ts +11 -0
- package/dist/chat/EventPanel.d.ts.map +1 -0
- package/dist/chat/EventPanel.js +76 -0
- package/dist/chat/ExpensePanel.d.ts +14 -0
- package/dist/chat/ExpensePanel.d.ts.map +1 -0
- package/dist/chat/ExpensePanel.js +282 -0
- package/dist/chat/MessageBubble.d.ts +29 -0
- package/dist/chat/MessageBubble.d.ts.map +1 -0
- package/dist/chat/MessageBubble.js +425 -0
- package/dist/chat/MessageInput.d.ts +34 -0
- package/dist/chat/MessageInput.d.ts.map +1 -0
- package/dist/chat/MessageInput.js +330 -0
- package/dist/chat/MilestonePanel.d.ts +14 -0
- package/dist/chat/MilestonePanel.d.ts.map +1 -0
- package/dist/chat/MilestonePanel.js +209 -0
- package/dist/chat/components/ParticipantSelector.d.ts +11 -0
- package/dist/chat/components/ParticipantSelector.d.ts.map +1 -0
- package/dist/chat/components/ParticipantSelector.js +26 -0
- package/dist/chat/components/SplitInputs.d.ts +12 -0
- package/dist/chat/components/SplitInputs.d.ts.map +1 -0
- package/dist/chat/components/SplitInputs.js +84 -0
- package/dist/chat/components/SplitTypeSelector.d.ts +8 -0
- package/dist/chat/components/SplitTypeSelector.d.ts.map +1 -0
- package/dist/chat/components/SplitTypeSelector.js +13 -0
- package/dist/chat/dialogs/AddMemberDialog.d.ts +15 -0
- package/dist/chat/dialogs/AddMemberDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/AddMemberDialog.js +43 -0
- package/dist/chat/dialogs/CameraDialog.d.ts +8 -0
- package/dist/chat/dialogs/CameraDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/CameraDialog.js +81 -0
- package/dist/chat/dialogs/ChatInfoDialog.d.ts +10 -0
- package/dist/chat/dialogs/ChatInfoDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/ChatInfoDialog.js +75 -0
- package/dist/chat/dialogs/ConversationSearchDialog.d.ts +8 -0
- package/dist/chat/dialogs/ConversationSearchDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/ConversationSearchDialog.js +53 -0
- package/dist/chat/dialogs/CreateEventDialog.d.ts +22 -0
- package/dist/chat/dialogs/CreateEventDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/CreateEventDialog.js +51 -0
- package/dist/chat/dialogs/CreatePollDialog.d.ts +8 -0
- package/dist/chat/dialogs/CreatePollDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/CreatePollDialog.js +38 -0
- package/dist/chat/dialogs/EditPollDialog.d.ts +14 -0
- package/dist/chat/dialogs/EditPollDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/EditPollDialog.js +33 -0
- package/dist/chat/dialogs/ExpenseAnalyticsDialog.d.ts +20 -0
- package/dist/chat/dialogs/ExpenseAnalyticsDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/ExpenseAnalyticsDialog.js +58 -0
- package/dist/chat/dialogs/GroupInfoDialog.d.ts +10 -0
- package/dist/chat/dialogs/GroupInfoDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/GroupInfoDialog.js +81 -0
- package/dist/chat/dialogs/GroupInfoViewDialog.d.ts +9 -0
- package/dist/chat/dialogs/GroupInfoViewDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/GroupInfoViewDialog.js +15 -0
- package/dist/chat/dialogs/HostWorkspaceDialog.d.ts +9 -0
- package/dist/chat/dialogs/HostWorkspaceDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/HostWorkspaceDialog.js +90 -0
- package/dist/chat/dialogs/MediaComposerDialog.d.ts +9 -0
- package/dist/chat/dialogs/MediaComposerDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/MediaComposerDialog.js +41 -0
- package/dist/chat/dialogs/NewChatDialog.d.ts +2 -0
- package/dist/chat/dialogs/NewChatDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/NewChatDialog.js +48 -0
- package/dist/chat/dialogs/NewGroupDialog.d.ts +2 -0
- package/dist/chat/dialogs/NewGroupDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/NewGroupDialog.js +44 -0
- package/dist/chat/dialogs/ParticipantsDialog.d.ts +12 -0
- package/dist/chat/dialogs/ParticipantsDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/ParticipantsDialog.js +134 -0
- package/dist/chat/dialogs/PayAndSplitDialog.d.ts +12 -0
- package/dist/chat/dialogs/PayAndSplitDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/PayAndSplitDialog.js +124 -0
- package/dist/chat/dialogs/PaymentProfileDialog.d.ts +5 -0
- package/dist/chat/dialogs/PaymentProfileDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/PaymentProfileDialog.js +45 -0
- package/dist/chat/dialogs/PollVotersDialog.d.ts +10 -0
- package/dist/chat/dialogs/PollVotersDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/PollVotersDialog.js +11 -0
- package/dist/chat/dialogs/ShareLocationDialog.d.ts +8 -0
- package/dist/chat/dialogs/ShareLocationDialog.d.ts.map +1 -0
- package/dist/chat/dialogs/ShareLocationDialog.js +47 -0
- package/dist/chat/index.d.ts +8 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +7 -0
- package/dist/components/CityAutocomplete.d.ts +5 -0
- package/dist/components/CityAutocomplete.d.ts.map +1 -0
- package/dist/components/CityAutocomplete.js +112 -0
- package/dist/components/CreateListingDropdown.d.ts +5 -0
- package/dist/components/CreateListingDropdown.d.ts.map +1 -0
- package/dist/components/CreateListingDropdown.js +21 -0
- package/dist/components/DestinationAutocomplete.d.ts +11 -0
- package/dist/components/DestinationAutocomplete.d.ts.map +1 -0
- package/dist/components/DestinationAutocomplete.js +24 -0
- package/dist/components/StateAutocomplete.d.ts +10 -0
- package/dist/components/StateAutocomplete.d.ts.map +1 -0
- package/dist/components/StateAutocomplete.js +34 -0
- package/dist/components/admin/AdminBookingRegistrationsList.d.ts +5 -0
- package/dist/components/admin/AdminBookingRegistrationsList.d.ts.map +1 -0
- package/dist/components/admin/AdminBookingRegistrationsList.js +69 -0
- package/dist/components/admin/AdminListingActionsWrapper.d.ts +9 -0
- package/dist/components/admin/AdminListingActionsWrapper.d.ts.map +1 -0
- package/dist/components/admin/AdminListingActionsWrapper.js +200 -0
- package/dist/components/ads/ActivateAdPlacementButton.d.ts +6 -0
- package/dist/components/ads/ActivateAdPlacementButton.d.ts.map +1 -0
- package/dist/components/ads/ActivateAdPlacementButton.js +27 -0
- package/dist/components/ads/AdOfferCard.d.ts +6 -0
- package/dist/components/ads/AdOfferCard.d.ts.map +1 -0
- package/dist/components/ads/AdOfferCard.js +15 -0
- package/dist/components/adventure/AdventureAvailabilityPlanner.d.ts +17 -0
- package/dist/components/adventure/AdventureAvailabilityPlanner.d.ts.map +1 -0
- package/dist/components/adventure/AdventureAvailabilityPlanner.js +106 -0
- package/dist/components/adventure/AdventureQueryCard.d.ts +5 -0
- package/dist/components/adventure/AdventureQueryCard.d.ts.map +1 -0
- package/dist/components/adventure/AdventureQueryCard.js +65 -0
- package/dist/components/adventure/AdventureSlotBuilder.d.ts +41 -0
- package/dist/components/adventure/AdventureSlotBuilder.d.ts.map +1 -0
- package/dist/components/adventure/AdventureSlotBuilder.js +146 -0
- package/dist/components/booking/booking-form.d.ts +39 -0
- package/dist/components/booking/booking-form.d.ts.map +1 -0
- package/dist/components/booking/booking-form.js +847 -0
- package/dist/components/brand/BrandPageView.d.ts +8 -0
- package/dist/components/brand/BrandPageView.d.ts.map +1 -0
- package/dist/components/brand/BrandPageView.js +97 -0
- package/dist/components/companion/AnonymousChat.d.ts +22 -0
- package/dist/components/companion/AnonymousChat.d.ts.map +1 -0
- package/dist/components/companion/AnonymousChat.js +24 -0
- package/dist/components/companion/SwipeCard.d.ts +25 -0
- package/dist/components/companion/SwipeCard.d.ts.map +1 -0
- package/dist/components/companion/SwipeCard.js +58 -0
- package/dist/components/create-flow/ConfirmDiscardDialog.d.ts +11 -0
- package/dist/components/create-flow/ConfirmDiscardDialog.d.ts.map +1 -0
- package/dist/components/create-flow/ConfirmDiscardDialog.js +14 -0
- package/dist/components/create-flow/EntityEditLoadingState.d.ts +2 -0
- package/dist/components/create-flow/EntityEditLoadingState.d.ts.map +1 -0
- package/dist/components/create-flow/EntityEditLoadingState.js +6 -0
- package/dist/components/create-flow/EntityFormCompletionState.d.ts +12 -0
- package/dist/components/create-flow/EntityFormCompletionState.d.ts.map +1 -0
- package/dist/components/create-flow/EntityFormCompletionState.js +10 -0
- package/dist/components/create-flow/EntityFormHeader.d.ts +9 -0
- package/dist/components/create-flow/EntityFormHeader.d.ts.map +1 -0
- package/dist/components/create-flow/EntityFormHeader.js +7 -0
- package/dist/components/create-flow/EntityFormPageFrame.d.ts +10 -0
- package/dist/components/create-flow/EntityFormPageFrame.d.ts.map +1 -0
- package/dist/components/create-flow/EntityFormPageFrame.js +10 -0
- package/dist/components/create-flow/ImageUploader.d.ts +30 -0
- package/dist/components/create-flow/ImageUploader.d.ts.map +1 -0
- package/dist/components/create-flow/ImageUploader.js +193 -0
- package/dist/components/create-flow/MultiStepWizard.d.ts +25 -0
- package/dist/components/create-flow/MultiStepWizard.d.ts.map +1 -0
- package/dist/components/create-flow/MultiStepWizard.js +31 -0
- package/dist/components/create-flow/ReviewConfirmationCard.d.ts +8 -0
- package/dist/components/create-flow/ReviewConfirmationCard.d.ts.map +1 -0
- package/dist/components/create-flow/ReviewConfirmationCard.js +5 -0
- package/dist/components/create-flow/ReviewMetricGrid.d.ts +15 -0
- package/dist/components/create-flow/ReviewMetricGrid.d.ts.map +1 -0
- package/dist/components/create-flow/ReviewMetricGrid.js +8 -0
- package/dist/components/create-flow/TemplateSelectionDialog.d.ts +17 -0
- package/dist/components/create-flow/TemplateSelectionDialog.d.ts.map +1 -0
- package/dist/components/create-flow/TemplateSelectionDialog.js +7 -0
- package/dist/components/discounts/OffersAndCouponsSheet.d.ts +13 -0
- package/dist/components/discounts/OffersAndCouponsSheet.d.ts.map +1 -0
- package/dist/components/discounts/OffersAndCouponsSheet.js +81 -0
- package/dist/components/enquiry/EnquiryFormParts.d.ts +40 -0
- package/dist/components/enquiry/EnquiryFormParts.d.ts.map +1 -0
- package/dist/components/enquiry/EnquiryFormParts.js +29 -0
- package/dist/components/form-sections/FaqSection.d.ts +24 -0
- package/dist/components/form-sections/FaqSection.d.ts.map +1 -0
- package/dist/components/form-sections/FaqSection.js +17 -0
- package/dist/components/form-sections/OpportunityBasicsSection.d.ts +8 -0
- package/dist/components/form-sections/OpportunityBasicsSection.d.ts.map +1 -0
- package/dist/components/form-sections/OpportunityBasicsSection.js +26 -0
- package/dist/components/form-sections/OpportunityDetailsSection.d.ts +18 -0
- package/dist/components/form-sections/OpportunityDetailsSection.d.ts.map +1 -0
- package/dist/components/form-sections/OpportunityDetailsSection.js +10 -0
- package/dist/components/form-sections/OpportunityTypeSection.d.ts +7 -0
- package/dist/components/form-sections/OpportunityTypeSection.d.ts.map +1 -0
- package/dist/components/form-sections/OpportunityTypeSection.js +15 -0
- package/dist/components/form-sections/PackageDetailsSection.d.ts +22 -0
- package/dist/components/form-sections/PackageDetailsSection.d.ts.map +1 -0
- package/dist/components/form-sections/PackageDetailsSection.js +20 -0
- package/dist/components/form-sections/PackageItinerarySection.d.ts +21 -0
- package/dist/components/form-sections/PackageItinerarySection.d.ts.map +1 -0
- package/dist/components/form-sections/PackageItinerarySection.js +112 -0
- package/dist/components/form-sections/PackagePricingSection.d.ts +8 -0
- package/dist/components/form-sections/PackagePricingSection.d.ts.map +1 -0
- package/dist/components/form-sections/PackagePricingSection.js +11 -0
- package/dist/components/form-sections/PackageReviewSection.d.ts +12 -0
- package/dist/components/form-sections/PackageReviewSection.d.ts.map +1 -0
- package/dist/components/form-sections/PackageReviewSection.js +26 -0
- package/dist/components/form-sections/RentalBasicsSection.d.ts +12 -0
- package/dist/components/form-sections/RentalBasicsSection.d.ts.map +1 -0
- package/dist/components/form-sections/RentalBasicsSection.js +91 -0
- package/dist/components/form-sections/RentalCapacitySection.d.ts +9 -0
- package/dist/components/form-sections/RentalCapacitySection.d.ts.map +1 -0
- package/dist/components/form-sections/RentalCapacitySection.js +23 -0
- package/dist/components/form-sections/RentalLocationSection.d.ts +10 -0
- package/dist/components/form-sections/RentalLocationSection.d.ts.map +1 -0
- package/dist/components/form-sections/RentalLocationSection.js +41 -0
- package/dist/components/form-sections/RentalReviewSection.d.ts +10 -0
- package/dist/components/form-sections/RentalReviewSection.d.ts.map +1 -0
- package/dist/components/form-sections/RentalReviewSection.js +27 -0
- package/dist/components/form-sections/RentalRulesSection.d.ts +7 -0
- package/dist/components/form-sections/RentalRulesSection.d.ts.map +1 -0
- package/dist/components/form-sections/RentalRulesSection.js +10 -0
- package/dist/components/form-sections/RentalSpecsSection.d.ts +7 -0
- package/dist/components/form-sections/RentalSpecsSection.d.ts.map +1 -0
- package/dist/components/form-sections/RentalSpecsSection.js +10 -0
- package/dist/components/host-dashboard/HostCalendar.d.ts +8 -0
- package/dist/components/host-dashboard/HostCalendar.d.ts.map +1 -0
- package/dist/components/host-dashboard/HostCalendar.js +43 -0
- package/dist/components/host-dashboard/HostCalendarGrid.d.ts +34 -0
- package/dist/components/host-dashboard/HostCalendarGrid.d.ts.map +1 -0
- package/dist/components/host-dashboard/HostCalendarGrid.js +30 -0
- package/dist/components/host-dashboard/HostListingMultiSelect.d.ts +12 -0
- package/dist/components/host-dashboard/HostListingMultiSelect.d.ts.map +1 -0
- package/dist/components/host-dashboard/HostListingMultiSelect.js +24 -0
- package/dist/components/host-dashboard/HostManageCalendarShell.d.ts +17 -0
- package/dist/components/host-dashboard/HostManageCalendarShell.d.ts.map +1 -0
- package/dist/components/host-dashboard/HostManageCalendarShell.js +5 -0
- package/dist/components/host-dashboard/HostSidebarNavigation.d.ts +2 -0
- package/dist/components/host-dashboard/HostSidebarNavigation.d.ts.map +1 -0
- package/dist/components/host-dashboard/HostSidebarNavigation.js +299 -0
- package/dist/components/host-dashboard/ManageFeatureSwitcher.d.ts +15 -0
- package/dist/components/host-dashboard/ManageFeatureSwitcher.d.ts.map +1 -0
- package/dist/components/host-dashboard/ManageFeatureSwitcher.js +43 -0
- package/dist/components/host-dashboard/PageHeader.d.ts +14 -0
- package/dist/components/host-dashboard/PageHeader.d.ts.map +1 -0
- package/dist/components/host-dashboard/PageHeader.js +8 -0
- package/dist/components/host-dashboard/PlaceholderPage.d.ts +4 -0
- package/dist/components/host-dashboard/PlaceholderPage.d.ts.map +1 -0
- package/dist/components/host-dashboard/PlaceholderPage.js +9 -0
- package/dist/components/host-dashboard/StatCard.d.ts +15 -0
- package/dist/components/host-dashboard/StatCard.d.ts.map +1 -0
- package/dist/components/host-dashboard/StatCard.js +38 -0
- package/dist/components/layout/AppProviders.d.ts +5 -0
- package/dist/components/layout/AppProviders.d.ts.map +1 -0
- package/dist/components/layout/AppProviders.js +11 -0
- package/dist/components/layout/PublicRouteLayout.d.ts +5 -0
- package/dist/components/layout/PublicRouteLayout.d.ts.map +1 -0
- package/dist/components/layout/PublicRouteLayout.js +5 -0
- package/dist/components/layout/PublicShell.d.ts +5 -0
- package/dist/components/layout/PublicShell.d.ts.map +1 -0
- package/dist/components/layout/PublicShell.js +5 -0
- package/dist/components/location/LocationPicker.d.ts +27 -0
- package/dist/components/location/LocationPicker.d.ts.map +1 -0
- package/dist/components/location/LocationPicker.js +415 -0
- package/dist/components/location/LocationPreview.d.ts +11 -0
- package/dist/components/location/LocationPreview.d.ts.map +1 -0
- package/dist/components/location/LocationPreview.js +12 -0
- package/dist/components/location/MapPicker.d.ts +9 -0
- package/dist/components/location/MapPicker.d.ts.map +1 -0
- package/dist/components/location/MapPicker.js +40 -0
- package/dist/components/location/MapPreview.d.ts +8 -0
- package/dist/components/location/MapPreview.d.ts.map +1 -0
- package/dist/components/location/MapPreview.js +17 -0
- package/dist/components/location/PlaceLinkInline.d.ts +14 -0
- package/dist/components/location/PlaceLinkInline.d.ts.map +1 -0
- package/dist/components/location/PlaceLinkInline.js +30 -0
- package/dist/components/location/leafletMap.d.ts +8 -0
- package/dist/components/location/leafletMap.d.ts.map +1 -0
- package/dist/components/location/leafletMap.js +74 -0
- package/dist/components/ui/GuestOrLoginDialog.d.ts +11 -0
- package/dist/components/ui/GuestOrLoginDialog.d.ts.map +1 -0
- package/dist/components/ui/GuestOrLoginDialog.js +19 -0
- package/dist/components/ui/ImageGalleryViewer.d.ts +10 -0
- package/dist/components/ui/ImageGalleryViewer.d.ts.map +1 -0
- package/dist/components/ui/ImageGalleryViewer.js +59 -0
- package/dist/components/ui/LocationInput.d.ts +12 -0
- package/dist/components/ui/LocationInput.d.ts.map +1 -0
- package/dist/components/ui/LocationInput.js +39 -0
- package/dist/components/ui/PropertyGalleryClient.d.ts +8 -0
- package/dist/components/ui/PropertyGalleryClient.d.ts.map +1 -0
- package/dist/components/ui/PropertyGalleryClient.js +22 -0
- package/dist/components/ui/calendar.d.ts +9 -0
- package/dist/components/ui/calendar.d.ts.map +1 -0
- package/dist/components/ui/calendar.js +75 -0
- package/dist/components/ui/dashboard/admin-adventures-table.d.ts +12 -0
- package/dist/components/ui/dashboard/admin-adventures-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/admin-adventures-table.js +94 -0
- package/dist/components/ui/dashboard/admin-blogs-table.d.ts +11 -0
- package/dist/components/ui/dashboard/admin-blogs-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/admin-blogs-table.js +58 -0
- package/dist/components/ui/dashboard/admin-opportunities-table.d.ts +20 -0
- package/dist/components/ui/dashboard/admin-opportunities-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/admin-opportunities-table.js +139 -0
- package/dist/components/ui/dashboard/admin-rentals-table.d.ts +12 -0
- package/dist/components/ui/dashboard/admin-rentals-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/admin-rentals-table.js +85 -0
- package/dist/components/ui/dashboard/admin-travel-package-table.d.ts +16 -0
- package/dist/components/ui/dashboard/admin-travel-package-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/admin-travel-package-table.js +103 -0
- package/dist/components/ui/dashboard/adventures-table.d.ts +16 -0
- package/dist/components/ui/dashboard/adventures-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/adventures-table.js +151 -0
- package/dist/components/ui/dashboard/approver-applications-table.d.ts +13 -0
- package/dist/components/ui/dashboard/approver-applications-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/approver-applications-table.js +85 -0
- package/dist/components/ui/dashboard/approver-package-enquiries-table.d.ts +11 -0
- package/dist/components/ui/dashboard/approver-package-enquiries-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/approver-package-enquiries-table.js +102 -0
- package/dist/components/ui/dashboard/archive-confirm-modal.d.ts +9 -0
- package/dist/components/ui/dashboard/archive-confirm-modal.d.ts.map +1 -0
- package/dist/components/ui/dashboard/archive-confirm-modal.js +6 -0
- package/dist/components/ui/dashboard/blogs-table.d.ts +10 -0
- package/dist/components/ui/dashboard/blogs-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/blogs-table.js +62 -0
- package/dist/components/ui/dashboard/bookings-table.d.ts +13 -0
- package/dist/components/ui/dashboard/bookings-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/bookings-table.js +165 -0
- package/dist/components/ui/dashboard/dashboard-page-shell.d.ts +7 -0
- package/dist/components/ui/dashboard/dashboard-page-shell.d.ts.map +1 -0
- package/dist/components/ui/dashboard/dashboard-page-shell.js +5 -0
- package/dist/components/ui/dashboard/data-table-shell.d.ts +18 -0
- package/dist/components/ui/dashboard/data-table-shell.d.ts.map +1 -0
- package/dist/components/ui/dashboard/data-table-shell.js +6 -0
- package/dist/components/ui/dashboard/delete-confirm-modal.d.ts +9 -0
- package/dist/components/ui/dashboard/delete-confirm-modal.d.ts.map +1 -0
- package/dist/components/ui/dashboard/delete-confirm-modal.js +6 -0
- package/dist/components/ui/dashboard/entity-list-page-state.d.ts +25 -0
- package/dist/components/ui/dashboard/entity-list-page-state.d.ts.map +1 -0
- package/dist/components/ui/dashboard/entity-list-page-state.js +17 -0
- package/dist/components/ui/dashboard/generic-entity-table.d.ts +36 -0
- package/dist/components/ui/dashboard/generic-entity-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/generic-entity-table.js +203 -0
- package/dist/components/ui/dashboard/opportunities-table.d.ts +17 -0
- package/dist/components/ui/dashboard/opportunities-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/opportunities-table.js +143 -0
- package/dist/components/ui/dashboard/rentals-table.d.ts +17 -0
- package/dist/components/ui/dashboard/rentals-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/rentals-table.js +155 -0
- package/dist/components/ui/dashboard/restore-confirm-modal.d.ts +9 -0
- package/dist/components/ui/dashboard/restore-confirm-modal.d.ts.map +1 -0
- package/dist/components/ui/dashboard/restore-confirm-modal.js +6 -0
- package/dist/components/ui/dashboard/stats-card.d.ts +6 -0
- package/dist/components/ui/dashboard/stats-card.d.ts.map +1 -0
- package/dist/components/ui/dashboard/stats-card.js +5 -0
- package/dist/components/ui/dashboard/travel-packages-table.d.ts +16 -0
- package/dist/components/ui/dashboard/travel-packages-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/travel-packages-table.js +134 -0
- package/dist/components/ui/dashboard/user-applications-table.d.ts +12 -0
- package/dist/components/ui/dashboard/user-applications-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/user-applications-table.js +79 -0
- package/dist/components/ui/loading-skeleton.d.ts +10 -0
- package/dist/components/ui/loading-skeleton.d.ts.map +1 -0
- package/dist/components/ui/loading-skeleton.js +49 -0
- package/dist/components/ui/misc/IosPwaNavBar.d.ts +8 -0
- package/dist/components/ui/misc/IosPwaNavBar.d.ts.map +1 -0
- package/dist/components/ui/misc/IosPwaNavBar.js +25 -0
- package/dist/components/ui/misc/document-upload-button.d.ts +10 -0
- package/dist/components/ui/misc/document-upload-button.d.ts.map +1 -0
- package/dist/components/ui/misc/document-upload-button.js +12 -0
- package/dist/components/ui/misc/empty-state.d.ts +9 -0
- package/dist/components/ui/misc/empty-state.d.ts.map +1 -0
- package/dist/components/ui/misc/empty-state.js +4 -0
- package/dist/components/ui/misc/image-cropper.d.ts +9 -0
- package/dist/components/ui/misc/image-cropper.d.ts.map +1 -0
- package/dist/components/ui/misc/image-cropper.js +28 -0
- package/dist/components/ui/misc/pwa-install-button.d.ts +2 -0
- package/dist/components/ui/misc/pwa-install-button.d.ts.map +1 -0
- package/dist/components/ui/misc/pwa-install-button.js +17 -0
- package/dist/components/ui/misc/rental-tile.d.ts +6 -0
- package/dist/components/ui/misc/rental-tile.d.ts.map +1 -0
- package/dist/components/ui/misc/rental-tile.js +56 -0
- package/dist/components/ui/misc/skeleton-extras.d.ts +32 -0
- package/dist/components/ui/misc/skeleton-extras.d.ts.map +1 -0
- package/dist/components/ui/misc/skeleton-extras.js +58 -0
- package/dist/components/ui/misc/tile.d.ts +4 -0
- package/dist/components/ui/misc/tile.d.ts.map +1 -0
- package/dist/components/ui/misc/tile.js +45 -0
- package/dist/components/ui/misc/whatsapp-help.d.ts +7 -0
- package/dist/components/ui/misc/whatsapp-help.d.ts.map +1 -0
- package/dist/components/ui/misc/whatsapp-help.js +6 -0
- package/dist/components/ui/motion.d.ts +14 -0
- package/dist/components/ui/motion.d.ts.map +1 -0
- package/dist/components/ui/motion.js +17 -0
- package/dist/components/ui/trippeaze/breadcrumb-trail.d.ts +10 -0
- package/dist/components/ui/trippeaze/breadcrumb-trail.d.ts.map +1 -0
- package/dist/components/ui/trippeaze/breadcrumb-trail.js +15 -0
- package/dist/components/ui/trippeaze/chip-tabs.d.ts +13 -0
- package/dist/components/ui/trippeaze/chip-tabs.d.ts.map +1 -0
- package/dist/components/ui/trippeaze/chip-tabs.js +6 -0
- package/dist/components/ui/trippeaze/page-shell.d.ts +22 -0
- package/dist/components/ui/trippeaze/page-shell.d.ts.map +1 -0
- package/dist/components/ui/trippeaze/page-shell.js +15 -0
- package/dist/components/ui/trippeaze/search-input.d.ts +5 -0
- package/dist/components/ui/trippeaze/search-input.d.ts.map +1 -0
- package/dist/components/ui/trippeaze/search-input.js +7 -0
- package/dist/components/user-dashboard/UserDashboardShellSidebar.d.ts +2 -0
- package/dist/components/user-dashboard/UserDashboardShellSidebar.d.ts.map +1 -0
- package/dist/components/user-dashboard/UserDashboardShellSidebar.js +17 -0
- package/dist/components/user-dashboard/UserSidebarNav.d.ts +2 -0
- package/dist/components/user-dashboard/UserSidebarNav.d.ts.map +1 -0
- package/dist/components/user-dashboard/UserSidebarNav.js +68 -0
- package/dist/dashboard/action-buttons.d.ts +17 -0
- package/dist/dashboard/action-buttons.d.ts.map +1 -0
- package/dist/dashboard/action-buttons.js +22 -0
- package/dist/dashboard/app-sidebar.d.ts +3 -0
- package/dist/dashboard/app-sidebar.d.ts.map +1 -0
- package/dist/dashboard/app-sidebar.js +61 -0
- package/dist/dashboard/card-header.d.ts +11 -0
- package/dist/dashboard/card-header.d.ts.map +1 -0
- package/dist/dashboard/card-header.js +7 -0
- package/dist/dashboard/dashboard-components.d.ts +13 -0
- package/dist/dashboard/dashboard-components.d.ts.map +1 -0
- package/dist/dashboard/dashboard-components.js +10 -0
- package/dist/dashboard/data-table.d.ts +24 -0
- package/dist/dashboard/data-table.d.ts.map +1 -0
- package/dist/dashboard/data-table.js +88 -0
- package/dist/dashboard/nav-main.d.ts +9 -0
- package/dist/dashboard/nav-main.d.ts.map +1 -0
- package/dist/dashboard/nav-main.js +9 -0
- package/dist/dashboard/nav-secondary.d.ts +10 -0
- package/dist/dashboard/nav-secondary.d.ts.map +1 -0
- package/dist/dashboard/nav-secondary.js +6 -0
- package/dist/dashboard/stats-card.d.ts +6 -0
- package/dist/dashboard/stats-card.d.ts.map +1 -0
- package/dist/dashboard/stats-card.js +5 -0
- package/dist/dashboard/table.d.ts +11 -0
- package/dist/dashboard/table.d.ts.map +1 -0
- package/dist/dashboard/table.js +21 -0
- package/dist/header/mobile-nav-item.d.ts +9 -0
- package/dist/header/mobile-nav-item.d.ts.map +1 -0
- package/dist/header/mobile-nav-item.js +6 -0
- package/dist/header/mobile-navbar.d.ts +5 -0
- package/dist/header/mobile-navbar.d.ts.map +1 -0
- package/dist/header/mobile-navbar.js +30 -0
- package/dist/header/nav-item.d.ts +10 -0
- package/dist/header/nav-item.d.ts.map +1 -0
- package/dist/header/nav-item.js +6 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +85 -0
- package/dist/layout/AppProviders.d.ts +5 -0
- package/dist/layout/AppProviders.d.ts.map +1 -0
- package/dist/layout/AppProviders.js +11 -0
- package/dist/layout/PublicShell.d.ts +5 -0
- package/dist/layout/PublicShell.d.ts.map +1 -0
- package/dist/layout/PublicShell.js +5 -0
- package/dist/main/footer.d.ts +6 -0
- package/dist/main/footer.d.ts.map +1 -0
- package/dist/main/footer.js +58 -0
- package/dist/main/navbar.d.ts +6 -0
- package/dist/main/navbar.d.ts.map +1 -0
- package/dist/main/navbar.js +130 -0
- package/dist/main/paginationBar.d.ts +5 -0
- package/dist/main/paginationBar.d.ts.map +1 -0
- package/dist/main/paginationBar.js +28 -0
- package/dist/main/portfolio/portfolioItem.d.ts +7 -0
- package/dist/main/portfolio/portfolioItem.d.ts.map +1 -0
- package/dist/main/portfolio/portfolioItem.js +7 -0
- package/dist/main/portfolio/portfolioPopup.d.ts +8 -0
- package/dist/main/portfolio/portfolioPopup.d.ts.map +1 -0
- package/dist/main/portfolio/portfolioPopup.js +71 -0
- package/dist/main/review-page.d.ts +14 -0
- package/dist/main/review-page.d.ts.map +1 -0
- package/dist/main/review-page.js +209 -0
- package/dist/misc/IosPwaNavBar.d.ts +8 -0
- package/dist/misc/IosPwaNavBar.d.ts.map +1 -0
- package/dist/misc/IosPwaNavBar.js +25 -0
- package/dist/misc/accordion.d.ts +7 -0
- package/dist/misc/accordion.d.ts.map +1 -0
- package/dist/misc/accordion.js +18 -0
- package/dist/misc/alert-dialog.d.ts +14 -0
- package/dist/misc/alert-dialog.d.ts.map +1 -0
- package/dist/misc/alert-dialog.js +39 -0
- package/dist/misc/alert.d.ts +9 -0
- package/dist/misc/alert.d.ts.map +1 -0
- package/dist/misc/alert.js +24 -0
- package/dist/misc/alertdialogclaude.d.ts +15 -0
- package/dist/misc/alertdialogclaude.d.ts.map +1 -0
- package/dist/misc/alertdialogclaude.js +151 -0
- package/dist/misc/avatar.d.ts +6 -0
- package/dist/misc/avatar.d.ts.map +1 -0
- package/dist/misc/avatar.js +14 -0
- package/dist/misc/badge.d.ts +9 -0
- package/dist/misc/badge.d.ts.map +1 -0
- package/dist/misc/badge.js +22 -0
- package/dist/misc/button.d.ts +13 -0
- package/dist/misc/button.d.ts.map +1 -0
- package/dist/misc/button.js +59 -0
- package/dist/misc/card.d.ts +9 -0
- package/dist/misc/card.d.ts.map +1 -0
- package/dist/misc/card.js +21 -0
- package/dist/misc/carousel.d.ts +20 -0
- package/dist/misc/carousel.d.ts.map +1 -0
- package/dist/misc/carousel.js +99 -0
- package/dist/misc/checkbox.d.ts +4 -0
- package/dist/misc/checkbox.d.ts.map +1 -0
- package/dist/misc/checkbox.js +9 -0
- package/dist/misc/command.d.ts +18 -0
- package/dist/misc/command.d.ts.map +1 -0
- package/dist/misc/command.js +34 -0
- package/dist/misc/datepicker.d.ts +15 -0
- package/dist/misc/datepicker.d.ts.map +1 -0
- package/dist/misc/datepicker.js +221 -0
- package/dist/misc/dialog.d.ts +13 -0
- package/dist/misc/dialog.d.ts.map +1 -0
- package/dist/misc/dialog.js +36 -0
- package/dist/misc/discount-strategy-editor.d.ts +22 -0
- package/dist/misc/discount-strategy-editor.d.ts.map +1 -0
- package/dist/misc/discount-strategy-editor.js +61 -0
- package/dist/misc/document-upload-button.d.ts +12 -0
- package/dist/misc/document-upload-button.d.ts.map +1 -0
- package/dist/misc/document-upload-button.js +27 -0
- package/dist/misc/dropdown-menu.d.ts +25 -0
- package/dist/misc/dropdown-menu.d.ts.map +1 -0
- package/dist/misc/dropdown-menu.js +51 -0
- package/dist/misc/empty-state.d.ts +10 -0
- package/dist/misc/empty-state.d.ts.map +1 -0
- package/dist/misc/empty-state.js +5 -0
- package/dist/misc/faq.d.ts +5 -0
- package/dist/misc/faq.d.ts.map +1 -0
- package/dist/misc/faq.js +5 -0
- package/dist/misc/file-preview.d.ts +9 -0
- package/dist/misc/file-preview.d.ts.map +1 -0
- package/dist/misc/file-preview.js +76 -0
- package/dist/misc/filter.d.ts +12 -0
- package/dist/misc/filter.d.ts.map +1 -0
- package/dist/misc/filter.js +44 -0
- package/dist/misc/filterBar.d.ts +39 -0
- package/dist/misc/filterBar.d.ts.map +1 -0
- package/dist/misc/filterBar.js +384 -0
- package/dist/misc/form.d.ts +25 -0
- package/dist/misc/form.d.ts.map +1 -0
- package/dist/misc/form.js +60 -0
- package/dist/misc/image-compressor.d.ts +29 -0
- package/dist/misc/image-compressor.d.ts.map +1 -0
- package/dist/misc/image-compressor.js +70 -0
- package/dist/misc/image-cropper.d.ts +10 -0
- package/dist/misc/image-cropper.d.ts.map +1 -0
- package/dist/misc/image-cropper.js +44 -0
- package/dist/misc/input.d.ts +7 -0
- package/dist/misc/input.d.ts.map +1 -0
- package/dist/misc/input.js +11 -0
- package/dist/misc/label.d.ts +4 -0
- package/dist/misc/label.d.ts.map +1 -0
- package/dist/misc/label.js +8 -0
- package/dist/misc/line-carousel.d.ts +9 -0
- package/dist/misc/line-carousel.d.ts.map +1 -0
- package/dist/misc/line-carousel.js +5 -0
- package/dist/misc/listing-wishlist-button.d.ts +13 -0
- package/dist/misc/listing-wishlist-button.d.ts.map +1 -0
- package/dist/misc/listing-wishlist-button.js +42 -0
- package/dist/misc/location/leafletMap.d.ts +8 -0
- package/dist/misc/location/leafletMap.d.ts.map +1 -0
- package/dist/misc/location/leafletMap.js +62 -0
- package/dist/misc/location/locationPicker.d.ts +5 -0
- package/dist/misc/location/locationPicker.d.ts.map +1 -0
- package/dist/misc/location/locationPicker.js +95 -0
- package/dist/misc/location-autocomplete.d.ts +28 -0
- package/dist/misc/location-autocomplete.d.ts.map +1 -0
- package/dist/misc/location-autocomplete.js +121 -0
- package/dist/misc/newsLetter.d.ts +3 -0
- package/dist/misc/newsLetter.d.ts.map +1 -0
- package/dist/misc/newsLetter.js +41 -0
- package/dist/misc/non-modal-multi-select.d.ts +21 -0
- package/dist/misc/non-modal-multi-select.d.ts.map +1 -0
- package/dist/misc/non-modal-multi-select.js +25 -0
- package/dist/misc/non-modal-select.d.ts +22 -0
- package/dist/misc/non-modal-select.d.ts.map +1 -0
- package/dist/misc/non-modal-select.js +23 -0
- package/dist/misc/notification.d.ts +7 -0
- package/dist/misc/notification.d.ts.map +1 -0
- package/dist/misc/notification.js +157 -0
- package/dist/misc/pagination.d.ts +15 -0
- package/dist/misc/pagination.d.ts.map +1 -0
- package/dist/misc/pagination.js +30 -0
- package/dist/misc/password-eye.d.ts +7 -0
- package/dist/misc/password-eye.d.ts.map +1 -0
- package/dist/misc/password-eye.js +7 -0
- package/dist/misc/popover.d.ts +7 -0
- package/dist/misc/popover.d.ts.map +1 -0
- package/dist/misc/popover.js +17 -0
- package/dist/misc/pricing-strategy-editor.d.ts +17 -0
- package/dist/misc/pricing-strategy-editor.d.ts.map +1 -0
- package/dist/misc/pricing-strategy-editor.js +80 -0
- package/dist/misc/progress.d.ts +4 -0
- package/dist/misc/progress.d.ts.map +1 -0
- package/dist/misc/progress.js +8 -0
- package/dist/misc/pwa-install-button.d.ts +9 -0
- package/dist/misc/pwa-install-button.d.ts.map +1 -0
- package/dist/misc/pwa-install-button.js +160 -0
- package/dist/misc/rental-tile.d.ts +6 -0
- package/dist/misc/rental-tile.d.ts.map +1 -0
- package/dist/misc/rental-tile.js +33 -0
- package/dist/misc/scroll-area.d.ts +5 -0
- package/dist/misc/scroll-area.d.ts.map +1 -0
- package/dist/misc/scroll-area.js +13 -0
- package/dist/misc/searchBar.d.ts +6 -0
- package/dist/misc/searchBar.d.ts.map +1 -0
- package/dist/misc/searchBar.js +89 -0
- package/dist/misc/searchBox.d.ts +13 -0
- package/dist/misc/searchBox.d.ts.map +1 -0
- package/dist/misc/searchBox.js +63 -0
- package/dist/misc/select.d.ts +13 -0
- package/dist/misc/select.d.ts.map +1 -0
- package/dist/misc/select.js +38 -0
- package/dist/misc/separator.d.ts +4 -0
- package/dist/misc/separator.d.ts.map +1 -0
- package/dist/misc/separator.js +8 -0
- package/dist/misc/share.d.ts +5 -0
- package/dist/misc/share.d.ts.map +1 -0
- package/dist/misc/share.js +157 -0
- package/dist/misc/sheet.d.ts +13 -0
- package/dist/misc/sheet.d.ts.map +1 -0
- package/dist/misc/sheet.js +40 -0
- package/dist/misc/sidebar.d.ts +70 -0
- package/dist/misc/sidebar.d.ts.map +1 -0
- package/dist/misc/sidebar.js +212 -0
- package/dist/misc/skeleton.d.ts +38 -0
- package/dist/misc/skeleton.d.ts.map +1 -0
- package/dist/misc/skeleton.js +43 -0
- package/dist/misc/slider.d.ts +5 -0
- package/dist/misc/slider.d.ts.map +1 -0
- package/dist/misc/slider.js +11 -0
- package/dist/misc/starRating.d.ts +4 -0
- package/dist/misc/starRating.d.ts.map +1 -0
- package/dist/misc/starRating.js +11 -0
- package/dist/misc/stateCard.d.ts +7 -0
- package/dist/misc/stateCard.d.ts.map +1 -0
- package/dist/misc/stateCard.js +21 -0
- package/dist/misc/step-progress.d.ts +16 -0
- package/dist/misc/step-progress.d.ts.map +1 -0
- package/dist/misc/step-progress.js +40 -0
- package/dist/misc/switch.d.ts +5 -0
- package/dist/misc/switch.d.ts.map +1 -0
- package/dist/misc/switch.js +8 -0
- package/dist/misc/tabs.d.ts +8 -0
- package/dist/misc/tabs.d.ts.map +1 -0
- package/dist/misc/tabs.js +17 -0
- package/dist/misc/tag-filter-input.d.ts +16 -0
- package/dist/misc/tag-filter-input.d.ts.map +1 -0
- package/dist/misc/tag-filter-input.js +26 -0
- package/dist/misc/textarea.d.ts +4 -0
- package/dist/misc/textarea.d.ts.map +1 -0
- package/dist/misc/textarea.js +6 -0
- package/dist/misc/tile.d.ts +4 -0
- package/dist/misc/tile.d.ts.map +1 -0
- package/dist/misc/tile.js +45 -0
- package/dist/misc/time-select.d.ts +14 -0
- package/dist/misc/time-select.d.ts.map +1 -0
- package/dist/misc/time-select.js +13 -0
- package/dist/misc/tooltip.d.ts +8 -0
- package/dist/misc/tooltip.d.ts.map +1 -0
- package/dist/misc/tooltip.js +17 -0
- package/dist/misc/whatsapp-help.d.ts +9 -0
- package/dist/misc/whatsapp-help.d.ts.map +1 -0
- package/dist/misc/whatsapp-help.js +13 -0
- package/dist/misc/wizard-footer.d.ts +18 -0
- package/dist/misc/wizard-footer.d.ts.map +1 -0
- package/dist/misc/wizard-footer.js +11 -0
- package/dist/profile/socialLink.d.ts +10 -0
- package/dist/profile/socialLink.d.ts.map +1 -0
- package/dist/profile/socialLink.js +66 -0
- package/dist/utils/permissions.d.ts +7 -0
- package/dist/utils/permissions.d.ts.map +1 -0
- package/dist/utils/permissions.js +38 -0
- package/package.json +93 -0
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { chatActorKey, isSameChatActor, } from "@myrjfa/state/dist/lib/models/chat";
|
|
4
|
+
import { Check, CheckCheck, Reply, MoreHorizontal, Pencil as PencilIcon, Trash2, PlusCircleIcon, Smile, EyeIcon, Copy, ExternalLink, Phone, MessageCircle, Pin, Star, Flag, ShieldX, FileText } from "lucide-react";
|
|
5
|
+
import dynamic from "next/dynamic";
|
|
6
|
+
import { Avatar, AvatarFallback, AvatarImage } from "../misc/avatar";
|
|
7
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "../misc/dropdown-menu";
|
|
8
|
+
import { Button } from "../misc/button";
|
|
9
|
+
import { useEffect, useState, useRef, useCallback, useMemo } from "react";
|
|
10
|
+
import EmojiPicker from 'emoji-picker-react';
|
|
11
|
+
import { chatApi } from "@myrjfa/state/dist/lib/actions/chat";
|
|
12
|
+
import { EditPollDialog } from "./dialogs/EditPollDialog";
|
|
13
|
+
import { PollVotersDialog } from "./dialogs/PollVotersDialog";
|
|
14
|
+
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "../misc/dialog";
|
|
15
|
+
const MapPreview = dynamic(() => import("../components/location/MapPreview"), { ssr: false });
|
|
16
|
+
function AudioMessagePlayer({ src, messageId }) {
|
|
17
|
+
const audioRef = useRef(null);
|
|
18
|
+
const [speed, setSpeed] = useState(1);
|
|
19
|
+
const storageKey = `trippeaze:voice-position:${messageId}`;
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (audioRef.current)
|
|
22
|
+
audioRef.current.playbackRate = speed;
|
|
23
|
+
}, [speed]);
|
|
24
|
+
return (_jsxs("div", { className: "flex min-w-56 items-center gap-2 rounded-lg bg-black/5 p-2 dark:bg-white/5", children: [_jsx("audio", { ref: audioRef, src: src, controls: true, className: "h-9 min-w-0 flex-1", onLoadedMetadata: (event) => {
|
|
25
|
+
const saved = Number(localStorage.getItem(storageKey) || 0);
|
|
26
|
+
if (saved > 0 && saved < event.currentTarget.duration)
|
|
27
|
+
event.currentTarget.currentTime = saved;
|
|
28
|
+
}, onTimeUpdate: (event) => localStorage.setItem(storageKey, String(event.currentTarget.currentTime)), onEnded: () => localStorage.removeItem(storageKey) }), _jsxs("button", { type: "button", className: "rounded-full bg-white/70 px-2 py-1 text-[11px] font-semibold text-slate-700 shadow-sm", onClick: () => setSpeed((current) => current === 1 ? 1.5 : current === 1.5 ? 2 : 1), "aria-label": "Change voice-note playback speed", children: [speed, "\u00D7"] })] }));
|
|
29
|
+
}
|
|
30
|
+
function coordinatesFromMapUrl(value) {
|
|
31
|
+
try {
|
|
32
|
+
const url = new URL(value);
|
|
33
|
+
if (!/(^|\.)google\.[^/]+$/i.test(url.hostname) && !/googleusercontent\.com$/i.test(url.hostname))
|
|
34
|
+
return null;
|
|
35
|
+
const coordinates = url.searchParams.get("q") || url.searchParams.get("query") || url.searchParams.get("ll") || "";
|
|
36
|
+
const match = coordinates.match(/^\s*(-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)\s*$/);
|
|
37
|
+
if (!match)
|
|
38
|
+
return null;
|
|
39
|
+
const latitude = Number(match[1]);
|
|
40
|
+
const longitude = Number(match[2]);
|
|
41
|
+
return Number.isFinite(latitude) && Number.isFinite(longitude) ? { latitude, longitude } : null;
|
|
42
|
+
}
|
|
43
|
+
catch (_a) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function browserUrl(value) {
|
|
48
|
+
return /^https?:\/\//i.test(value) ? value : `https://${value}`;
|
|
49
|
+
}
|
|
50
|
+
const QUICK_REACTIONS = [
|
|
51
|
+
{ emoji: "❤️", label: "love" },
|
|
52
|
+
{ emoji: "👍", label: "like" },
|
|
53
|
+
{ emoji: "👎", label: "dislike" },
|
|
54
|
+
{ emoji: "✅", label: "check" },
|
|
55
|
+
{ emoji: "😠", label: "angry" },
|
|
56
|
+
{ emoji: "😢", label: "sad" },
|
|
57
|
+
];
|
|
58
|
+
export function MessageBubble({ message, participants, currentUserId, currentActorModel, showSender, senderProfilePic, onEdit, onDelete, onReply, onReactionAdd, onReactionRemove, onScrollToReply, onVote, onEditPoll, onStar, onPin, isGroupAdmin, onModerate, onReport, }) {
|
|
59
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
60
|
+
const [showQuickReactions, setShowQuickReactions] = useState(false);
|
|
61
|
+
const [showReactionPicker, setShowReactionPicker] = useState(false);
|
|
62
|
+
const [showActionMenu, setShowActionMenu] = useState(false);
|
|
63
|
+
const [showMobileMenu, setShowMobileMenu] = useState(false);
|
|
64
|
+
const [poll, setPoll] = useState(null);
|
|
65
|
+
const [showPollVoters, setShowPollVoters] = useState(false);
|
|
66
|
+
const [showPollEditor, setShowPollEditor] = useState(false);
|
|
67
|
+
const [selectedPhone, setSelectedPhone] = useState(null);
|
|
68
|
+
const [phoneMatches, setPhoneMatches] = useState([]);
|
|
69
|
+
const [isSearchingPhone, setIsSearchingPhone] = useState(false);
|
|
70
|
+
const reactionRef = useRef(null);
|
|
71
|
+
const actionRef = useRef(null);
|
|
72
|
+
const mobileMenuRef = useRef(null);
|
|
73
|
+
const mobilePopupRef = useRef(null);
|
|
74
|
+
const messageBubbleRef = useRef(null);
|
|
75
|
+
const currentActor = { actorId: currentUserId, actorModel: currentActorModel };
|
|
76
|
+
const senderActor = { actorId: message.senderId, actorModel: message.senderModel };
|
|
77
|
+
const isOwn = isSameChatActor(senderActor, currentActor);
|
|
78
|
+
const copyText = async (value) => {
|
|
79
|
+
try {
|
|
80
|
+
await navigator.clipboard.writeText(value);
|
|
81
|
+
}
|
|
82
|
+
catch ( /* Clipboard access can be unavailable in embedded browsers. */_a) { /* Clipboard access can be unavailable in embedded browsers. */ }
|
|
83
|
+
};
|
|
84
|
+
const participantLabel = (actorId, actorModel) => {
|
|
85
|
+
const participant = participants.find((item) => actorModel
|
|
86
|
+
? isSameChatActor(item, { actorId, actorModel })
|
|
87
|
+
: item.actorId === actorId);
|
|
88
|
+
return (participant === null || participant === void 0 ? void 0 : participant.displayName) || (participant === null || participant === void 0 ? void 0 : participant.username) || "Trippeaze member";
|
|
89
|
+
};
|
|
90
|
+
const recipientKeys = participants
|
|
91
|
+
.filter((participant) => !isSameChatActor(participant, senderActor))
|
|
92
|
+
.map(chatActorKey);
|
|
93
|
+
const hasReceiptsFromEveryRecipient = (receipts = []) => {
|
|
94
|
+
const receiptKeys = new Set(receipts.map(chatActorKey));
|
|
95
|
+
return recipientKeys.length > 0 &&
|
|
96
|
+
recipientKeys.every((recipientKey) => receiptKeys.has(recipientKey));
|
|
97
|
+
};
|
|
98
|
+
// In a group, blue means every other participant has read the message.
|
|
99
|
+
const hasBeenRead = isOwn && hasReceiptsFromEveryRecipient(message.readBy);
|
|
100
|
+
const hasBeenDelivered = isOwn && hasReceiptsFromEveryRecipient(message.deliveredTo || []);
|
|
101
|
+
const canEdit = isOwn && !message.isDeleted && Date.now() - new Date(message.createdAt).getTime() <= 60 * 60 * 1000;
|
|
102
|
+
const openEditor = () => {
|
|
103
|
+
if (message.type === "poll" && poll)
|
|
104
|
+
setShowPollEditor(true);
|
|
105
|
+
else
|
|
106
|
+
onEdit === null || onEdit === void 0 ? void 0 : onEdit(message);
|
|
107
|
+
};
|
|
108
|
+
useEffect(() => {
|
|
109
|
+
if (!selectedPhone) {
|
|
110
|
+
setPhoneMatches([]);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
let active = true;
|
|
114
|
+
setIsSearchingPhone(true);
|
|
115
|
+
void chatApi.searchParticipants(selectedPhone).then((results) => {
|
|
116
|
+
if (active)
|
|
117
|
+
setPhoneMatches(results);
|
|
118
|
+
}).catch(() => {
|
|
119
|
+
if (active)
|
|
120
|
+
setPhoneMatches([]);
|
|
121
|
+
}).finally(() => {
|
|
122
|
+
if (active)
|
|
123
|
+
setIsSearchingPhone(false);
|
|
124
|
+
});
|
|
125
|
+
return () => { active = false; };
|
|
126
|
+
}, [selectedPhone]);
|
|
127
|
+
useEffect(() => {
|
|
128
|
+
const pollId = message.content.referenceId;
|
|
129
|
+
if (message.type === "poll" && pollId) {
|
|
130
|
+
const fetchPoll = async () => {
|
|
131
|
+
const nextPoll = await chatApi.getPollById(pollId);
|
|
132
|
+
setPoll((current) => (current === null || current === void 0 ? void 0 : current._id) === (nextPoll === null || nextPoll === void 0 ? void 0 : nextPoll._id) && (current === null || current === void 0 ? void 0 : current.updatedAt) === (nextPoll === null || nextPoll === void 0 ? void 0 : nextPoll.updatedAt) ? current : nextPoll);
|
|
133
|
+
};
|
|
134
|
+
void fetchPoll();
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
setPoll(null);
|
|
138
|
+
}, [message.type, message.content.referenceId]);
|
|
139
|
+
// Close reaction picker when clicking outside
|
|
140
|
+
useEffect(() => {
|
|
141
|
+
const handleClickOutside = (event) => {
|
|
142
|
+
if (reactionRef.current && !reactionRef.current.contains(event.target)) {
|
|
143
|
+
setShowQuickReactions(false);
|
|
144
|
+
setShowReactionPicker(false);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
if (showQuickReactions || showReactionPicker) {
|
|
148
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
149
|
+
return () => {
|
|
150
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}, [showQuickReactions, showReactionPicker]);
|
|
154
|
+
// Close mobile menu when clicking outside
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
const handleClickOutside = (event) => {
|
|
157
|
+
if (mobileMenuRef.current && !mobileMenuRef.current.contains(event.target)) {
|
|
158
|
+
setShowMobileMenu(false);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
if (showMobileMenu) {
|
|
162
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
163
|
+
return () => {
|
|
164
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}, [showMobileMenu]);
|
|
168
|
+
// Position popup to stay within viewport and over message
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
if (showMobileMenu && mobilePopupRef.current && messageBubbleRef.current) {
|
|
171
|
+
const popup = mobilePopupRef.current;
|
|
172
|
+
const messageBubble = messageBubbleRef.current;
|
|
173
|
+
const bubbleRect = messageBubble.getBoundingClientRect();
|
|
174
|
+
const popupRect = popup.getBoundingClientRect();
|
|
175
|
+
const viewportHeight = window.innerHeight;
|
|
176
|
+
const viewportWidth = window.innerWidth;
|
|
177
|
+
const padding = 8;
|
|
178
|
+
// Reset styles
|
|
179
|
+
popup.style.top = "auto";
|
|
180
|
+
popup.style.bottom = "auto";
|
|
181
|
+
popup.style.left = "auto";
|
|
182
|
+
popup.style.right = "auto";
|
|
183
|
+
popup.style.transform = "none";
|
|
184
|
+
// Position horizontally - prefer the side with more space
|
|
185
|
+
if (isOwn) {
|
|
186
|
+
// Message is on right, try to position popup on left of message
|
|
187
|
+
const spaceOnLeft = bubbleRect.left;
|
|
188
|
+
const popupWidth = 256; // w-64 = 16rem = 256px
|
|
189
|
+
if (spaceOnLeft > popupWidth + padding) {
|
|
190
|
+
// Enough space on left
|
|
191
|
+
popup.style.right = "100%";
|
|
192
|
+
popup.style.marginRight = "8px";
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
// Not enough space, position on right but keep within viewport
|
|
196
|
+
popup.style.left = "100%";
|
|
197
|
+
popup.style.marginLeft = "8px";
|
|
198
|
+
// If it goes out of right edge, adjust
|
|
199
|
+
const rect = popup.getBoundingClientRect();
|
|
200
|
+
if (rect.right > viewportWidth - padding) {
|
|
201
|
+
popup.style.left = "auto";
|
|
202
|
+
popup.style.right = "0";
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
// Message is on left, try to position popup on right of message
|
|
208
|
+
const spaceOnRight = viewportWidth - bubbleRect.right;
|
|
209
|
+
const popupWidth = 256; // w-64 = 16rem = 256px
|
|
210
|
+
if (spaceOnRight > popupWidth + padding) {
|
|
211
|
+
// Enough space on right
|
|
212
|
+
popup.style.left = "100%";
|
|
213
|
+
popup.style.marginLeft = "8px";
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
// Not enough space, position on left but keep within viewport
|
|
217
|
+
popup.style.right = "100%";
|
|
218
|
+
popup.style.marginRight = "8px";
|
|
219
|
+
// If it goes out of left edge, adjust
|
|
220
|
+
const rect = popup.getBoundingClientRect();
|
|
221
|
+
if (rect.left < padding) {
|
|
222
|
+
popup.style.right = "auto";
|
|
223
|
+
popup.style.left = "0";
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Position vertically - center on message
|
|
228
|
+
popup.style.top = "50%";
|
|
229
|
+
popup.style.transform = "translateY(-50%)";
|
|
230
|
+
// Make sure it doesn't go out of bottom
|
|
231
|
+
setTimeout(() => {
|
|
232
|
+
const rect = popup.getBoundingClientRect();
|
|
233
|
+
if (rect.bottom > viewportHeight - padding) {
|
|
234
|
+
popup.style.top = "auto";
|
|
235
|
+
popup.style.bottom = "0";
|
|
236
|
+
popup.style.transform = "translateY(0)";
|
|
237
|
+
}
|
|
238
|
+
else if (rect.top < padding) {
|
|
239
|
+
popup.style.top = "0";
|
|
240
|
+
popup.style.bottom = "auto";
|
|
241
|
+
popup.style.transform = "translateY(0)";
|
|
242
|
+
}
|
|
243
|
+
}, 0);
|
|
244
|
+
}
|
|
245
|
+
}, [showMobileMenu, isOwn]);
|
|
246
|
+
if (message.type === "system" || message.type === "milestone" || message.type === "expense") {
|
|
247
|
+
return (_jsx("div", { className: "flex justify-center my-3", children: _jsx("div", { className: "bg-gray-100 dark:bg-gray-800 text-gray-500 dark:text-gray-400 text-xs px-4 py-1.5 rounded-full max-w-xs text-center shadow-sm", children: message.content.text }) }));
|
|
248
|
+
}
|
|
249
|
+
const time = new Date(message.createdAt).toLocaleTimeString([], {
|
|
250
|
+
hour: "2-digit",
|
|
251
|
+
minute: "2-digit",
|
|
252
|
+
});
|
|
253
|
+
const createMentionRegex = useCallback((participants) => {
|
|
254
|
+
const usernames = participants
|
|
255
|
+
.map((participant) => participant.username)
|
|
256
|
+
.filter((username) => Boolean(username));
|
|
257
|
+
// Escape special regex characters in usernames to ensure they are matched literally
|
|
258
|
+
const escapedUsernames = usernames.map(username => username.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
|
|
259
|
+
// Sort by length descending to match longer names first, to prevent partial matches
|
|
260
|
+
escapedUsernames.sort((a, b) => b.length - a.length);
|
|
261
|
+
if (escapedUsernames.length === 0) {
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
// Match '@' followed by an exact username, then a non-word character or end of string.
|
|
265
|
+
// The `(?=\\s|$|[,.!?;:])` part ensures the mention is followed by a space, end of string, or common punctuation.
|
|
266
|
+
// This regex is designed to be as specific as possible to avoid false positives while allowing spaces/symbols.
|
|
267
|
+
const pattern = `@(${escapedUsernames.join('|')})(?=\\s|$|[,.!?;:])`;
|
|
268
|
+
return new RegExp(pattern, 'gi');
|
|
269
|
+
}, []);
|
|
270
|
+
const mentionRegex = useMemo(() => createMentionRegex(participants), [participants, createMentionRegex]);
|
|
271
|
+
const renderTextWithLinks = useCallback((text) => {
|
|
272
|
+
const elements = [];
|
|
273
|
+
let lastIndex = 0;
|
|
274
|
+
// Store all matches with their type and original value
|
|
275
|
+
const allMatches = [];
|
|
276
|
+
// Define regexes inside useCallback to avoid re-creation on every render if they don't depend on props
|
|
277
|
+
// Match the browser-style domains users expect to open from an address bar.
|
|
278
|
+
const linkRegex = /https?:\/\/[^\s<>()]+|(?<![@\w.-])(?:www\.)?(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z]{2,}(?:[/?#][^\s<>()]*)?/gi;
|
|
279
|
+
const emailRegex = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/gi; // Added 'i' flag
|
|
280
|
+
// Treat 8–13 digit sequences as phone numbers even when users insert spaces or dashes.
|
|
281
|
+
const phoneRegex = /(?<!\d)(\+?\d(?:[\s-]?\d){7,12})(?!\d)/g;
|
|
282
|
+
// Find links
|
|
283
|
+
for (const match of text.matchAll(linkRegex)) {
|
|
284
|
+
if (match.index !== undefined) {
|
|
285
|
+
allMatches.push({ index: match.index, length: match[0].length, type: "link", value: match[0] });
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// Find emails
|
|
289
|
+
for (const match of text.matchAll(emailRegex)) {
|
|
290
|
+
if (match.index !== undefined) {
|
|
291
|
+
allMatches.push({ index: match.index, length: match[0].length, type: "email", value: match[0] });
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// Find phones
|
|
295
|
+
for (const match of text.matchAll(phoneRegex)) {
|
|
296
|
+
if (match.index !== undefined) {
|
|
297
|
+
allMatches.push({ index: match.index, length: match[0].length, type: "phone", value: match[0] });
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Find mentions
|
|
301
|
+
if (mentionRegex) {
|
|
302
|
+
for (const match of text.matchAll(mentionRegex)) {
|
|
303
|
+
if (match.index !== undefined) {
|
|
304
|
+
allMatches.push({ index: match.index, length: match[0].length, type: "mention", value: match[0] });
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// Sort all matches by their starting index
|
|
309
|
+
allMatches.sort((a, b) => a.index - b.index);
|
|
310
|
+
for (const match of allMatches) {
|
|
311
|
+
// A number inside a URL/email must remain part of that higher-priority match.
|
|
312
|
+
if (match.index < lastIndex)
|
|
313
|
+
continue;
|
|
314
|
+
// Add preceding text
|
|
315
|
+
if (match.index > lastIndex) {
|
|
316
|
+
elements.push(text.substring(lastIndex, match.index));
|
|
317
|
+
}
|
|
318
|
+
// Add the matched element
|
|
319
|
+
if (match.type === "link") {
|
|
320
|
+
const url = browserUrl(match.value);
|
|
321
|
+
elements.push(_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "underline hover:opacity-80 break-all text-indigo-500", children: match.value }) }), _jsxs(DropdownMenuContent, { align: "start", className: "w-36", children: [_jsxs(DropdownMenuItem, { onClick: () => window.open(url, "_blank", "noopener,noreferrer"), children: [_jsx(ExternalLink, { className: "mr-2 h-4 w-4" }), "Visit URL"] }), _jsxs(DropdownMenuItem, { onClick: () => void copyText(url), children: [_jsx(Copy, { className: "mr-2 h-4 w-4" }), "Copy URL"] })] })] }, `link-${match.index}`));
|
|
322
|
+
}
|
|
323
|
+
else if (match.type === "email") {
|
|
324
|
+
elements.push(_jsx("a", { href: `mailto:${match.value}`, className: "underline hover:opacity-80 break-all text-indigo-500", children: match.value }, `email-${match.index}`));
|
|
325
|
+
}
|
|
326
|
+
else if (match.type === "phone") {
|
|
327
|
+
const phone = match.value.replace(/[\s-]/g, "");
|
|
328
|
+
elements.push(_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "underline hover:opacity-80 break-all text-indigo-200", children: match.value }) }), _jsxs(DropdownMenuContent, { align: "start", className: "w-36", children: [_jsxs(DropdownMenuItem, { onClick: () => { window.location.href = `tel:${phone}`; }, children: [_jsx(Phone, { className: "mr-2 h-4 w-4" }), "Call"] }), _jsxs(DropdownMenuItem, { onClick: () => setSelectedPhone(phone), children: [_jsx(MessageCircle, { className: "mr-2 h-4 w-4" }), "Message"] }), _jsxs(DropdownMenuItem, { onClick: () => void copyText(phone), children: [_jsx(Copy, { className: "mr-2 h-4 w-4" }), "Copy"] })] })] }, `phone-${match.index}`));
|
|
329
|
+
}
|
|
330
|
+
else if (match.type === "mention") {
|
|
331
|
+
// The regex already ensures it's a valid participant userId
|
|
332
|
+
elements.push(_jsx("a", { href: `/chat?u=${match.value.substring(1)}`, className: "underline hover:opacity-80 break-all text-indigo-200", children: match.value }, `mention-${match.index}`));
|
|
333
|
+
}
|
|
334
|
+
lastIndex = match.index + match.length;
|
|
335
|
+
}
|
|
336
|
+
// Add any remaining text
|
|
337
|
+
if (lastIndex < text.length) {
|
|
338
|
+
elements.push(text.substring(lastIndex));
|
|
339
|
+
}
|
|
340
|
+
return elements;
|
|
341
|
+
}, [mentionRegex]);
|
|
342
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { id: `message-${message._id}`, className: `flex mb-2 ${isOwn ? "justify-end" : "justify-start"}`, children: [!isOwn && (_jsxs(Avatar, { className: "w-8 h-8 mr-2 mt-1 flex-shrink-0", children: [_jsx(AvatarImage, { src: senderProfilePic }), _jsx(AvatarFallback, { children: participantLabel(message.senderId, message.senderModel).charAt(0).toUpperCase() })] })), _jsxs("div", { className: `flex group items-end gap-1 ${isOwn ? "flex-row-reverse" : "flex-row"}`, children: [_jsxs("div", { className: `max-w-xs sm:max-w-md md:max-w-lg flex flex-col ${isOwn ? "items-end" : "items-start"}`, ref: messageBubbleRef, children: [showSender && !isOwn && (_jsx("span", { className: "text-xs font-medium text-teal-600 dark:text-teal-400 ml-1 mb-0.5", children: participantLabel(message.senderId, message.senderModel) })), message.replyTo && (_jsxs(Button, { onClick: () => onScrollToReply === null || onScrollToReply === void 0 ? void 0 : onScrollToReply(message.replyTo._id), className: `text-xs mb-2 px-3 py-2 rounded-lg border-l-2 max-w-full text-left hover:opacity-80 transition-opacity ${isOwn
|
|
343
|
+
? "bg-opacity-50 bg-teal-600/40 border-teal-300 text-teal-100"
|
|
344
|
+
: "bg-gray-200 dark:bg-gray-700 border-gray-400 dark:border-gray-600 text-gray-600 dark:text-gray-300"}`, children: [_jsxs("div", { className: "font-semibold text-xs truncate", children: ["\u21B3 ", participantLabel((_a = message.replyTo) === null || _a === void 0 ? void 0 : _a.senderId, (_b = message.replyTo) === null || _b === void 0 ? void 0 : _b.senderModel)] }), _jsx("div", { className: "truncate text-gray-500 dark:text-gray-400 text-xs", children: ((_e = (_d = (_c = message.replyTo) === null || _c === void 0 ? void 0 : _c.content) === null || _d === void 0 ? void 0 : _d.text) === null || _e === void 0 ? void 0 : _e.substring(0, 50)) || "Media/Attachment" })] })), _jsxs("div", { className: `px-4 py-2.5 rounded-2xl relative shadow-sm backdrop-blur-md
|
|
345
|
+
${isOwn
|
|
346
|
+
? "bg-gradient-to-r from-teal-500/70 to-teal-600/70 text-white rounded-br-md border border-teal-400/30"
|
|
347
|
+
: "bg-white dark:bg-gray-800 text-gray-900 dark:text-white rounded-bl-md border border-gray-100 dark:border-gray-700"}
|
|
348
|
+
${message.isDeleted ? "opacity-60 italic" : ""}`, onContextMenu: (event) => {
|
|
349
|
+
event.preventDefault();
|
|
350
|
+
setShowActionMenu(true);
|
|
351
|
+
}, children: [message.content.media && message.content.media.length > 0 && (_jsx("div", { className: "mb-2 space-y-1", children: message.content.media.map((m, i) => (_jsx("div", { children: m.mimeType.startsWith("image/") ? (_jsx("img", { src: m.url, alt: m.name, className: "rounded-lg max-w-full max-h-64 object-cover" })) : m.mimeType.startsWith("audio/") ? (_jsx(AudioMessagePlayer, { src: m.url, messageId: `${message._id}:${i}` })) : m.mimeType.startsWith("video/") ? (_jsx("video", { src: m.url, poster: m.thumbnailUrl, controls: true, preload: "metadata", className: "max-h-72 w-full rounded-lg bg-black" })) : (_jsxs("a", { href: m.url, target: "_blank", rel: "noopener noreferrer", className: "flex items-center gap-3 rounded-lg border border-black/10 bg-white/80 p-3 text-sm text-slate-800 shadow-sm dark:bg-slate-900/70 dark:text-white", children: [_jsx(FileText, { className: "h-8 w-8 shrink-0 text-purple-500" }), _jsxs("span", { className: "min-w-0 truncate", children: ["\uD83D\uDCCE ", m.name] })] })) }, i))) })), _jsx("p", { className: "text-[15px] leading-relaxed whitespace-pre-wrap break-words", children: renderTextWithLinks((_f = message.content.text) !== null && _f !== void 0 ? _f : "") }), ((_g = message.content.linkPreview) === null || _g === void 0 ? void 0 : _g.url) && (() => {
|
|
352
|
+
const preview = message.content.linkPreview;
|
|
353
|
+
const mapCoordinates = coordinatesFromMapUrl(preview.url);
|
|
354
|
+
return (_jsxs("a", { href: preview.url, target: "_blank", rel: "noopener noreferrer", className: "mt-3 block overflow-hidden rounded-xl border border-black/10 bg-white/90 text-slate-900 shadow-sm transition-opacity hover:opacity-90 dark:border-white/10 dark:bg-slate-900/80 dark:text-white", children: [mapCoordinates ? (_jsx("div", { className: "h-28 w-full overflow-hidden bg-slate-100", children: _jsx(MapPreview, { latitude: mapCoordinates.latitude, longitude: mapCoordinates.longitude }) })) : preview.image ? (_jsx("img", { src: preview.image, alt: "", className: "h-32 w-full object-cover", onError: (event) => { event.currentTarget.style.display = "none"; } })) : null, _jsxs("div", { className: "p-3", children: [_jsx("p", { className: "text-[10px] font-semibold uppercase tracking-wider text-slate-500", children: preview.siteName || new URL(preview.url).hostname }), _jsx("p", { className: "mt-1 line-clamp-2 text-sm font-semibold", children: preview.title || preview.url }), preview.description && _jsx("p", { className: "mt-1 line-clamp-2 text-xs text-slate-600 dark:text-slate-300", children: preview.description })] })] }));
|
|
355
|
+
})(), poll && (_jsxs("div", { className: "mt-3 space-y-2 min-w-[200px]", children: [poll.options.map((opt, i) => {
|
|
356
|
+
const votes = poll.votes || [];
|
|
357
|
+
const optionVotes = votes.filter((v) => v.optionIndex === i);
|
|
358
|
+
const hasVoted = optionVotes.some((vote) => isSameChatActor(vote, currentActor));
|
|
359
|
+
const percentage = votes.length > 0 ? (optionVotes.length / votes.length) * 100 : 0;
|
|
360
|
+
return (_jsxs("div", { className: `relative overflow-hidden rounded-lg border p-2 cursor-pointer transition-all active:scale-[0.98] ${hasVoted
|
|
361
|
+
? "border-indigo-500 bg-indigo-50/50 dark:bg-indigo-900/30"
|
|
362
|
+
: "border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600 bg-indigo-50/50 dark:bg-indigo-900/30"}
|
|
363
|
+
}`, onClick: async () => {
|
|
364
|
+
const updatedPoll = await (onVote === null || onVote === void 0 ? void 0 : onVote(poll._id, i));
|
|
365
|
+
if (updatedPoll)
|
|
366
|
+
setPoll(updatedPoll);
|
|
367
|
+
}, children: [_jsx("div", { className: "absolute inset-0 bg-indigo-400/10 pointer-events-none transition-all duration-500", style: { width: `${percentage}%` } }), _jsxs("div", { className: "relative flex justify-between items-center text-sm", children: [_jsx("span", { className: `${hasVoted ? "font-semibold text-indigo-700 dark:text-indigo-300" : "text-gray-700 dark:text-gray-200"}`, children: opt.text }), _jsx("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: optionVotes.length > 0 && `${optionVotes.length} (${Math.round(percentage)}%)` })] })] }, i));
|
|
368
|
+
}), _jsxs("div", { className: "text-[10px] text-gray-400 dark:text-gray-500 mt-1", children: [((_h = poll.votes) === null || _h === void 0 ? void 0 : _h.length) || 0, " votes \u2022 ", poll.allowMultiple ? "Multiple choice" : "Single choice"] })] })), _jsxs("div", { className: `flex items-center justify-end gap-1 mt-1 ${isOwn ? "text-teal-200" : "text-gray-400"}`, children: [message.isEdited && (_jsx(PencilIcon, { className: "w-3 h-3" })), _jsx("span", { className: "text-[10px]", children: time }), isOwn && (hasBeenRead ? (_jsx(CheckCheck, { className: "w-4 h-4 text-sky-300" })) : hasBeenDelivered ? (_jsx(CheckCheck, { className: "w-4 h-4 text-slate-200" })) : (_jsx(Check, { className: "w-4 h-4" })))] })] }), message.reactions && message.reactions.length > 0 && (_jsx("div", { className: `flex gap-1 mt-2 ${isOwn ? "justify-end" : "justify-start"} px-2`, children: Object.entries(message.reactions.reduce((acc, r) => {
|
|
369
|
+
acc[r.emoji] = (acc[r.emoji] || 0) + 1;
|
|
370
|
+
return acc;
|
|
371
|
+
}, {})).map(([emoji, count]) => (_jsxs("span", { className: "bg-gray-100 dark:bg-gray-700 rounded-full px-2 py-0.5 text-xs shadow-sm hover:bg-gray-200 dark:hover:bg-gray-600 cursor-pointer transition-colors", onClick: () => {
|
|
372
|
+
if (message.reactions.find((reaction) => reaction.emoji === emoji &&
|
|
373
|
+
isSameChatActor(reaction, currentActor))) {
|
|
374
|
+
onReactionRemove === null || onReactionRemove === void 0 ? void 0 : onReactionRemove(message._id);
|
|
375
|
+
}
|
|
376
|
+
}, children: [emoji, " ", count > 1 && count] }, emoji))) }))] }), !message.isDeleted && (_jsxs(_Fragment, { children: [_jsxs("div", { className: `hidden md:flex gap-1 items-center flex-shrink-0 opacity-0 group-hover:opacity-100 transition-opacity my-auto`, children: [_jsxs("div", { className: "relative", ref: reactionRef, children: [_jsx("button", { onClick: () => {
|
|
377
|
+
setShowQuickReactions(!showQuickReactions);
|
|
378
|
+
setShowReactionPicker(false);
|
|
379
|
+
}, className: "flex items-center justify-center w-8 h-8 rounded-full bg-white dark:bg-gray-700 border border-gray-200 dark:border-gray-600 text-gray-600 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-600 transition-colors shadow-md", title: "Add reaction", children: _jsx(Smile, { className: "w-4 h-4" }) }), (showQuickReactions || showReactionPicker) && (_jsx("div", { className: `absolute z-50 bottom-10 ${isOwn ? "right-0" : "left-0"} whitespace-nowrap`, children: _jsxs("div", { className: "bg-white dark:bg-gray-800 rounded-xl shadow-xl border border-gray-200 dark:border-gray-700 p-2", children: [showQuickReactions && (_jsxs("div", { className: "flex gap-1 flex-wrap w-max", children: [QUICK_REACTIONS.map((reaction) => (_jsx("button", { onClick: () => {
|
|
380
|
+
onReactionAdd === null || onReactionAdd === void 0 ? void 0 : onReactionAdd(message._id, reaction.emoji);
|
|
381
|
+
setShowQuickReactions(false);
|
|
382
|
+
}, className: "text-xl hover:scale-125 transition-transform hover:bg-gray-100 dark:hover:bg-gray-700 p-2 rounded-lg", title: reaction.label, children: reaction.emoji }, reaction.label))), _jsx("button", { onClick: () => {
|
|
383
|
+
setShowQuickReactions(false);
|
|
384
|
+
setShowReactionPicker(true);
|
|
385
|
+
}, className: "text-xl hover:scale-125 transition-transform hover:bg-gray-100 dark:hover:bg-gray-700 p-2 rounded-lg", children: _jsx(PlusCircleIcon, { className: "w-5 h-5 text-gray-600 dark:text-gray-300" }) })] })), showReactionPicker && (_jsx("div", { className: "mt-2 border-t border-gray-200 dark:border-gray-700 pt-2", children: _jsx(EmojiPicker, { onEmojiClick: (emojiObject) => {
|
|
386
|
+
onReactionAdd === null || onReactionAdd === void 0 ? void 0 : onReactionAdd(message._id, emojiObject.emoji);
|
|
387
|
+
setShowReactionPicker(false);
|
|
388
|
+
setShowQuickReactions(false);
|
|
389
|
+
} }) }))] }) }))] }), _jsx("div", { className: "relative", ref: actionRef, children: _jsxs(DropdownMenu, { open: showActionMenu, onOpenChange: setShowActionMenu, children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx("button", { className: "flex items-center justify-center w-8 h-8 rounded-full bg-white dark:bg-gray-700 border border-gray-200 dark:border-gray-600 text-gray-600 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-600 transition-colors shadow-md", children: _jsx(MoreHorizontal, { className: "w-4 h-4" }) }) }), _jsxs(DropdownMenuContent, { align: isOwn ? "end" : "start", className: "w-48", children: [_jsxs(DropdownMenuItem, { onClick: () => onReply === null || onReply === void 0 ? void 0 : onReply(message), children: [_jsx(Reply, { className: "w-4 h-4 mr-2" }), "Reply"] }), _jsxs(DropdownMenuItem, { onClick: () => void copyText(message.content.text || ""), children: [_jsx(Copy, { className: "w-4 h-4 mr-2" }), "Copy"] }), _jsxs(DropdownMenuItem, { onClick: () => onStar === null || onStar === void 0 ? void 0 : onStar(message._id), children: [_jsx(Star, { className: "w-4 h-4 mr-2" }), "Star"] }), _jsxs(DropdownMenuItem, { onClick: () => onPin === null || onPin === void 0 ? void 0 : onPin(message._id), children: [_jsx(Pin, { className: "w-4 h-4 mr-2" }), "Pin"] }), message.type === "poll" && poll && _jsxs(DropdownMenuItem, { onClick: () => setShowPollVoters(true), children: [_jsx(EyeIcon, { className: "w-4 h-4 mr-2" }), "View votes"] }), canEdit && _jsxs(DropdownMenuItem, { onClick: openEditor, children: [_jsx(PencilIcon, { className: "w-4 h-4 mr-2" }), message.type === "poll" ? "Edit poll" : "Edit"] }), !isOwn && _jsxs(DropdownMenuItem, { onClick: () => onReport === null || onReport === void 0 ? void 0 : onReport(message), children: [_jsx(Flag, { className: "w-4 h-4 mr-2" }), "Report"] }), !isOwn && isGroupAdmin && _jsxs(DropdownMenuItem, { className: "text-red-500", onClick: () => onModerate === null || onModerate === void 0 ? void 0 : onModerate(message._id), children: [_jsx(ShieldX, { className: "w-4 h-4 mr-2" }), "Remove as admin"] }), isOwn && _jsxs(DropdownMenuItem, { className: "text-red-500", onClick: () => onDelete === null || onDelete === void 0 ? void 0 : onDelete(message._id), children: [_jsx(Trash2, { className: "w-4 h-4 mr-2" }), "Unsend"] })] })] }) })] }), _jsxs("div", { className: "md:hidden relative my-auto", ref: mobileMenuRef, children: [_jsx("button", { onClick: () => setShowMobileMenu(!showMobileMenu), className: "flex items-center justify-center w-8 h-8 rounded-full bg-white dark:bg-gray-700 border border-gray-200 dark:border-gray-600 text-gray-600 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-600 transition-colors shadow-md flex-shrink-0", children: _jsx(MoreHorizontal, { className: "w-4 h-4" }) }), showMobileMenu && (_jsx("div", { className: "fixed inset-0 z-40", onClick: () => setShowMobileMenu(false) })), showMobileMenu && (_jsx("div", { ref: mobilePopupRef, className: "absolute z-50 bg-white dark:bg-gray-800 rounded-xl shadow-2xl border border-gray-200 dark:border-gray-700 overflow-hidden w-64 max-h-96 overflow-y-auto", children: _jsxs("div", { className: "flex flex-col", children: [_jsx("div", { className: "p-2 border-b border-gray-200 dark:border-gray-700", children: _jsx("div", { className: "flex gap-1 flex-wrap justify-center", children: QUICK_REACTIONS.map((reaction) => (_jsx("button", { onClick: () => {
|
|
390
|
+
onReactionAdd === null || onReactionAdd === void 0 ? void 0 : onReactionAdd(message._id, reaction.emoji);
|
|
391
|
+
setShowMobileMenu(false);
|
|
392
|
+
}, className: "text-lg hover:scale-125 transition-transform p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded", title: reaction.label, children: reaction.emoji }, reaction.label))) }) }), _jsxs("button", { onClick: () => {
|
|
393
|
+
onReply === null || onReply === void 0 ? void 0 : onReply(message);
|
|
394
|
+
setShowMobileMenu(false);
|
|
395
|
+
}, className: "px-4 py-2.5 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center gap-2 border-b border-gray-200 dark:border-gray-700", children: [_jsx(Reply, { className: "w-4 h-4" }), "Reply"] }), _jsxs("button", { onClick: () => {
|
|
396
|
+
void copyText(message.content.text || "");
|
|
397
|
+
setShowMobileMenu(false);
|
|
398
|
+
}, className: "px-4 py-2.5 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center gap-2 border-b border-gray-200 dark:border-gray-700", children: [_jsx(Copy, { className: "w-4 h-4" }), "Copy"] }), _jsxs("button", { onClick: () => {
|
|
399
|
+
onStar === null || onStar === void 0 ? void 0 : onStar(message._id);
|
|
400
|
+
setShowMobileMenu(false);
|
|
401
|
+
}, className: "px-4 py-2.5 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center gap-2 border-b border-gray-200 dark:border-gray-700", children: [_jsx(Star, { className: "w-4 h-4" }), "Star"] }), _jsxs("button", { onClick: () => {
|
|
402
|
+
onPin === null || onPin === void 0 ? void 0 : onPin(message._id);
|
|
403
|
+
setShowMobileMenu(false);
|
|
404
|
+
}, className: "px-4 py-2.5 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center gap-2 border-b border-gray-200 dark:border-gray-700", children: [_jsx(Pin, { className: "w-4 h-4" }), "Pin"] }), message.type === "poll" && poll && _jsxs("button", { onClick: () => {
|
|
405
|
+
setShowPollVoters(true);
|
|
406
|
+
setShowMobileMenu(false);
|
|
407
|
+
}, className: "px-4 py-2.5 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center gap-2 border-b border-gray-200 dark:border-gray-700", children: [_jsx(EyeIcon, { className: "w-4 h-4 mr-2" }), "View votes"] }), !isOwn && _jsxs("button", { onClick: () => {
|
|
408
|
+
onReport === null || onReport === void 0 ? void 0 : onReport(message);
|
|
409
|
+
setShowMobileMenu(false);
|
|
410
|
+
}, className: "px-4 py-2.5 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center gap-2 border-b border-gray-200 dark:border-gray-700", children: [_jsx(Flag, { className: "w-4 h-4" }), "Report"] }), !isOwn && isGroupAdmin && _jsxs("button", { onClick: () => {
|
|
411
|
+
onModerate === null || onModerate === void 0 ? void 0 : onModerate(message._id);
|
|
412
|
+
setShowMobileMenu(false);
|
|
413
|
+
}, className: "px-4 py-2.5 text-sm text-left text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20 flex items-center gap-2 border-b border-gray-200 dark:border-gray-700", children: [_jsx(ShieldX, { className: "w-4 h-4" }), "Remove as admin"] }), isOwn && (_jsxs(_Fragment, { children: [canEdit && _jsxs("button", { onClick: () => {
|
|
414
|
+
openEditor();
|
|
415
|
+
setShowMobileMenu(false);
|
|
416
|
+
}, className: "px-4 py-2.5 text-sm text-left hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center gap-2 border-b border-gray-200 dark:border-gray-700", children: [_jsx(PencilIcon, { className: "w-4 h-4" }), message.type === "poll" ? "Edit poll" : "Edit"] }), _jsxs("button", { onClick: () => {
|
|
417
|
+
onDelete === null || onDelete === void 0 ? void 0 : onDelete(message._id);
|
|
418
|
+
setShowMobileMenu(false);
|
|
419
|
+
}, className: "px-4 py-2.5 text-sm text-left text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20 flex items-center gap-2", children: [_jsx(Trash2, { className: "w-4 h-4" }), "Unsend"] })] }))] }) }))] })] }))] })] }), poll && _jsx(PollVotersDialog, { open: showPollVoters, onOpenChange: setShowPollVoters, poll: poll, participants: participants }), poll && _jsx(EditPollDialog, { open: showPollEditor, onOpenChange: setShowPollEditor, poll: poll, onSave: async (data) => {
|
|
420
|
+
const updated = await (onEditPoll === null || onEditPoll === void 0 ? void 0 : onEditPoll(poll._id, data));
|
|
421
|
+
if (updated)
|
|
422
|
+
setPoll(updated);
|
|
423
|
+
return updated || null;
|
|
424
|
+
} }), _jsx(Dialog, { open: Boolean(selectedPhone), onOpenChange: (open) => !open && setSelectedPhone(null), children: _jsxs(DialogContent, { className: "sm:max-w-[425px]", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Phone number" }), _jsx(DialogDescription, { children: selectedPhone })] }), _jsx("div", { className: "space-y-3 py-2", children: isSearchingPhone ? _jsx("p", { className: "text-sm text-muted-foreground", children: "Looking for Trippeaze accounts\u2026" }) : phoneMatches.length > 0 ? _jsxs(_Fragment, { children: [_jsx("p", { className: "text-sm font-medium", children: "Chat with a Trippeaze account" }), phoneMatches.map((participant) => _jsxs("button", { type: "button", className: "flex w-full items-center justify-between rounded-lg border p-3 text-left hover:bg-gray-50", onClick: () => { setSelectedPhone(null); window.location.assign(`/chat?participantId=${encodeURIComponent(participant.actorId)}&participantModel=${participant.actorModel}`); }, children: [_jsxs("span", { children: [_jsx("span", { className: "block font-medium", children: participant.displayName }), _jsxs("span", { className: "text-xs text-muted-foreground", children: ["@", participant.username] })] }), _jsx(MessageCircle, { className: "h-4 w-4 text-teal-600" })] }, `${participant.actorModel}:${participant.actorId}`))] }) : _jsx("p", { className: "text-sm text-muted-foreground", children: "No Trippeaze account is registered with this number. You can invite them by SMS." }) }), phoneMatches.length === 0 && !isSearchingPhone && _jsxs("a", { className: "inline-flex h-10 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground", href: `sms:${selectedPhone || ""}?body=${encodeURIComponent("Join me on Trippeaze: ")}`, children: [_jsx(MessageCircle, { className: "mr-2 h-4 w-4" }), "Invite by SMS"] })] }) })] }));
|
|
425
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Message } from "@myrjfa/state/dist/lib/models/chat";
|
|
2
|
+
interface MessageInputProps {
|
|
3
|
+
onSend: (text: string, files?: File[], mentions?: Array<{
|
|
4
|
+
actorId: string;
|
|
5
|
+
actorModel: "User" | "HostProfile";
|
|
6
|
+
}>, type?: "text" | "media" | "announcement") => Promise<void> | void;
|
|
7
|
+
onTypingStart?: () => void;
|
|
8
|
+
onTypingStop?: () => void;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
replyTo?: any;
|
|
11
|
+
editMessage?: Message | null;
|
|
12
|
+
onEdit?: (messageid: string, text: string) => void;
|
|
13
|
+
onCancelEdit?: () => void;
|
|
14
|
+
onCancelReply?: () => void;
|
|
15
|
+
onAddMilestone?: () => void;
|
|
16
|
+
onAddExpense?: () => void;
|
|
17
|
+
onAddEvent?: () => void;
|
|
18
|
+
onPayAndSplit?: () => void;
|
|
19
|
+
onPaymentDetails?: () => void;
|
|
20
|
+
onCreatePoll?: (question: string, options: string[], allowMultiple: boolean) => void;
|
|
21
|
+
participants?: any[];
|
|
22
|
+
activePanel?: "chat" | "milestones" | "expenses" | "events";
|
|
23
|
+
allowAdvancedActions?: boolean;
|
|
24
|
+
enableAttachments?: boolean;
|
|
25
|
+
allowCollaborationActions?: boolean;
|
|
26
|
+
allowAnnouncements?: boolean;
|
|
27
|
+
initialText?: string;
|
|
28
|
+
externalText?: string;
|
|
29
|
+
onDraftChange?: (text: string) => void;
|
|
30
|
+
}
|
|
31
|
+
export declare function MessageInput({ onSend, onTypingStart, onTypingStop, disabled, replyTo, editMessage, onEdit, onCancelEdit, onCancelReply, onAddMilestone, onAddExpense, onAddEvent, onPayAndSplit, onPaymentDetails, onCreatePoll, participants, // Added
|
|
32
|
+
activePanel, allowAdvancedActions, enableAttachments, allowCollaborationActions, allowAnnouncements, initialText, externalText, onDraftChange, }: MessageInputProps): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=MessageInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageInput.d.ts","sourceRoot":"","sources":["../../src/chat/MessageInput.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAE7D,UAAU,iBAAiB;IACvB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpL,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;IACrF,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC5D,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAgB,YAAY,CAAC,EACzB,MAAM,EACN,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,WAAW,EACX,MAAM,EACN,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,YAAiB,EAAE,QAAQ;AAC3B,WAAoB,EACpB,oBAA4B,EAC5B,iBAAyB,EACzB,yBAAiC,EACjC,kBAA0B,EAC1B,WAAgB,EAChB,YAAY,EACZ,aAAa,GAChB,EAAE,iBAAiB,2CA+kBnB"}
|