@m5kdev/web-ui 0.1.2 → 0.1.4

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 (371) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +12 -0
  3. package/dist/src/animations/card.motion.d.ts +3 -0
  4. package/dist/src/animations/card.motion.d.ts.map +1 -0
  5. package/dist/src/animations/card.motion.js +7 -0
  6. package/dist/src/components/AvatarUpload.d.ts +8 -0
  7. package/dist/src/components/AvatarUpload.d.ts.map +1 -0
  8. package/dist/src/components/AvatarUpload.js +67 -0
  9. package/dist/src/components/Button.d.ts +6 -0
  10. package/dist/src/components/Button.d.ts.map +1 -0
  11. package/dist/src/components/Button.js +5 -0
  12. package/dist/src/components/Calendar.d.ts +36 -0
  13. package/dist/src/components/Calendar.d.ts.map +1 -0
  14. package/dist/src/components/Calendar.js +10 -0
  15. package/dist/src/components/CardsSelect.d.ts +24 -0
  16. package/dist/src/components/CardsSelect.d.ts.map +1 -0
  17. package/dist/src/components/CardsSelect.js +46 -0
  18. package/dist/src/components/CollapsibleSidebarMenuItem.d.ts +10 -0
  19. package/dist/src/components/CollapsibleSidebarMenuItem.d.ts.map +1 -0
  20. package/dist/src/components/CollapsibleSidebarMenuItem.js +11 -0
  21. package/dist/src/components/ColorPicker.d.ts +5 -0
  22. package/dist/src/components/ColorPicker.d.ts.map +1 -0
  23. package/dist/src/components/ColorPicker.js +21 -0
  24. package/dist/src/components/CopyButton.d.ts +7 -0
  25. package/dist/src/components/CopyButton.d.ts.map +1 -0
  26. package/dist/src/components/CopyButton.js +24 -0
  27. package/dist/src/components/CropDialog.d.ts +11 -0
  28. package/dist/src/components/CropDialog.d.ts.map +1 -0
  29. package/dist/src/components/CropDialog.js +67 -0
  30. package/dist/src/components/DialogProvider.d.ts +16 -0
  31. package/dist/src/components/DialogProvider.d.ts.map +1 -0
  32. package/dist/src/components/DialogProvider.js +50 -0
  33. package/dist/src/components/ErrorFallback.d.ts +5 -0
  34. package/dist/src/components/ErrorFallback.d.ts.map +1 -0
  35. package/dist/src/components/ErrorFallback.js +5 -0
  36. package/dist/src/components/FileDropzone.d.ts +7 -0
  37. package/dist/src/components/FileDropzone.d.ts.map +1 -0
  38. package/dist/src/components/FileDropzone.js +63 -0
  39. package/dist/src/components/MultiSelectDropdown.d.ts +27 -0
  40. package/dist/src/components/MultiSelectDropdown.d.ts.map +1 -0
  41. package/dist/src/components/MultiSelectDropdown.js +53 -0
  42. package/dist/src/components/Orb.d.ts +7 -0
  43. package/dist/src/components/Orb.d.ts.map +1 -0
  44. package/dist/src/components/Orb.js +259 -0
  45. package/dist/src/components/PageAlert.d.ts +19 -0
  46. package/dist/src/components/PageAlert.d.ts.map +1 -0
  47. package/dist/src/components/PageAlert.js +48 -0
  48. package/dist/src/components/SelectChips.d.ts +11 -0
  49. package/dist/src/components/SelectChips.d.ts.map +1 -0
  50. package/dist/src/components/SelectChips.js +11 -0
  51. package/dist/src/components/SidebarItem.d.ts +8 -0
  52. package/dist/src/components/SidebarItem.d.ts.map +1 -0
  53. package/dist/src/components/SidebarItem.js +6 -0
  54. package/dist/src/components/Steps.d.ts +20 -0
  55. package/dist/src/components/Steps.d.ts.map +1 -0
  56. package/dist/src/components/Steps.js +34 -0
  57. package/dist/src/components/TablerIconPicker.d.ts +3 -0
  58. package/dist/src/components/TablerIconPicker.d.ts.map +1 -0
  59. package/dist/src/components/TablerIconPicker.js +4238 -0
  60. package/dist/src/components/app-header.d.ts +7 -0
  61. package/dist/src/components/app-header.d.ts.map +1 -0
  62. package/dist/src/components/app-header.js +8 -0
  63. package/dist/src/components/blur-card.d.ts +14 -0
  64. package/dist/src/components/blur-card.d.ts.map +1 -0
  65. package/dist/src/components/blur-card.js +34 -0
  66. package/dist/src/components/features-section-demo-1.d.ts +7 -0
  67. package/dist/src/components/features-section-demo-1.d.ts.map +1 -0
  68. package/dist/src/components/features-section-demo-1.js +53 -0
  69. package/dist/src/components/features-section-demo-2.d.ts +2 -0
  70. package/dist/src/components/features-section-demo-2.d.ts.map +1 -0
  71. package/dist/src/components/features-section-demo-2.js +51 -0
  72. package/dist/src/components/features-section-demo-3.d.ts +9 -0
  73. package/dist/src/components/features-section-demo-3.d.ts.map +1 -0
  74. package/dist/src/components/features-section-demo-3.js +116 -0
  75. package/dist/src/components/mode-toggle.d.ts +2 -0
  76. package/dist/src/components/mode-toggle.d.ts.map +1 -0
  77. package/dist/src/components/mode-toggle.js +9 -0
  78. package/dist/src/components/nav-main.d.ts +14 -0
  79. package/dist/src/components/nav-main.d.ts.map +1 -0
  80. package/dist/src/components/nav-main.js +9 -0
  81. package/dist/src/components/pricing-cards.d.ts +2 -0
  82. package/dist/src/components/pricing-cards.d.ts.map +1 -0
  83. package/dist/src/components/pricing-cards.js +27 -0
  84. package/dist/src/components/shared/ButtonCopy.d.ts +7 -0
  85. package/dist/src/components/shared/ButtonCopy.d.ts.map +1 -0
  86. package/dist/src/components/shared/ButtonCopy.js +24 -0
  87. package/dist/src/components/team-switcher.d.ts +9 -0
  88. package/dist/src/components/team-switcher.d.ts.map +1 -0
  89. package/dist/src/components/team-switcher.js +10 -0
  90. package/dist/src/components/theme-provider.d.ts +14 -0
  91. package/dist/src/components/theme-provider.d.ts.map +1 -0
  92. package/dist/src/components/theme-provider.js +41 -0
  93. package/dist/src/components/typewriter.d.ts +19 -0
  94. package/dist/src/components/typewriter.d.ts.map +1 -0
  95. package/dist/src/components/typewriter.js +38 -0
  96. package/dist/src/components/ui/alert-dialog.d.ts +15 -0
  97. package/dist/src/components/ui/alert-dialog.d.ts.map +1 -0
  98. package/dist/src/components/ui/alert-dialog.js +38 -0
  99. package/dist/src/components/ui/alert.d.ts +10 -0
  100. package/dist/src/components/ui/alert.d.ts.map +1 -0
  101. package/dist/src/components/ui/alert.js +24 -0
  102. package/dist/src/components/ui/avatar.d.ts +7 -0
  103. package/dist/src/components/ui/avatar.d.ts.map +1 -0
  104. package/dist/src/components/ui/avatar.js +12 -0
  105. package/dist/src/components/ui/badge.d.ts +10 -0
  106. package/dist/src/components/ui/badge.d.ts.map +1 -0
  107. package/dist/src/components/ui/badge.js +20 -0
  108. package/dist/src/components/ui/bento-grid.d.ts +12 -0
  109. package/dist/src/components/ui/bento-grid.d.ts.map +1 -0
  110. package/dist/src/components/ui/bento-grid.js +8 -0
  111. package/dist/src/components/ui/bento-grid2.d.ts +16 -0
  112. package/dist/src/components/ui/bento-grid2.d.ts.map +1 -0
  113. package/dist/src/components/ui/bento-grid2.js +13 -0
  114. package/dist/src/components/ui/breadcrumb.d.ts +20 -0
  115. package/dist/src/components/ui/breadcrumb.d.ts.map +1 -0
  116. package/dist/src/components/ui/breadcrumb.js +23 -0
  117. package/dist/src/components/ui/button.d.ts +12 -0
  118. package/dist/src/components/ui/button.d.ts.map +1 -0
  119. package/dist/src/components/ui/button.js +33 -0
  120. package/dist/src/components/ui/card.d.ts +9 -0
  121. package/dist/src/components/ui/card.d.ts.map +1 -0
  122. package/dist/src/components/ui/card.js +16 -0
  123. package/dist/src/components/ui/checkbox.d.ts +5 -0
  124. package/dist/src/components/ui/checkbox.d.ts.map +1 -0
  125. package/dist/src/components/ui/checkbox.js +8 -0
  126. package/dist/src/components/ui/collapsible.d.ts +6 -0
  127. package/dist/src/components/ui/collapsible.d.ts.map +1 -0
  128. package/dist/src/components/ui/collapsible.js +5 -0
  129. package/dist/src/components/ui/dialog.d.ts +14 -0
  130. package/dist/src/components/ui/dialog.d.ts.map +1 -0
  131. package/dist/src/components/ui/dialog.js +35 -0
  132. package/dist/src/components/ui/dropdown-menu.d.ts +28 -0
  133. package/dist/src/components/ui/dropdown-menu.d.ts.map +1 -0
  134. package/dist/src/components/ui/dropdown-menu.js +32 -0
  135. package/dist/src/components/ui/floating-navbar.d.ts +10 -0
  136. package/dist/src/components/ui/floating-navbar.d.ts.map +1 -0
  137. package/dist/src/components/ui/floating-navbar.js +38 -0
  138. package/dist/src/components/ui/form.d.ts +24 -0
  139. package/dist/src/components/ui/form.d.ts.map +1 -0
  140. package/dist/src/components/ui/form.js +60 -0
  141. package/dist/src/components/ui/image.d.ts +7 -0
  142. package/dist/src/components/ui/image.d.ts.map +1 -0
  143. package/dist/src/components/ui/image.js +15 -0
  144. package/dist/src/components/ui/input.d.ts +4 -0
  145. package/dist/src/components/ui/input.d.ts.map +1 -0
  146. package/dist/src/components/ui/input.js +8 -0
  147. package/dist/src/components/ui/label.d.ts +6 -0
  148. package/dist/src/components/ui/label.d.ts.map +1 -0
  149. package/dist/src/components/ui/label.js +9 -0
  150. package/dist/src/components/ui/pagination.d.ts +14 -0
  151. package/dist/src/components/ui/pagination.d.ts.map +1 -0
  152. package/dist/src/components/ui/pagination.js +29 -0
  153. package/dist/src/components/ui/progress.d.ts +5 -0
  154. package/dist/src/components/ui/progress.d.ts.map +1 -0
  155. package/dist/src/components/ui/progress.js +7 -0
  156. package/dist/src/components/ui/resizable-navbar.d.ts +57 -0
  157. package/dist/src/components/ui/resizable-navbar.d.ts.map +1 -0
  158. package/dist/src/components/ui/resizable-navbar.js +86 -0
  159. package/dist/src/components/ui/segment-control.d.ts +10 -0
  160. package/dist/src/components/ui/segment-control.d.ts.map +1 -0
  161. package/dist/src/components/ui/segment-control.js +42 -0
  162. package/dist/src/components/ui/select.d.ts +14 -0
  163. package/dist/src/components/ui/select.d.ts.map +1 -0
  164. package/dist/src/components/ui/select.js +26 -0
  165. package/dist/src/components/ui/separator.d.ts +5 -0
  166. package/dist/src/components/ui/separator.d.ts.map +1 -0
  167. package/dist/src/components/ui/separator.js +7 -0
  168. package/dist/src/components/ui/sheet.d.ts +26 -0
  169. package/dist/src/components/ui/sheet.d.ts.map +1 -0
  170. package/dist/src/components/ui/sheet.js +37 -0
  171. package/dist/src/components/ui/sidebar.d.ts +67 -0
  172. package/dist/src/components/ui/sidebar.d.ts.map +1 -0
  173. package/dist/src/components/ui/sidebar.js +222 -0
  174. package/dist/src/components/ui/skeleton.d.ts +3 -0
  175. package/dist/src/components/ui/skeleton.d.ts.map +1 -0
  176. package/dist/src/components/ui/skeleton.js +6 -0
  177. package/dist/src/components/ui/slider.d.ts +5 -0
  178. package/dist/src/components/ui/slider.d.ts.map +1 -0
  179. package/dist/src/components/ui/slider.js +7 -0
  180. package/dist/src/components/ui/sonner.d.ts +5 -0
  181. package/dist/src/components/ui/sonner.d.ts.map +1 -0
  182. package/dist/src/components/ui/sonner.js +15 -0
  183. package/dist/src/components/ui/spinner.d.ts +15 -0
  184. package/dist/src/components/ui/spinner.d.ts.map +1 -0
  185. package/dist/src/components/ui/spinner.js +30 -0
  186. package/dist/src/components/ui/switch.d.ts +5 -0
  187. package/dist/src/components/ui/switch.d.ts.map +1 -0
  188. package/dist/src/components/ui/switch.js +7 -0
  189. package/dist/src/components/ui/table.d.ts +11 -0
  190. package/dist/src/components/ui/table.d.ts.map +1 -0
  191. package/dist/src/components/ui/table.js +27 -0
  192. package/dist/src/components/ui/tabs.d.ts +8 -0
  193. package/dist/src/components/ui/tabs.d.ts.map +1 -0
  194. package/dist/src/components/ui/tabs.js +16 -0
  195. package/dist/src/components/ui/textarea.d.ts +4 -0
  196. package/dist/src/components/ui/textarea.d.ts.map +1 -0
  197. package/dist/src/components/ui/textarea.js +6 -0
  198. package/dist/src/components/ui/timeline.d.ts +12 -0
  199. package/dist/src/components/ui/timeline.d.ts.map +1 -0
  200. package/dist/src/components/ui/timeline.js +27 -0
  201. package/dist/src/components/ui/toast.d.ts +16 -0
  202. package/dist/src/components/ui/toast.d.ts.map +1 -0
  203. package/dist/src/components/ui/toast.js +33 -0
  204. package/dist/src/components/ui/tooltip.d.ts +8 -0
  205. package/dist/src/components/ui/tooltip.d.ts.map +1 -0
  206. package/dist/src/components/ui/tooltip.js +16 -0
  207. package/dist/src/components/ui/typewriter-effect.d.ts +17 -0
  208. package/dist/src/components/ui/typewriter-effect.d.ts.map +1 -0
  209. package/dist/src/components/ui/typewriter-effect.js +76 -0
  210. package/dist/src/hooks/use-mobile.d.ts +2 -0
  211. package/dist/src/hooks/use-mobile.d.ts.map +1 -0
  212. package/dist/src/hooks/use-mobile.js +15 -0
  213. package/dist/src/hooks/useDialog.d.ts +5 -0
  214. package/dist/src/hooks/useDialog.d.ts.map +1 -0
  215. package/dist/src/hooks/useDialog.js +22 -0
  216. package/dist/src/icons/GoogleIcon.d.ts +6 -0
  217. package/dist/src/icons/GoogleIcon.d.ts.map +1 -0
  218. package/dist/src/icons/GoogleIcon.js +4 -0
  219. package/dist/src/icons/LinkedInIcon.d.ts +6 -0
  220. package/dist/src/icons/LinkedInIcon.d.ts.map +1 -0
  221. package/dist/src/icons/LinkedInIcon.js +4 -0
  222. package/dist/src/icons/MicrosoftIcon.d.ts +6 -0
  223. package/dist/src/icons/MicrosoftIcon.d.ts.map +1 -0
  224. package/dist/src/icons/MicrosoftIcon.js +4 -0
  225. package/dist/src/lib/chatwoot.d.ts +12 -0
  226. package/dist/src/lib/chatwoot.d.ts.map +1 -0
  227. package/dist/src/lib/chatwoot.js +28 -0
  228. package/dist/src/lib/utils.d.ts +3 -0
  229. package/dist/src/lib/utils.d.ts.map +1 -0
  230. package/dist/src/lib/utils.js +5 -0
  231. package/dist/src/modules/app/components/AppLoader.d.ts +3 -0
  232. package/dist/src/modules/app/components/AppLoader.d.ts.map +1 -0
  233. package/dist/src/modules/app/components/AppLoader.js +5 -0
  234. package/dist/src/modules/app/components/AppShell.d.ts +8 -0
  235. package/dist/src/modules/app/components/AppShell.d.ts.map +1 -0
  236. package/dist/src/modules/app/components/AppShell.js +7 -0
  237. package/dist/src/modules/app/components/AppSidebar.d.ts +8 -0
  238. package/dist/src/modules/app/components/AppSidebar.d.ts.map +1 -0
  239. package/dist/src/modules/app/components/AppSidebar.js +5 -0
  240. package/dist/src/modules/app/components/AppSidebarContent.d.ts +17 -0
  241. package/dist/src/modules/app/components/AppSidebarContent.d.ts.map +1 -0
  242. package/dist/src/modules/app/components/AppSidebarContent.js +7 -0
  243. package/dist/src/modules/app/components/AppSidebarHeader.d.ts +9 -0
  244. package/dist/src/modules/app/components/AppSidebarHeader.d.ts.map +1 -0
  245. package/dist/src/modules/app/components/AppSidebarHeader.js +10 -0
  246. package/dist/src/modules/app/components/AppSidebarInvites.d.ts +4 -0
  247. package/dist/src/modules/app/components/AppSidebarInvites.d.ts.map +1 -0
  248. package/dist/src/modules/app/components/AppSidebarInvites.js +12 -0
  249. package/dist/src/modules/app/components/AppSidebarUser.d.ts +12 -0
  250. package/dist/src/modules/app/components/AppSidebarUser.d.ts.map +1 -0
  251. package/dist/src/modules/app/components/AppSidebarUser.js +16 -0
  252. package/dist/src/modules/auth/components/AdminUserManagement.d.ts +7 -0
  253. package/dist/src/modules/auth/components/AdminUserManagement.d.ts.map +1 -0
  254. package/dist/src/modules/auth/components/AdminUserManagement.js +422 -0
  255. package/dist/src/modules/auth/components/AdminWaitlist.d.ts +7 -0
  256. package/dist/src/modules/auth/components/AdminWaitlist.d.ts.map +1 -0
  257. package/dist/src/modules/auth/components/AdminWaitlist.js +118 -0
  258. package/dist/src/modules/auth/components/AuthLayout.d.ts +5 -0
  259. package/dist/src/modules/auth/components/AuthLayout.d.ts.map +1 -0
  260. package/dist/src/modules/auth/components/AuthLayout.js +5 -0
  261. package/dist/src/modules/auth/components/AuthProviders.d.ts +7 -0
  262. package/dist/src/modules/auth/components/AuthProviders.d.ts.map +1 -0
  263. package/dist/src/modules/auth/components/AuthProviders.js +45 -0
  264. package/dist/src/modules/auth/components/AuthRouter.d.ts +10 -0
  265. package/dist/src/modules/auth/components/AuthRouter.d.ts.map +1 -0
  266. package/dist/src/modules/auth/components/AuthRouter.js +12 -0
  267. package/dist/src/modules/auth/components/ClaimAccountRoute.d.ts +5 -0
  268. package/dist/src/modules/auth/components/ClaimAccountRoute.d.ts.map +1 -0
  269. package/dist/src/modules/auth/components/ClaimAccountRoute.js +143 -0
  270. package/dist/src/modules/auth/components/ErrorAuthRoute.d.ts +2 -0
  271. package/dist/src/modules/auth/components/ErrorAuthRoute.d.ts.map +1 -0
  272. package/dist/src/modules/auth/components/ErrorAuthRoute.js +93 -0
  273. package/dist/src/modules/auth/components/ForgotPasswordForm.d.ts +2 -0
  274. package/dist/src/modules/auth/components/ForgotPasswordForm.d.ts.map +1 -0
  275. package/dist/src/modules/auth/components/ForgotPasswordForm.js +27 -0
  276. package/dist/src/modules/auth/components/ForgotPasswordRoute.d.ts +2 -0
  277. package/dist/src/modules/auth/components/ForgotPasswordRoute.d.ts.map +1 -0
  278. package/dist/src/modules/auth/components/ForgotPasswordRoute.js +9 -0
  279. package/dist/src/modules/auth/components/InviteFriends.d.ts +6 -0
  280. package/dist/src/modules/auth/components/InviteFriends.d.ts.map +1 -0
  281. package/dist/src/modules/auth/components/InviteFriends.js +74 -0
  282. package/dist/src/modules/auth/components/LastUsedBadge.d.ts +6 -0
  283. package/dist/src/modules/auth/components/LastUsedBadge.d.ts.map +1 -0
  284. package/dist/src/modules/auth/components/LastUsedBadge.js +9 -0
  285. package/dist/src/modules/auth/components/LoginForm.d.ts +4 -0
  286. package/dist/src/modules/auth/components/LoginForm.d.ts.map +1 -0
  287. package/dist/src/modules/auth/components/LoginForm.js +44 -0
  288. package/dist/src/modules/auth/components/LoginRoute.d.ts +4 -0
  289. package/dist/src/modules/auth/components/LoginRoute.d.ts.map +1 -0
  290. package/dist/src/modules/auth/components/LoginRoute.js +11 -0
  291. package/dist/src/modules/auth/components/LogoutRoute.d.ts +2 -0
  292. package/dist/src/modules/auth/components/LogoutRoute.d.ts.map +1 -0
  293. package/dist/src/modules/auth/components/LogoutRoute.js +15 -0
  294. package/dist/src/modules/auth/components/OrganizationAcceptInvitationRoute.d.ts +10 -0
  295. package/dist/src/modules/auth/components/OrganizationAcceptInvitationRoute.d.ts.map +1 -0
  296. package/dist/src/modules/auth/components/OrganizationAcceptInvitationRoute.js +102 -0
  297. package/dist/src/modules/auth/components/OrganizationMembersRoute.d.ts +52 -0
  298. package/dist/src/modules/auth/components/OrganizationMembersRoute.d.ts.map +1 -0
  299. package/dist/src/modules/auth/components/OrganizationMembersRoute.js +359 -0
  300. package/dist/src/modules/auth/components/OrganizationSettingsRoute.d.ts +21 -0
  301. package/dist/src/modules/auth/components/OrganizationSettingsRoute.d.ts.map +1 -0
  302. package/dist/src/modules/auth/components/OrganizationSettingsRoute.js +153 -0
  303. package/dist/src/modules/auth/components/OrganizationSwitcher.d.ts +8 -0
  304. package/dist/src/modules/auth/components/OrganizationSwitcher.d.ts.map +1 -0
  305. package/dist/src/modules/auth/components/OrganizationSwitcher.js +74 -0
  306. package/dist/src/modules/auth/components/ProfileRoute.d.ts +2 -0
  307. package/dist/src/modules/auth/components/ProfileRoute.d.ts.map +1 -0
  308. package/dist/src/modules/auth/components/ProfileRoute.js +42 -0
  309. package/dist/src/modules/auth/components/RangeNuqsDatePicker.d.ts +32 -0
  310. package/dist/src/modules/auth/components/RangeNuqsDatePicker.d.ts.map +1 -0
  311. package/dist/src/modules/auth/components/RangeNuqsDatePicker.js +236 -0
  312. package/dist/src/modules/auth/components/ResetPasswordForm.d.ts +2 -0
  313. package/dist/src/modules/auth/components/ResetPasswordForm.d.ts.map +1 -0
  314. package/dist/src/modules/auth/components/ResetPasswordForm.js +39 -0
  315. package/dist/src/modules/auth/components/ResetPasswordRoute.d.ts +2 -0
  316. package/dist/src/modules/auth/components/ResetPasswordRoute.d.ts.map +1 -0
  317. package/dist/src/modules/auth/components/ResetPasswordRoute.js +9 -0
  318. package/dist/src/modules/auth/components/SignupFormRoute.d.ts +6 -0
  319. package/dist/src/modules/auth/components/SignupFormRoute.d.ts.map +1 -0
  320. package/dist/src/modules/auth/components/SignupFormRoute.js +106 -0
  321. package/dist/src/modules/auth/components/SignupRoute.d.ts +8 -0
  322. package/dist/src/modules/auth/components/SignupRoute.d.ts.map +1 -0
  323. package/dist/src/modules/auth/components/SignupRoute.js +16 -0
  324. package/dist/src/modules/auth/components/UserPreferences.d.ts +31 -0
  325. package/dist/src/modules/auth/components/UserPreferences.d.ts.map +1 -0
  326. package/dist/src/modules/auth/components/UserPreferences.js +60 -0
  327. package/dist/src/modules/auth/components/WaitlistCard.d.ts +7 -0
  328. package/dist/src/modules/auth/components/WaitlistCard.d.ts.map +1 -0
  329. package/dist/src/modules/auth/components/WaitlistCard.js +32 -0
  330. package/dist/src/modules/auth/components/WaitlistCodeValidation.d.ts +8 -0
  331. package/dist/src/modules/auth/components/WaitlistCodeValidation.d.ts.map +1 -0
  332. package/dist/src/modules/auth/components/WaitlistCodeValidation.js +43 -0
  333. package/dist/src/modules/billing/components/BillingBetaPage.d.ts +9 -0
  334. package/dist/src/modules/billing/components/BillingBetaPage.d.ts.map +1 -0
  335. package/dist/src/modules/billing/components/BillingBetaPage.js +11 -0
  336. package/dist/src/modules/billing/components/BillingInvoicePage.d.ts +8 -0
  337. package/dist/src/modules/billing/components/BillingInvoicePage.d.ts.map +1 -0
  338. package/dist/src/modules/billing/components/BillingInvoicePage.js +32 -0
  339. package/dist/src/modules/billing/components/BillingPlanSelect.d.ts +7 -0
  340. package/dist/src/modules/billing/components/BillingPlanSelect.d.ts.map +1 -0
  341. package/dist/src/modules/billing/components/BillingPlanSelect.js +8 -0
  342. package/dist/src/modules/billing/components/BillingRouter.d.ts +10 -0
  343. package/dist/src/modules/billing/components/BillingRouter.d.ts.map +1 -0
  344. package/dist/src/modules/billing/components/BillingRouter.js +8 -0
  345. package/dist/src/modules/billing/components/BillingSinglePlanSelect.d.ts +9 -0
  346. package/dist/src/modules/billing/components/BillingSinglePlanSelect.d.ts.map +1 -0
  347. package/dist/src/modules/billing/components/BillingSinglePlanSelect.js +46 -0
  348. package/dist/src/modules/table/components/ColumnOrderAndVisibility.d.ts +11 -0
  349. package/dist/src/modules/table/components/ColumnOrderAndVisibility.d.ts.map +1 -0
  350. package/dist/src/modules/table/components/ColumnOrderAndVisibility.js +42 -0
  351. package/dist/src/modules/table/components/NuqsTable.d.ts +24 -0
  352. package/dist/src/modules/table/components/NuqsTable.d.ts.map +1 -0
  353. package/dist/src/modules/table/components/NuqsTable.js +198 -0
  354. package/dist/src/modules/table/components/TableFiltering.d.ts +24 -0
  355. package/dist/src/modules/table/components/TableFiltering.d.ts.map +1 -0
  356. package/dist/src/modules/table/components/TableFiltering.js +236 -0
  357. package/dist/src/modules/table/components/TablePagination.d.ts +10 -0
  358. package/dist/src/modules/table/components/TablePagination.d.ts.map +1 -0
  359. package/dist/src/modules/table/components/TablePagination.js +21 -0
  360. package/dist/src/modules/table/components/table.types.d.ts +13 -0
  361. package/dist/src/modules/table/components/table.types.d.ts.map +1 -0
  362. package/dist/src/modules/table/components/table.types.js +1 -0
  363. package/dist/src/modules/table/filterTransformers.d.ts +54 -0
  364. package/dist/src/modules/table/filterTransformers.d.ts.map +1 -0
  365. package/dist/src/modules/table/filterTransformers.js +276 -0
  366. package/dist/src/types.d.ts +4 -0
  367. package/dist/src/types.d.ts.map +1 -0
  368. package/dist/src/types.js +1 -0
  369. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  370. package/package.json +5 -5
  371. package/tsconfig.json +4 -1
@@ -0,0 +1,10 @@
1
+ export type OrganizationAcceptInvitationRouteProps = {
2
+ authReturnKey?: string;
3
+ loginPath?: string;
4
+ defaultRedirectPath?: string;
5
+ managerRedirectPath?: string;
6
+ managerRoles?: string[];
7
+ onInvalidateScopedQueries?: () => void | Promise<void>;
8
+ };
9
+ export declare function OrganizationAcceptInvitationRoute({ authReturnKey, loginPath, defaultRedirectPath, managerRedirectPath, managerRoles, onInvalidateScopedQueries, }: OrganizationAcceptInvitationRouteProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=OrganizationAcceptInvitationRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationAcceptInvitationRoute.d.ts","sourceRoot":"","sources":["../../../../../src/modules/auth/components/OrganizationAcceptInvitationRoute.tsx"],"names":[],"mappings":"AAUA,MAAM,MAAM,sCAAsC,GAAG;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,yBAAyB,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD,CAAC;AAEF,wBAAgB,iCAAiC,CAAC,EAChD,aAAiC,EACjC,SAAoB,EACpB,mBAAyB,EACzB,mBAA6C,EAC7C,YAAiC,EACjC,yBAAyB,GAC1B,EAAE,sCAAsC,2CAsIxC"}
@@ -0,0 +1,102 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Card, CardBody, CardHeader, Spinner } from "@heroui/react";
3
+ import { authClient } from "@m5kdev/frontend/modules/auth/auth.lib";
4
+ import { useSession } from "@m5kdev/frontend/modules/auth/hooks/useSession";
5
+ import { useEffect, useMemo, useState } from "react";
6
+ import { useTranslation } from "react-i18next";
7
+ import { useLocation, useNavigate, useSearchParams } from "react-router";
8
+ import { toast } from "sonner";
9
+ export function OrganizationAcceptInvitationRoute({ authReturnKey = "org-auth-return", loginPath = "/login", defaultRedirectPath = "/", managerRedirectPath = "/organization/members", managerRoles = ["admin", "owner"], onInvalidateScopedQueries, }) {
10
+ const { t } = useTranslation();
11
+ const [searchParams] = useSearchParams();
12
+ const { data: session, registerSession } = useSession();
13
+ const navigate = useNavigate();
14
+ const location = useLocation();
15
+ const invitationId = searchParams.get("id");
16
+ const [phase, setPhase] = useState("idle");
17
+ const [errorMessage, setErrorMessage] = useState(null);
18
+ const managerRoleSet = useMemo(() => new Set(managerRoles), [managerRoles]);
19
+ useEffect(() => {
20
+ if (!invitationId) {
21
+ setPhase("error");
22
+ setErrorMessage(t("web-ui:organization.invitation.errorMissing"));
23
+ return;
24
+ }
25
+ if (!session) {
26
+ sessionStorage.setItem(authReturnKey, `${location.pathname}${location.search}`);
27
+ navigate(loginPath, { replace: true });
28
+ }
29
+ }, [
30
+ authReturnKey,
31
+ invitationId,
32
+ location.pathname,
33
+ location.search,
34
+ loginPath,
35
+ navigate,
36
+ session,
37
+ t,
38
+ ]);
39
+ useEffect(() => {
40
+ if (!session || !invitationId || phase !== "idle") {
41
+ return;
42
+ }
43
+ let isMounted = true;
44
+ const run = async () => {
45
+ try {
46
+ setPhase("accepting");
47
+ const { data, error } = await authClient.organization.acceptInvitation({ invitationId });
48
+ if (error) {
49
+ throw new Error(error.message ?? t("web-ui:organization.invitation.acceptFailed"));
50
+ }
51
+ const organizationId = data?.invitation
52
+ ?.organizationId ?? null;
53
+ const invitationRole = data?.invitation?.role ?? "member";
54
+ if (organizationId) {
55
+ const result = await authClient.organization.setActive({ organizationId });
56
+ if (result.error) {
57
+ throw new Error(result.error.message ?? t("web-ui:organization.invitation.activateFailed"));
58
+ }
59
+ }
60
+ registerSession(() => {
61
+ void onInvalidateScopedQueries?.();
62
+ });
63
+ if (isMounted) {
64
+ setPhase("success");
65
+ toast.success(t("web-ui:organization.invitation.accepted"));
66
+ navigate(managerRoleSet.has(invitationRole) ? managerRedirectPath : defaultRedirectPath, {
67
+ replace: true,
68
+ });
69
+ }
70
+ }
71
+ catch (error) {
72
+ if (isMounted) {
73
+ setPhase("error");
74
+ setErrorMessage(error instanceof Error
75
+ ? error.message
76
+ : t("web-ui:organization.invitation.acceptFailed"));
77
+ }
78
+ }
79
+ };
80
+ void run();
81
+ return () => {
82
+ isMounted = false;
83
+ };
84
+ }, [
85
+ defaultRedirectPath,
86
+ invitationId,
87
+ managerRedirectPath,
88
+ managerRoleSet,
89
+ navigate,
90
+ onInvalidateScopedQueries,
91
+ phase,
92
+ registerSession,
93
+ session,
94
+ t,
95
+ ]);
96
+ if (phase === "error") {
97
+ return (_jsx("div", { className: "min-h-screen flex items-center justify-center p-6", children: _jsxs(Card, { className: "w-full max-w-lg", children: [_jsx(CardHeader, { className: "text-lg font-semibold", children: t("web-ui:organization.invitation.error") }), _jsx(CardBody, { children: errorMessage ?? t("web-ui:organization.invitation.unableAccept") })] }) }));
98
+ }
99
+ return (_jsx("div", { className: "min-h-screen flex items-center justify-center p-6", children: _jsxs(Card, { className: "w-full max-w-lg", children: [_jsx(CardHeader, { className: "text-lg font-semibold", children: t("web-ui:organization.invitation.accepting") }), _jsxs(CardBody, { className: "flex items-center gap-3", children: [_jsx(Spinner, { size: "sm" }), _jsx("span", { children: phase === "success"
100
+ ? t("web-ui:organization.invitation.redirecting")
101
+ : t("web-ui:organization.invitation.pleaseWait") })] })] }) }));
102
+ }
@@ -0,0 +1,52 @@
1
+ declare const ORGANIZATION_ROLES: readonly ["member", "admin", "owner"];
2
+ export type OrganizationRole = (typeof ORGANIZATION_ROLES)[number];
3
+ export type OrganizationMembersRouteLabels = {
4
+ loadError: string;
5
+ membersTitle: string;
6
+ membersNoActive: string;
7
+ membersManageOnly: string;
8
+ membersDescription: (organizationName: string) => string;
9
+ defaultOrganizationName: string;
10
+ loadMembersError: string;
11
+ loadInvitationsError: string;
12
+ roleUpdateSuccess: string;
13
+ roleUpdateError: string;
14
+ removeMemberSuccess: string;
15
+ removeMemberError: string;
16
+ emailRequired: string;
17
+ inviteSuccess: string;
18
+ inviteError: string;
19
+ cancelInvitationSuccess: string;
20
+ cancelInvitationError: string;
21
+ inviteLinkCopied: string;
22
+ copyInviteLinkError: string;
23
+ unknownName: string;
24
+ invitedUser: string;
25
+ emailLabel: string;
26
+ emailPlaceholder: string;
27
+ roleLabel: string;
28
+ inviteButton: string;
29
+ tableTitle: string;
30
+ columnName: string;
31
+ columnEmail: string;
32
+ columnRole: string;
33
+ columnStatus: string;
34
+ columnActions: string;
35
+ tableEmpty: string;
36
+ roleFor: (name: string) => string;
37
+ statusActive: string;
38
+ statusInvited: string;
39
+ removeMember: string;
40
+ copyInviteLink: string;
41
+ cancelInvitation: string;
42
+ roleUnknown: string;
43
+ };
44
+ export type OrganizationMembersRouteProps = {
45
+ managerRoles?: string[];
46
+ assignableRoles?: OrganizationRole[];
47
+ invitationAcceptPath?: string;
48
+ onInvalidateScopedQueries?: () => void | Promise<void>;
49
+ };
50
+ export declare function OrganizationMembersRoute({ managerRoles, assignableRoles, invitationAcceptPath, onInvalidateScopedQueries, }: OrganizationMembersRouteProps): import("react/jsx-runtime").JSX.Element;
51
+ export {};
52
+ //# sourceMappingURL=OrganizationMembersRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationMembersRoute.d.ts","sourceRoot":"","sources":["../../../../../src/modules/auth/components/OrganizationMembersRoute.tsx"],"names":[],"mappings":"AA4EA,QAAA,MAAM,kBAAkB,uCAAwC,CAAC;AAEjE,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAMnE,MAAM,MAAM,8BAA8B,GAAG;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,MAAM,CAAC;IACzD,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yBAAyB,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD,CAAC;AA+HF,wBAAgB,wBAAwB,CAAC,EACvC,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,yBAAyB,GAC1B,EAAE,6BAA6B,2CAkd/B"}
@@ -0,0 +1,359 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Card, CardBody, CardHeader, Chip, Input, Select, SelectItem, Spinner, Table, TableBody, TableCell, TableColumn, TableHeader, TableRow, } from "@heroui/react";
3
+ import { authClient } from "@m5kdev/frontend/modules/auth/auth.lib";
4
+ import { useSession } from "@m5kdev/frontend/modules/auth/hooks/useSession";
5
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
6
+ import { Copy, Trash2, UserPlus, Users } from "lucide-react";
7
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
8
+ import { useTranslation } from "react-i18next";
9
+ import { toast } from "sonner";
10
+ const ORGANIZATION_ROLES = ["member", "admin", "owner"];
11
+ function isOrganizationRole(role) {
12
+ return ORGANIZATION_ROLES.includes(role);
13
+ }
14
+ function OrganizationStateCard({ title, message }) {
15
+ return (_jsx("div", { className: "p-6", children: _jsxs(Card, { children: [_jsx(CardHeader, { className: "text-lg font-semibold", children: title }), _jsx(CardBody, { children: message })] }) }));
16
+ }
17
+ function useOrganizationAccess({ managerRoles, onInvalidateScopedQueries, }) {
18
+ const { data: session, registerSession } = useSession();
19
+ const queryClient = useQueryClient();
20
+ const activeOrganizationId = session?.session.activeOrganizationId ?? "";
21
+ const activeOrganizationRole = session?.session?.activeOrganizationRole ??
22
+ "";
23
+ const managerRoleSet = useMemo(() => new Set(managerRoles ?? ["admin", "owner"]), [managerRoles]);
24
+ const canManageOrganization = managerRoleSet.has(activeOrganizationRole);
25
+ const refreshOrganizationQueries = useCallback(async () => {
26
+ await Promise.allSettled([
27
+ queryClient.invalidateQueries({ queryKey: ["auth-organization-list"] }),
28
+ queryClient.invalidateQueries({
29
+ queryKey: ["auth-organization-details", activeOrganizationId],
30
+ }),
31
+ queryClient.invalidateQueries({
32
+ queryKey: ["auth-organization-members", activeOrganizationId],
33
+ }),
34
+ queryClient.invalidateQueries({
35
+ queryKey: ["auth-organization-invitations", activeOrganizationId],
36
+ }),
37
+ ]);
38
+ registerSession(() => {
39
+ void onInvalidateScopedQueries?.();
40
+ });
41
+ }, [activeOrganizationId, onInvalidateScopedQueries, queryClient, registerSession]);
42
+ return {
43
+ activeOrganizationId,
44
+ activeOrganizationRole,
45
+ canManageOrganization,
46
+ refreshOrganizationQueries,
47
+ };
48
+ }
49
+ function useOrganizationConfig({ assignableRoles, }) {
50
+ const { t } = useTranslation();
51
+ const translatedLabels = useMemo(() => ({
52
+ loadError: t("web-ui:organization.members.loadError"),
53
+ membersTitle: t("web-ui:organization.members.title"),
54
+ membersNoActive: t("web-ui:organization.members.noActive"),
55
+ membersManageOnly: t("web-ui:organization.members.manageOnly"),
56
+ membersDescription: (organizationName) => t("web-ui:organization.members.description", { name: organizationName }),
57
+ defaultOrganizationName: t("web-ui:organization.members.defaultName"),
58
+ loadMembersError: t("web-ui:organization.members.loadMembersError"),
59
+ loadInvitationsError: t("web-ui:organization.members.loadInvitationsError"),
60
+ roleUpdateSuccess: t("web-ui:organization.members.roleUpdateSuccess"),
61
+ roleUpdateError: t("web-ui:organization.members.roleUpdateError"),
62
+ removeMemberSuccess: t("web-ui:organization.members.removeMemberSuccess"),
63
+ removeMemberError: t("web-ui:organization.members.removeMemberError"),
64
+ emailRequired: t("web-ui:organization.members.emailRequired"),
65
+ inviteSuccess: t("web-ui:organization.members.inviteSuccess"),
66
+ inviteError: t("web-ui:organization.members.inviteError"),
67
+ cancelInvitationSuccess: t("web-ui:organization.members.cancelInvitationSuccess"),
68
+ cancelInvitationError: t("web-ui:organization.members.cancelInvitationError"),
69
+ inviteLinkCopied: t("web-ui:organization.members.inviteLinkCopied"),
70
+ copyInviteLinkError: t("web-ui:organization.members.copyInviteLinkError"),
71
+ unknownName: t("web-ui:organization.members.unknownName"),
72
+ invitedUser: t("web-ui:organization.members.invitedUser"),
73
+ emailLabel: t("web-ui:organization.members.emailLabel"),
74
+ emailPlaceholder: t("web-ui:organization.members.emailPlaceholder"),
75
+ roleLabel: t("web-ui:organization.members.roleLabel"),
76
+ inviteButton: t("web-ui:organization.members.inviteButton"),
77
+ tableTitle: t("web-ui:organization.members.tableTitle"),
78
+ columnName: t("web-ui:organization.members.columnName"),
79
+ columnEmail: t("web-ui:organization.members.columnEmail"),
80
+ columnRole: t("web-ui:organization.members.columnRole"),
81
+ columnStatus: t("web-ui:organization.members.columnStatus"),
82
+ columnActions: t("web-ui:organization.members.columnActions"),
83
+ tableEmpty: t("web-ui:organization.members.tableEmpty"),
84
+ roleFor: (name) => t("web-ui:organization.members.roleFor", { name }),
85
+ statusActive: t("web-ui:organization.members.statusActive"),
86
+ statusInvited: t("web-ui:organization.members.statusInvited"),
87
+ removeMember: t("web-ui:organization.members.removeMember"),
88
+ copyInviteLink: t("web-ui:organization.members.copyInviteLink"),
89
+ cancelInvitation: t("web-ui:organization.members.cancelInvitation"),
90
+ roleUnknown: t("web-ui:organization.members.roleUnknown"),
91
+ }), [t]);
92
+ const translatedRoleLabels = useMemo(() => ({
93
+ member: t("web-ui:organization.roles.member"),
94
+ admin: t("web-ui:organization.roles.admin"),
95
+ owner: t("web-ui:organization.roles.owner"),
96
+ }), [t]);
97
+ const resolvedAssignableRoles = useMemo(() => assignableRoles && assignableRoles.length > 0 ? assignableRoles : [...ORGANIZATION_ROLES], [assignableRoles]);
98
+ return {
99
+ resolvedLabels: translatedLabels,
100
+ resolvedRoleLabels: translatedRoleLabels,
101
+ resolvedAssignableRoles,
102
+ };
103
+ }
104
+ export function OrganizationMembersRoute({ managerRoles, assignableRoles, invitationAcceptPath, onInvalidateScopedQueries, }) {
105
+ const { resolvedLabels, resolvedRoleLabels, resolvedAssignableRoles } = useOrganizationConfig({
106
+ assignableRoles,
107
+ });
108
+ const { activeOrganizationId, activeOrganizationRole, canManageOrganization, refreshOrganizationQueries, } = useOrganizationAccess({ managerRoles, onInvalidateScopedQueries });
109
+ const [inviteEmail, setInviteEmail] = useState("");
110
+ const [inviteRole, setInviteRole] = useState(resolvedAssignableRoles[0] ?? "member");
111
+ const isMountedRef = useRef(true);
112
+ useEffect(() => {
113
+ return () => {
114
+ isMountedRef.current = false;
115
+ };
116
+ }, []);
117
+ const refreshOrganizationQueriesStable = useCallback(() => refreshOrganizationQueries(), [refreshOrganizationQueries]);
118
+ const updateRoleMutation = useMutation({
119
+ mutationFn: async ({ memberId, role, organizationId, }) => {
120
+ const { error } = await authClient.organization.updateMemberRole({
121
+ memberId,
122
+ role,
123
+ organizationId,
124
+ });
125
+ if (error)
126
+ throw new Error(error.message ?? resolvedLabels.roleUpdateError);
127
+ },
128
+ onSuccess: async () => {
129
+ await refreshOrganizationQueriesStable();
130
+ toast.success(resolvedLabels.roleUpdateSuccess);
131
+ },
132
+ onError: (error) => {
133
+ toast.error(error instanceof Error ? error.message : resolvedLabels.roleUpdateError);
134
+ },
135
+ });
136
+ const removeMemberMutation = useMutation({
137
+ mutationFn: async ({ memberId, organizationId, }) => {
138
+ const { error } = await authClient.organization.removeMember({
139
+ memberIdOrEmail: memberId,
140
+ organizationId,
141
+ });
142
+ if (error)
143
+ throw new Error(error.message ?? resolvedLabels.removeMemberError);
144
+ },
145
+ onSuccess: async () => {
146
+ await refreshOrganizationQueriesStable();
147
+ toast.success(resolvedLabels.removeMemberSuccess);
148
+ },
149
+ onError: (error) => {
150
+ toast.error(error instanceof Error ? error.message : resolvedLabels.removeMemberError);
151
+ },
152
+ });
153
+ const createInvitationMutation = useMutation({
154
+ mutationFn: async ({ email, role, organizationId, }) => {
155
+ const { error } = await authClient.organization.inviteMember({
156
+ organizationId,
157
+ email: email.trim(),
158
+ role,
159
+ });
160
+ if (error)
161
+ throw new Error(error.message ?? resolvedLabels.inviteError);
162
+ },
163
+ onSuccess: async () => {
164
+ await refreshOrganizationQueriesStable();
165
+ toast.success(resolvedLabels.inviteSuccess);
166
+ if (isMountedRef.current) {
167
+ setInviteEmail("");
168
+ setInviteRole(resolvedAssignableRoles[0] ?? "member");
169
+ }
170
+ },
171
+ onError: (error) => {
172
+ toast.error(error instanceof Error ? error.message : resolvedLabels.inviteError);
173
+ },
174
+ });
175
+ const cancelInvitationMutation = useMutation({
176
+ mutationFn: async ({ invitationId }) => {
177
+ const { error } = await authClient.organization.cancelInvitation({ invitationId });
178
+ if (error)
179
+ throw new Error(error.message ?? resolvedLabels.cancelInvitationError);
180
+ },
181
+ onSuccess: async () => {
182
+ await refreshOrganizationQueriesStable();
183
+ toast.success(resolvedLabels.cancelInvitationSuccess);
184
+ },
185
+ onError: (error) => {
186
+ toast.error(error instanceof Error ? error.message : resolvedLabels.cancelInvitationError);
187
+ },
188
+ });
189
+ const updatingMemberId = updateRoleMutation.isPending && updateRoleMutation.variables
190
+ ? updateRoleMutation.variables.memberId
191
+ : null;
192
+ const removingMemberId = removeMemberMutation.isPending && removeMemberMutation.variables
193
+ ? removeMemberMutation.variables.memberId
194
+ : null;
195
+ const cancelingInvitationId = cancelInvitationMutation.isPending && cancelInvitationMutation.variables
196
+ ? cancelInvitationMutation.variables.invitationId
197
+ : null;
198
+ useEffect(() => {
199
+ if (!resolvedAssignableRoles.includes(inviteRole)) {
200
+ setInviteRole(resolvedAssignableRoles[0] ?? "member");
201
+ }
202
+ }, [inviteRole, resolvedAssignableRoles]);
203
+ const organizationQuery = useQuery({
204
+ queryKey: ["auth-organization-details", activeOrganizationId],
205
+ enabled: Boolean(activeOrganizationId && canManageOrganization),
206
+ queryFn: async () => {
207
+ const { data, error } = await authClient.organization.getFullOrganization({
208
+ query: {
209
+ organizationId: activeOrganizationId,
210
+ membersLimit: 200,
211
+ },
212
+ });
213
+ if (error) {
214
+ throw new Error(error.message ?? resolvedLabels.loadError);
215
+ }
216
+ return data;
217
+ },
218
+ });
219
+ const membersQuery = useQuery({
220
+ queryKey: ["auth-organization-members", activeOrganizationId],
221
+ enabled: Boolean(activeOrganizationId && canManageOrganization),
222
+ queryFn: async () => {
223
+ const { data, error } = await authClient.organization.listMembers({
224
+ query: {
225
+ organizationId: activeOrganizationId,
226
+ limit: 200,
227
+ offset: 0,
228
+ },
229
+ });
230
+ if (error) {
231
+ throw new Error(error.message ?? resolvedLabels.loadMembersError);
232
+ }
233
+ return (data?.members ??
234
+ []);
235
+ },
236
+ });
237
+ const invitationsQuery = useQuery({
238
+ queryKey: ["auth-organization-invitations", activeOrganizationId],
239
+ enabled: Boolean(activeOrganizationId && canManageOrganization),
240
+ queryFn: async () => {
241
+ const { data, error } = await authClient.organization.listInvitations({
242
+ query: {
243
+ organizationId: activeOrganizationId,
244
+ },
245
+ });
246
+ if (error) {
247
+ throw new Error(error.message ?? resolvedLabels.loadInvitationsError);
248
+ }
249
+ return (data ?? []);
250
+ },
251
+ });
252
+ const members = membersQuery.data ?? [];
253
+ const invitations = invitationsQuery.data ?? [];
254
+ const rows = useMemo(() => {
255
+ const memberRows = members.map((member) => ({
256
+ kind: "member",
257
+ id: `member-${member.id}`,
258
+ displayName: member.user?.name || resolvedLabels.unknownName,
259
+ email: member.user?.email || "-",
260
+ role: member.role,
261
+ status: "active",
262
+ memberId: member.id,
263
+ }));
264
+ const invitationRows = invitations.map((invitation) => ({
265
+ kind: "invitation",
266
+ id: `invitation-${invitation.id}`,
267
+ displayName: resolvedLabels.invitedUser,
268
+ email: invitation.email,
269
+ role: invitation.role,
270
+ status: "invited",
271
+ invitationId: invitation.id,
272
+ }));
273
+ return [...memberRows, ...invitationRows].sort((left, right) => {
274
+ if (left.status === right.status) {
275
+ return left.email.localeCompare(right.email);
276
+ }
277
+ return left.status === "active" ? -1 : 1;
278
+ });
279
+ }, [invitations, members, resolvedLabels.invitedUser, resolvedLabels.unknownName]);
280
+ const onUpdateMemberRole = useCallback((memberId, role) => {
281
+ if (!canManageOrganization || !activeOrganizationId)
282
+ return;
283
+ updateRoleMutation.mutate({ memberId, role, organizationId: activeOrganizationId });
284
+ }, [canManageOrganization, activeOrganizationId, updateRoleMutation]);
285
+ const onRemoveMember = useCallback((memberId) => {
286
+ if (!canManageOrganization || !activeOrganizationId)
287
+ return;
288
+ removeMemberMutation.mutate({ memberId, organizationId: activeOrganizationId });
289
+ }, [canManageOrganization, activeOrganizationId, removeMemberMutation]);
290
+ const onCreateInvitation = useCallback(() => {
291
+ if (!canManageOrganization || !activeOrganizationId)
292
+ return;
293
+ if (!inviteEmail.trim()) {
294
+ toast.error(resolvedLabels.emailRequired);
295
+ return;
296
+ }
297
+ createInvitationMutation.mutate({
298
+ email: inviteEmail,
299
+ role: inviteRole,
300
+ organizationId: activeOrganizationId,
301
+ });
302
+ }, [
303
+ canManageOrganization,
304
+ activeOrganizationId,
305
+ inviteEmail,
306
+ inviteRole,
307
+ resolvedLabels.emailRequired,
308
+ createInvitationMutation,
309
+ ]);
310
+ const onCancelInvitation = useCallback((invitationId) => {
311
+ if (!canManageOrganization)
312
+ return;
313
+ cancelInvitationMutation.mutate({ invitationId });
314
+ }, [canManageOrganization, cancelInvitationMutation]);
315
+ const invitationLinkBase = useMemo(() => {
316
+ const invitationPath = invitationAcceptPath ?? "/organization/accept-invitation";
317
+ if (/^https?:\/\//i.test(invitationPath)) {
318
+ return `${invitationPath}?id=`;
319
+ }
320
+ return typeof window === "undefined"
321
+ ? `${invitationPath}?id=`
322
+ : `${window.location.origin}${invitationPath}?id=`;
323
+ }, [invitationAcceptPath]);
324
+ const onCopyInvitationLink = async (invitationId) => {
325
+ try {
326
+ await navigator.clipboard.writeText(`${invitationLinkBase}${invitationId}`);
327
+ toast.success(resolvedLabels.inviteLinkCopied);
328
+ }
329
+ catch {
330
+ toast.error(resolvedLabels.copyInviteLinkError);
331
+ }
332
+ };
333
+ const getRoleLabel = (role) => resolvedRoleLabels[role] ?? resolvedLabels.roleUnknown;
334
+ if (!activeOrganizationId) {
335
+ return (_jsx(OrganizationStateCard, { title: resolvedLabels.membersTitle, message: resolvedLabels.membersNoActive }));
336
+ }
337
+ if (!canManageOrganization) {
338
+ return (_jsx(OrganizationStateCard, { title: resolvedLabels.membersTitle, message: resolvedLabels.membersManageOnly }));
339
+ }
340
+ if (organizationQuery.isLoading || membersQuery.isLoading || invitationsQuery.isLoading) {
341
+ return (_jsx("div", { className: "p-6 flex justify-center", children: _jsx(Spinner, {}) }));
342
+ }
343
+ return (_jsx("div", { className: "p-6 space-y-6", children: _jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Users, { className: "h-4 w-4" }), _jsxs("div", { className: "flex flex-col", children: [_jsx("h2", { className: "text-lg font-semibold", children: resolvedLabels.membersTitle }), _jsx("p", { className: "text-sm text-default-500", children: resolvedLabels.membersDescription(organizationQuery.data?.name ?? resolvedLabels.defaultOrganizationName) })] })] }), _jsx(Chip, { variant: "flat", color: "primary", children: getRoleLabel(activeOrganizationRole || "member") })] }), _jsxs(CardBody, { className: "space-y-4", children: [_jsxs("div", { className: "grid gap-3 md:grid-cols-[1fr_160px_auto]", children: [_jsx(Input, { type: "email", label: resolvedLabels.emailLabel, value: inviteEmail, onValueChange: setInviteEmail, placeholder: resolvedLabels.emailPlaceholder }), _jsx(Select, { label: resolvedLabels.roleLabel, selectedKeys: [inviteRole], disallowEmptySelection: true, onSelectionChange: (keys) => {
344
+ const role = Array.from(keys)[0];
345
+ if (role && isOrganizationRole(role) && resolvedAssignableRoles.includes(role)) {
346
+ setInviteRole(role);
347
+ }
348
+ }, children: resolvedAssignableRoles.map((role) => (_jsx(SelectItem, { children: getRoleLabel(role) }, role))) }), _jsx(Button, { color: "primary", startContent: _jsx(UserPlus, { className: "h-4 w-4" }), onPress: onCreateInvitation, isLoading: createInvitationMutation.isPending, children: resolvedLabels.inviteButton })] }), _jsxs(Table, { "aria-label": resolvedLabels.tableTitle, children: [_jsxs(TableHeader, { children: [_jsx(TableColumn, { children: resolvedLabels.columnName }), _jsx(TableColumn, { children: resolvedLabels.columnEmail }), _jsx(TableColumn, { children: resolvedLabels.columnRole }), _jsx(TableColumn, { children: resolvedLabels.columnStatus }), _jsx(TableColumn, { className: "text-right", children: resolvedLabels.columnActions })] }), _jsx(TableBody, { emptyContent: resolvedLabels.tableEmpty, children: rows.map((row) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: row.displayName }), _jsx(TableCell, { children: row.email }), _jsx(TableCell, { children: row.kind === "member" ? (_jsx(Select, { size: "sm", selectedKeys: [row.role], disallowEmptySelection: true, isDisabled: updatingMemberId === row.memberId, "aria-label": resolvedLabels.roleFor(row.displayName), onSelectionChange: (keys) => {
349
+ const role = Array.from(keys)[0];
350
+ if (role &&
351
+ role !== row.role &&
352
+ isOrganizationRole(role) &&
353
+ resolvedAssignableRoles.includes(role)) {
354
+ void onUpdateMemberRole(row.memberId, role);
355
+ }
356
+ }, children: resolvedAssignableRoles.map((role) => (_jsx(SelectItem, { children: getRoleLabel(role) }, role))) })) : (getRoleLabel(row.role)) }), _jsx(TableCell, { children: _jsx(Chip, { size: "sm", variant: "flat", color: row.status === "active" ? "success" : "warning", children: row.status === "active"
357
+ ? resolvedLabels.statusActive
358
+ : resolvedLabels.statusInvited }) }), _jsx(TableCell, { className: "text-right", children: row.kind === "member" ? (_jsx(Button, { size: "sm", color: "danger", variant: "light", isIconOnly: true, onPress: () => void onRemoveMember(row.memberId), isDisabled: removingMemberId === row.memberId, "aria-label": resolvedLabels.removeMember, children: _jsx(Trash2, { className: "h-4 w-4" }) })) : (_jsxs("div", { className: "flex justify-end gap-2", children: [_jsx(Button, { size: "sm", variant: "light", isIconOnly: true, onPress: () => void onCopyInvitationLink(row.invitationId), "aria-label": resolvedLabels.copyInviteLink, children: _jsx(Copy, { className: "h-4 w-4" }) }), _jsx(Button, { size: "sm", color: "danger", variant: "light", isIconOnly: true, onPress: () => void onCancelInvitation(row.invitationId), isDisabled: cancelingInvitationId === row.invitationId, "aria-label": resolvedLabels.cancelInvitation, children: _jsx(Trash2, { className: "h-4 w-4" }) })] })) })] }, row.id))) })] })] })] }) }));
359
+ }
@@ -0,0 +1,21 @@
1
+ export type OrganizationSettingsRouteLabels = {
2
+ settingsTitle: string;
3
+ settingsDescription: string;
4
+ settingsNoActive: string;
5
+ settingsManageOnly: string;
6
+ formName: string;
7
+ formSlug: string;
8
+ formMetadata: string;
9
+ formMetadataInvalidJson: string;
10
+ formMetadataInvalid: string;
11
+ saveButton: string;
12
+ updateSuccess: string;
13
+ updateError: string;
14
+ loadError: string;
15
+ };
16
+ export type OrganizationSettingsRouteProps = {
17
+ managerRoles?: string[];
18
+ onInvalidateScopedQueries?: () => void | Promise<void>;
19
+ };
20
+ export declare function OrganizationSettingsRoute({ managerRoles, onInvalidateScopedQueries, }: OrganizationSettingsRouteProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=OrganizationSettingsRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationSettingsRoute.d.ts","sourceRoot":"","sources":["../../../../../src/modules/auth/components/OrganizationSettingsRoute.tsx"],"names":[],"mappings":"AAgBA,MAAM,MAAM,+BAA+B,GAAG;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,yBAAyB,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD,CAAC;AAwFF,wBAAgB,yBAAyB,CAAC,EACxC,YAAY,EACZ,yBAAyB,GAC1B,EAAE,8BAA8B,2CAyJhC"}