@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.
Files changed (669) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +19 -0
  3. package/dist/chat/ChatMain.d.ts +12 -0
  4. package/dist/chat/ChatMain.d.ts.map +1 -0
  5. package/dist/chat/ChatMain.js +390 -0
  6. package/dist/chat/ChatSidebar.d.ts +15 -0
  7. package/dist/chat/ChatSidebar.d.ts.map +1 -0
  8. package/dist/chat/ChatSidebar.js +32 -0
  9. package/dist/chat/ConversationList.d.ts +20 -0
  10. package/dist/chat/ConversationList.d.ts.map +1 -0
  11. package/dist/chat/ConversationList.js +95 -0
  12. package/dist/chat/EventPanel.d.ts +11 -0
  13. package/dist/chat/EventPanel.d.ts.map +1 -0
  14. package/dist/chat/EventPanel.js +76 -0
  15. package/dist/chat/ExpensePanel.d.ts +14 -0
  16. package/dist/chat/ExpensePanel.d.ts.map +1 -0
  17. package/dist/chat/ExpensePanel.js +282 -0
  18. package/dist/chat/MessageBubble.d.ts +29 -0
  19. package/dist/chat/MessageBubble.d.ts.map +1 -0
  20. package/dist/chat/MessageBubble.js +425 -0
  21. package/dist/chat/MessageInput.d.ts +34 -0
  22. package/dist/chat/MessageInput.d.ts.map +1 -0
  23. package/dist/chat/MessageInput.js +330 -0
  24. package/dist/chat/MilestonePanel.d.ts +14 -0
  25. package/dist/chat/MilestonePanel.d.ts.map +1 -0
  26. package/dist/chat/MilestonePanel.js +209 -0
  27. package/dist/chat/components/ParticipantSelector.d.ts +11 -0
  28. package/dist/chat/components/ParticipantSelector.d.ts.map +1 -0
  29. package/dist/chat/components/ParticipantSelector.js +26 -0
  30. package/dist/chat/components/SplitInputs.d.ts +12 -0
  31. package/dist/chat/components/SplitInputs.d.ts.map +1 -0
  32. package/dist/chat/components/SplitInputs.js +84 -0
  33. package/dist/chat/components/SplitTypeSelector.d.ts +8 -0
  34. package/dist/chat/components/SplitTypeSelector.d.ts.map +1 -0
  35. package/dist/chat/components/SplitTypeSelector.js +13 -0
  36. package/dist/chat/dialogs/AddMemberDialog.d.ts +15 -0
  37. package/dist/chat/dialogs/AddMemberDialog.d.ts.map +1 -0
  38. package/dist/chat/dialogs/AddMemberDialog.js +43 -0
  39. package/dist/chat/dialogs/CameraDialog.d.ts +8 -0
  40. package/dist/chat/dialogs/CameraDialog.d.ts.map +1 -0
  41. package/dist/chat/dialogs/CameraDialog.js +81 -0
  42. package/dist/chat/dialogs/ChatInfoDialog.d.ts +10 -0
  43. package/dist/chat/dialogs/ChatInfoDialog.d.ts.map +1 -0
  44. package/dist/chat/dialogs/ChatInfoDialog.js +75 -0
  45. package/dist/chat/dialogs/ConversationSearchDialog.d.ts +8 -0
  46. package/dist/chat/dialogs/ConversationSearchDialog.d.ts.map +1 -0
  47. package/dist/chat/dialogs/ConversationSearchDialog.js +53 -0
  48. package/dist/chat/dialogs/CreateEventDialog.d.ts +22 -0
  49. package/dist/chat/dialogs/CreateEventDialog.d.ts.map +1 -0
  50. package/dist/chat/dialogs/CreateEventDialog.js +51 -0
  51. package/dist/chat/dialogs/CreatePollDialog.d.ts +8 -0
  52. package/dist/chat/dialogs/CreatePollDialog.d.ts.map +1 -0
  53. package/dist/chat/dialogs/CreatePollDialog.js +38 -0
  54. package/dist/chat/dialogs/EditPollDialog.d.ts +14 -0
  55. package/dist/chat/dialogs/EditPollDialog.d.ts.map +1 -0
  56. package/dist/chat/dialogs/EditPollDialog.js +33 -0
  57. package/dist/chat/dialogs/ExpenseAnalyticsDialog.d.ts +20 -0
  58. package/dist/chat/dialogs/ExpenseAnalyticsDialog.d.ts.map +1 -0
  59. package/dist/chat/dialogs/ExpenseAnalyticsDialog.js +58 -0
  60. package/dist/chat/dialogs/GroupInfoDialog.d.ts +10 -0
  61. package/dist/chat/dialogs/GroupInfoDialog.d.ts.map +1 -0
  62. package/dist/chat/dialogs/GroupInfoDialog.js +81 -0
  63. package/dist/chat/dialogs/GroupInfoViewDialog.d.ts +9 -0
  64. package/dist/chat/dialogs/GroupInfoViewDialog.d.ts.map +1 -0
  65. package/dist/chat/dialogs/GroupInfoViewDialog.js +15 -0
  66. package/dist/chat/dialogs/HostWorkspaceDialog.d.ts +9 -0
  67. package/dist/chat/dialogs/HostWorkspaceDialog.d.ts.map +1 -0
  68. package/dist/chat/dialogs/HostWorkspaceDialog.js +90 -0
  69. package/dist/chat/dialogs/MediaComposerDialog.d.ts +9 -0
  70. package/dist/chat/dialogs/MediaComposerDialog.d.ts.map +1 -0
  71. package/dist/chat/dialogs/MediaComposerDialog.js +41 -0
  72. package/dist/chat/dialogs/NewChatDialog.d.ts +2 -0
  73. package/dist/chat/dialogs/NewChatDialog.d.ts.map +1 -0
  74. package/dist/chat/dialogs/NewChatDialog.js +48 -0
  75. package/dist/chat/dialogs/NewGroupDialog.d.ts +2 -0
  76. package/dist/chat/dialogs/NewGroupDialog.d.ts.map +1 -0
  77. package/dist/chat/dialogs/NewGroupDialog.js +44 -0
  78. package/dist/chat/dialogs/ParticipantsDialog.d.ts +12 -0
  79. package/dist/chat/dialogs/ParticipantsDialog.d.ts.map +1 -0
  80. package/dist/chat/dialogs/ParticipantsDialog.js +134 -0
  81. package/dist/chat/dialogs/PayAndSplitDialog.d.ts +12 -0
  82. package/dist/chat/dialogs/PayAndSplitDialog.d.ts.map +1 -0
  83. package/dist/chat/dialogs/PayAndSplitDialog.js +124 -0
  84. package/dist/chat/dialogs/PaymentProfileDialog.d.ts +5 -0
  85. package/dist/chat/dialogs/PaymentProfileDialog.d.ts.map +1 -0
  86. package/dist/chat/dialogs/PaymentProfileDialog.js +45 -0
  87. package/dist/chat/dialogs/PollVotersDialog.d.ts +10 -0
  88. package/dist/chat/dialogs/PollVotersDialog.d.ts.map +1 -0
  89. package/dist/chat/dialogs/PollVotersDialog.js +11 -0
  90. package/dist/chat/dialogs/ShareLocationDialog.d.ts +8 -0
  91. package/dist/chat/dialogs/ShareLocationDialog.d.ts.map +1 -0
  92. package/dist/chat/dialogs/ShareLocationDialog.js +47 -0
  93. package/dist/chat/index.d.ts +8 -0
  94. package/dist/chat/index.d.ts.map +1 -0
  95. package/dist/chat/index.js +7 -0
  96. package/dist/components/CityAutocomplete.d.ts +5 -0
  97. package/dist/components/CityAutocomplete.d.ts.map +1 -0
  98. package/dist/components/CityAutocomplete.js +112 -0
  99. package/dist/components/CreateListingDropdown.d.ts +5 -0
  100. package/dist/components/CreateListingDropdown.d.ts.map +1 -0
  101. package/dist/components/CreateListingDropdown.js +21 -0
  102. package/dist/components/DestinationAutocomplete.d.ts +11 -0
  103. package/dist/components/DestinationAutocomplete.d.ts.map +1 -0
  104. package/dist/components/DestinationAutocomplete.js +24 -0
  105. package/dist/components/StateAutocomplete.d.ts +10 -0
  106. package/dist/components/StateAutocomplete.d.ts.map +1 -0
  107. package/dist/components/StateAutocomplete.js +34 -0
  108. package/dist/components/admin/AdminBookingRegistrationsList.d.ts +5 -0
  109. package/dist/components/admin/AdminBookingRegistrationsList.d.ts.map +1 -0
  110. package/dist/components/admin/AdminBookingRegistrationsList.js +69 -0
  111. package/dist/components/admin/AdminListingActionsWrapper.d.ts +9 -0
  112. package/dist/components/admin/AdminListingActionsWrapper.d.ts.map +1 -0
  113. package/dist/components/admin/AdminListingActionsWrapper.js +200 -0
  114. package/dist/components/ads/ActivateAdPlacementButton.d.ts +6 -0
  115. package/dist/components/ads/ActivateAdPlacementButton.d.ts.map +1 -0
  116. package/dist/components/ads/ActivateAdPlacementButton.js +27 -0
  117. package/dist/components/ads/AdOfferCard.d.ts +6 -0
  118. package/dist/components/ads/AdOfferCard.d.ts.map +1 -0
  119. package/dist/components/ads/AdOfferCard.js +15 -0
  120. package/dist/components/adventure/AdventureAvailabilityPlanner.d.ts +17 -0
  121. package/dist/components/adventure/AdventureAvailabilityPlanner.d.ts.map +1 -0
  122. package/dist/components/adventure/AdventureAvailabilityPlanner.js +106 -0
  123. package/dist/components/adventure/AdventureQueryCard.d.ts +5 -0
  124. package/dist/components/adventure/AdventureQueryCard.d.ts.map +1 -0
  125. package/dist/components/adventure/AdventureQueryCard.js +65 -0
  126. package/dist/components/adventure/AdventureSlotBuilder.d.ts +41 -0
  127. package/dist/components/adventure/AdventureSlotBuilder.d.ts.map +1 -0
  128. package/dist/components/adventure/AdventureSlotBuilder.js +146 -0
  129. package/dist/components/booking/booking-form.d.ts +39 -0
  130. package/dist/components/booking/booking-form.d.ts.map +1 -0
  131. package/dist/components/booking/booking-form.js +847 -0
  132. package/dist/components/brand/BrandPageView.d.ts +8 -0
  133. package/dist/components/brand/BrandPageView.d.ts.map +1 -0
  134. package/dist/components/brand/BrandPageView.js +97 -0
  135. package/dist/components/companion/AnonymousChat.d.ts +22 -0
  136. package/dist/components/companion/AnonymousChat.d.ts.map +1 -0
  137. package/dist/components/companion/AnonymousChat.js +24 -0
  138. package/dist/components/companion/SwipeCard.d.ts +25 -0
  139. package/dist/components/companion/SwipeCard.d.ts.map +1 -0
  140. package/dist/components/companion/SwipeCard.js +58 -0
  141. package/dist/components/create-flow/ConfirmDiscardDialog.d.ts +11 -0
  142. package/dist/components/create-flow/ConfirmDiscardDialog.d.ts.map +1 -0
  143. package/dist/components/create-flow/ConfirmDiscardDialog.js +14 -0
  144. package/dist/components/create-flow/EntityEditLoadingState.d.ts +2 -0
  145. package/dist/components/create-flow/EntityEditLoadingState.d.ts.map +1 -0
  146. package/dist/components/create-flow/EntityEditLoadingState.js +6 -0
  147. package/dist/components/create-flow/EntityFormCompletionState.d.ts +12 -0
  148. package/dist/components/create-flow/EntityFormCompletionState.d.ts.map +1 -0
  149. package/dist/components/create-flow/EntityFormCompletionState.js +10 -0
  150. package/dist/components/create-flow/EntityFormHeader.d.ts +9 -0
  151. package/dist/components/create-flow/EntityFormHeader.d.ts.map +1 -0
  152. package/dist/components/create-flow/EntityFormHeader.js +7 -0
  153. package/dist/components/create-flow/EntityFormPageFrame.d.ts +10 -0
  154. package/dist/components/create-flow/EntityFormPageFrame.d.ts.map +1 -0
  155. package/dist/components/create-flow/EntityFormPageFrame.js +10 -0
  156. package/dist/components/create-flow/ImageUploader.d.ts +30 -0
  157. package/dist/components/create-flow/ImageUploader.d.ts.map +1 -0
  158. package/dist/components/create-flow/ImageUploader.js +193 -0
  159. package/dist/components/create-flow/MultiStepWizard.d.ts +25 -0
  160. package/dist/components/create-flow/MultiStepWizard.d.ts.map +1 -0
  161. package/dist/components/create-flow/MultiStepWizard.js +31 -0
  162. package/dist/components/create-flow/ReviewConfirmationCard.d.ts +8 -0
  163. package/dist/components/create-flow/ReviewConfirmationCard.d.ts.map +1 -0
  164. package/dist/components/create-flow/ReviewConfirmationCard.js +5 -0
  165. package/dist/components/create-flow/ReviewMetricGrid.d.ts +15 -0
  166. package/dist/components/create-flow/ReviewMetricGrid.d.ts.map +1 -0
  167. package/dist/components/create-flow/ReviewMetricGrid.js +8 -0
  168. package/dist/components/create-flow/TemplateSelectionDialog.d.ts +17 -0
  169. package/dist/components/create-flow/TemplateSelectionDialog.d.ts.map +1 -0
  170. package/dist/components/create-flow/TemplateSelectionDialog.js +7 -0
  171. package/dist/components/discounts/OffersAndCouponsSheet.d.ts +13 -0
  172. package/dist/components/discounts/OffersAndCouponsSheet.d.ts.map +1 -0
  173. package/dist/components/discounts/OffersAndCouponsSheet.js +81 -0
  174. package/dist/components/enquiry/EnquiryFormParts.d.ts +40 -0
  175. package/dist/components/enquiry/EnquiryFormParts.d.ts.map +1 -0
  176. package/dist/components/enquiry/EnquiryFormParts.js +29 -0
  177. package/dist/components/form-sections/FaqSection.d.ts +24 -0
  178. package/dist/components/form-sections/FaqSection.d.ts.map +1 -0
  179. package/dist/components/form-sections/FaqSection.js +17 -0
  180. package/dist/components/form-sections/OpportunityBasicsSection.d.ts +8 -0
  181. package/dist/components/form-sections/OpportunityBasicsSection.d.ts.map +1 -0
  182. package/dist/components/form-sections/OpportunityBasicsSection.js +26 -0
  183. package/dist/components/form-sections/OpportunityDetailsSection.d.ts +18 -0
  184. package/dist/components/form-sections/OpportunityDetailsSection.d.ts.map +1 -0
  185. package/dist/components/form-sections/OpportunityDetailsSection.js +10 -0
  186. package/dist/components/form-sections/OpportunityTypeSection.d.ts +7 -0
  187. package/dist/components/form-sections/OpportunityTypeSection.d.ts.map +1 -0
  188. package/dist/components/form-sections/OpportunityTypeSection.js +15 -0
  189. package/dist/components/form-sections/PackageDetailsSection.d.ts +22 -0
  190. package/dist/components/form-sections/PackageDetailsSection.d.ts.map +1 -0
  191. package/dist/components/form-sections/PackageDetailsSection.js +20 -0
  192. package/dist/components/form-sections/PackageItinerarySection.d.ts +21 -0
  193. package/dist/components/form-sections/PackageItinerarySection.d.ts.map +1 -0
  194. package/dist/components/form-sections/PackageItinerarySection.js +112 -0
  195. package/dist/components/form-sections/PackagePricingSection.d.ts +8 -0
  196. package/dist/components/form-sections/PackagePricingSection.d.ts.map +1 -0
  197. package/dist/components/form-sections/PackagePricingSection.js +11 -0
  198. package/dist/components/form-sections/PackageReviewSection.d.ts +12 -0
  199. package/dist/components/form-sections/PackageReviewSection.d.ts.map +1 -0
  200. package/dist/components/form-sections/PackageReviewSection.js +26 -0
  201. package/dist/components/form-sections/RentalBasicsSection.d.ts +12 -0
  202. package/dist/components/form-sections/RentalBasicsSection.d.ts.map +1 -0
  203. package/dist/components/form-sections/RentalBasicsSection.js +91 -0
  204. package/dist/components/form-sections/RentalCapacitySection.d.ts +9 -0
  205. package/dist/components/form-sections/RentalCapacitySection.d.ts.map +1 -0
  206. package/dist/components/form-sections/RentalCapacitySection.js +23 -0
  207. package/dist/components/form-sections/RentalLocationSection.d.ts +10 -0
  208. package/dist/components/form-sections/RentalLocationSection.d.ts.map +1 -0
  209. package/dist/components/form-sections/RentalLocationSection.js +41 -0
  210. package/dist/components/form-sections/RentalReviewSection.d.ts +10 -0
  211. package/dist/components/form-sections/RentalReviewSection.d.ts.map +1 -0
  212. package/dist/components/form-sections/RentalReviewSection.js +27 -0
  213. package/dist/components/form-sections/RentalRulesSection.d.ts +7 -0
  214. package/dist/components/form-sections/RentalRulesSection.d.ts.map +1 -0
  215. package/dist/components/form-sections/RentalRulesSection.js +10 -0
  216. package/dist/components/form-sections/RentalSpecsSection.d.ts +7 -0
  217. package/dist/components/form-sections/RentalSpecsSection.d.ts.map +1 -0
  218. package/dist/components/form-sections/RentalSpecsSection.js +10 -0
  219. package/dist/components/host-dashboard/HostCalendar.d.ts +8 -0
  220. package/dist/components/host-dashboard/HostCalendar.d.ts.map +1 -0
  221. package/dist/components/host-dashboard/HostCalendar.js +43 -0
  222. package/dist/components/host-dashboard/HostCalendarGrid.d.ts +34 -0
  223. package/dist/components/host-dashboard/HostCalendarGrid.d.ts.map +1 -0
  224. package/dist/components/host-dashboard/HostCalendarGrid.js +30 -0
  225. package/dist/components/host-dashboard/HostListingMultiSelect.d.ts +12 -0
  226. package/dist/components/host-dashboard/HostListingMultiSelect.d.ts.map +1 -0
  227. package/dist/components/host-dashboard/HostListingMultiSelect.js +24 -0
  228. package/dist/components/host-dashboard/HostManageCalendarShell.d.ts +17 -0
  229. package/dist/components/host-dashboard/HostManageCalendarShell.d.ts.map +1 -0
  230. package/dist/components/host-dashboard/HostManageCalendarShell.js +5 -0
  231. package/dist/components/host-dashboard/HostSidebarNavigation.d.ts +2 -0
  232. package/dist/components/host-dashboard/HostSidebarNavigation.d.ts.map +1 -0
  233. package/dist/components/host-dashboard/HostSidebarNavigation.js +299 -0
  234. package/dist/components/host-dashboard/ManageFeatureSwitcher.d.ts +15 -0
  235. package/dist/components/host-dashboard/ManageFeatureSwitcher.d.ts.map +1 -0
  236. package/dist/components/host-dashboard/ManageFeatureSwitcher.js +43 -0
  237. package/dist/components/host-dashboard/PageHeader.d.ts +14 -0
  238. package/dist/components/host-dashboard/PageHeader.d.ts.map +1 -0
  239. package/dist/components/host-dashboard/PageHeader.js +8 -0
  240. package/dist/components/host-dashboard/PlaceholderPage.d.ts +4 -0
  241. package/dist/components/host-dashboard/PlaceholderPage.d.ts.map +1 -0
  242. package/dist/components/host-dashboard/PlaceholderPage.js +9 -0
  243. package/dist/components/host-dashboard/StatCard.d.ts +15 -0
  244. package/dist/components/host-dashboard/StatCard.d.ts.map +1 -0
  245. package/dist/components/host-dashboard/StatCard.js +38 -0
  246. package/dist/components/layout/AppProviders.d.ts +5 -0
  247. package/dist/components/layout/AppProviders.d.ts.map +1 -0
  248. package/dist/components/layout/AppProviders.js +11 -0
  249. package/dist/components/layout/PublicRouteLayout.d.ts +5 -0
  250. package/dist/components/layout/PublicRouteLayout.d.ts.map +1 -0
  251. package/dist/components/layout/PublicRouteLayout.js +5 -0
  252. package/dist/components/layout/PublicShell.d.ts +5 -0
  253. package/dist/components/layout/PublicShell.d.ts.map +1 -0
  254. package/dist/components/layout/PublicShell.js +5 -0
  255. package/dist/components/location/LocationPicker.d.ts +27 -0
  256. package/dist/components/location/LocationPicker.d.ts.map +1 -0
  257. package/dist/components/location/LocationPicker.js +415 -0
  258. package/dist/components/location/LocationPreview.d.ts +11 -0
  259. package/dist/components/location/LocationPreview.d.ts.map +1 -0
  260. package/dist/components/location/LocationPreview.js +12 -0
  261. package/dist/components/location/MapPicker.d.ts +9 -0
  262. package/dist/components/location/MapPicker.d.ts.map +1 -0
  263. package/dist/components/location/MapPicker.js +40 -0
  264. package/dist/components/location/MapPreview.d.ts +8 -0
  265. package/dist/components/location/MapPreview.d.ts.map +1 -0
  266. package/dist/components/location/MapPreview.js +17 -0
  267. package/dist/components/location/PlaceLinkInline.d.ts +14 -0
  268. package/dist/components/location/PlaceLinkInline.d.ts.map +1 -0
  269. package/dist/components/location/PlaceLinkInline.js +30 -0
  270. package/dist/components/location/leafletMap.d.ts +8 -0
  271. package/dist/components/location/leafletMap.d.ts.map +1 -0
  272. package/dist/components/location/leafletMap.js +74 -0
  273. package/dist/components/ui/GuestOrLoginDialog.d.ts +11 -0
  274. package/dist/components/ui/GuestOrLoginDialog.d.ts.map +1 -0
  275. package/dist/components/ui/GuestOrLoginDialog.js +19 -0
  276. package/dist/components/ui/ImageGalleryViewer.d.ts +10 -0
  277. package/dist/components/ui/ImageGalleryViewer.d.ts.map +1 -0
  278. package/dist/components/ui/ImageGalleryViewer.js +59 -0
  279. package/dist/components/ui/LocationInput.d.ts +12 -0
  280. package/dist/components/ui/LocationInput.d.ts.map +1 -0
  281. package/dist/components/ui/LocationInput.js +39 -0
  282. package/dist/components/ui/PropertyGalleryClient.d.ts +8 -0
  283. package/dist/components/ui/PropertyGalleryClient.d.ts.map +1 -0
  284. package/dist/components/ui/PropertyGalleryClient.js +22 -0
  285. package/dist/components/ui/calendar.d.ts +9 -0
  286. package/dist/components/ui/calendar.d.ts.map +1 -0
  287. package/dist/components/ui/calendar.js +75 -0
  288. package/dist/components/ui/dashboard/admin-adventures-table.d.ts +12 -0
  289. package/dist/components/ui/dashboard/admin-adventures-table.d.ts.map +1 -0
  290. package/dist/components/ui/dashboard/admin-adventures-table.js +94 -0
  291. package/dist/components/ui/dashboard/admin-blogs-table.d.ts +11 -0
  292. package/dist/components/ui/dashboard/admin-blogs-table.d.ts.map +1 -0
  293. package/dist/components/ui/dashboard/admin-blogs-table.js +58 -0
  294. package/dist/components/ui/dashboard/admin-opportunities-table.d.ts +20 -0
  295. package/dist/components/ui/dashboard/admin-opportunities-table.d.ts.map +1 -0
  296. package/dist/components/ui/dashboard/admin-opportunities-table.js +139 -0
  297. package/dist/components/ui/dashboard/admin-rentals-table.d.ts +12 -0
  298. package/dist/components/ui/dashboard/admin-rentals-table.d.ts.map +1 -0
  299. package/dist/components/ui/dashboard/admin-rentals-table.js +85 -0
  300. package/dist/components/ui/dashboard/admin-travel-package-table.d.ts +16 -0
  301. package/dist/components/ui/dashboard/admin-travel-package-table.d.ts.map +1 -0
  302. package/dist/components/ui/dashboard/admin-travel-package-table.js +103 -0
  303. package/dist/components/ui/dashboard/adventures-table.d.ts +16 -0
  304. package/dist/components/ui/dashboard/adventures-table.d.ts.map +1 -0
  305. package/dist/components/ui/dashboard/adventures-table.js +151 -0
  306. package/dist/components/ui/dashboard/approver-applications-table.d.ts +13 -0
  307. package/dist/components/ui/dashboard/approver-applications-table.d.ts.map +1 -0
  308. package/dist/components/ui/dashboard/approver-applications-table.js +85 -0
  309. package/dist/components/ui/dashboard/approver-package-enquiries-table.d.ts +11 -0
  310. package/dist/components/ui/dashboard/approver-package-enquiries-table.d.ts.map +1 -0
  311. package/dist/components/ui/dashboard/approver-package-enquiries-table.js +102 -0
  312. package/dist/components/ui/dashboard/archive-confirm-modal.d.ts +9 -0
  313. package/dist/components/ui/dashboard/archive-confirm-modal.d.ts.map +1 -0
  314. package/dist/components/ui/dashboard/archive-confirm-modal.js +6 -0
  315. package/dist/components/ui/dashboard/blogs-table.d.ts +10 -0
  316. package/dist/components/ui/dashboard/blogs-table.d.ts.map +1 -0
  317. package/dist/components/ui/dashboard/blogs-table.js +62 -0
  318. package/dist/components/ui/dashboard/bookings-table.d.ts +13 -0
  319. package/dist/components/ui/dashboard/bookings-table.d.ts.map +1 -0
  320. package/dist/components/ui/dashboard/bookings-table.js +165 -0
  321. package/dist/components/ui/dashboard/dashboard-page-shell.d.ts +7 -0
  322. package/dist/components/ui/dashboard/dashboard-page-shell.d.ts.map +1 -0
  323. package/dist/components/ui/dashboard/dashboard-page-shell.js +5 -0
  324. package/dist/components/ui/dashboard/data-table-shell.d.ts +18 -0
  325. package/dist/components/ui/dashboard/data-table-shell.d.ts.map +1 -0
  326. package/dist/components/ui/dashboard/data-table-shell.js +6 -0
  327. package/dist/components/ui/dashboard/delete-confirm-modal.d.ts +9 -0
  328. package/dist/components/ui/dashboard/delete-confirm-modal.d.ts.map +1 -0
  329. package/dist/components/ui/dashboard/delete-confirm-modal.js +6 -0
  330. package/dist/components/ui/dashboard/entity-list-page-state.d.ts +25 -0
  331. package/dist/components/ui/dashboard/entity-list-page-state.d.ts.map +1 -0
  332. package/dist/components/ui/dashboard/entity-list-page-state.js +17 -0
  333. package/dist/components/ui/dashboard/generic-entity-table.d.ts +36 -0
  334. package/dist/components/ui/dashboard/generic-entity-table.d.ts.map +1 -0
  335. package/dist/components/ui/dashboard/generic-entity-table.js +203 -0
  336. package/dist/components/ui/dashboard/opportunities-table.d.ts +17 -0
  337. package/dist/components/ui/dashboard/opportunities-table.d.ts.map +1 -0
  338. package/dist/components/ui/dashboard/opportunities-table.js +143 -0
  339. package/dist/components/ui/dashboard/rentals-table.d.ts +17 -0
  340. package/dist/components/ui/dashboard/rentals-table.d.ts.map +1 -0
  341. package/dist/components/ui/dashboard/rentals-table.js +155 -0
  342. package/dist/components/ui/dashboard/restore-confirm-modal.d.ts +9 -0
  343. package/dist/components/ui/dashboard/restore-confirm-modal.d.ts.map +1 -0
  344. package/dist/components/ui/dashboard/restore-confirm-modal.js +6 -0
  345. package/dist/components/ui/dashboard/stats-card.d.ts +6 -0
  346. package/dist/components/ui/dashboard/stats-card.d.ts.map +1 -0
  347. package/dist/components/ui/dashboard/stats-card.js +5 -0
  348. package/dist/components/ui/dashboard/travel-packages-table.d.ts +16 -0
  349. package/dist/components/ui/dashboard/travel-packages-table.d.ts.map +1 -0
  350. package/dist/components/ui/dashboard/travel-packages-table.js +134 -0
  351. package/dist/components/ui/dashboard/user-applications-table.d.ts +12 -0
  352. package/dist/components/ui/dashboard/user-applications-table.d.ts.map +1 -0
  353. package/dist/components/ui/dashboard/user-applications-table.js +79 -0
  354. package/dist/components/ui/loading-skeleton.d.ts +10 -0
  355. package/dist/components/ui/loading-skeleton.d.ts.map +1 -0
  356. package/dist/components/ui/loading-skeleton.js +49 -0
  357. package/dist/components/ui/misc/IosPwaNavBar.d.ts +8 -0
  358. package/dist/components/ui/misc/IosPwaNavBar.d.ts.map +1 -0
  359. package/dist/components/ui/misc/IosPwaNavBar.js +25 -0
  360. package/dist/components/ui/misc/document-upload-button.d.ts +10 -0
  361. package/dist/components/ui/misc/document-upload-button.d.ts.map +1 -0
  362. package/dist/components/ui/misc/document-upload-button.js +12 -0
  363. package/dist/components/ui/misc/empty-state.d.ts +9 -0
  364. package/dist/components/ui/misc/empty-state.d.ts.map +1 -0
  365. package/dist/components/ui/misc/empty-state.js +4 -0
  366. package/dist/components/ui/misc/image-cropper.d.ts +9 -0
  367. package/dist/components/ui/misc/image-cropper.d.ts.map +1 -0
  368. package/dist/components/ui/misc/image-cropper.js +28 -0
  369. package/dist/components/ui/misc/pwa-install-button.d.ts +2 -0
  370. package/dist/components/ui/misc/pwa-install-button.d.ts.map +1 -0
  371. package/dist/components/ui/misc/pwa-install-button.js +17 -0
  372. package/dist/components/ui/misc/rental-tile.d.ts +6 -0
  373. package/dist/components/ui/misc/rental-tile.d.ts.map +1 -0
  374. package/dist/components/ui/misc/rental-tile.js +56 -0
  375. package/dist/components/ui/misc/skeleton-extras.d.ts +32 -0
  376. package/dist/components/ui/misc/skeleton-extras.d.ts.map +1 -0
  377. package/dist/components/ui/misc/skeleton-extras.js +58 -0
  378. package/dist/components/ui/misc/tile.d.ts +4 -0
  379. package/dist/components/ui/misc/tile.d.ts.map +1 -0
  380. package/dist/components/ui/misc/tile.js +45 -0
  381. package/dist/components/ui/misc/whatsapp-help.d.ts +7 -0
  382. package/dist/components/ui/misc/whatsapp-help.d.ts.map +1 -0
  383. package/dist/components/ui/misc/whatsapp-help.js +6 -0
  384. package/dist/components/ui/motion.d.ts +14 -0
  385. package/dist/components/ui/motion.d.ts.map +1 -0
  386. package/dist/components/ui/motion.js +17 -0
  387. package/dist/components/ui/trippeaze/breadcrumb-trail.d.ts +10 -0
  388. package/dist/components/ui/trippeaze/breadcrumb-trail.d.ts.map +1 -0
  389. package/dist/components/ui/trippeaze/breadcrumb-trail.js +15 -0
  390. package/dist/components/ui/trippeaze/chip-tabs.d.ts +13 -0
  391. package/dist/components/ui/trippeaze/chip-tabs.d.ts.map +1 -0
  392. package/dist/components/ui/trippeaze/chip-tabs.js +6 -0
  393. package/dist/components/ui/trippeaze/page-shell.d.ts +22 -0
  394. package/dist/components/ui/trippeaze/page-shell.d.ts.map +1 -0
  395. package/dist/components/ui/trippeaze/page-shell.js +15 -0
  396. package/dist/components/ui/trippeaze/search-input.d.ts +5 -0
  397. package/dist/components/ui/trippeaze/search-input.d.ts.map +1 -0
  398. package/dist/components/ui/trippeaze/search-input.js +7 -0
  399. package/dist/components/user-dashboard/UserDashboardShellSidebar.d.ts +2 -0
  400. package/dist/components/user-dashboard/UserDashboardShellSidebar.d.ts.map +1 -0
  401. package/dist/components/user-dashboard/UserDashboardShellSidebar.js +17 -0
  402. package/dist/components/user-dashboard/UserSidebarNav.d.ts +2 -0
  403. package/dist/components/user-dashboard/UserSidebarNav.d.ts.map +1 -0
  404. package/dist/components/user-dashboard/UserSidebarNav.js +68 -0
  405. package/dist/dashboard/action-buttons.d.ts +17 -0
  406. package/dist/dashboard/action-buttons.d.ts.map +1 -0
  407. package/dist/dashboard/action-buttons.js +22 -0
  408. package/dist/dashboard/app-sidebar.d.ts +3 -0
  409. package/dist/dashboard/app-sidebar.d.ts.map +1 -0
  410. package/dist/dashboard/app-sidebar.js +61 -0
  411. package/dist/dashboard/card-header.d.ts +11 -0
  412. package/dist/dashboard/card-header.d.ts.map +1 -0
  413. package/dist/dashboard/card-header.js +7 -0
  414. package/dist/dashboard/dashboard-components.d.ts +13 -0
  415. package/dist/dashboard/dashboard-components.d.ts.map +1 -0
  416. package/dist/dashboard/dashboard-components.js +10 -0
  417. package/dist/dashboard/data-table.d.ts +24 -0
  418. package/dist/dashboard/data-table.d.ts.map +1 -0
  419. package/dist/dashboard/data-table.js +88 -0
  420. package/dist/dashboard/nav-main.d.ts +9 -0
  421. package/dist/dashboard/nav-main.d.ts.map +1 -0
  422. package/dist/dashboard/nav-main.js +9 -0
  423. package/dist/dashboard/nav-secondary.d.ts +10 -0
  424. package/dist/dashboard/nav-secondary.d.ts.map +1 -0
  425. package/dist/dashboard/nav-secondary.js +6 -0
  426. package/dist/dashboard/stats-card.d.ts +6 -0
  427. package/dist/dashboard/stats-card.d.ts.map +1 -0
  428. package/dist/dashboard/stats-card.js +5 -0
  429. package/dist/dashboard/table.d.ts +11 -0
  430. package/dist/dashboard/table.d.ts.map +1 -0
  431. package/dist/dashboard/table.js +21 -0
  432. package/dist/header/mobile-nav-item.d.ts +9 -0
  433. package/dist/header/mobile-nav-item.d.ts.map +1 -0
  434. package/dist/header/mobile-nav-item.js +6 -0
  435. package/dist/header/mobile-navbar.d.ts +5 -0
  436. package/dist/header/mobile-navbar.d.ts.map +1 -0
  437. package/dist/header/mobile-navbar.js +30 -0
  438. package/dist/header/nav-item.d.ts +10 -0
  439. package/dist/header/nav-item.d.ts.map +1 -0
  440. package/dist/header/nav-item.js +6 -0
  441. package/dist/index.d.ts +85 -0
  442. package/dist/index.d.ts.map +1 -0
  443. package/dist/index.js +85 -0
  444. package/dist/layout/AppProviders.d.ts +5 -0
  445. package/dist/layout/AppProviders.d.ts.map +1 -0
  446. package/dist/layout/AppProviders.js +11 -0
  447. package/dist/layout/PublicShell.d.ts +5 -0
  448. package/dist/layout/PublicShell.d.ts.map +1 -0
  449. package/dist/layout/PublicShell.js +5 -0
  450. package/dist/main/footer.d.ts +6 -0
  451. package/dist/main/footer.d.ts.map +1 -0
  452. package/dist/main/footer.js +58 -0
  453. package/dist/main/navbar.d.ts +6 -0
  454. package/dist/main/navbar.d.ts.map +1 -0
  455. package/dist/main/navbar.js +130 -0
  456. package/dist/main/paginationBar.d.ts +5 -0
  457. package/dist/main/paginationBar.d.ts.map +1 -0
  458. package/dist/main/paginationBar.js +28 -0
  459. package/dist/main/portfolio/portfolioItem.d.ts +7 -0
  460. package/dist/main/portfolio/portfolioItem.d.ts.map +1 -0
  461. package/dist/main/portfolio/portfolioItem.js +7 -0
  462. package/dist/main/portfolio/portfolioPopup.d.ts +8 -0
  463. package/dist/main/portfolio/portfolioPopup.d.ts.map +1 -0
  464. package/dist/main/portfolio/portfolioPopup.js +71 -0
  465. package/dist/main/review-page.d.ts +14 -0
  466. package/dist/main/review-page.d.ts.map +1 -0
  467. package/dist/main/review-page.js +209 -0
  468. package/dist/misc/IosPwaNavBar.d.ts +8 -0
  469. package/dist/misc/IosPwaNavBar.d.ts.map +1 -0
  470. package/dist/misc/IosPwaNavBar.js +25 -0
  471. package/dist/misc/accordion.d.ts +7 -0
  472. package/dist/misc/accordion.d.ts.map +1 -0
  473. package/dist/misc/accordion.js +18 -0
  474. package/dist/misc/alert-dialog.d.ts +14 -0
  475. package/dist/misc/alert-dialog.d.ts.map +1 -0
  476. package/dist/misc/alert-dialog.js +39 -0
  477. package/dist/misc/alert.d.ts +9 -0
  478. package/dist/misc/alert.d.ts.map +1 -0
  479. package/dist/misc/alert.js +24 -0
  480. package/dist/misc/alertdialogclaude.d.ts +15 -0
  481. package/dist/misc/alertdialogclaude.d.ts.map +1 -0
  482. package/dist/misc/alertdialogclaude.js +151 -0
  483. package/dist/misc/avatar.d.ts +6 -0
  484. package/dist/misc/avatar.d.ts.map +1 -0
  485. package/dist/misc/avatar.js +14 -0
  486. package/dist/misc/badge.d.ts +9 -0
  487. package/dist/misc/badge.d.ts.map +1 -0
  488. package/dist/misc/badge.js +22 -0
  489. package/dist/misc/button.d.ts +13 -0
  490. package/dist/misc/button.d.ts.map +1 -0
  491. package/dist/misc/button.js +59 -0
  492. package/dist/misc/card.d.ts +9 -0
  493. package/dist/misc/card.d.ts.map +1 -0
  494. package/dist/misc/card.js +21 -0
  495. package/dist/misc/carousel.d.ts +20 -0
  496. package/dist/misc/carousel.d.ts.map +1 -0
  497. package/dist/misc/carousel.js +99 -0
  498. package/dist/misc/checkbox.d.ts +4 -0
  499. package/dist/misc/checkbox.d.ts.map +1 -0
  500. package/dist/misc/checkbox.js +9 -0
  501. package/dist/misc/command.d.ts +18 -0
  502. package/dist/misc/command.d.ts.map +1 -0
  503. package/dist/misc/command.js +34 -0
  504. package/dist/misc/datepicker.d.ts +15 -0
  505. package/dist/misc/datepicker.d.ts.map +1 -0
  506. package/dist/misc/datepicker.js +221 -0
  507. package/dist/misc/dialog.d.ts +13 -0
  508. package/dist/misc/dialog.d.ts.map +1 -0
  509. package/dist/misc/dialog.js +36 -0
  510. package/dist/misc/discount-strategy-editor.d.ts +22 -0
  511. package/dist/misc/discount-strategy-editor.d.ts.map +1 -0
  512. package/dist/misc/discount-strategy-editor.js +61 -0
  513. package/dist/misc/document-upload-button.d.ts +12 -0
  514. package/dist/misc/document-upload-button.d.ts.map +1 -0
  515. package/dist/misc/document-upload-button.js +27 -0
  516. package/dist/misc/dropdown-menu.d.ts +25 -0
  517. package/dist/misc/dropdown-menu.d.ts.map +1 -0
  518. package/dist/misc/dropdown-menu.js +51 -0
  519. package/dist/misc/empty-state.d.ts +10 -0
  520. package/dist/misc/empty-state.d.ts.map +1 -0
  521. package/dist/misc/empty-state.js +5 -0
  522. package/dist/misc/faq.d.ts +5 -0
  523. package/dist/misc/faq.d.ts.map +1 -0
  524. package/dist/misc/faq.js +5 -0
  525. package/dist/misc/file-preview.d.ts +9 -0
  526. package/dist/misc/file-preview.d.ts.map +1 -0
  527. package/dist/misc/file-preview.js +76 -0
  528. package/dist/misc/filter.d.ts +12 -0
  529. package/dist/misc/filter.d.ts.map +1 -0
  530. package/dist/misc/filter.js +44 -0
  531. package/dist/misc/filterBar.d.ts +39 -0
  532. package/dist/misc/filterBar.d.ts.map +1 -0
  533. package/dist/misc/filterBar.js +384 -0
  534. package/dist/misc/form.d.ts +25 -0
  535. package/dist/misc/form.d.ts.map +1 -0
  536. package/dist/misc/form.js +60 -0
  537. package/dist/misc/image-compressor.d.ts +29 -0
  538. package/dist/misc/image-compressor.d.ts.map +1 -0
  539. package/dist/misc/image-compressor.js +70 -0
  540. package/dist/misc/image-cropper.d.ts +10 -0
  541. package/dist/misc/image-cropper.d.ts.map +1 -0
  542. package/dist/misc/image-cropper.js +44 -0
  543. package/dist/misc/input.d.ts +7 -0
  544. package/dist/misc/input.d.ts.map +1 -0
  545. package/dist/misc/input.js +11 -0
  546. package/dist/misc/label.d.ts +4 -0
  547. package/dist/misc/label.d.ts.map +1 -0
  548. package/dist/misc/label.js +8 -0
  549. package/dist/misc/line-carousel.d.ts +9 -0
  550. package/dist/misc/line-carousel.d.ts.map +1 -0
  551. package/dist/misc/line-carousel.js +5 -0
  552. package/dist/misc/listing-wishlist-button.d.ts +13 -0
  553. package/dist/misc/listing-wishlist-button.d.ts.map +1 -0
  554. package/dist/misc/listing-wishlist-button.js +42 -0
  555. package/dist/misc/location/leafletMap.d.ts +8 -0
  556. package/dist/misc/location/leafletMap.d.ts.map +1 -0
  557. package/dist/misc/location/leafletMap.js +62 -0
  558. package/dist/misc/location/locationPicker.d.ts +5 -0
  559. package/dist/misc/location/locationPicker.d.ts.map +1 -0
  560. package/dist/misc/location/locationPicker.js +95 -0
  561. package/dist/misc/location-autocomplete.d.ts +28 -0
  562. package/dist/misc/location-autocomplete.d.ts.map +1 -0
  563. package/dist/misc/location-autocomplete.js +121 -0
  564. package/dist/misc/newsLetter.d.ts +3 -0
  565. package/dist/misc/newsLetter.d.ts.map +1 -0
  566. package/dist/misc/newsLetter.js +41 -0
  567. package/dist/misc/non-modal-multi-select.d.ts +21 -0
  568. package/dist/misc/non-modal-multi-select.d.ts.map +1 -0
  569. package/dist/misc/non-modal-multi-select.js +25 -0
  570. package/dist/misc/non-modal-select.d.ts +22 -0
  571. package/dist/misc/non-modal-select.d.ts.map +1 -0
  572. package/dist/misc/non-modal-select.js +23 -0
  573. package/dist/misc/notification.d.ts +7 -0
  574. package/dist/misc/notification.d.ts.map +1 -0
  575. package/dist/misc/notification.js +157 -0
  576. package/dist/misc/pagination.d.ts +15 -0
  577. package/dist/misc/pagination.d.ts.map +1 -0
  578. package/dist/misc/pagination.js +30 -0
  579. package/dist/misc/password-eye.d.ts +7 -0
  580. package/dist/misc/password-eye.d.ts.map +1 -0
  581. package/dist/misc/password-eye.js +7 -0
  582. package/dist/misc/popover.d.ts +7 -0
  583. package/dist/misc/popover.d.ts.map +1 -0
  584. package/dist/misc/popover.js +17 -0
  585. package/dist/misc/pricing-strategy-editor.d.ts +17 -0
  586. package/dist/misc/pricing-strategy-editor.d.ts.map +1 -0
  587. package/dist/misc/pricing-strategy-editor.js +80 -0
  588. package/dist/misc/progress.d.ts +4 -0
  589. package/dist/misc/progress.d.ts.map +1 -0
  590. package/dist/misc/progress.js +8 -0
  591. package/dist/misc/pwa-install-button.d.ts +9 -0
  592. package/dist/misc/pwa-install-button.d.ts.map +1 -0
  593. package/dist/misc/pwa-install-button.js +160 -0
  594. package/dist/misc/rental-tile.d.ts +6 -0
  595. package/dist/misc/rental-tile.d.ts.map +1 -0
  596. package/dist/misc/rental-tile.js +33 -0
  597. package/dist/misc/scroll-area.d.ts +5 -0
  598. package/dist/misc/scroll-area.d.ts.map +1 -0
  599. package/dist/misc/scroll-area.js +13 -0
  600. package/dist/misc/searchBar.d.ts +6 -0
  601. package/dist/misc/searchBar.d.ts.map +1 -0
  602. package/dist/misc/searchBar.js +89 -0
  603. package/dist/misc/searchBox.d.ts +13 -0
  604. package/dist/misc/searchBox.d.ts.map +1 -0
  605. package/dist/misc/searchBox.js +63 -0
  606. package/dist/misc/select.d.ts +13 -0
  607. package/dist/misc/select.d.ts.map +1 -0
  608. package/dist/misc/select.js +38 -0
  609. package/dist/misc/separator.d.ts +4 -0
  610. package/dist/misc/separator.d.ts.map +1 -0
  611. package/dist/misc/separator.js +8 -0
  612. package/dist/misc/share.d.ts +5 -0
  613. package/dist/misc/share.d.ts.map +1 -0
  614. package/dist/misc/share.js +157 -0
  615. package/dist/misc/sheet.d.ts +13 -0
  616. package/dist/misc/sheet.d.ts.map +1 -0
  617. package/dist/misc/sheet.js +40 -0
  618. package/dist/misc/sidebar.d.ts +70 -0
  619. package/dist/misc/sidebar.d.ts.map +1 -0
  620. package/dist/misc/sidebar.js +212 -0
  621. package/dist/misc/skeleton.d.ts +38 -0
  622. package/dist/misc/skeleton.d.ts.map +1 -0
  623. package/dist/misc/skeleton.js +43 -0
  624. package/dist/misc/slider.d.ts +5 -0
  625. package/dist/misc/slider.d.ts.map +1 -0
  626. package/dist/misc/slider.js +11 -0
  627. package/dist/misc/starRating.d.ts +4 -0
  628. package/dist/misc/starRating.d.ts.map +1 -0
  629. package/dist/misc/starRating.js +11 -0
  630. package/dist/misc/stateCard.d.ts +7 -0
  631. package/dist/misc/stateCard.d.ts.map +1 -0
  632. package/dist/misc/stateCard.js +21 -0
  633. package/dist/misc/step-progress.d.ts +16 -0
  634. package/dist/misc/step-progress.d.ts.map +1 -0
  635. package/dist/misc/step-progress.js +40 -0
  636. package/dist/misc/switch.d.ts +5 -0
  637. package/dist/misc/switch.d.ts.map +1 -0
  638. package/dist/misc/switch.js +8 -0
  639. package/dist/misc/tabs.d.ts +8 -0
  640. package/dist/misc/tabs.d.ts.map +1 -0
  641. package/dist/misc/tabs.js +17 -0
  642. package/dist/misc/tag-filter-input.d.ts +16 -0
  643. package/dist/misc/tag-filter-input.d.ts.map +1 -0
  644. package/dist/misc/tag-filter-input.js +26 -0
  645. package/dist/misc/textarea.d.ts +4 -0
  646. package/dist/misc/textarea.d.ts.map +1 -0
  647. package/dist/misc/textarea.js +6 -0
  648. package/dist/misc/tile.d.ts +4 -0
  649. package/dist/misc/tile.d.ts.map +1 -0
  650. package/dist/misc/tile.js +45 -0
  651. package/dist/misc/time-select.d.ts +14 -0
  652. package/dist/misc/time-select.d.ts.map +1 -0
  653. package/dist/misc/time-select.js +13 -0
  654. package/dist/misc/tooltip.d.ts +8 -0
  655. package/dist/misc/tooltip.d.ts.map +1 -0
  656. package/dist/misc/tooltip.js +17 -0
  657. package/dist/misc/whatsapp-help.d.ts +9 -0
  658. package/dist/misc/whatsapp-help.d.ts.map +1 -0
  659. package/dist/misc/whatsapp-help.js +13 -0
  660. package/dist/misc/wizard-footer.d.ts +18 -0
  661. package/dist/misc/wizard-footer.d.ts.map +1 -0
  662. package/dist/misc/wizard-footer.js +11 -0
  663. package/dist/profile/socialLink.d.ts +10 -0
  664. package/dist/profile/socialLink.d.ts.map +1 -0
  665. package/dist/profile/socialLink.js +66 -0
  666. package/dist/utils/permissions.d.ts +7 -0
  667. package/dist/utils/permissions.d.ts.map +1 -0
  668. package/dist/utils/permissions.js +38 -0
  669. package/package.json +93 -0
@@ -0,0 +1,330 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useRef, useEffect } from "react";
4
+ import { Send, Smile, Image as ImageIcon, FileText, Camera, MapPin, Mic, X, CircleStopIcon, VideoIcon, PlusCircleIcon, ListTodo, ReceiptText, ChartBar, CalendarPlus, Pause, Play, ChevronLeft, ChevronRight, Megaphone, WalletCards, BadgeIndianRupee } from "lucide-react";
5
+ import { Button } from "../misc/button";
6
+ import { Textarea } from "../misc/textarea";
7
+ import { Popover, PopoverContent, PopoverTrigger } from "../misc/popover";
8
+ import { Progress } from "../misc/progress";
9
+ import { CameraDialog } from "./dialogs/CameraDialog";
10
+ import { CreatePollDialog } from "./dialogs/CreatePollDialog";
11
+ import { ShareLocationDialog } from "./dialogs/ShareLocationDialog";
12
+ import { MediaComposerDialog } from "./dialogs/MediaComposerDialog";
13
+ import { showAlert } from "../misc/alertdialogclaude";
14
+ import { isCompressibleImage, compressImage } from "@myrjfa/state/dist/lib/utils/fileCompression";
15
+ import EmojiPicker from 'emoji-picker-react';
16
+ export function MessageInput({ onSend, onTypingStart, onTypingStop, disabled, replyTo, editMessage, onEdit, onCancelEdit, onCancelReply, onAddMilestone, onAddExpense, onAddEvent, onPayAndSplit, onPaymentDetails, onCreatePoll, participants = [], // Added
17
+ activePanel = "chat", allowAdvancedActions = false, enableAttachments = false, allowCollaborationActions = false, allowAnnouncements = false, initialText = "", externalText, onDraftChange, }) {
18
+ var _a, _b, _c;
19
+ const [text, setText] = useState(editMessage ? (_b = (_a = editMessage === null || editMessage === void 0 ? void 0 : editMessage.content) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : "" : initialText);
20
+ const [mentionSearch, setMentionSearch] = useState(null);
21
+ const [mentionIndex, setMentionIndex] = useState(-1);
22
+ const [selectedFiles, setSelectedFiles] = useState([]);
23
+ const [selectedMentions, setSelectedMentions] = useState([]);
24
+ const [uploadProgress, setUploadProgress] = useState(null);
25
+ const [isSending, setIsSending] = useState(false);
26
+ const textareaRef = useRef(null);
27
+ const fileInputRef = useRef(null);
28
+ const [fileAcceptType, setFileAcceptType] = useState("");
29
+ const typingTimeoutRef = useRef(null);
30
+ const isTypingRef = useRef(false);
31
+ const wasEditingRef = useRef(false);
32
+ const [showEmojiPicker, setShowEmojiPicker] = useState(false);
33
+ const [isCameraOpen, setIsCameraOpen] = useState(false);
34
+ const [isPollOpen, setIsPollOpen] = useState(false);
35
+ const [isLocationDialogOpen, setIsLocationDialogOpen] = useState(false);
36
+ const [isAttachmentMenuOpen, setIsAttachmentMenuOpen] = useState(false);
37
+ const [composerFile, setComposerFile] = useState(null);
38
+ const [isMediaComposerOpen, setIsMediaComposerOpen] = useState(false);
39
+ const [isRecording, setIsRecording] = useState(false);
40
+ const [isRecordingPaused, setIsRecordingPaused] = useState(false);
41
+ const [announcementMode, setAnnouncementMode] = useState(false);
42
+ const mediaRecorderRef = useRef(null);
43
+ const audioChunksRef = useRef([]);
44
+ const [mentionCoords, setMentionCoords] = useState({ top: 0, left: 0 }); // Added
45
+ const participantLabel = (participant) => participant.displayName || participant.username || "Trippeaze member";
46
+ // Auto-resize textarea
47
+ useEffect(() => {
48
+ const el = textareaRef.current;
49
+ if (el) {
50
+ el.style.height = "auto";
51
+ el.style.height = Math.min(el.scrollHeight, 120) + "px";
52
+ }
53
+ }, [text]);
54
+ // Focus input when replyTo message is set
55
+ useEffect(() => {
56
+ var _a;
57
+ if (replyTo) {
58
+ (_a = textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
59
+ }
60
+ }, [replyTo]);
61
+ useEffect(() => {
62
+ if (!editMessage)
63
+ onDraftChange === null || onDraftChange === void 0 ? void 0 : onDraftChange(text);
64
+ }, [editMessage, onDraftChange, text]);
65
+ useEffect(() => {
66
+ if (editMessage) {
67
+ wasEditingRef.current = true;
68
+ setText(editMessage.content.text || "");
69
+ }
70
+ else if (wasEditingRef.current) {
71
+ wasEditingRef.current = false;
72
+ setText(initialText);
73
+ }
74
+ }, [editMessage === null || editMessage === void 0 ? void 0 : editMessage._id]);
75
+ useEffect(() => {
76
+ if (externalText !== undefined && !editMessage) {
77
+ setText(externalText);
78
+ requestAnimationFrame(() => { var _a; return (_a = textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus(); });
79
+ }
80
+ }, [externalText]);
81
+ const handleTextChange = (e) => {
82
+ const value = e.target.value;
83
+ const cursorPosition = e.target.selectionStart;
84
+ setText(value);
85
+ // Mention detection
86
+ const textBeforeCursor = value.substring(0, cursorPosition);
87
+ const lastAtChar = textBeforeCursor.lastIndexOf("@");
88
+ if (lastAtChar !== -1 && (lastAtChar === 0 || textBeforeCursor[lastAtChar - 1] === " ")) {
89
+ const search = textBeforeCursor.substring(lastAtChar + 1);
90
+ if (!search.includes(" ")) {
91
+ setMentionSearch(search);
92
+ setMentionIndex(lastAtChar);
93
+ }
94
+ else {
95
+ setMentionSearch(null);
96
+ }
97
+ }
98
+ else {
99
+ setMentionSearch(null);
100
+ }
101
+ // Typing indicator
102
+ if (!isTypingRef.current && e.target.value.length > 0) {
103
+ isTypingRef.current = true;
104
+ onTypingStart === null || onTypingStart === void 0 ? void 0 : onTypingStart();
105
+ }
106
+ // Reset typing timeout
107
+ if (typingTimeoutRef.current)
108
+ clearTimeout(typingTimeoutRef.current);
109
+ typingTimeoutRef.current = setTimeout(() => {
110
+ isTypingRef.current = false;
111
+ onTypingStop === null || onTypingStop === void 0 ? void 0 : onTypingStop();
112
+ }, 2000);
113
+ };
114
+ const insertMention = (participant) => {
115
+ var _a;
116
+ if (mentionIndex === -1)
117
+ return;
118
+ const username = participant.username || participantLabel(participant);
119
+ const before = text.substring(0, mentionIndex);
120
+ const after = text.substring(((_a = textareaRef.current) === null || _a === void 0 ? void 0 : _a.selectionStart) || text.length);
121
+ const newText = `${before}@${username} ${after}`;
122
+ setText(newText);
123
+ setMentionSearch(null);
124
+ setSelectedMentions((current) => current.some((item) => item.actorId === participant.actorId && item.actorModel === participant.actorModel) ? current : [...current, {
125
+ actorId: participant.actorId,
126
+ actorModel: participant.actorModel,
127
+ username,
128
+ }]);
129
+ // Set cursor after the inserted mention
130
+ setTimeout(() => {
131
+ if (textareaRef.current) {
132
+ const newCursorPos = before.length + `@${username} `.length;
133
+ textareaRef.current.selectionStart = newCursorPos;
134
+ textareaRef.current.selectionEnd = newCursorPos;
135
+ textareaRef.current.focus();
136
+ }
137
+ }, 0);
138
+ };
139
+ async function handleSend() {
140
+ var _a;
141
+ const trimmed = text.trim();
142
+ if ((!trimmed && selectedFiles.length === 0) || disabled)
143
+ return;
144
+ setIsSending(true);
145
+ setUploadProgress(0);
146
+ try {
147
+ let filesToSend = [...selectedFiles];
148
+ // Compress images
149
+ setUploadProgress(10); // Start progress for compression
150
+ const compressed = await Promise.all(filesToSend.map(async (file) => {
151
+ if (isCompressibleImage(file)) {
152
+ try {
153
+ return await compressImage(file);
154
+ }
155
+ catch (e) {
156
+ console.error("Compression failed for", file.name, e);
157
+ return file;
158
+ }
159
+ }
160
+ return file;
161
+ }));
162
+ setUploadProgress(30); // Compression done, starting upload
163
+ // Note: sendMessage doesn't currently support progress callback.
164
+ // We'll simulate progress or update it if chatApi supports it.
165
+ // For now, call sendMessage.
166
+ if (editMessage) {
167
+ await (onEdit === null || onEdit === void 0 ? void 0 : onEdit(editMessage._id, trimmed));
168
+ }
169
+ else {
170
+ await onSend(trimmed, compressed, selectedMentions
171
+ .filter((mention) => trimmed.includes(`@${mention.username}`))
172
+ .map(({ actorId, actorModel }) => ({ actorId, actorModel })), announcementMode ? "announcement" : compressed.length ? "media" : "text");
173
+ }
174
+ setUploadProgress(100);
175
+ setText("");
176
+ setSelectedFiles([]);
177
+ setSelectedMentions([]);
178
+ setAnnouncementMode(false);
179
+ // Clear typing
180
+ if (typingTimeoutRef.current)
181
+ clearTimeout(typingTimeoutRef.current);
182
+ isTypingRef.current = false;
183
+ onTypingStop === null || onTypingStop === void 0 ? void 0 : onTypingStop();
184
+ // Refocus
185
+ (_a = textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
186
+ }
187
+ catch (error) {
188
+ console.error(error);
189
+ showAlert("Failed to send message", "Error");
190
+ }
191
+ finally {
192
+ setIsSending(false);
193
+ setUploadProgress(null);
194
+ }
195
+ }
196
+ function handleKeyDown(e) {
197
+ if (e.key === "Enter" && !e.shiftKey) {
198
+ e.preventDefault();
199
+ handleSend();
200
+ }
201
+ }
202
+ const handleFileChange = (e) => {
203
+ var _a;
204
+ if (e.target.files) {
205
+ const files = Array.from(e.target.files);
206
+ const firstImage = files.length === 1 && ((_a = files[0]) === null || _a === void 0 ? void 0 : _a.type.startsWith("image/")) ? files[0] : null;
207
+ if (firstImage) {
208
+ setComposerFile(firstImage);
209
+ setIsMediaComposerOpen(true);
210
+ }
211
+ else
212
+ setSelectedFiles(prev => [...prev, ...files]);
213
+ }
214
+ e.target.value = "";
215
+ };
216
+ const chooseFiles = (accept) => {
217
+ setIsAttachmentMenuOpen(false);
218
+ setFileAcceptType(accept);
219
+ window.setTimeout(() => { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, 0);
220
+ };
221
+ const removeFile = (index) => {
222
+ setSelectedFiles(prev => prev.filter((_, i) => i !== index));
223
+ };
224
+ const handleCameraCapture = (file) => {
225
+ setSelectedFiles(prev => [...prev, file]);
226
+ };
227
+ const startRecording = async () => {
228
+ try {
229
+ const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
230
+ const mediaRecorder = new MediaRecorder(stream);
231
+ mediaRecorderRef.current = mediaRecorder;
232
+ audioChunksRef.current = [];
233
+ mediaRecorder.ondataavailable = (event) => {
234
+ if (event.data.size > 0) {
235
+ audioChunksRef.current.push(event.data);
236
+ }
237
+ };
238
+ mediaRecorder.onstop = () => {
239
+ const audioBlob = new Blob(audioChunksRef.current, { type: "audio/webm" });
240
+ const audioFile = new File([audioBlob], `voice_${Date.now()}.webm`, { type: "audio/webm" });
241
+ setSelectedFiles(prev => [...prev, audioFile]);
242
+ stream.getTracks().forEach(track => track.stop());
243
+ };
244
+ mediaRecorder.start();
245
+ setIsRecording(true);
246
+ setIsRecordingPaused(false);
247
+ }
248
+ catch (err) {
249
+ console.error("Error accessing microphone:", err);
250
+ void showAlert("Could not access the microphone. Check your browser permission and try again.", "Microphone unavailable");
251
+ }
252
+ };
253
+ const stopRecording = () => {
254
+ if (mediaRecorderRef.current && isRecording) {
255
+ mediaRecorderRef.current.stop();
256
+ setIsRecording(false);
257
+ setIsRecordingPaused(false);
258
+ }
259
+ };
260
+ const toggleRecordingPause = () => {
261
+ const recorder = mediaRecorderRef.current;
262
+ if (!recorder || !isRecording)
263
+ return;
264
+ if (recorder.state === "recording") {
265
+ recorder.pause();
266
+ setIsRecordingPaused(true);
267
+ }
268
+ else if (recorder.state === "paused") {
269
+ recorder.resume();
270
+ setIsRecordingPaused(false);
271
+ }
272
+ };
273
+ const moveFile = (index, direction) => {
274
+ setSelectedFiles((current) => {
275
+ const nextIndex = index + direction;
276
+ if (nextIndex < 0 || nextIndex >= current.length)
277
+ return current;
278
+ const next = [...current];
279
+ const currentFile = next[index];
280
+ const adjacentFile = next[nextIndex];
281
+ if (!currentFile || !adjacentFile)
282
+ return current;
283
+ next[index] = adjacentFile;
284
+ next[nextIndex] = currentFile;
285
+ return next;
286
+ });
287
+ };
288
+ const handleEmojiSelect = (emojiObject) => {
289
+ if (textareaRef.current) {
290
+ const cursorPos = textareaRef.current.selectionStart;
291
+ const newText = text.slice(0, cursorPos) + emojiObject.emoji + text.slice(cursorPos);
292
+ setText(newText);
293
+ setShowEmojiPicker(false);
294
+ textareaRef.current.focus();
295
+ }
296
+ };
297
+ // Only show message input for chat panel
298
+ const showMessageInput = activePanel === "chat";
299
+ return (_jsxs("div", { className: "border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 p-3 relative", children: [allowAdvancedActions && (_jsxs(_Fragment, { children: [enableAttachments && _jsx(CameraDialog, { open: isCameraOpen, onOpenChange: setIsCameraOpen, onCapture: handleCameraCapture }), allowCollaborationActions && _jsx(CreatePollDialog, { open: isPollOpen, onOpenChange: setIsPollOpen, onCreate: (q, opts, multi) => {
300
+ onCreatePoll === null || onCreatePoll === void 0 ? void 0 : onCreatePoll(q, opts, multi);
301
+ } })] })), mentionSearch !== null && participants.length > 0 && (_jsxs("div", { className: "absolute bottom-full left-4 mb-2 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-xl w-48 py-1 z-50 overflow-y-auto max-h-48", children: [participants
302
+ .filter((p) => {
303
+ const searchable = `${p.username || ""} ${p.displayName || ""}`.toLowerCase();
304
+ return !mentionSearch || searchable.includes(mentionSearch.toLowerCase());
305
+ })
306
+ .map(p => (_jsx("button", { onClick: () => insertMention(p), className: "w-full text-left px-3 py-2 text-sm hover:bg-indigo-50 dark:hover:bg-indigo-900/40 flex items-center gap-2", children: _jsxs("span", { className: "truncate", children: ["@", p.username || participantLabel(p)] }) }, p.actorId))), participants.filter((p) => {
307
+ const searchable = `${p.username || ""} ${p.displayName || ""}`.toLowerCase();
308
+ return !mentionSearch || searchable.includes(mentionSearch.toLowerCase());
309
+ }).length === 0 && (_jsx("div", { className: "px-3 py-2 text-xs text-gray-500 italic", children: "No members found" }))] })), allowAdvancedActions && enableAttachments && selectedFiles.length > 0 && !editMessage && (_jsx("div", { className: "max-w-4xl mx-auto mb-2 flex flex-wrap gap-2", children: selectedFiles.map((file, i) => (_jsxs("div", { className: "flex items-center gap-1 bg-gray-100 dark:bg-gray-800 rounded-lg px-2 py-1 text-xs text-gray-600 dark:text-gray-300", children: [file.type.startsWith("image/") && _jsx("img", { src: URL.createObjectURL(file), alt: "", className: "h-9 w-9 rounded object-cover" }), file.type.startsWith("audio/") && _jsx("audio", { src: URL.createObjectURL(file), controls: true, className: "h-8 max-w-44" }), _jsx("span", { className: "truncate max-w-[150px]", children: file.name }), selectedFiles.length > 1 && _jsxs(_Fragment, { children: [_jsx("button", { type: "button", disabled: i === 0, onClick: () => moveFile(i, -1), "aria-label": "Move attachment left", children: _jsx(ChevronLeft, { className: "h-3.5 w-3.5" }) }), _jsx("button", { type: "button", disabled: i === selectedFiles.length - 1, onClick: () => moveFile(i, 1), "aria-label": "Move attachment right", children: _jsx(ChevronRight, { className: "h-3.5 w-3.5" }) })] }), _jsx("button", { onClick: () => removeFile(i), className: "ml-2 text-red-500 hover:text-red-700 font-bold", children: "\u00D7" })] }, `${file.name}-${i}`))) })), announcementMode && !editMessage && (_jsxs("div", { className: "mx-auto mb-2 flex max-w-4xl items-center justify-between rounded-xl border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: [_jsxs("span", { className: "flex items-center gap-2 font-medium", children: [_jsx(Megaphone, { className: "h-4 w-4" }), "Sending as a group announcement"] }), _jsx("button", { type: "button", onClick: () => setAnnouncementMode(false), "aria-label": "Cancel announcement", children: _jsx(X, { className: "h-4 w-4" }) })] })), replyTo && (_jsxs("div", { className: "max-w-4xl mx-auto mb-2 flex items-center gap-2 bg-gray-100 dark:bg-gray-800 px-3 py-2 rounded-lg border-l-2 border-teal-500", children: [_jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("div", { className: "text-xs font-semibold text-teal-600 dark:text-teal-400", children: editMessage ? "Editing" : `Replying to ${participantLabel(participants.find((participant) => participant.actorId === replyTo.senderId) || {})}` }), _jsx("div", { className: "text-xs text-gray-600 dark:text-gray-400 truncate", children: (_c = replyTo.content.text) === null || _c === void 0 ? void 0 : _c.substring(0, 60) })] }), _jsx("button", { onClick: onCancelReply, className: "text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 flex-shrink-0", children: _jsx(X, { className: "w-4 h-4" }) })] })), _jsxs("div", { className: `${showMessageInput ? "flex" : "hidden md:flex"} items-end gap-2 max-w-4xl mx-auto`, children: [allowAdvancedActions && enableAttachments && (_jsx("input", { type: "file", ref: fileInputRef, onChange: handleFileChange, accept: fileAcceptType, multiple: true, className: "hidden" })), allowAdvancedActions && !editMessage && _jsxs(Popover, { open: isAttachmentMenuOpen, onOpenChange: setIsAttachmentMenuOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 rounded-full h-10 w-10 shrink-0", children: _jsx(PlusCircleIcon, { className: "w-5 h-5" }) }) }), _jsxs(PopoverContent, { side: "top", align: "start", className: "w-48 p-2 flex flex-col gap-1", children: [enableAttachments && _jsxs(_Fragment, { children: [_jsxs(Button, { variant: "ghost", className: "justify-start gap-2 w-full", onClick: () => chooseFiles(".pdf,.doc,.docx,.txt,.xlsx,.pptx"), children: [_jsx(FileText, { className: "w-4 h-4 text-purple-500" }), "Document"] }), _jsxs(Button, { variant: "ghost", className: "justify-start gap-2 w-full", onClick: () => chooseFiles("image/*"), children: [_jsx(ImageIcon, { className: "w-4 h-4 text-blue-500" }), "Photos"] }), _jsxs(Button, { variant: "ghost", className: "justify-start gap-2 w-full", onClick: () => chooseFiles("video/*"), children: [_jsx(VideoIcon, { className: "w-4 h-4 text-rose-500" }), "Videos"] }), _jsxs(Button, { variant: "ghost", className: "justify-start gap-2 w-full", onClick: () => { setIsAttachmentMenuOpen(false); setIsLocationDialogOpen(true); }, children: [_jsx(MapPin, { className: "w-4 h-4 text-green-500" }), "Location"] })] }), allowCollaborationActions && _jsxs(Button, { variant: "ghost", className: "justify-start gap-2 w-full", onClick: () => { setIsAttachmentMenuOpen(false); setIsPollOpen(true); }, children: [_jsx(ChartBar, { className: "w-4 h-4 text-orange-500" }), "Poll"] }), allowCollaborationActions && _jsx("div", { className: "border-t border-gray-200 dark:border-gray-700 my-1" }), allowCollaborationActions && _jsxs(Button, { variant: "ghost", className: "justify-start gap-2 w-full text-teal-600 dark:text-teal-400", onClick: () => {
310
+ setIsAttachmentMenuOpen(false);
311
+ onAddMilestone === null || onAddMilestone === void 0 ? void 0 : onAddMilestone();
312
+ }, children: [_jsx(ListTodo, { className: "w-4 h-4" }), "Add Milestone"] }), allowCollaborationActions && _jsxs(Button, { variant: "ghost", className: "justify-start gap-2 w-full text-teal-600 dark:text-teal-400", onClick: () => {
313
+ setIsAttachmentMenuOpen(false);
314
+ onAddExpense === null || onAddExpense === void 0 ? void 0 : onAddExpense();
315
+ }, children: [_jsx(ReceiptText, { className: "w-4 h-4" }), "Add Expense"] }), allowCollaborationActions && _jsxs(Button, { variant: "ghost", className: "justify-start gap-2 w-full text-teal-600 dark:text-teal-400", onClick: () => {
316
+ setIsAttachmentMenuOpen(false);
317
+ onAddEvent === null || onAddEvent === void 0 ? void 0 : onAddEvent();
318
+ }, children: [_jsx(CalendarPlus, { className: "w-4 h-4" }), "Add Event"] }), allowAnnouncements && _jsxs(Button, { variant: "ghost", className: "justify-start gap-2 w-full text-amber-700", onClick: () => {
319
+ setIsAttachmentMenuOpen(false);
320
+ setAnnouncementMode(true);
321
+ }, children: [_jsx(Megaphone, { className: "w-4 h-4" }), "Announcement"] }), allowCollaborationActions && _jsx("div", { className: "border-t border-gray-200 dark:border-gray-700 my-1" }), allowCollaborationActions && _jsxs(Button, { variant: "ghost", className: "justify-start gap-2 w-full text-emerald-700", onClick: () => {
322
+ setIsAttachmentMenuOpen(false);
323
+ onPayAndSplit === null || onPayAndSplit === void 0 ? void 0 : onPayAndSplit();
324
+ }, children: [_jsx(BadgeIndianRupee, { className: "w-4 h-4" }), "Pay & Split"] }), _jsxs(Button, { variant: "ghost", className: "justify-start gap-2 w-full text-slate-700", onClick: () => {
325
+ setIsAttachmentMenuOpen(false);
326
+ onPaymentDetails === null || onPaymentDetails === void 0 ? void 0 : onPaymentDetails();
327
+ }, children: [_jsx(WalletCards, { className: "w-4 h-4" }), "Payment details"] })] })] }), _jsxs("div", { className: "flex-1 bg-gray-100 dark:bg-gray-800 rounded-2xl flex items-end relative", children: [_jsx(Textarea, { ref: textareaRef, value: text, onChange: handleTextChange, onKeyDown: handleKeyDown, placeholder: "Type a message...", disabled: disabled || isSending, rows: 1, className: "flex-1 bg-transparent border-none focus-visible:ring-0 px-4 py-3 text-[15px] resize-none text-gray-900 dark:text-white placeholder-gray-400 max-h-[120px] min-h-[48px]" }), uploadProgress !== null && (_jsx("div", { className: "absolute left-0 bottom-full w-full px-4 mb-2", children: _jsxs("div", { className: "bg-white dark:bg-gray-800 p-2 rounded-lg shadow-lg border border-gray-100 dark:border-gray-700", children: [_jsxs("div", { className: "flex justify-between items-center mb-1", children: [_jsx("span", { className: "text-[10px] text-gray-500 font-medium", children: "Uploading..." }), _jsxs("span", { className: "text-[10px] text-indigo-500 font-bold", children: [uploadProgress, "%"] })] }), _jsx(Progress, { value: uploadProgress, className: "h-1" })] }) })), _jsx(Button, { variant: "ghost", size: "icon", className: "mr-1 mb-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 rounded-full hidden sm:inline-flex", onClick: () => setShowEmojiPicker(!showEmojiPicker), children: _jsx(Smile, { className: "w-5 h-5" }) }), allowAdvancedActions && enableAttachments && !editMessage && _jsx(Button, { variant: "ghost", size: "icon", className: "mr-1 mb-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 rounded-full", onClick: () => setIsCameraOpen(true), children: _jsx(Camera, { className: "w-5 h-5" }) })] }), isRecording && (_jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "h-11 w-11 rounded-full text-slate-600", onClick: toggleRecordingPause, "aria-label": isRecordingPaused ? "Resume recording" : "Pause recording", children: isRecordingPaused ? _jsx(Play, { className: "h-5 w-5" }) : _jsx(Pause, { className: "h-5 w-5" }) })), text.trim() || (allowAdvancedActions && enableAttachments && selectedFiles.length > 0) || editMessage ? (_jsx(Button, { onClick: handleSend, disabled: disabled, className: "rounded-full h-11 w-11 p-0 bg-gradient-to-r from-teal-500 to-cyan-600 hover:from-teal-600 hover:to-cyan-700 shadow-lg shadow-teal-500/25 shrink-0", children: _jsx(Send, { className: "w-5 h-5" }) })) : allowAdvancedActions ? (_jsx(Button, { variant: "ghost", size: "icon", className: `rounded-full h-11 w-11 shrink-0 transition-all ${isRecording
328
+ ? "bg-red-500 hover:bg-red-600 animate-pulse text-white"
329
+ : "text-teal-400 hover:bg-teal-100 dark:hover:bg-teal-800"}`, onClick: () => isRecording ? stopRecording() : startRecording(), children: isRecording ? _jsx(CircleStopIcon, { className: "w-6 h-6" }) : _jsx(Mic, { className: "w-6 h-6" }) })) : (_jsx(Button, { disabled: true, className: "rounded-full h-11 w-11 p-0 bg-gray-300 dark:bg-gray-700 shrink-0", "aria-label": "Enter a message to send", children: _jsx(Send, { className: "w-5 h-5" }) })), editMessage && _jsx(Button, { variant: "ghost", size: "icon", className: "rounded-full h-11 w-11 shrink-0", onClick: onCancelEdit, children: _jsx(X, { className: "w-5 h-5" }) }), showEmojiPicker && _jsx(EmojiPicker, { onEmojiClick: handleEmojiSelect })] }), _jsx(ShareLocationDialog, { open: isLocationDialogOpen, onOpenChange: setIsLocationDialogOpen, onSend: onSend }), _jsx(MediaComposerDialog, { file: composerFile, open: isMediaComposerOpen, onOpenChange: setIsMediaComposerOpen, onConfirm: (file) => setSelectedFiles((current) => [...current, file]) })] }));
330
+ }
@@ -0,0 +1,14 @@
1
+ import { type ChatActorModel, type Conversation } from "@myrjfa/state/dist/lib/models/chat";
2
+ interface MilestonePanelProps {
3
+ conversationId: string;
4
+ currentUserId: string;
5
+ currentActorModel: ChatActorModel;
6
+ participants: Conversation["participants"];
7
+ isFullScreen?: boolean;
8
+ isFeatureEnabled?: boolean;
9
+ isAdmin?: boolean;
10
+ onEnableFeature?: () => void;
11
+ }
12
+ export declare function MilestonePanel({ conversationId, currentUserId, currentActorModel, participants, isFullScreen, isFeatureEnabled, isAdmin, onEnableFeature }: MilestonePanelProps): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=MilestonePanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MilestonePanel.d.ts","sourceRoot":"","sources":["../../src/chat/MilestonePanel.tsx"],"names":[],"mappings":"AAIA,OAAO,EAGH,KAAK,cAAc,EAEnB,KAAK,YAAY,EAEpB,MAAM,oCAAoC,CAAC;AAU5C,UAAU,mBAAmB;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,cAAc,CAAC;IAClC,YAAY,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,wBAAgB,cAAc,CAAC,EAC3B,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAoB,EACpB,gBAAuB,EACvB,OAAe,EACf,eAAe,EAClB,EAAE,mBAAmB,2CAqgBrB"}
@@ -0,0 +1,209 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState, useEffect } from "react";
4
+ import { chatApi } from "@myrjfa/state/dist/lib/actions/chat";
5
+ import { chatActorKey, isSameChatActor, } from "@myrjfa/state/dist/lib/models/chat";
6
+ import { CheckCircle2, Circle, Plus, Trash2, Pencil, MoreVertical, Lock, Unlock, ListTodo, ChevronDown, AlertCircle, SlidersHorizontal } from "lucide-react";
7
+ import { Button } from "../misc/button";
8
+ import { Input } from "../misc/input";
9
+ import { Textarea } from "../misc/textarea";
10
+ import { DatePicker } from "../misc/datepicker";
11
+ import { SearchBox } from "../misc/searchBox";
12
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "../misc/dropdown-menu";
13
+ import { deleteActions, showAlert } from "../misc/alertdialogclaude";
14
+ export function MilestonePanel({ conversationId, currentUserId, currentActorModel, participants, isFullScreen = false, isFeatureEnabled = true, isAdmin = false, onEnableFeature }) {
15
+ const [milestones, setMilestones] = useState([]);
16
+ const [loading, setLoading] = useState(true);
17
+ const [isAdding, setIsAdding] = useState(false);
18
+ const [milestoneId, setMilestoneId] = useState(null);
19
+ const [newTitle, setNewTitle] = useState("");
20
+ const [newSection, setNewSection] = useState("");
21
+ const [newDescription, setNewDescription] = useState("");
22
+ const [newDueDate, setNewDueDate] = useState(null);
23
+ const [showMoreOptions, setShowMoreOptions] = useState(false);
24
+ const [sections, setSections] = useState([]);
25
+ const [expandedSections, setExpandedSections] = useState(new Set());
26
+ const [expandedMilestones, setExpandedMilestones] = useState(new Set());
27
+ const currentActor = { actorId: currentUserId, actorModel: currentActorModel };
28
+ const [openMilestoneMenuId, setOpenMilestoneMenuId] = useState(null);
29
+ const fetchMilestones = async () => {
30
+ setLoading(true);
31
+ const data = await chatApi.getMilestones(conversationId);
32
+ setMilestones(data);
33
+ setLoading(false);
34
+ };
35
+ useEffect(() => {
36
+ fetchMilestones();
37
+ }, [conversationId]);
38
+ useEffect(() => {
39
+ // Extract unique sections from existing milestones
40
+ const uniqueSections = Array.from(new Set(milestones.map(m => m.section).filter(Boolean)));
41
+ setSections(uniqueSections);
42
+ }, [milestones]);
43
+ const resetForm = () => {
44
+ setNewTitle("");
45
+ setNewSection("");
46
+ setNewDescription("");
47
+ setNewDueDate(null);
48
+ setShowMoreOptions(false);
49
+ setIsAdding(false);
50
+ setMilestoneId(null);
51
+ };
52
+ const toggleSection = (section) => {
53
+ setExpandedSections(prev => {
54
+ const newSet = new Set(prev);
55
+ if (newSet.has(section)) {
56
+ newSet.delete(section);
57
+ }
58
+ else {
59
+ newSet.add(section);
60
+ }
61
+ return newSet;
62
+ });
63
+ };
64
+ const toggleMilestoneExpand = (id) => {
65
+ setExpandedMilestones(prev => {
66
+ const newSet = new Set(prev);
67
+ if (newSet.has(id)) {
68
+ newSet.delete(id);
69
+ }
70
+ else {
71
+ newSet.add(id);
72
+ }
73
+ return newSet;
74
+ });
75
+ };
76
+ const handleCreate = async () => {
77
+ if (!newTitle.trim())
78
+ return;
79
+ try {
80
+ const milestoneData = {
81
+ title: newTitle.trim(),
82
+ section: newSection.trim() || "General",
83
+ description: newDescription.trim() || undefined,
84
+ dueDate: (newDueDate === null || newDueDate === void 0 ? void 0 : newDueDate.toISOString()) || undefined
85
+ };
86
+ const milestoneResponse = milestoneId
87
+ ? await chatApi.updateMilestone(milestoneId, milestoneData)
88
+ : await chatApi.createMilestone(conversationId, milestoneData);
89
+ if (milestoneResponse.error) {
90
+ console.error("Failed to create milestone:", milestoneResponse.error);
91
+ showAlert(milestoneResponse.error, "Failed to create milestone");
92
+ }
93
+ else if (milestoneResponse.data) {
94
+ await fetchMilestones();
95
+ resetForm();
96
+ }
97
+ }
98
+ catch (err) {
99
+ console.error("Failed to create milestone:", err);
100
+ showAlert(err, "Failed to create milestone");
101
+ }
102
+ };
103
+ const handleToggle = async (id) => {
104
+ const response = await chatApi.toggleMilestone(id);
105
+ if (response.error) {
106
+ console.log("error toggling milestone " + id + "Error: " + response.error);
107
+ await showAlert("Error checking/unchecking milestone");
108
+ return;
109
+ }
110
+ else if (response.data) {
111
+ setMilestones(prev => prev.map(m => m._id === id ? response.data : m));
112
+ }
113
+ };
114
+ const handleDelete = async (id) => {
115
+ let confirmDelete = true;
116
+ await showAlert("Are you sure you want to delete this milestone?", undefined, deleteActions(() => confirmDelete = false));
117
+ if (confirmDelete) {
118
+ const response = await chatApi.deleteMilestone(id);
119
+ if (response.error) {
120
+ console.log("Unable to delete milestone:" + id + "Error: " + response.error);
121
+ await showAlert("Unable to delete milestone");
122
+ return;
123
+ }
124
+ setMilestones(prev => prev.filter(m => m._id !== id));
125
+ }
126
+ };
127
+ const handleEdit = async (milestone) => {
128
+ var _a, _b;
129
+ setNewTitle(milestone.title);
130
+ setNewSection((_a = milestone.section) !== null && _a !== void 0 ? _a : "");
131
+ setNewDescription((_b = milestone.description) !== null && _b !== void 0 ? _b : "");
132
+ setNewDueDate(milestone.dueDate ? new Date(milestone.dueDate) : null);
133
+ setMilestoneId(milestone._id);
134
+ setIsAdding(true);
135
+ };
136
+ // Check if current user has checked this milestone
137
+ const hasUserChecked = (milestone) => {
138
+ return milestone.checks.some((check) => isSameChatActor(check, currentActor));
139
+ };
140
+ // Get users who haven't checked the milestone
141
+ const participantLabel = (actor) => {
142
+ const participant = participants.find((item) => actor.actorModel
143
+ ? isSameChatActor(item, actor)
144
+ : item.actorId === actor.actorId);
145
+ return (participant === null || participant === void 0 ? void 0 : participant.displayName) || (participant === null || participant === void 0 ? void 0 : participant.username) || "Trippeaze member";
146
+ };
147
+ const showMemberProgress = (id) => {
148
+ setExpandedMilestones((current) => current.has(id) ? current : new Set(current).add(id));
149
+ setOpenMilestoneMenuId(null);
150
+ };
151
+ const getUncheckedUsers = (milestone) => {
152
+ const checkedActors = new Set(milestone.checks.map(chatActorKey));
153
+ return participants.filter((participant) => !checkedActors.has(chatActorKey(participant)));
154
+ };
155
+ const getCheckedUsers = (milestone) => {
156
+ const checkedActors = new Set(milestone.checks.map(chatActorKey));
157
+ return participants.filter((participant) => checkedActors.has(chatActorKey(participant)));
158
+ };
159
+ const groupedMilestones = milestones.reduce((acc, m) => {
160
+ const section = m.section || "General";
161
+ if (!acc[section])
162
+ acc[section] = [];
163
+ acc[section].push(m);
164
+ return acc;
165
+ }, {});
166
+ const panelClasses = isFullScreen
167
+ ? "w-full h-full flex flex-col"
168
+ : "flex flex-col h-full w-full md:w-80 border-l border-gray-200 dark:border-gray-700";
169
+ return (_jsxs("div", { className: `bg-white dark:bg-gray-900 ${panelClasses}`, children: [_jsx("div", { className: "p-4 border-b border-gray-200 dark:border-gray-700 flex-shrink-0", children: _jsx("h3", { className: "font-semibold text-gray-900 dark:text-white", children: "Milestones" }) }), _jsx("div", { className: "flex-1 overflow-y-auto p-4 space-y-4", children: !isFeatureEnabled ? (_jsxs("div", { className: "flex flex-col items-center justify-center h-full py-12 px-6 text-center", children: [_jsx("div", { className: "mb-4 p-4 bg-teal-50 dark:bg-teal-900/20 rounded-full", children: _jsx(ListTodo, { className: "w-12 h-12 text-teal-500" }) }), _jsx("h3", { className: "text-lg font-semibold text-gray-900 dark:text-white mb-2", children: "Milestones Feature" }), _jsx("p", { className: "text-sm text-gray-600 dark:text-gray-400 mb-4 max-w-sm", children: "Track group tasks, organize by sections, and monitor progress together. Perfect for trip planning and group coordination." }), isAdmin ? (_jsxs(Button, { onClick: onEnableFeature, className: "bg-gradient-to-r from-teal-500 to-cyan-600 hover:from-teal-600 hover:to-cyan-700 text-white", children: [_jsx(Unlock, { className: "w-4 h-4 mr-2" }), "Enable Feature"] })) : (_jsxs("div", { className: "flex items-center gap-2 text-sm text-gray-500", children: [_jsx(Lock, { className: "w-4 h-4" }), "Ask admin to enable this feature"] }))] })) : loading ? (_jsx("div", { className: "flex justify-center py-8", children: _jsx("div", { className: "animate-spin w-5 h-5 border-2 border-teal-500 border-t-transparent rounded-full" }) })) : milestones.length === 0 && !isAdding ? (_jsx("div", { className: "text-center py-8 text-gray-400 text-sm", children: "No milestones yet" })) : (_jsxs(_Fragment, { children: [isAdding && (_jsxs("div", { className: "p-4 bg-gray-50 dark:bg-gray-800 rounded-lg space-y-3", children: [_jsx(SearchBox, { titles: sections, id: "milestone-section", placeholder: "Section (e.g., Day 1, Transport)", searchQuery: newSection, setSearchQuery: setNewSection, handleAdd: setNewSection, clearOnSubmit: false }), _jsx(Input, { placeholder: "Milestone title *", value: newTitle, onChange: (e) => setNewTitle(e.target.value), onKeyDown: (e) => e.key === "Enter" && !showMoreOptions && handleCreate(), className: "text-sm font-medium", autoFocus: true }), _jsxs("button", { type: "button", onClick: () => setShowMoreOptions((current) => !current), "aria-expanded": showMoreOptions, className: "flex w-full items-center justify-between rounded-xl border border-slate-200 bg-white px-3 py-2.5 text-left shadow-sm transition-colors hover:border-teal-300 hover:bg-teal-50/40 dark:border-slate-700 dark:bg-slate-900 dark:hover:border-teal-700 dark:hover:bg-teal-950/20", children: [_jsxs("span", { className: "flex items-center gap-2.5", children: [_jsx("span", { className: "rounded-lg bg-teal-100 p-1.5 text-teal-700 dark:bg-teal-900/40 dark:text-teal-300", children: _jsx(SlidersHorizontal, { className: "h-4 w-4" }) }), _jsxs("span", { children: [_jsx("span", { className: "block text-sm font-medium text-slate-800 dark:text-slate-100", children: "More options" }), _jsx("span", { className: "block text-xs text-slate-500 dark:text-slate-400", children: "Description and due date" })] })] }), _jsx(ChevronDown, { className: `h-4 w-4 text-slate-500 transition-transform ${showMoreOptions ? "rotate-180" : ""}` })] }), showMoreOptions && (_jsxs("div", { className: "space-y-3 rounded-xl border border-teal-100 bg-white p-3 shadow-sm dark:border-teal-900/60 dark:bg-slate-900", children: [_jsx(Textarea, { placeholder: "Description (optional)", value: newDescription, onChange: (e) => setNewDescription(e.target.value), className: "text-sm resize-none", rows: 2 }), _jsx(DatePicker, { label: "Due date (optional)", field: { value: newDueDate, onChange: setNewDueDate }, onClear: () => setNewDueDate(null) })] })), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { onClick: handleCreate, size: "sm", className: "flex-1 bg-gradient-to-r from-teal-500 to-cyan-600 hover:from-teal-600 hover:to-cyan-700", children: "Add" }), _jsx(Button, { onClick: resetForm, size: "sm", variant: "outline", children: "Cancel" })] })] })), milestones.length > 0 && (Object.entries(groupedMilestones).map(([section, items]) => {
170
+ const isExpanded = expandedSections.has(section);
171
+ const completedCount = items.filter(m => m.isCompleted).length;
172
+ const totalCount = items.length;
173
+ return (_jsxs("div", { className: "space-y-2", children: [_jsxs("button", { onClick: () => toggleSection(section), className: "w-full flex items-center justify-between p-3 bg-gradient-to-r from-teal-50 to-cyan-50 dark:from-teal-900/20 dark:to-cyan-900/20 hover:from-teal-100 hover:to-cyan-100 dark:hover:from-teal-900/30 dark:hover:to-cyan-900/30 rounded-lg border border-teal-100 dark:border-teal-800 transition-colors", children: [_jsxs("div", { className: "flex items-center gap-3 flex-1 text-left", children: [_jsx(ChevronDown, { className: `w-4 h-4 text-teal-600 dark:text-teal-400 transition-transform flex-shrink-0 ${isExpanded ? "" : "-rotate-90"}` }), _jsx("h4", { className: "text-sm font-semibold text-teal-900 dark:text-teal-100 uppercase tracking-widest", children: section })] }), _jsxs("span", { className: "text-xs font-semibold text-teal-700 dark:text-teal-300 bg-white dark:bg-gray-800 px-2.5 py-1 rounded-full flex-shrink-0", children: [completedCount, "/", totalCount] })] }), isExpanded && (_jsx("div", { className: "space-y-2 pl-4", children: items.map((milestone) => {
174
+ const userChecked = hasUserChecked(milestone);
175
+ const uncheckedUsers = getUncheckedUsers(milestone);
176
+ const checkedUsers = getCheckedUsers(milestone);
177
+ const isExpanded = expandedMilestones.has(milestone._id);
178
+ return (_jsxs("div", { className: "space-y-0", children: [_jsxs("div", { role: "button", tabIndex: 0, onClick: () => toggleMilestoneExpand(milestone._id), onContextMenu: (event) => {
179
+ event.preventDefault();
180
+ setOpenMilestoneMenuId(milestone._id);
181
+ }, onKeyDown: (event) => {
182
+ if (event.key === "Enter" || event.key === " ") {
183
+ event.preventDefault();
184
+ toggleMilestoneExpand(milestone._id);
185
+ }
186
+ }, className: "w-full flex items-start gap-3 p-3 bg-gray-50 dark:bg-gray-800/30 hover:bg-gray-100 dark:hover:bg-gray-800/50 rounded-lg border border-gray-100 dark:border-gray-800 transition-colors group text-left", children: [_jsx("button", { onClick: (e) => {
187
+ e.stopPropagation();
188
+ handleToggle(milestone._id);
189
+ }, className: `mt-0.5 transition-colors flex-shrink-0 ${userChecked ? "text-green-500" : "text-gray-300 hover:text-teal-400"}`, children: userChecked ? _jsx(CheckCircle2, { className: "w-5 h-5" }) : _jsx(Circle, { className: "w-5 h-5" }) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("p", { className: `text-sm font-medium transition-all ${userChecked ? "text-gray-400 line-through" : "text-gray-700 dark:text-gray-200"}`, children: milestone.title }), milestone.dueDate && (_jsxs("p", { className: "text-[10px] text-gray-500 dark:text-gray-400 mt-1", children: ["Due: ", new Date(milestone.dueDate).toLocaleDateString()] }))] }), _jsxs("div", { className: "flex items-center gap-2 flex-shrink-0", children: [_jsxs("span", { className: `text-xs font-semibold px-2 py-1 rounded-full ${milestone.isCompleted
190
+ ? "bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400"
191
+ : "bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300"}`, children: [milestone.checks.length, "/", participants.length] }), _jsx(ChevronDown, { className: `w-4 h-4 text-gray-400 transition-transform flex-shrink-0 ${isExpanded ? "" : "-rotate-90"}` })] }), _jsxs(DropdownMenu, { open: openMilestoneMenuId === milestone._id, onOpenChange: (open) => setOpenMilestoneMenuId(open ? milestone._id : null), children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx("button", { onClick: (e) => e.stopPropagation(), className: "p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded-md transition-all flex-shrink-0", children: _jsx(MoreVertical, { className: "w-4 h-4 text-gray-400" }) }) }), _jsxs(DropdownMenuContent, { align: "end", children: [_jsxs(DropdownMenuItem, { onClick: (event) => {
192
+ event.stopPropagation();
193
+ setOpenMilestoneMenuId(null);
194
+ void handleToggle(milestone._id);
195
+ }, children: [userChecked ? _jsx(Circle, { className: "w-4 h-4 mr-2" }) : _jsx(CheckCircle2, { className: "w-4 h-4 mr-2" }), userChecked ? "Uncheck milestone" : "Check milestone"] }), _jsxs(DropdownMenuItem, { onClick: (event) => {
196
+ event.stopPropagation();
197
+ showMemberProgress(milestone._id);
198
+ }, children: [_jsx(ListTodo, { className: "w-4 h-4 mr-2" }), "View member progress"] }), (isSameChatActor(milestone.createdBy, currentActor) || isAdmin) && _jsxs(DropdownMenuItem, { onClick: (event) => {
199
+ event.stopPropagation();
200
+ setOpenMilestoneMenuId(null);
201
+ handleEdit(milestone);
202
+ }, children: [_jsx(Pencil, { className: "w-4 h-4 mr-2" }), "Edit"] }), (isSameChatActor(milestone.createdBy, currentActor) || isAdmin) && _jsxs(DropdownMenuItem, { className: "text-red-500", onClick: (event) => {
203
+ event.stopPropagation();
204
+ setOpenMilestoneMenuId(null);
205
+ void handleDelete(milestone._id);
206
+ }, children: [_jsx(Trash2, { className: "w-4 h-4 mr-2" }), "Delete"] })] })] })] }), isExpanded && (_jsxs("div", { className: "w-full rounded-xl border border-slate-200 bg-white p-4 shadow-sm dark:border-slate-700 dark:bg-slate-800/50 space-y-4", children: [milestone.description && (_jsxs("div", { className: "rounded-lg bg-slate-50 px-3 py-2.5 dark:bg-slate-900/40", children: [_jsx("p", { className: "text-[10px] font-semibold text-slate-500 uppercase tracking-wider mb-1", children: "Description" }), _jsx("p", { className: "text-sm text-slate-700 dark:text-slate-300", children: milestone.description })] })), _jsxs("div", { className: "flex items-center justify-between border-b border-slate-100 pb-2 dark:border-slate-700", children: [_jsx("p", { className: "text-xs font-semibold uppercase tracking-wider text-slate-600 dark:text-slate-300", children: "Member progress" }), _jsxs("span", { className: "rounded-full bg-teal-50 px-2 py-1 text-xs font-semibold text-teal-700 dark:bg-teal-900/30 dark:text-teal-300", children: [checkedUsers.length, " of ", participants.length, " checked"] })] }), checkedUsers.length > 0 && (_jsxs("div", { children: [_jsxs("p", { className: "mb-2 text-[10px] font-semibold uppercase tracking-wider text-emerald-700 dark:text-emerald-300", children: ["Completed (", checkedUsers.length, ")"] }), _jsx("div", { className: "flex flex-wrap gap-2", children: checkedUsers.map((participant) => (_jsxs("div", { className: "flex items-center gap-1.5 rounded-full bg-emerald-50 py-1 pl-1 pr-2.5 text-xs font-medium text-emerald-800 dark:bg-emerald-900/30 dark:text-emerald-200", children: [_jsx(CheckCircle2, { className: "h-3.5 w-3.5" }), participantLabel(participant)] }, participant.actorId))) })] })), uncheckedUsers.length > 0 && (_jsxs("div", { children: [_jsxs("p", { className: "mb-2 text-[10px] font-semibold text-amber-700 dark:text-amber-300 uppercase tracking-wider", children: ["Pending (", uncheckedUsers.length, ")"] }), _jsx("div", { className: "flex flex-wrap gap-2", children: uncheckedUsers.map((participant) => (_jsxs("div", { className: "flex items-center gap-1.5 rounded-full bg-amber-50 py-1 pl-1 pr-2.5 text-xs font-medium text-amber-800 dark:bg-amber-900/20 dark:text-amber-200", children: [_jsx(AlertCircle, { className: "w-3.5 h-3.5 flex-shrink-0" }), _jsx("span", { children: participantLabel(participant) })] }, participant.actorId))) })] })), milestone.isCompleted && (_jsxs("div", { className: "flex items-center gap-2 p-2 bg-green-50 dark:bg-green-900/20 rounded border border-green-200 dark:border-green-800/30", children: [_jsx(CheckCircle2, { className: "w-4 h-4 text-green-600 dark:text-green-400 flex-shrink-0" }), _jsx("p", { className: "text-xs text-green-700 dark:text-green-400 font-medium", children: "All participants have checked this milestone" })] }))] }))] }, milestone._id));
207
+ }) }))] }, section));
208
+ }))] })) }), isFeatureEnabled && !isAdding && (_jsx("div", { className: "p-4 border-t border-gray-200 dark:border-gray-700 flex-shrink-0", children: _jsxs(Button, { onClick: () => setIsAdding(true), className: "w-full bg-gradient-to-r from-teal-500 to-cyan-600 hover:from-teal-600 hover:to-cyan-700 text-white rounded-lg flex items-center justify-center gap-2", children: [_jsx(Plus, { className: "w-4 h-4" }), "Add Milestone"] }) }))] }));
209
+ }
@@ -0,0 +1,11 @@
1
+ import { type ChatActorRef, type Conversation, type ExpenseSplit } from "@myrjfa/state/dist/lib/models/chat";
2
+ import { Dispatch, SetStateAction } from "react";
3
+ interface ParticipantSelectorProps {
4
+ participants: ChatActorRef[];
5
+ onChange: (participants: ChatActorRef[]) => void;
6
+ onSplitsChange: Dispatch<SetStateAction<ExpenseSplit[]>>;
7
+ availableUsers: Conversation["participants"];
8
+ }
9
+ export declare function ParticipantSelector({ participants, onChange, onSplitsChange, availableUsers }: ParticipantSelectorProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=ParticipantSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParticipantSelector.d.ts","sourceRoot":"","sources":["../../../src/chat/components/ParticipantSelector.tsx"],"names":[],"mappings":"AAGA,OAAO,EAGH,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEjD,UAAU,wBAAwB;IAC9B,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACzD,cAAc,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;CAChD;AAED,wBAAgB,mBAAmB,CAAC,EAChC,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,cAAc,EACjB,EAAE,wBAAwB,2CAuE1B"}