@myrjfa/ui 2.1.8 → 2.2.0
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/dist/chat/ChatMain.d.ts +1 -1
- package/dist/chat/ChatMain.d.ts.map +1 -1
- package/dist/chat/ChatMain.js +3 -3
- package/dist/chat/ChatSidebar.d.ts +1 -1
- package/dist/chat/ChatSidebar.d.ts.map +1 -1
- package/dist/chat/ConversationList.d.ts +1 -1
- package/dist/chat/ConversationList.d.ts.map +1 -1
- package/dist/chat/ConversationList.js +1 -1
- package/dist/chat/ExpensePanel.js +1 -1
- package/dist/chat/MessageBubble.d.ts +1 -1
- package/dist/chat/MessageBubble.d.ts.map +1 -1
- package/dist/chat/MessageInput.js +1 -1
- package/dist/chat/MilestonePanel.js +1 -1
- package/dist/chat/components/SplitInputs.d.ts +1 -1
- package/dist/chat/components/SplitInputs.d.ts.map +1 -1
- package/dist/chat/components/SplitTypeSelector.d.ts +1 -1
- package/dist/chat/components/SplitTypeSelector.d.ts.map +1 -1
- package/dist/chat/dialogs/AddMemberDialog.d.ts +1 -1
- package/dist/chat/dialogs/AddMemberDialog.d.ts.map +1 -1
- package/dist/chat/dialogs/AddMemberDialog.js +1 -1
- package/dist/chat/dialogs/ExpenseAnalyticsDialog.js +1 -1
- package/dist/chat/dialogs/GroupInfoDialog.d.ts +1 -1
- package/dist/chat/dialogs/GroupInfoDialog.d.ts.map +1 -1
- package/dist/chat/dialogs/GroupInfoDialog.js +1 -1
- package/dist/chat/dialogs/GroupInfoViewDialog.d.ts +1 -1
- package/dist/chat/dialogs/GroupInfoViewDialog.d.ts.map +1 -1
- package/dist/chat/dialogs/NewChatDialog.js +2 -2
- package/dist/chat/dialogs/NewGroupDialog.js +2 -2
- package/dist/chat/dialogs/ParticipantsDialog.d.ts +1 -1
- package/dist/chat/dialogs/ParticipantsDialog.d.ts.map +1 -1
- package/dist/chat/dialogs/ParticipantsDialog.js +1 -1
- 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 +824 -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/ImageUploadStep.d.ts +15 -0
- package/dist/components/create-flow/ImageUploadStep.d.ts.map +1 -0
- package/dist/components/create-flow/ImageUploadStep.js +11 -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/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/ImageUploadSection.d.ts +12 -0
- package/dist/components/form-sections/ImageUploadSection.d.ts.map +1 -0
- package/dist/components/form-sections/ImageUploadSection.js +8 -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/RentalPhotosSection.d.ts +8 -0
- package/dist/components/form-sections/RentalPhotosSection.d.ts.map +1 -0
- package/dist/components/form-sections/RentalPhotosSection.js +7 -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 +262 -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 +133 -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 +100 -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 +12 -0
- package/dist/components/ui/dashboard/bookings-table.d.ts.map +1 -0
- package/dist/components/ui/dashboard/bookings-table.js +160 -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/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 +67 -0
- package/dist/dashboard/action-buttons.d.ts +2 -1
- package/dist/dashboard/action-buttons.d.ts.map +1 -1
- package/dist/dashboard/action-buttons.js +18 -11
- package/dist/dashboard/app-sidebar.d.ts.map +1 -1
- package/dist/dashboard/app-sidebar.js +3 -36
- package/dist/dashboard/dashboard-components.js +1 -1
- package/dist/dashboard/data-table.d.ts +5 -1
- package/dist/dashboard/data-table.d.ts.map +1 -1
- package/dist/dashboard/data-table.js +39 -7
- package/dist/dashboard/table.js +1 -1
- package/dist/header/mobile-nav-item.js +2 -2
- package/dist/header/mobile-navbar.d.ts.map +1 -1
- package/dist/header/mobile-navbar.js +10 -1
- package/dist/header/nav-item.js +2 -2
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -0
- package/dist/main/footer.d.ts +0 -1
- package/dist/main/footer.d.ts.map +1 -1
- package/dist/main/footer.js +0 -1
- package/dist/main/navbar.d.ts +2 -2
- package/dist/main/navbar.d.ts.map +1 -1
- package/dist/main/navbar.js +73 -44
- package/dist/main/portfolio/portfolioItem.d.ts +1 -1
- package/dist/main/portfolio/portfolioItem.d.ts.map +1 -1
- package/dist/main/portfolio/portfolioPopup.d.ts +1 -1
- package/dist/main/portfolio/portfolioPopup.d.ts.map +1 -1
- package/dist/main/review-page.d.ts +2 -1
- package/dist/main/review-page.d.ts.map +1 -1
- package/dist/main/review-page.js +34 -4
- package/dist/misc/accordion.js +1 -1
- package/dist/misc/alert-dialog.js +1 -1
- package/dist/misc/alert.js +1 -1
- package/dist/misc/alertdialogclaude.js +1 -1
- package/dist/misc/avatar.js +1 -1
- package/dist/misc/badge.js +1 -1
- package/dist/misc/button.d.ts +6 -3
- package/dist/misc/button.d.ts.map +1 -1
- package/dist/misc/button.js +33 -5
- package/dist/misc/card.js +1 -1
- package/dist/misc/carousel.d.ts +2 -2
- package/dist/misc/carousel.d.ts.map +1 -1
- package/dist/misc/carousel.js +13 -5
- package/dist/misc/checkbox.js +1 -1
- package/dist/misc/command.js +1 -1
- package/dist/misc/datepicker.d.ts +2 -1
- package/dist/misc/datepicker.d.ts.map +1 -1
- package/dist/misc/datepicker.js +23 -21
- package/dist/misc/dialog.js +3 -3
- package/dist/misc/discount-strategy-editor.d.ts +11 -0
- package/dist/misc/discount-strategy-editor.d.ts.map +1 -0
- package/dist/misc/discount-strategy-editor.js +82 -0
- package/dist/misc/dropdown-menu.js +1 -1
- package/dist/misc/faq.d.ts +1 -1
- package/dist/misc/faq.d.ts.map +1 -1
- package/dist/misc/filter.js +2 -2
- package/dist/misc/filterBar.d.ts +11 -3
- package/dist/misc/filterBar.d.ts.map +1 -1
- package/dist/misc/filterBar.js +109 -55
- package/dist/misc/form.js +1 -1
- package/dist/misc/input.d.ts +4 -1
- package/dist/misc/input.d.ts.map +1 -1
- package/dist/misc/input.js +8 -3
- package/dist/misc/label.js +1 -1
- 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/locationPicker.js +1 -1
- 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/notification.js +2 -2
- package/dist/misc/pagination.js +1 -1
- package/dist/misc/popover.js +1 -1
- 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.js +1 -1
- package/dist/misc/pwa-install-button.d.ts.map +1 -1
- package/dist/misc/pwa-install-button.js +2 -0
- package/dist/misc/rental-tile.d.ts +1 -1
- package/dist/misc/rental-tile.d.ts.map +1 -1
- package/dist/misc/rental-tile.js +24 -14
- package/dist/misc/scroll-area.js +1 -1
- package/dist/misc/select.js +1 -1
- package/dist/misc/separator.js +1 -1
- package/dist/misc/sheet.js +1 -1
- package/dist/misc/sidebar.js +2 -2
- package/dist/misc/slider.js +1 -1
- package/dist/misc/stateCard.d.ts +1 -1
- package/dist/misc/stateCard.d.ts.map +1 -1
- package/dist/misc/stateCard.js +1 -1
- 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.js +1 -1
- package/dist/misc/tabs.js +1 -1
- 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.js +1 -1
- package/dist/misc/tile.d.ts +1 -1
- package/dist/misc/tile.d.ts.map +1 -1
- package/dist/misc/tile.js +12 -47
- 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.js +1 -1
- 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/package.json +9 -6
- package/dist/misc/dashboard/action-buttons.js +0 -31
- package/dist/misc/misc/alertdialogclaude.js +0 -221
- package/dist/misc/misc/button.js +0 -46
- package/dist/misc/misc/dropdown-menu.js +0 -136
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ImageIcon, Loader2, Plus, Trash2, UploadCloud } from "lucide-react";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { cn } from "@myrjfa/state/dist/lib/utils";
|
|
6
|
+
import { normalizeImageFiles } from "@myrjfa/state/dist/lib/imageUpload";
|
|
7
|
+
import { showAlert } from "../../misc/alertdialogclaude";
|
|
8
|
+
import { compressImage } from "../../misc/image-compressor";
|
|
9
|
+
function createUploadEvent(files) {
|
|
10
|
+
if (typeof DataTransfer === "undefined")
|
|
11
|
+
return null;
|
|
12
|
+
const dataTransfer = new DataTransfer();
|
|
13
|
+
files.forEach((file) => dataTransfer.items.add(file));
|
|
14
|
+
const input = document.createElement("input");
|
|
15
|
+
input.type = "file";
|
|
16
|
+
input.multiple = files.length > 1;
|
|
17
|
+
input.files = dataTransfer.files;
|
|
18
|
+
return {
|
|
19
|
+
target: input,
|
|
20
|
+
currentTarget: input,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export default function ImageUploader({ previews = [], files, onFilesChange, onFilesSelected, onUploadEvent, onRemove, prepareFiles, title = "Upload Photos", message = "Add clear images that help guests understand what they are booking.", helperText, minImages, maxImages = 10, formatLabel = "PNG, JPG, WEBP, HEIC", accept = "image/*", multiple = true, disabled = false, dedupe = true, enableCompression = true, normalizeFiles = true, previewAspectClassName = "aspect-video", previewGridClassName = "grid grid-cols-2 gap-4 md:grid-cols-3", containerClassName, dropzoneClassName, emptyIcon, }) {
|
|
24
|
+
const inputId = React.useId();
|
|
25
|
+
const inputRef = React.useRef(null);
|
|
26
|
+
const processingKeyRef = React.useRef(null);
|
|
27
|
+
const acceptedFingerprintRef = React.useRef(new Set());
|
|
28
|
+
const [dragging, setDragging] = React.useState(false);
|
|
29
|
+
const [busy, setBusy] = React.useState(false);
|
|
30
|
+
const [processingMessage, setProcessingMessage] = React.useState("");
|
|
31
|
+
const filePreviews = React.useMemo(() => (files !== null && files !== void 0 ? files : []).map((file) => URL.createObjectURL(file)), [files]);
|
|
32
|
+
React.useEffect(() => {
|
|
33
|
+
return () => {
|
|
34
|
+
filePreviews.forEach((preview) => URL.revokeObjectURL(preview));
|
|
35
|
+
};
|
|
36
|
+
}, [filePreviews]);
|
|
37
|
+
const displayPreviews = files ? [...previews, ...filePreviews] : previews;
|
|
38
|
+
const remainingSlots = Math.max(0, maxImages - displayPreviews.length);
|
|
39
|
+
const canAddMore = !disabled && remainingSlots > 0;
|
|
40
|
+
const fileKey = (file) => `${file.name}:${file.size}:${file.lastModified}`;
|
|
41
|
+
const fileFingerprint = async (file) => {
|
|
42
|
+
var _a;
|
|
43
|
+
if (!((_a = globalThis.crypto) === null || _a === void 0 ? void 0 : _a.subtle))
|
|
44
|
+
return fileKey(file);
|
|
45
|
+
try {
|
|
46
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", await file.arrayBuffer());
|
|
47
|
+
return Array.from(new Uint8Array(hashBuffer))
|
|
48
|
+
.map((byte) => byte.toString(16).padStart(2, "0"))
|
|
49
|
+
.join("");
|
|
50
|
+
}
|
|
51
|
+
catch (_b) {
|
|
52
|
+
return fileKey(file);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const currentFileKeys = React.useMemo(() => new Set((files !== null && files !== void 0 ? files : []).map(fileKey)), [files]);
|
|
56
|
+
React.useEffect(() => {
|
|
57
|
+
if (!(files === null || files === void 0 ? void 0 : files.length))
|
|
58
|
+
return;
|
|
59
|
+
let cancelled = false;
|
|
60
|
+
Promise.all(files.map(fileFingerprint)).then((fingerprints) => {
|
|
61
|
+
if (cancelled)
|
|
62
|
+
return;
|
|
63
|
+
fingerprints.forEach((fingerprint) => acceptedFingerprintRef.current.add(fingerprint));
|
|
64
|
+
});
|
|
65
|
+
return () => {
|
|
66
|
+
cancelled = true;
|
|
67
|
+
};
|
|
68
|
+
}, [files]);
|
|
69
|
+
const prepareSelectedFiles = async (selectedFiles) => {
|
|
70
|
+
const compressedFiles = [];
|
|
71
|
+
for (const [index, file] of selectedFiles.entries()) {
|
|
72
|
+
setProcessingMessage(enableCompression
|
|
73
|
+
? `Compressing image ${index + 1} of ${selectedFiles.length}...`
|
|
74
|
+
: `Preparing image ${index + 1} of ${selectedFiles.length}...`);
|
|
75
|
+
compressedFiles.push(enableCompression ? await compressImage(file).catch(() => file) : file);
|
|
76
|
+
}
|
|
77
|
+
if (normalizeFiles)
|
|
78
|
+
setProcessingMessage("Finalizing images...");
|
|
79
|
+
const normalizedFiles = normalizeFiles
|
|
80
|
+
? await normalizeImageFiles(compressedFiles)
|
|
81
|
+
: compressedFiles;
|
|
82
|
+
return prepareFiles ? prepareFiles(normalizedFiles) : normalizedFiles;
|
|
83
|
+
};
|
|
84
|
+
const handleFiles = async (selectedFiles) => {
|
|
85
|
+
const selected = Array.from(selectedFiles);
|
|
86
|
+
if (!selected.length || disabled || busy)
|
|
87
|
+
return;
|
|
88
|
+
const selectionKey = selected.map(fileKey).sort().join("|");
|
|
89
|
+
if (processingKeyRef.current === selectionKey)
|
|
90
|
+
return;
|
|
91
|
+
const invalidFiles = selected.filter((file) => !file.type.startsWith("image/"));
|
|
92
|
+
if (invalidFiles.length) {
|
|
93
|
+
await showAlert(`Invalid file type(s): ${invalidFiles.map((file) => file.name).join(", ")}. Only images are allowed.`);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
setProcessingMessage("Checking selected images...");
|
|
97
|
+
const selectedFingerprints = await Promise.all(selected.map(fileFingerprint));
|
|
98
|
+
const seenFingerprints = new Set();
|
|
99
|
+
const uniqueFiles = dedupe
|
|
100
|
+
? selected.filter((file, index) => {
|
|
101
|
+
var _a;
|
|
102
|
+
const fingerprint = (_a = selectedFingerprints[index]) !== null && _a !== void 0 ? _a : fileKey(file);
|
|
103
|
+
const isDuplicate = seenFingerprints.has(fingerprint) ||
|
|
104
|
+
acceptedFingerprintRef.current.has(fingerprint) ||
|
|
105
|
+
currentFileKeys.has(fileKey(file));
|
|
106
|
+
seenFingerprints.add(fingerprint);
|
|
107
|
+
return !isDuplicate;
|
|
108
|
+
})
|
|
109
|
+
: selected;
|
|
110
|
+
if (!uniqueFiles.length) {
|
|
111
|
+
await showAlert("These images are already selected.");
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const acceptedFiles = uniqueFiles.slice(0, remainingSlots);
|
|
115
|
+
if (!acceptedFiles.length) {
|
|
116
|
+
await showAlert(`You can upload a maximum of ${maxImages} images.`);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (uniqueFiles.length > acceptedFiles.length) {
|
|
120
|
+
await showAlert(`Only ${remainingSlots} more image${remainingSlots === 1 ? "" : "s"} can be added.`);
|
|
121
|
+
}
|
|
122
|
+
processingKeyRef.current = selectionKey;
|
|
123
|
+
setBusy(true);
|
|
124
|
+
try {
|
|
125
|
+
const processedFiles = await prepareSelectedFiles(acceptedFiles);
|
|
126
|
+
const acceptedFingerprints = await Promise.all(acceptedFiles.map(fileFingerprint));
|
|
127
|
+
acceptedFingerprints.forEach((fingerprint) => acceptedFingerprintRef.current.add(fingerprint));
|
|
128
|
+
if (files && onFilesChange) {
|
|
129
|
+
onFilesChange([...files, ...processedFiles]);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (onFilesSelected) {
|
|
133
|
+
await onFilesSelected(processedFiles);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (onUploadEvent) {
|
|
137
|
+
const event = createUploadEvent(processedFiles);
|
|
138
|
+
if (event)
|
|
139
|
+
await onUploadEvent(event);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
setBusy(false);
|
|
144
|
+
setProcessingMessage("");
|
|
145
|
+
processingKeyRef.current = null;
|
|
146
|
+
if (inputRef.current)
|
|
147
|
+
inputRef.current.value = "";
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
const removeImage = (index) => {
|
|
151
|
+
if (files && onFilesChange) {
|
|
152
|
+
if (index < previews.length) {
|
|
153
|
+
onRemove === null || onRemove === void 0 ? void 0 : onRemove(index);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const fileIndex = index - previews.length;
|
|
157
|
+
onFilesChange(files.filter((_, currentFileIndex) => currentFileIndex !== fileIndex));
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
onRemove === null || onRemove === void 0 ? void 0 : onRemove(index);
|
|
161
|
+
};
|
|
162
|
+
const handleInputChange = (event) => {
|
|
163
|
+
var _a;
|
|
164
|
+
void handleFiles((_a = event.target.files) !== null && _a !== void 0 ? _a : []);
|
|
165
|
+
};
|
|
166
|
+
const handleDrop = (event) => {
|
|
167
|
+
event.preventDefault();
|
|
168
|
+
setDragging(false);
|
|
169
|
+
void handleFiles(event.dataTransfer.files);
|
|
170
|
+
};
|
|
171
|
+
return (_jsxs("div", { className: cn("space-y-5", containerClassName), children: [_jsxs("div", { role: "button", tabIndex: canAddMore ? 0 : -1, onClick: () => {
|
|
172
|
+
var _a;
|
|
173
|
+
if (canAddMore && !busy)
|
|
174
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.click();
|
|
175
|
+
}, onKeyDown: (event) => {
|
|
176
|
+
var _a;
|
|
177
|
+
if ((event.key === "Enter" || event.key === " ") && canAddMore && !busy) {
|
|
178
|
+
event.preventDefault();
|
|
179
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.click();
|
|
180
|
+
}
|
|
181
|
+
}, onDragEnter: (event) => {
|
|
182
|
+
event.preventDefault();
|
|
183
|
+
if (canAddMore)
|
|
184
|
+
setDragging(true);
|
|
185
|
+
}, onDragOver: (event) => {
|
|
186
|
+
event.preventDefault();
|
|
187
|
+
if (canAddMore)
|
|
188
|
+
setDragging(true);
|
|
189
|
+
}, onDragLeave: (event) => {
|
|
190
|
+
event.preventDefault();
|
|
191
|
+
setDragging(false);
|
|
192
|
+
}, onDrop: handleDrop, className: cn("group relative flex min-h-64 cursor-pointer flex-col items-center justify-center gap-5 overflow-hidden rounded-[2rem] border-2 border-dashed border-gray-200 bg-white p-8 text-center transition", "hover:border-primary hover:bg-primary/5", dragging && "border-primary bg-primary/5 ring-4 ring-primary/10", !canAddMore && "cursor-not-allowed opacity-60 hover:border-gray-200 hover:bg-white", dropzoneClassName), children: [_jsx("div", { className: "flex h-16 w-16 items-center justify-center rounded-2xl bg-gray-50 text-gray-400 transition group-hover:bg-primary/10 group-hover:text-primary", children: emptyIcon !== null && emptyIcon !== void 0 ? emptyIcon : _jsx(UploadCloud, { className: "h-8 w-8" }) }), _jsxs("div", { className: "max-w-xl", children: [_jsx("p", { className: "text-lg font-black text-gray-900", children: title }), _jsx("p", { className: "mt-1 text-sm font-semibold text-gray-500", children: message }), _jsxs("div", { className: "mt-4 flex flex-wrap items-center justify-center gap-2", children: [typeof minImages === "number" && (_jsxs("span", { className: "rounded-lg border border-gray-100 bg-white px-3 py-1 text-[10px] font-bold uppercase tracking-widest text-gray-500 shadow-sm", children: ["Min ", minImages] })), _jsxs("span", { className: "rounded-lg border border-gray-100 bg-white px-3 py-1 text-[10px] font-bold uppercase tracking-widest text-gray-500 shadow-sm", children: ["Max ", maxImages] }), _jsx("span", { className: "rounded-lg border border-gray-100 bg-white px-3 py-1 text-[10px] font-bold uppercase tracking-widest text-gray-500 shadow-sm", children: formatLabel })] }), _jsx("p", { className: "mt-3 text-xs font-semibold text-gray-400", children: helperText !== null && helperText !== void 0 ? helperText : (canAddMore ? "Drag and drop images here, or click to browse." : "Maximum image limit reached.") }), busy && _jsx("p", { className: "mt-2 text-xs font-bold text-primary", children: processingMessage || "Processing images..." })] }), busy && (_jsxs("div", { className: "absolute inset-0 flex flex-col items-center justify-center rounded-[2rem] bg-white/85 backdrop-blur-sm", children: [_jsx(Loader2, { className: "h-8 w-8 animate-spin text-primary" }), _jsx("p", { className: "mt-3 text-sm font-black text-gray-900", children: processingMessage || "Processing images..." })] })), _jsx("input", { ref: inputRef, id: inputId, type: "file", accept: accept, multiple: multiple, disabled: !canAddMore || busy, onChange: handleInputChange, className: "hidden" })] }), displayPreviews.length > 0 && (_jsxs("div", { className: previewGridClassName, children: [displayPreviews.map((image, index) => (_jsxs("div", { className: cn("group relative overflow-hidden rounded-2xl border border-gray-100 bg-gray-50 shadow-sm", previewAspectClassName), children: [_jsx("img", { src: image, alt: `Uploaded image ${index + 1}`, className: "h-full w-full object-cover transition duration-500 group-hover:scale-105" }), _jsxs("div", { className: "absolute inset-x-0 bottom-0 flex items-center justify-between bg-gradient-to-t from-black/60 to-transparent p-3 pt-10 text-white", children: [_jsxs("span", { className: "flex items-center gap-1.5 text-xs font-bold", children: [_jsx(ImageIcon, { className: "h-3.5 w-3.5" }), index + 1] }), _jsx("button", { type: "button", onClick: () => removeImage(index), className: "rounded-full bg-white/95 p-2 text-red-500 opacity-0 shadow-lg transition hover:bg-white group-hover:opacity-100", "aria-label": `Remove image ${index + 1}`, children: _jsx(Trash2, { className: "h-4 w-4" }) })] })] }, `${image}-${index}`))), canAddMore && (_jsxs("button", { type: "button", onClick: () => { var _a; return (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, className: cn("flex flex-col items-center justify-center gap-2 rounded-2xl border-2 border-dashed border-gray-200 bg-gray-50 text-sm font-bold text-gray-500 transition hover:border-primary hover:bg-primary/5 hover:text-primary", previewAspectClassName), children: [_jsx(Plus, { className: "h-6 w-6" }), "Add more"] }))] }))] }));
|
|
193
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export type MultiStepWizardProps = {
|
|
3
|
+
title: string;
|
|
4
|
+
description: string;
|
|
5
|
+
backHref: string;
|
|
6
|
+
backLabel: string;
|
|
7
|
+
steps: {
|
|
8
|
+
label: string;
|
|
9
|
+
icon: any;
|
|
10
|
+
}[];
|
|
11
|
+
currentStep: number;
|
|
12
|
+
onStepClick: (step: number) => void;
|
|
13
|
+
allowAllSteps: boolean;
|
|
14
|
+
submitError?: string;
|
|
15
|
+
draftSavedMessage?: string;
|
|
16
|
+
submitting?: boolean;
|
|
17
|
+
publishLabel: string;
|
|
18
|
+
onNext: any;
|
|
19
|
+
onBack: () => void;
|
|
20
|
+
onSaveDraft?: any;
|
|
21
|
+
onPublish: any;
|
|
22
|
+
children: ReactNode;
|
|
23
|
+
};
|
|
24
|
+
export default function MultiStepWizard({ title, description, backHref, backLabel, steps, currentStep, onStepClick, allowAllSteps, submitError, draftSavedMessage, submitting, publishLabel, onNext, onBack, onSaveDraft, onPublish, children, }: MultiStepWizardProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=MultiStepWizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiStepWizard.d.ts","sourceRoot":"","sources":["../../../src/components/create-flow/MultiStepWizard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,OAAO,CAAC;AAQzD,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAElB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,EAAE,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,aAAa,EAAE,OAAO,CAAC;IAEvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC;IAEf,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAiBF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,EACT,KAAK,EACL,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,UAAkB,EAClB,YAAY,EACZ,MAAM,EACN,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,GACT,EAAE,oBAAoB,2CA0EtB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import Link from "next/link";
|
|
5
|
+
import { ArrowLeft, AlertCircle, CheckCircle } from "lucide-react";
|
|
6
|
+
import { MotionDiv, AnimatePresence } from "../ui/motion";
|
|
7
|
+
import StepProgress from "../../misc/step-progress";
|
|
8
|
+
import WizardFooter from "../../misc/wizard-footer";
|
|
9
|
+
const slideVariants = {
|
|
10
|
+
enter: (direction) => ({
|
|
11
|
+
x: direction * 50,
|
|
12
|
+
opacity: 0,
|
|
13
|
+
}),
|
|
14
|
+
center: {
|
|
15
|
+
x: 0,
|
|
16
|
+
opacity: 1,
|
|
17
|
+
},
|
|
18
|
+
exit: (direction) => ({
|
|
19
|
+
x: -direction * 50,
|
|
20
|
+
opacity: 0,
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
export default function MultiStepWizard({ title, description, backHref, backLabel, steps, currentStep, onStepClick, allowAllSteps, submitError, draftSavedMessage, submitting = false, publishLabel, onNext, onBack, onSaveDraft, onPublish, children, }) {
|
|
24
|
+
const [prevStep, setPrevStep] = useState(currentStep);
|
|
25
|
+
const [direction, setDirection] = useState(1);
|
|
26
|
+
if (currentStep !== prevStep) {
|
|
27
|
+
setDirection(currentStep > prevStep ? 1 : -1);
|
|
28
|
+
setPrevStep(currentStep);
|
|
29
|
+
}
|
|
30
|
+
return (_jsxs("div", { className: "max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [_jsxs("div", { className: "mb-8", children: [_jsxs(Link, { href: backHref, className: "inline-flex items-center gap-1.5 text-gray-500 text-sm font-bold hover:text-primary transition mb-4", children: [_jsx(ArrowLeft, { className: "w-4 h-4" }), " ", backLabel] }), _jsx("h1", { className: "text-3xl font-bold text-gray-900", children: title }), _jsx("p", { className: "text-gray-500 mt-1 text-sm", children: description })] }), _jsx(StepProgress, { steps: steps, currentStep: currentStep, onStepClick: onStepClick, allowAllSteps: allowAllSteps, size: "md", className: "mb-8 pb-2" }), _jsxs("div", { className: "bg-white rounded-3xl border border-gray-100 shadow-sm overflow-hidden", children: [_jsx("div", { className: "p-8 overflow-hidden", children: _jsx(AnimatePresence, { mode: "wait", custom: direction, children: _jsx(MotionDiv, { custom: direction, variants: slideVariants, initial: "enter", animate: "center", exit: "exit", transition: { duration: 0.2 }, children: children }, currentStep) }) }), submitError && (_jsxs("div", { className: "mx-8 mb-4 flex items-center gap-2 bg-red-50 border border-red-100 p-4 rounded-2xl text-red-600 text-sm font-bold", children: [_jsx(AlertCircle, { className: "w-4 h-4" }), " ", submitError] })), draftSavedMessage && (_jsxs("div", { className: "mx-8 mb-4 flex items-center gap-2 rounded-2xl border border-emerald-100 bg-emerald-50 p-4 text-sm font-bold text-emerald-700", children: [_jsx(CheckCircle, { className: "h-4 w-4" }), " ", draftSavedMessage] })), _jsx(WizardFooter, { isFirstStep: currentStep === 0, isLastStep: currentStep === steps.length - 1, isSubmitting: submitting, publishLabel: publishLabel, showPublishOnEveryStep: allowAllSteps, onBack: onBack, onNext: onNext, onSaveDraft: onSaveDraft, onPublish: onPublish })] })] }));
|
|
31
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type ReviewConfirmationCardProps = {
|
|
2
|
+
title: string;
|
|
3
|
+
body: string;
|
|
4
|
+
className?: string;
|
|
5
|
+
};
|
|
6
|
+
export default function ReviewConfirmationCard({ title, body, className, }: ReviewConfirmationCardProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=ReviewConfirmationCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReviewConfirmationCard.d.ts","sourceRoot":"","sources":["../../../src/components/create-flow/ReviewConfirmationCard.tsx"],"names":[],"mappings":"AAEA,KAAK,2BAA2B,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAC7C,KAAK,EACL,IAAI,EACJ,SAAoE,GACrE,EAAE,2BAA2B,2CAO7B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
export default function ReviewConfirmationCard({ title, body, className = "rounded-[2rem] border border-slate-100 bg-slate-50 p-6", }) {
|
|
4
|
+
return (_jsxs("div", { className: className, children: [_jsx("div", { className: "text-sm font-bold text-slate-700", children: title }), _jsx("div", { className: "mt-2 text-sm text-slate-600", children: body })] }));
|
|
5
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type ReviewMetric = {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string;
|
|
4
|
+
valueClassName?: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
className?: string;
|
|
7
|
+
};
|
|
8
|
+
type ReviewMetricGridProps = {
|
|
9
|
+
items: ReviewMetric[];
|
|
10
|
+
className?: string;
|
|
11
|
+
itemClassName?: string;
|
|
12
|
+
};
|
|
13
|
+
export default function ReviewMetricGrid({ items, className, itemClassName, }: ReviewMetricGridProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=ReviewMetricGrid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReviewMetricGrid.d.ts","sourceRoot":"","sources":["../../../src/components/create-flow/ReviewMetricGrid.tsx"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,KAAK,EACL,SAAmD,EACnD,aAA2E,GAC5E,EAAE,qBAAqB,2CAkBvB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
export default function ReviewMetricGrid({ items, className = "grid grid-cols-1 gap-4 md:grid-cols-2", itemClassName = "rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3", }) {
|
|
4
|
+
return (_jsx("div", { className: className, children: items.map((item) => {
|
|
5
|
+
var _a, _b;
|
|
6
|
+
return (_jsxs("div", { className: `min-w-0 ${itemClassName} ${(_a = item.className) !== null && _a !== void 0 ? _a : ""}`.trim(), children: [_jsx("div", { className: "text-[11px] font-bold uppercase tracking-[0.18em] text-slate-400", children: item.label }), _jsx("div", { className: `mt-2 break-words text-sm font-semibold text-slate-900 ${(_b = item.valueClassName) !== null && _b !== void 0 ? _b : ""}`.trim(), children: item.value }), item.description ? (_jsx("div", { className: "mt-1 text-xs font-medium text-slate-500", children: item.description })) : null] }, item.label));
|
|
7
|
+
}) }));
|
|
8
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type TemplateOption = {
|
|
2
|
+
slug: string;
|
|
3
|
+
title: string;
|
|
4
|
+
};
|
|
5
|
+
type TemplateSelectionDialogProps = {
|
|
6
|
+
open: boolean;
|
|
7
|
+
onOpenChange: (open: boolean) => void;
|
|
8
|
+
title: string;
|
|
9
|
+
items: TemplateOption[];
|
|
10
|
+
draftItems?: TemplateOption[];
|
|
11
|
+
onSelect: (slug: string) => void;
|
|
12
|
+
onDraftSelect?: (slug: string) => void;
|
|
13
|
+
emptyActionLabel?: string;
|
|
14
|
+
};
|
|
15
|
+
export default function TemplateSelectionDialog({ open, onOpenChange, title, items, draftItems, onSelect, onDraftSelect, emptyActionLabel, }: TemplateSelectionDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=TemplateSelectionDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateSelectionDialog.d.ts","sourceRoot":"","sources":["../../../src/components/create-flow/TemplateSelectionDialog.tsx"],"names":[],"mappings":"AAWA,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,4BAA4B,GAAG;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAC9C,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,KAAK,EACL,UAAe,EACf,QAAQ,EACR,aAAa,EACb,gBAAgC,GACjC,EAAE,4BAA4B,2CAoD9B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button } from "@myrjfa/ui/dist/misc/button";
|
|
4
|
+
import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@myrjfa/ui/dist/misc/dialog";
|
|
5
|
+
export default function TemplateSelectionDialog({ open, onOpenChange, title, items, draftItems = [], onSelect, onDraftSelect, emptyActionLabel = "Start Fresh", }) {
|
|
6
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "max-w-lg", children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: title }) }), _jsxs("div", { className: "mt-3 max-h-[60vh] overflow-y-auto pr-2", children: [items.length > 0 && (_jsx("div", { className: "space-y-3 mb-6", children: items.map((item) => (_jsx("button", { type: "button", className: "w-full rounded-lg border p-3 text-left hover:bg-gray-100", onClick: () => onSelect(item.slug), children: _jsx("div", { className: "font-medium", children: item.title }) }, item.slug))) })), draftItems.length > 0 && (_jsxs("div", { className: "mt-2", children: [_jsx("h3", { className: "text-sm font-bold text-gray-900 mb-3", children: "Complete Pending Creation" }), _jsx("div", { className: "space-y-3", children: draftItems.map((item) => (_jsxs("button", { type: "button", className: "w-full flex items-center justify-between rounded-lg border border-dashed border-gray-300 p-3 text-left hover:bg-gray-50", onClick: () => onDraftSelect ? onDraftSelect(item.slug) : onSelect(item.slug), children: [_jsx("div", { className: "font-medium text-gray-700", children: item.title }), _jsx("span", { className: "text-xs font-semibold text-primary bg-primary/10 px-2 py-1 rounded-full", children: "Draft" })] }, item.slug))) })] }))] }), _jsx(DialogFooter, { className: "mt-4 flex justify-end", children: _jsx(Button, { variant: "outline", onClick: () => onOpenChange(false), children: emptyActionLabel }) })] }) }));
|
|
7
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export declare function EnquiryStepLabel({ number, label, }: {
|
|
3
|
+
number: number;
|
|
4
|
+
label: string;
|
|
5
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare function EnquirySectionCard({ step, title, description, children, className, }: {
|
|
7
|
+
step: number;
|
|
8
|
+
title: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
className?: string;
|
|
12
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function EnquiryGuestFields({ values, onChange, }: {
|
|
14
|
+
values: {
|
|
15
|
+
name: string;
|
|
16
|
+
email: string;
|
|
17
|
+
phone: string;
|
|
18
|
+
};
|
|
19
|
+
onChange: (field: "name" | "email" | "phone", value: string) => void;
|
|
20
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export declare function EnquiryTravellerSplitFields({ males, females, onMalesChange, onFemalesChange, }: {
|
|
22
|
+
males: number;
|
|
23
|
+
females: number;
|
|
24
|
+
onMalesChange: (value: number) => void;
|
|
25
|
+
onFemalesChange: (value: number) => void;
|
|
26
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export declare function EnquiryTravellerCountField({ value, onChange, }: {
|
|
28
|
+
value: string;
|
|
29
|
+
onChange: (value: string) => void;
|
|
30
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export declare function EnquiryMessageField({ value, onChange, placeholder, }: {
|
|
32
|
+
value: string;
|
|
33
|
+
onChange: (value: string) => void;
|
|
34
|
+
placeholder?: string;
|
|
35
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
export declare function EnquirySubmitButton({ loading, children, }: {
|
|
37
|
+
loading?: boolean;
|
|
38
|
+
children?: ReactNode;
|
|
39
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
//# sourceMappingURL=EnquiryFormParts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnquiryFormParts.d.ts","sourceRoot":"","sources":["../../../src/components/enquiry/EnquiryFormParts.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,KAAK,GACN,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,2CAWA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,GACV,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAiBA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtE,2CA8CA;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,KAAK,EACL,OAAO,EACP,aAAa,EACb,eAAe,GAChB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C,2CA4CA;AAED,wBAAgB,0BAA0B,CAAC,EACzC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,2CAiBA;AAED,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,WAAuG,GACxG,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,2CASA;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,QAAyB,GAC1B,EAAE;IACD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,2CAWA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Loader2, Mail, Phone, Send, User, Users } from "lucide-react";
|
|
4
|
+
import { Input } from "@myrjfa/ui/dist/misc/input";
|
|
5
|
+
import { Label } from "@myrjfa/ui/dist/misc/label";
|
|
6
|
+
import { Textarea } from "@myrjfa/ui/dist/misc/textarea";
|
|
7
|
+
import { cn } from "@myrjfa/state/dist/lib/utils";
|
|
8
|
+
export function EnquiryStepLabel({ number, label, }) {
|
|
9
|
+
return (_jsxs("div", { className: "mb-5 flex items-center gap-3", children: [_jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-trippeaze-primary text-xs font-bold text-white", children: number }), _jsx("p", { className: "text-[15px] font-semibold tracking-tight text-slate-950", children: label })] }));
|
|
10
|
+
}
|
|
11
|
+
export function EnquirySectionCard({ step, title, description, children, className, }) {
|
|
12
|
+
return (_jsxs("section", { className: cn("rounded-2xl border border-cyan-100 bg-white p-6 shadow-sm", className), children: [_jsx(EnquiryStepLabel, { number: step, label: title }), description && (_jsx("p", { className: "-mt-3 mb-5 text-sm leading-6 text-slate-500", children: description })), children] }));
|
|
13
|
+
}
|
|
14
|
+
export function EnquiryGuestFields({ values, onChange, }) {
|
|
15
|
+
return (_jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "enquiry-name", children: "Full name" }), _jsxs("div", { className: "relative", children: [_jsx(User, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-cyan-500" }), _jsx(Input, { id: "enquiry-name", value: values.name, onChange: (event) => onChange("name", event.target.value), placeholder: "e.g. Arjun Sharma", className: "pl-9" })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "enquiry-email", children: "Email" }), _jsxs("div", { className: "relative", children: [_jsx(Mail, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-cyan-500" }), _jsx(Input, { id: "enquiry-email", type: "email", value: values.email, onChange: (event) => onChange("email", event.target.value), placeholder: "you@email.com", className: "pl-9" })] })] }), _jsxs("div", { className: "space-y-2 sm:col-span-2", children: [_jsx(Label, { htmlFor: "enquiry-phone", children: "Phone" }), _jsxs("div", { className: "relative", children: [_jsx(Phone, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-cyan-500" }), _jsx(Input, { id: "enquiry-phone", type: "tel", value: values.phone, onChange: (event) => onChange("phone", event.target.value), placeholder: "+91 98765 43210", className: "pl-9" })] })] })] }));
|
|
16
|
+
}
|
|
17
|
+
export function EnquiryTravellerSplitFields({ males, females, onMalesChange, onFemalesChange, }) {
|
|
18
|
+
const totalPeople = Math.max(Number(males) || 0, 0) + Math.max(Number(females) || 0, 0);
|
|
19
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "enquiry-males", children: "Males" }), _jsx(Input, { id: "enquiry-males", type: "number", min: "0", value: males, onChange: (event) => onMalesChange(parseInt(event.target.value, 10) || 0), showZeroAsEmpty: true })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "enquiry-females", children: "Females" }), _jsx(Input, { id: "enquiry-females", type: "number", min: "0", value: females, onChange: (event) => onFemalesChange(parseInt(event.target.value, 10) || 0), showZeroAsEmpty: true })] })] }), totalPeople > 0 && (_jsxs("div", { className: "mt-4 inline-flex items-center gap-2 rounded-full bg-cyan-50 px-3.5 py-1.5 text-sm font-medium text-cyan-700", children: [_jsx(Users, { className: "h-3.5 w-3.5" }), _jsxs("span", { children: [totalPeople, " traveller", totalPeople !== 1 ? "s" : ""] }), males > 0 && females > 0 && (_jsxs("span", { className: "text-xs text-cyan-600/70", children: [males, "M ", females, "F"] }))] }))] }));
|
|
20
|
+
}
|
|
21
|
+
export function EnquiryTravellerCountField({ value, onChange, }) {
|
|
22
|
+
return (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "enquiry-travellers", children: "Travellers" }), _jsxs("div", { className: "relative", children: [_jsx(Users, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400" }), _jsx(Input, { id: "enquiry-travellers", type: "number", min: "1", value: value, onChange: (event) => onChange(event.target.value), className: "pl-9" })] })] }));
|
|
23
|
+
}
|
|
24
|
+
export function EnquiryMessageField({ value, onChange, placeholder = "Special requirements, dietary needs, pickup questions, or anything else we should know.", }) {
|
|
25
|
+
return (_jsx(Textarea, { value: value, onChange: (event) => onChange(event.target.value), placeholder: placeholder, className: "min-h-[120px] resize-none rounded-2xl" }));
|
|
26
|
+
}
|
|
27
|
+
export function EnquirySubmitButton({ loading, children = "Send Enquiry", }) {
|
|
28
|
+
return (_jsxs("button", { type: "submit", disabled: loading, className: "flex h-14 w-full cursor-pointer items-center justify-center gap-2.5 rounded-2xl bg-trippeaze-primary text-base font-semibold text-white shadow-lg shadow-cyan-500/25 transition-all hover:-translate-y-0.5 hover:bg-trippeaze-primary/90 disabled:cursor-not-allowed disabled:opacity-60 disabled:hover:translate-y-0", children: [loading ? _jsx(Loader2, { className: "h-4 w-4 animate-spin" }) : _jsx(Send, { className: "h-4 w-4" }), loading ? "Submitting..." : children] }));
|
|
29
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type FieldValues, type UseFormReturn } from "react-hook-form";
|
|
2
|
+
type FaqItem = {
|
|
3
|
+
question: string;
|
|
4
|
+
answer: string;
|
|
5
|
+
};
|
|
6
|
+
type FaqSectionProps<TFieldValues extends FieldValues> = {
|
|
7
|
+
form: UseFormReturn<TFieldValues>;
|
|
8
|
+
questions: FaqItem[];
|
|
9
|
+
onAddQuestion: () => void;
|
|
10
|
+
onRemoveQuestion: (index: number) => void;
|
|
11
|
+
title?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
questionPlaceholder: string;
|
|
14
|
+
answerPlaceholder: string;
|
|
15
|
+
cardClassName?: string;
|
|
16
|
+
removeButtonClassName?: string;
|
|
17
|
+
questionItemClassName?: string;
|
|
18
|
+
questionHeadingClassName?: string;
|
|
19
|
+
addButtonLabel?: string;
|
|
20
|
+
onFieldChange?: () => void;
|
|
21
|
+
};
|
|
22
|
+
export default function FaqSection<TFieldValues extends FieldValues>({ form, questions, onAddQuestion, onRemoveQuestion, title, description, questionPlaceholder, answerPlaceholder, cardClassName, removeButtonClassName, questionItemClassName, questionHeadingClassName, addButtonLabel, onFieldChange, }: FaqSectionProps<TFieldValues>): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=FaqSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FaqSection.d.ts","sourceRoot":"","sources":["../../../src/components/form-sections/FaqSection.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAa,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOlF,KAAK,OAAO,GAAG;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,eAAe,CAAC,YAAY,SAAS,WAAW,IAAI;IACvD,IAAI,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAClC,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,YAAY,SAAS,WAAW,EAAE,EACnE,IAAI,EACJ,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,KAAoC,EACpC,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,qBAAyE,EACzE,qBAA0D,EAC1D,wBAA0C,EAC1C,cAA+B,EAC/B,aAAa,GACd,EAAE,eAAe,CAAC,YAAY,CAAC,2CA6E/B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Plus, Trash2 } from "lucide-react";
|
|
4
|
+
import { Button } from "@myrjfa/ui/dist/misc/button";
|
|
5
|
+
import { Card, CardContent, CardHeader, CardTitle } from "@myrjfa/ui/dist/misc/card";
|
|
6
|
+
import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "@myrjfa/ui/dist/misc/form";
|
|
7
|
+
import { Input } from "@myrjfa/ui/dist/misc/input";
|
|
8
|
+
import { Textarea } from "@myrjfa/ui/dist/misc/textarea";
|
|
9
|
+
export default function FaqSection({ form, questions, onAddQuestion, onRemoveQuestion, title = "Frequently Asked Questions", description, questionPlaceholder, answerPlaceholder, cardClassName, removeButtonClassName = "text-red-500 hover:text-red-700 hover:bg-red-50", questionItemClassName = "p-4 border rounded-2xl space-y-4", questionHeadingClassName = "font-semibold", addButtonLabel = "Add Question", onFieldChange, }) {
|
|
10
|
+
return (_jsxs(Card, { className: cardClassName, children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: title }), description && _jsx(FormDescription, { children: description })] }), _jsxs(CardContent, { className: "space-y-6", children: [questions.map((_, index) => (_jsxs("div", { className: questionItemClassName, children: [_jsxs("div", { className: "flex justify-between items-center", children: [_jsxs("h3", { className: questionHeadingClassName, children: ["Question ", index + 1] }), _jsxs(Button, { type: "button", onClick: () => onRemoveQuestion(index), variant: "ghost", size: "sm", className: removeButtonClassName, children: [_jsx(Trash2, { className: "h-4 w-4 mr-1" }), "Remove"] })] }), _jsx(FormField, { control: form.control, name: `questions.${index}.question`, render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Question" }), _jsx(FormControl, { children: _jsx(Input, { id: `question-${index}`, placeholder: questionPlaceholder, ...field, onChange: (e) => {
|
|
11
|
+
onFieldChange === null || onFieldChange === void 0 ? void 0 : onFieldChange();
|
|
12
|
+
field.onChange(e);
|
|
13
|
+
} }) }), _jsx(FormMessage, {})] })) }), _jsx(FormField, { control: form.control, name: `questions.${index}.answer`, render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Answer" }), _jsx(FormControl, { children: _jsx(Textarea, { id: `answer-${index}`, placeholder: answerPlaceholder, ...field, onChange: (e) => {
|
|
14
|
+
onFieldChange === null || onFieldChange === void 0 ? void 0 : onFieldChange();
|
|
15
|
+
field.onChange(e);
|
|
16
|
+
} }) }), _jsx(FormMessage, {})] })) })] }, index))), _jsxs(Button, { type: "button", onClick: onAddQuestion, className: "flex justify-start", children: [_jsx(Plus, { className: "w-4 h-4 mr-2" }), addButtonLabel] })] })] }));
|
|
17
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type ImageUploadSectionProps = {
|
|
2
|
+
title?: string;
|
|
3
|
+
message: string;
|
|
4
|
+
previewImages: string[];
|
|
5
|
+
onUpload: (e: React.ChangeEvent<HTMLInputElement>) => Promise<void>;
|
|
6
|
+
onRemove: (index: number) => void;
|
|
7
|
+
cardClassName?: string;
|
|
8
|
+
titleClassName?: string;
|
|
9
|
+
};
|
|
10
|
+
export default function ImageUploadSection({ title, message, previewImages, onUpload, onRemove, cardClassName, titleClassName, }: ImageUploadSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=ImageUploadSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageUploadSection.d.ts","sourceRoot":"","sources":["../../../src/components/form-sections/ImageUploadSection.tsx"],"names":[],"mappings":"AAMA,KAAK,uBAAuB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,KAAgB,EAChB,OAAO,EACP,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,cAA0C,GAC3C,EAAE,uBAAuB,2CAmBzB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Upload } from "lucide-react";
|
|
4
|
+
import { Card, CardContent, CardHeader, CardTitle } from "@myrjfa/ui/dist/misc/card";
|
|
5
|
+
import MultiImageUploader from "@myrjfa/ui/dist/misc/multiImageUploader";
|
|
6
|
+
export default function ImageUploadSection({ title = "Photos", message, previewImages, onUpload, onRemove, cardClassName, titleClassName = "flex items-center gap-2", }) {
|
|
7
|
+
return (_jsxs(Card, { className: cardClassName, children: [_jsx(CardHeader, { children: _jsxs(CardTitle, { className: titleClassName, children: [_jsx(Upload, { className: "h-5 w-5 text-primary" }), title] }) }), _jsx(CardContent, { children: _jsx(MultiImageUploader, { previewImages: previewImages, handleImageUpload: onUpload, handleRemoveImage: onRemove, message: message }) })] }));
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { UseFormReturn } from "react-hook-form";
|
|
2
|
+
type OpportunityBasicsSectionProps = {
|
|
3
|
+
form: UseFormReturn<any>;
|
|
4
|
+
showHostUsernameField: boolean;
|
|
5
|
+
};
|
|
6
|
+
export default function OpportunityBasicsSection({ form, showHostUsernameField, }: OpportunityBasicsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=OpportunityBasicsSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpportunityBasicsSection.d.ts","sourceRoot":"","sources":["../../../src/components/form-sections/OpportunityBasicsSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAgBrD,KAAK,6BAA6B,GAAG;IACnC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,EAC/C,IAAI,EACJ,qBAAqB,GACtB,EAAE,6BAA6B,2CAuO/B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Card, CardContent, CardHeader, CardTitle } from "@myrjfa/ui/dist/misc/card";
|
|
3
|
+
import { DatePicker } from "@myrjfa/ui/dist/misc/datepicker";
|
|
4
|
+
import { Filter } from "@myrjfa/ui/dist/misc/filter";
|
|
5
|
+
import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@myrjfa/ui/dist/misc/form";
|
|
6
|
+
import { Input } from "@myrjfa/ui/dist/misc/input";
|
|
7
|
+
import { getCountryNames, getStates } from "@myrjfa/state/dist/lib/data/countryStates";
|
|
8
|
+
export default function OpportunityBasicsSection({ form, showHostUsernameField, }) {
|
|
9
|
+
const selectedCountry = form.watch("country");
|
|
10
|
+
const selectedType = form.watch("opportunityType");
|
|
11
|
+
const stateOptions = selectedCountry ? getStates(selectedCountry) : [];
|
|
12
|
+
return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: "Basic Information" }) }), _jsxs(CardContent, { className: "space-y-4", children: [showHostUsernameField && (_jsx(FormField, { control: form.control, name: "hostId", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Host username" }), _jsx(FormControl, { children: _jsx(Input, { placeholder: "e.g trippeaze", ...field, id: "hostId" }) }), _jsx(FormMessage, {})] })) })), _jsx(FormField, { control: form.control, name: "title", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Title" }), _jsx(FormControl, { children: _jsx(Input, { placeholder: "e.g., Community Garden Project Coordinator", ...field, id: "opportunityTitle" }) }), _jsx(FormDescription, { children: "A clear, attractive, and concise title for your listing" }), _jsx(FormMessage, {})] })) }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: [_jsx(FormField, { control: form.control, name: "country", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Country" }), _jsx(FormControl, { children: _jsx("div", { className: "w-full border border-input rounded-md text-sm shadow-sm focus-within:ring-2 focus-within:ring-muted", children: _jsx(Filter, { label: "Country", formType: "autoComplete", selectedValue: field.value, values: getCountryNames(), onChange: (value) => {
|
|
13
|
+
field.onChange(value);
|
|
14
|
+
form.setValue("state", "");
|
|
15
|
+
form.setValue("city", "");
|
|
16
|
+
}, "aria-describedby": "country-error" }) }) }), _jsx(FormMessage, { id: "country-error" })] })) }), _jsx(FormField, { control: form.control, name: "state", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "State" }), _jsx(FormControl, { children: _jsx("div", { className: "w-full border border-input rounded-md text-sm shadow-sm focus-within:ring-2 focus-within:ring-muted", children: _jsx(Filter, { label: "State", formType: "autoComplete", selectedValue: field.value, values: stateOptions, onChange: (value) => {
|
|
17
|
+
field.onChange(value);
|
|
18
|
+
form.setValue("city", "");
|
|
19
|
+
}, "aria-describedby": "state-error" }) }) }), _jsx(FormMessage, { id: "state-error" })] })) }), _jsx(FormField, { control: form.control, name: "city", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "City" }), _jsx(FormControl, { children: _jsx(Input, { id: "city", placeholder: "e.g., Jaipur", ...field, autoComplete: "city" }) }), _jsx(FormMessage, {})] })) })] }), _jsx(FormField, { control: form.control, name: "address", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Address" }), _jsx(FormControl, { children: _jsx(Input, { id: "address", placeholder: "Exact address (optional)", ...field, autoComplete: "address" }) }), _jsx(FormMessage, {})] })) }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: [_jsx(FormField, { control: form.control, name: "availableFrom", render: ({ field }) => {
|
|
20
|
+
var _a;
|
|
21
|
+
return (_jsx(DatePicker, { field: {
|
|
22
|
+
...field,
|
|
23
|
+
value: (_a = field.value) !== null && _a !== void 0 ? _a : null,
|
|
24
|
+
}, minDate: new Date(), label: "Available From" }));
|
|
25
|
+
} }), selectedType !== "job" && (_jsx(FormField, { control: form.control, name: "minDuration", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Min Duration (weeks)" }), _jsx(FormControl, { children: _jsx(Input, { id: "minDuration", type: "number", min: 1, ...field, onChange: (e) => field.onChange(parseInt(e.target.value)) }) }), _jsx(FormMessage, {})] })) })), selectedType !== "job" && (_jsx(FormField, { control: form.control, name: "maxDuration", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Max Duration (weeks)" }), _jsx(FormControl, { children: _jsx(Input, { id: "maxDuration", type: "number", min: 1, ...field, onChange: (e) => field.onChange(parseInt(e.target.value)) }) }), _jsx(FormMessage, {})] })) }))] }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: [selectedType !== "job" && (_jsx(FormField, { control: form.control, name: "peopleRequired", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "People Required" }), _jsx(FormControl, { children: _jsx(Input, { id: "peopleRequired", type: "number", min: "1", ...field, onChange: (e) => field.onChange(parseInt(e.target.value)) }) }), _jsx(FormMessage, {})] })) })), _jsx(FormField, { control: form.control, name: "hostingType", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Hosting Type" }), _jsx(FormControl, { children: _jsx(Input, { id: "hostingType", placeholder: "e.g., Hotel, NGO, Restaurant...", ...field }) }), _jsx(FormMessage, {})] })) })] })] })] }));
|
|
26
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { UseFormReturn } from "react-hook-form";
|
|
2
|
+
type OpportunityDetailsSectionProps = {
|
|
3
|
+
form: UseFormReturn<any>;
|
|
4
|
+
selectedType: string;
|
|
5
|
+
skills: string[];
|
|
6
|
+
facilities: string[];
|
|
7
|
+
responsibilities: string[];
|
|
8
|
+
onAddSkill: (value: string) => void;
|
|
9
|
+
onRemoveSkill: (value: string) => void;
|
|
10
|
+
onAddFacility: (value: string) => void;
|
|
11
|
+
onRemoveFacility: (value: string) => void;
|
|
12
|
+
onAddResponsibility: (value: string) => void;
|
|
13
|
+
onRemoveResponsibility: (value: string) => void;
|
|
14
|
+
arrayErrors: boolean;
|
|
15
|
+
};
|
|
16
|
+
export default function OpportunityDetailsSection({ form, selectedType, skills, facilities, responsibilities, onAddSkill, onRemoveSkill, onAddFacility, onRemoveFacility, onAddResponsibility, onRemoveResponsibility, arrayErrors, }: OpportunityDetailsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=OpportunityDetailsSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpportunityDetailsSection.d.ts","sourceRoot":"","sources":["../../../src/components/form-sections/OpportunityDetailsSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAerD,KAAK,8BAA8B,GAAG;IACpC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,sBAAsB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,EAChD,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,GACZ,EAAE,8BAA8B,2CAsEhC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@myrjfa/ui/dist/misc/form";
|
|
3
|
+
import { Card, CardContent, CardHeader, CardTitle } from "@myrjfa/ui/dist/misc/card";
|
|
4
|
+
import { Textarea } from "@myrjfa/ui/dist/misc/textarea";
|
|
5
|
+
import TagFilterInput from "@myrjfa/ui/dist/misc/tag-filter-input";
|
|
6
|
+
import { skillsOptions } from "@myrjfa/state/dist/lib/models/props";
|
|
7
|
+
import { facilitiesOptions, responsibilitiesOptions } from "@myrjfa/state/dist/lib/models/opportunities/opportunity";
|
|
8
|
+
export default function OpportunityDetailsSection({ form, selectedType, skills, facilities, responsibilities, onAddSkill, onRemoveSkill, onAddFacility, onRemoveFacility, onAddResponsibility, onRemoveResponsibility, arrayErrors, }) {
|
|
9
|
+
return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: "Description & Details" }) }), _jsxs(CardContent, { className: "space-y-6", children: [_jsx(TagFilterInput, { id: "skills", label: "Skills Required", items: skills, onAdd: onAddSkill, onRemove: onRemoveSkill, options: skillsOptions.map((item) => item.title), placeholder: "Select Skill", chipClassName: "flex items-center gap-1", errorMessage: arrayErrors && skills.length === 0 ? "At least one skill is required" : undefined }), _jsxs("div", { className: "flex flex-col md:flex-row gap-6", children: [_jsx("div", { className: "flex-1", children: _jsx(TagFilterInput, { id: "facilities", label: "Facilities Provided", items: facilities, onAdd: onAddFacility, onRemove: onRemoveFacility, options: facilitiesOptions.map((item) => item.title), placeholder: "Select Facility", chipClassName: "flex items-center gap-1", errorMessage: arrayErrors && facilities.length === 0 ? "Add at least 1 facility you are providing" : undefined }) }), _jsx("div", { className: "flex-1", children: _jsx(TagFilterInput, { id: "responsiblities", label: selectedType === "volunteer" ? "Volunteer Responsibilities Expected" : "Key Responsibilities Expected", items: responsibilities, onAdd: onAddResponsibility, onRemove: onRemoveResponsibility, options: responsibilitiesOptions.map((item) => item.title), placeholder: "Responsibility", chipClassName: "flex items-center gap-1", errorMessage: arrayErrors && responsibilities.length === 0 ? "Add at least 1 responsibility" : undefined }) })] }), _jsx(FormField, { control: form.control, name: "description", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Description" }), _jsx(FormControl, { children: _jsx(Textarea, { id: "description", placeholder: "Provide a detailed description of the opportunity", className: "min-h-32", ...field }) }), _jsx(FormMessage, {})] })) })] })] }));
|
|
10
|
+
}
|