@lokalise/harmony 1.40.2 → 1.40.3-exp-epic2x.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 (392) hide show
  1. package/dist/harmony.css +110 -317
  2. package/dist/harmony100.cjs +8 -11
  3. package/dist/harmony100.cjs.map +1 -1
  4. package/dist/harmony100.mjs +8 -11
  5. package/dist/harmony100.mjs.map +1 -1
  6. package/dist/harmony101.cjs +47 -12
  7. package/dist/harmony101.cjs.map +1 -1
  8. package/dist/harmony101.mjs +46 -11
  9. package/dist/harmony101.mjs.map +1 -1
  10. package/dist/harmony102.cjs +6 -3
  11. package/dist/harmony102.cjs.map +1 -1
  12. package/dist/harmony102.mjs +6 -3
  13. package/dist/harmony102.mjs.map +1 -1
  14. package/dist/harmony103.cjs +99 -9
  15. package/dist/harmony103.cjs.map +1 -1
  16. package/dist/harmony103.mjs +81 -8
  17. package/dist/harmony103.mjs.map +1 -1
  18. package/dist/harmony104.cjs +14 -9
  19. package/dist/harmony104.cjs.map +1 -1
  20. package/dist/harmony104.mjs +13 -8
  21. package/dist/harmony104.mjs.map +1 -1
  22. package/dist/harmony105.cjs +20 -57
  23. package/dist/harmony105.cjs.map +1 -1
  24. package/dist/harmony105.mjs +20 -57
  25. package/dist/harmony105.mjs.map +1 -1
  26. package/dist/harmony106.cjs +9 -42
  27. package/dist/harmony106.cjs.map +1 -1
  28. package/dist/harmony106.mjs +8 -41
  29. package/dist/harmony106.mjs.map +1 -1
  30. package/dist/harmony107.cjs +14 -5
  31. package/dist/harmony107.cjs.map +1 -1
  32. package/dist/harmony107.mjs +14 -5
  33. package/dist/harmony107.mjs.map +1 -1
  34. package/dist/harmony108.cjs +17 -9
  35. package/dist/harmony108.cjs.map +1 -1
  36. package/dist/harmony108.mjs +16 -8
  37. package/dist/harmony108.mjs.map +1 -1
  38. package/dist/harmony109.cjs +21 -24
  39. package/dist/harmony109.cjs.map +1 -1
  40. package/dist/harmony109.mjs +20 -23
  41. package/dist/harmony109.mjs.map +1 -1
  42. package/dist/harmony110.cjs +10 -6
  43. package/dist/harmony110.cjs.map +1 -1
  44. package/dist/harmony110.mjs +9 -5
  45. package/dist/harmony110.mjs.map +1 -1
  46. package/dist/harmony111.cjs +22 -14
  47. package/dist/harmony111.cjs.map +1 -1
  48. package/dist/harmony111.mjs +24 -16
  49. package/dist/harmony111.mjs.map +1 -1
  50. package/dist/harmony112.cjs +14 -12
  51. package/dist/harmony112.cjs.map +1 -1
  52. package/dist/harmony112.mjs +13 -11
  53. package/dist/harmony112.mjs.map +1 -1
  54. package/dist/harmony113.cjs +35 -12
  55. package/dist/harmony113.cjs.map +1 -1
  56. package/dist/harmony113.mjs +35 -12
  57. package/dist/harmony113.mjs.map +1 -1
  58. package/dist/harmony114.cjs +14 -18
  59. package/dist/harmony114.cjs.map +1 -1
  60. package/dist/harmony114.mjs +14 -18
  61. package/dist/harmony114.mjs.map +1 -1
  62. package/dist/harmony115.cjs +19 -96
  63. package/dist/harmony115.cjs.map +1 -1
  64. package/dist/harmony115.mjs +19 -79
  65. package/dist/harmony115.mjs.map +1 -1
  66. package/dist/harmony116.cjs +33 -85
  67. package/dist/harmony116.cjs.map +1 -1
  68. package/dist/harmony116.mjs +33 -85
  69. package/dist/harmony116.mjs.map +1 -1
  70. package/dist/harmony117.cjs +22 -31
  71. package/dist/harmony117.cjs.map +1 -1
  72. package/dist/harmony117.mjs +21 -30
  73. package/dist/harmony117.mjs.map +1 -1
  74. package/dist/harmony118.cjs +21 -21
  75. package/dist/harmony118.cjs.map +1 -1
  76. package/dist/harmony118.mjs +20 -20
  77. package/dist/harmony118.mjs.map +1 -1
  78. package/dist/harmony119.cjs +6 -6
  79. package/dist/harmony119.cjs.map +1 -1
  80. package/dist/harmony119.mjs +5 -5
  81. package/dist/harmony119.mjs.map +1 -1
  82. package/dist/harmony120.cjs +15 -132
  83. package/dist/harmony120.cjs.map +1 -1
  84. package/dist/harmony120.mjs +14 -131
  85. package/dist/harmony120.mjs.map +1 -1
  86. package/dist/harmony121.cjs +87 -12
  87. package/dist/harmony121.cjs.map +1 -1
  88. package/dist/harmony121.mjs +86 -11
  89. package/dist/harmony121.mjs.map +1 -1
  90. package/dist/harmony122.cjs +30 -5
  91. package/dist/harmony122.cjs.map +1 -1
  92. package/dist/harmony122.mjs +30 -5
  93. package/dist/harmony122.mjs.map +1 -1
  94. package/dist/harmony123.cjs +6 -41
  95. package/dist/harmony123.cjs.map +1 -1
  96. package/dist/harmony123.mjs +5 -40
  97. package/dist/harmony123.mjs.map +1 -1
  98. package/dist/harmony124.cjs +6 -61
  99. package/dist/harmony124.cjs.map +1 -1
  100. package/dist/harmony124.mjs +5 -60
  101. package/dist/harmony124.mjs.map +1 -1
  102. package/dist/harmony125.cjs +96 -7
  103. package/dist/harmony125.cjs.map +1 -1
  104. package/dist/harmony125.mjs +96 -7
  105. package/dist/harmony125.mjs.map +1 -1
  106. package/dist/harmony126.cjs +14 -7
  107. package/dist/harmony126.cjs.map +1 -1
  108. package/dist/harmony126.mjs +13 -6
  109. package/dist/harmony126.mjs.map +1 -1
  110. package/dist/harmony127.cjs +15 -6
  111. package/dist/harmony127.cjs.map +1 -1
  112. package/dist/harmony127.mjs +14 -5
  113. package/dist/harmony127.mjs.map +1 -1
  114. package/dist/harmony128.cjs +37 -6
  115. package/dist/harmony128.cjs.map +1 -1
  116. package/dist/harmony128.mjs +36 -5
  117. package/dist/harmony128.mjs.map +1 -1
  118. package/dist/harmony129.cjs +28 -10
  119. package/dist/harmony129.cjs.map +1 -1
  120. package/dist/harmony129.mjs +28 -10
  121. package/dist/harmony129.mjs.map +1 -1
  122. package/dist/harmony130.cjs +10 -63
  123. package/dist/harmony130.cjs.map +1 -1
  124. package/dist/harmony130.mjs +9 -62
  125. package/dist/harmony130.mjs.map +1 -1
  126. package/dist/harmony131.cjs +6 -88
  127. package/dist/harmony131.cjs.map +1 -1
  128. package/dist/harmony131.mjs +5 -87
  129. package/dist/harmony131.mjs.map +1 -1
  130. package/dist/harmony132.cjs +6 -15
  131. package/dist/harmony132.cjs.map +1 -1
  132. package/dist/harmony132.mjs +6 -15
  133. package/dist/harmony132.mjs.map +1 -1
  134. package/dist/harmony133.cjs +25 -97
  135. package/dist/harmony133.cjs.map +1 -1
  136. package/dist/harmony133.mjs +24 -96
  137. package/dist/harmony133.mjs.map +1 -1
  138. package/dist/harmony134.cjs +7 -14
  139. package/dist/harmony134.cjs.map +1 -1
  140. package/dist/harmony134.mjs +6 -13
  141. package/dist/harmony134.mjs.map +1 -1
  142. package/dist/harmony135.cjs +13 -15
  143. package/dist/harmony135.cjs.map +1 -1
  144. package/dist/harmony135.mjs +12 -14
  145. package/dist/harmony135.mjs.map +1 -1
  146. package/dist/harmony136.cjs +7 -37
  147. package/dist/harmony136.cjs.map +1 -1
  148. package/dist/harmony136.mjs +6 -36
  149. package/dist/harmony136.mjs.map +1 -1
  150. package/dist/harmony137.cjs +10 -28
  151. package/dist/harmony137.cjs.map +1 -1
  152. package/dist/harmony137.mjs +10 -28
  153. package/dist/harmony137.mjs.map +1 -1
  154. package/dist/harmony138.cjs +1 -1
  155. package/dist/harmony138.mjs +1 -1
  156. package/dist/harmony139.cjs +1 -1
  157. package/dist/harmony139.mjs +1 -1
  158. package/dist/harmony14.cjs +1 -1
  159. package/dist/harmony14.mjs +1 -1
  160. package/dist/harmony140.cjs +2 -2
  161. package/dist/harmony140.mjs +2 -2
  162. package/dist/harmony141.cjs +11 -7
  163. package/dist/harmony141.cjs.map +1 -1
  164. package/dist/harmony141.mjs +11 -7
  165. package/dist/harmony141.mjs.map +1 -1
  166. package/dist/harmony142.cjs +15 -56
  167. package/dist/harmony142.cjs.map +1 -1
  168. package/dist/harmony142.mjs +15 -56
  169. package/dist/harmony142.mjs.map +1 -1
  170. package/dist/harmony143.cjs +20 -59
  171. package/dist/harmony143.cjs.map +1 -1
  172. package/dist/harmony143.mjs +20 -59
  173. package/dist/harmony143.mjs.map +1 -1
  174. package/dist/harmony144.cjs +13 -19
  175. package/dist/harmony144.cjs.map +1 -1
  176. package/dist/harmony144.mjs +12 -18
  177. package/dist/harmony144.mjs.map +1 -1
  178. package/dist/harmony145.cjs +5 -10
  179. package/dist/harmony145.cjs.map +1 -1
  180. package/dist/harmony145.mjs +5 -10
  181. package/dist/harmony145.mjs.map +1 -1
  182. package/dist/harmony146.cjs +11 -15
  183. package/dist/harmony146.cjs.map +1 -1
  184. package/dist/harmony146.mjs +11 -15
  185. package/dist/harmony146.mjs.map +1 -1
  186. package/dist/harmony147.cjs +28 -17
  187. package/dist/harmony147.cjs.map +1 -1
  188. package/dist/harmony147.mjs +28 -17
  189. package/dist/harmony147.mjs.map +1 -1
  190. package/dist/harmony148.cjs +12 -10
  191. package/dist/harmony148.cjs.map +1 -1
  192. package/dist/harmony148.mjs +12 -10
  193. package/dist/harmony148.mjs.map +1 -1
  194. package/dist/harmony17.cjs +1 -1
  195. package/dist/harmony17.mjs +1 -1
  196. package/dist/harmony25.cjs +1 -1
  197. package/dist/harmony25.mjs +1 -1
  198. package/dist/harmony26.cjs +1 -1
  199. package/dist/harmony26.mjs +1 -1
  200. package/dist/harmony4.cjs +15 -24
  201. package/dist/harmony4.cjs.map +1 -1
  202. package/dist/harmony4.mjs +15 -24
  203. package/dist/harmony4.mjs.map +1 -1
  204. package/dist/harmony5.cjs +1 -1
  205. package/dist/harmony5.mjs +1 -1
  206. package/dist/harmony6.cjs +3 -3
  207. package/dist/harmony6.mjs +3 -3
  208. package/dist/harmony7.cjs +1 -1
  209. package/dist/harmony7.mjs +1 -1
  210. package/dist/harmony75.cjs +1 -1
  211. package/dist/harmony75.mjs +1 -1
  212. package/dist/harmony76.cjs +51 -6
  213. package/dist/harmony76.cjs.map +1 -1
  214. package/dist/harmony76.mjs +50 -5
  215. package/dist/harmony76.mjs.map +1 -1
  216. package/dist/harmony77.cjs +38 -8
  217. package/dist/harmony77.cjs.map +1 -1
  218. package/dist/harmony77.mjs +38 -8
  219. package/dist/harmony77.mjs.map +1 -1
  220. package/dist/harmony78.cjs +9 -18
  221. package/dist/harmony78.cjs.map +1 -1
  222. package/dist/harmony78.mjs +8 -17
  223. package/dist/harmony78.mjs.map +1 -1
  224. package/dist/harmony79.cjs +6 -21
  225. package/dist/harmony79.cjs.map +1 -1
  226. package/dist/harmony79.mjs +8 -23
  227. package/dist/harmony79.mjs.map +1 -1
  228. package/dist/harmony8.cjs +5 -5
  229. package/dist/harmony8.mjs +5 -5
  230. package/dist/harmony80.cjs +28 -4
  231. package/dist/harmony80.cjs.map +1 -1
  232. package/dist/harmony80.mjs +28 -4
  233. package/dist/harmony80.mjs.map +1 -1
  234. package/dist/harmony81.cjs +3 -32
  235. package/dist/harmony81.cjs.map +1 -1
  236. package/dist/harmony81.mjs +3 -32
  237. package/dist/harmony81.mjs.map +1 -1
  238. package/dist/harmony82.cjs +30 -29
  239. package/dist/harmony82.cjs.map +1 -1
  240. package/dist/harmony82.mjs +31 -30
  241. package/dist/harmony82.mjs.map +1 -1
  242. package/dist/harmony83.cjs +43 -19
  243. package/dist/harmony83.cjs.map +1 -1
  244. package/dist/harmony83.mjs +43 -19
  245. package/dist/harmony83.mjs.map +1 -1
  246. package/dist/harmony84.cjs +27 -29
  247. package/dist/harmony84.cjs.map +1 -1
  248. package/dist/harmony84.mjs +27 -29
  249. package/dist/harmony84.mjs.map +1 -1
  250. package/dist/harmony85.cjs +64 -57
  251. package/dist/harmony85.cjs.map +1 -1
  252. package/dist/harmony85.mjs +64 -57
  253. package/dist/harmony85.mjs.map +1 -1
  254. package/dist/harmony86.cjs +15 -9
  255. package/dist/harmony86.cjs.map +1 -1
  256. package/dist/harmony86.mjs +14 -8
  257. package/dist/harmony86.mjs.map +1 -1
  258. package/dist/harmony87.cjs +3 -8
  259. package/dist/harmony87.cjs.map +1 -1
  260. package/dist/harmony87.mjs +3 -8
  261. package/dist/harmony87.mjs.map +1 -1
  262. package/dist/harmony88.cjs +10 -27
  263. package/dist/harmony88.cjs.map +1 -1
  264. package/dist/harmony88.mjs +11 -28
  265. package/dist/harmony88.mjs.map +1 -1
  266. package/dist/harmony89.cjs +13 -4
  267. package/dist/harmony89.cjs.map +1 -1
  268. package/dist/harmony89.mjs +12 -3
  269. package/dist/harmony89.mjs.map +1 -1
  270. package/dist/harmony90.cjs +9 -31
  271. package/dist/harmony90.cjs.map +1 -1
  272. package/dist/harmony90.mjs +10 -32
  273. package/dist/harmony90.mjs.map +1 -1
  274. package/dist/harmony91.cjs +22 -44
  275. package/dist/harmony91.cjs.map +1 -1
  276. package/dist/harmony91.mjs +21 -43
  277. package/dist/harmony91.mjs.map +1 -1
  278. package/dist/harmony92.cjs +160 -23
  279. package/dist/harmony92.cjs.map +1 -1
  280. package/dist/harmony92.mjs +160 -23
  281. package/dist/harmony92.mjs.map +1 -1
  282. package/dist/harmony93.cjs +41 -63
  283. package/dist/harmony93.cjs.map +1 -1
  284. package/dist/harmony93.mjs +41 -63
  285. package/dist/harmony93.mjs.map +1 -1
  286. package/dist/harmony94.cjs +25 -13
  287. package/dist/harmony94.cjs.map +1 -1
  288. package/dist/harmony94.mjs +26 -14
  289. package/dist/harmony94.mjs.map +1 -1
  290. package/dist/harmony95.cjs +3 -3
  291. package/dist/harmony95.cjs.map +1 -1
  292. package/dist/harmony95.mjs +3 -3
  293. package/dist/harmony95.mjs.map +1 -1
  294. package/dist/harmony96.cjs +16 -9
  295. package/dist/harmony96.cjs.map +1 -1
  296. package/dist/harmony96.mjs +18 -11
  297. package/dist/harmony96.mjs.map +1 -1
  298. package/dist/harmony97.cjs +75 -21
  299. package/dist/harmony97.cjs.map +1 -1
  300. package/dist/harmony97.mjs +74 -20
  301. package/dist/harmony97.mjs.map +1 -1
  302. package/dist/harmony98.cjs +9 -163
  303. package/dist/harmony98.cjs.map +1 -1
  304. package/dist/harmony98.mjs +10 -164
  305. package/dist/harmony98.mjs.map +1 -1
  306. package/dist/harmony99.cjs +30 -44
  307. package/dist/harmony99.cjs.map +1 -1
  308. package/dist/harmony99.mjs +30 -44
  309. package/dist/harmony99.mjs.map +1 -1
  310. package/dist/types/src/components/Sidebar/Sidebar.d.ts +15 -49
  311. package/dist/types/src/components/Sidebar/SidebarContent/SidebarContent.d.ts +7 -0
  312. package/dist/types/src/components/Sidebar/SidebarContext.d.ts +3 -0
  313. package/dist/types/src/components/Sidebar/SidebarProvider.d.ts +3 -0
  314. package/dist/types/src/components/Sidebar/Widgets/Avatar/Avatar.d.ts +5 -0
  315. package/dist/types/src/components/Sidebar/Widgets/HelpMenu/HelpMenu.d.ts +13 -0
  316. package/dist/types/src/components/Sidebar/Widgets/HelpMenu/HelpMenu.test.d.ts +1 -0
  317. package/dist/types/src/components/Sidebar/Widgets/IconLink/IconLink.test.d.ts +1 -0
  318. package/dist/types/src/components/Sidebar/Widgets/Menu/Menu.d.ts +3 -2
  319. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/BillingMenuItem/BillingMenuItem.d.ts +13 -0
  320. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/CreateNewTeam/CreateNewTeam.d.ts +17 -0
  321. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/CreateNewTeam/CreateNewTeam.test.d.ts +1 -0
  322. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/CreateNewTeamPlaceholder/CreateNewTeamPlaceholder.d.ts +17 -0
  323. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/CreateNewTeamPlaceholder/CreateNewTeamPlaceholder.test.d.ts +1 -0
  324. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/DarkModeToggle/DarkModeToggle.d.ts +18 -0
  325. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileMenu.d.ts +11 -24
  326. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileMenu.stories.d.ts +3 -5
  327. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileSettingsMenuItem/ProfileSettingsMenuItem.d.ts +10 -35
  328. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileSettingsMenuItem/ProfileSettingsMenuItem.test.d.ts +1 -0
  329. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProviderMenuItem/ProviderMenuItem.d.ts +13 -0
  330. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProviderMenuItem/ProviderMenuItem.test.d.ts +1 -0
  331. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamMenuItem/TeamMenuItem.d.ts +1 -3
  332. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamMenuItem/TeamMenuItem.test.d.ts +1 -0
  333. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamSettingsMenuItem/TeamSettingsMenuItem.d.ts +13 -0
  334. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamSettingsMenuItem/TeamSettingsMenuItem.test.d.ts +1 -0
  335. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamSwitch/TeamSwitch.d.ts +5 -7
  336. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamSwitch/TeamSwitch.test.d.ts +1 -0
  337. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/UpgradeMenuItem/UpgradeMenuItem.d.ts +6 -9
  338. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/UpgradeMenuItem/UpgradeMenuItem.test.d.ts +1 -0
  339. package/dist/types/src/components/Sidebar/Widgets/Tasks/utils/content.d.ts +4 -0
  340. package/dist/types/src/components/Sidebar/hooks/useSidebar.d.ts +1 -0
  341. package/dist/types/src/components/Sidebar/hooks/useSidebarDataLoader.d.ts +5 -0
  342. package/dist/types/src/components/Sidebar/types.d.ts +72 -0
  343. package/dist/types/src/features/auth/core/types/jwtTokenPayload.d.ts +16 -10
  344. package/dist/types/src/features/auth/core/types/jwtTokenPayload.fixture.d.ts +15 -11
  345. package/dist/types/src/features/auth/frontend/hooks/useAuthenticatedSessionPayload.d.ts +7 -5
  346. package/dist/types/src/features/auth/frontend/hooks/useAuthenticatedUser.d.ts +1 -1
  347. package/dist/types/src/features/publicApi/hooks/useGetProjectPermissionMetaQuery.d.ts +2 -2
  348. package/dist/types/src/features/publicApi/hooks/useGetTeamUsersQuery.d.ts +1 -1
  349. package/dist/types/src/features/publicApi/hooks/useListPermissionTemplates.d.ts +1 -1
  350. package/dist/types/src/features/publicApi/hooks/useListTeamUsersQuery.d.ts +1 -1
  351. package/dist/types/src/features/publicApi/permissionTemplates.d.ts +4 -4
  352. package/dist/types/src/features/publicApi/projects.d.ts +8 -8
  353. package/dist/types/src/features/publicApi/teamUsers.d.ts +8 -8
  354. package/dist/types/src/features/publicApi/types/permissionTemplateTypes.d.ts +6 -6
  355. package/dist/types/src/features/publicApi/types/permissionTypes.d.ts +2 -2
  356. package/dist/types/src/features/publicApi/types/projectTypes.d.ts +12 -12
  357. package/dist/types/src/features/publicApi/types/teamUserTypes.d.ts +10 -10
  358. package/dist/types/src/utils/user/permissions.d.ts +9 -0
  359. package/dist/types/src/utils/user/permissions.test.d.ts +1 -0
  360. package/dist/types/tests/mocks/sidebar/sidebar.d.ts +19 -0
  361. package/dist/types/tests/utils/sidebar.d.ts +4 -0
  362. package/package.json +1 -1
  363. package/dist/harmony149.cjs +0 -9
  364. package/dist/harmony149.cjs.map +0 -1
  365. package/dist/harmony149.mjs +0 -9
  366. package/dist/harmony149.mjs.map +0 -1
  367. package/dist/harmony150.cjs +0 -15
  368. package/dist/harmony150.cjs.map +0 -1
  369. package/dist/harmony150.mjs +0 -15
  370. package/dist/harmony150.mjs.map +0 -1
  371. package/dist/harmony151.cjs +0 -35
  372. package/dist/harmony151.cjs.map +0 -1
  373. package/dist/harmony151.mjs +0 -35
  374. package/dist/harmony151.mjs.map +0 -1
  375. package/dist/harmony152.cjs +0 -17
  376. package/dist/harmony152.cjs.map +0 -1
  377. package/dist/harmony152.mjs +0 -17
  378. package/dist/harmony152.mjs.map +0 -1
  379. package/dist/harmony153.cjs +0 -49
  380. package/dist/harmony153.cjs.map +0 -1
  381. package/dist/harmony153.mjs +0 -49
  382. package/dist/harmony153.mjs.map +0 -1
  383. package/dist/harmony154.cjs +0 -15
  384. package/dist/harmony154.cjs.map +0 -1
  385. package/dist/harmony154.mjs +0 -15
  386. package/dist/harmony154.mjs.map +0 -1
  387. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileMenuContent.d.ts +0 -6
  388. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileMenuContext.d.ts +0 -3
  389. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileMenuProvider.d.ts +0 -7
  390. package/dist/types/src/components/Sidebar/utils/index.d.ts +0 -4
  391. /package/dist/types/src/components/Sidebar/Widgets/{ProfileMenu/ProfileMenu.test.d.ts → Avatar/Avatar.test.d.ts} +0 -0
  392. /package/dist/types/src/components/Sidebar/{UpgradeIcon → Widgets/ProfileMenu/UpgradeIcon}/UpgradeIcon.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"harmony81.cjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/ProfileSettingsMenuItem/ProfileSettingsMenuItem.tsx"],"sourcesContent":["import { MenuDivider, MenuItem } from '@lokalise/louis'\nimport { useProfileMenu } from '../ProfileMenuContext'\nimport styles from './ProfileSettingsMenuItem.module.css'\n\ntype ProfileSettingsMenuItemProps = {\n\t/** URL to the profile settings page */\n\thref: string\n\t/** User's email address to display below \"Profile Settings\" */\n\tuserEmail: string\n\t/** Optional callback function for tracking or additional actions */\n\tonClick?: () => void\n\t/** Whether to hide the divider that appears below this menu item */\n\thideBottomDivider?: boolean\n}\n\n/**\n * A menu item component that provides access to profile settings.\n *\n * Features:\n * - Displays \"Profile Settings\" with the user's email address below\n * - Conditionally renders based on team status\n * - Includes an optional divider below the item\n * - Will not render if:\n * - Team is suspended\n * - Team's trial period has ended\n *\n * @example\n * ```tsx\n * <ProfileSettingsMenuItem\n * href=\"/settings/profile\"\n * userEmail=\"user@example.com\"\n * onClick={() => trackSettingsClick()}\n * />\n *\n * // Without bottom divider\n * <ProfileSettingsMenuItem\n * href=\"/settings/profile\"\n * userEmail=\"user@example.com\"\n * hideBottomDivider\n * />\n * ```\n *\n * @note This component must be used within a ProfileMenu component\n * as it requires access to the ProfileMenu context for team status information.\n */\nexport const ProfileSettingsMenuItem = ({\n\thref,\n\tonClick,\n\tuserEmail,\n\thideBottomDivider,\n}: ProfileSettingsMenuItemProps) => {\n\tconst { isEndOfTrialActive, isTeamSuspended } = useProfileMenu()\n\n\tif (isEndOfTrialActive || isTeamSuspended) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem\n\t\t\t\thref={href}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tonClick?.()\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className={`flex-col ${styles.container}`}>\n\t\t\t\t\t<span>Profile Settings</span>\n\t\t\t\t\t<span className={styles.profileEmail}>{userEmail}</span>\n\t\t\t\t</div>\n\t\t\t</MenuItem>\n\n\t\t\t{!hideBottomDivider && <MenuDivider />}\n\t\t</>\n\t)\n}\n"],"names":["useProfileMenu","jsxs","Fragment","jsx","MenuItem","styles","MenuDivider"],"mappings":";;;;;;AA6CO,MAAM,0BAA0B,CAAC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,MAAoC;AACnC,QAAM,EAAE,oBAAoB,gBAAgB,IAAIA,kCAAe;AAE/D,MAAI,sBAAsB,iBAAiB;AACnC,WAAA;AAAA,EAAA;AAGR,SAEEC,2BAAA,KAAAC,qBAAA,EAAA,UAAA;AAAA,IAAAC,2BAAA;AAAA,MAACC,MAAA;AAAA,MAAA;AAAA,QACA;AAAA,QACA,SAAS,MAAM;AACJ;AAAA,QACX;AAAA,QAEA,0CAAC,OAAI,EAAA,WAAW,YAAYC,uCAAO,SAAS,IAC3C,UAAA;AAAA,UAAAF,2BAAAA,IAAC,UAAK,UAAgB,mBAAA,CAAA;AAAA,UACrBA,2BAAA,IAAA,QAAA,EAAK,WAAWE,+BAAA,QAAO,cAAe,UAAU,UAAA,CAAA;AAAA,QAAA,EAClD,CAAA;AAAA,MAAA;AAAA,IACD;AAAA,IAEC,CAAC,qBAAqBF,+BAACG,MAAAA,aAAY,CAAA,CAAA;AAAA,EAAA,GACrC;AAEF;;"}
1
+ {"version":3,"file":"harmony81.cjs","sources":["../src/components/NavigationPanel/components/NavigationTabs/helpers.ts"],"sourcesContent":["import type { DropdownItem, NavigationTabsItem } from '@features/navigation/types/navigation'\n\nconst hasVisibleItems = (dropdownSections?: DropdownItem[][]): boolean =>\n\tdropdownSections?.some((section) => section.some((item) => item.visible)) ?? false\n\nexport const isNavigationItemVisible = (item: NavigationTabsItem): boolean =>\n\titem.visible && (!item.dropdown || hasVisibleItems(item.dropdown))\n"],"names":[],"mappings":";;AAEA,MAAM,kBAAkB,CAAC,sBACxB,qDAAkB,KAAK,CAAC,YAAY,QAAQ,KAAK,CAAC,SAAS,KAAK,OAAO,OAAM;AAEjE,MAAA,0BAA0B,CAAC,SACvC,KAAK,YAAY,CAAC,KAAK,YAAY,gBAAgB,KAAK,QAAQ;;"}
@@ -1,35 +1,6 @@
1
- import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
- import { MenuItem, MenuDivider } from "@lokalise/louis";
3
- import { useProfileMenu } from "./harmony107.mjs";
4
- import styles from "./harmony108.mjs";
5
- const ProfileSettingsMenuItem = ({
6
- href,
7
- onClick,
8
- userEmail,
9
- hideBottomDivider
10
- }) => {
11
- const { isEndOfTrialActive, isTeamSuspended } = useProfileMenu();
12
- if (isEndOfTrialActive || isTeamSuspended) {
13
- return null;
14
- }
15
- return /* @__PURE__ */ jsxs(Fragment, { children: [
16
- /* @__PURE__ */ jsx(
17
- MenuItem,
18
- {
19
- href,
20
- onClick: () => {
21
- onClick == null ? void 0 : onClick();
22
- },
23
- children: /* @__PURE__ */ jsxs("div", { className: `flex-col ${styles.container}`, children: [
24
- /* @__PURE__ */ jsx("span", { children: "Profile Settings" }),
25
- /* @__PURE__ */ jsx("span", { className: styles.profileEmail, children: userEmail })
26
- ] })
27
- }
28
- ),
29
- !hideBottomDivider && /* @__PURE__ */ jsx(MenuDivider, {})
30
- ] });
31
- };
1
+ const hasVisibleItems = (dropdownSections) => (dropdownSections == null ? void 0 : dropdownSections.some((section) => section.some((item) => item.visible))) ?? false;
2
+ const isNavigationItemVisible = (item) => item.visible && (!item.dropdown || hasVisibleItems(item.dropdown));
32
3
  export {
33
- ProfileSettingsMenuItem
4
+ isNavigationItemVisible
34
5
  };
35
6
  //# sourceMappingURL=harmony81.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony81.mjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/ProfileSettingsMenuItem/ProfileSettingsMenuItem.tsx"],"sourcesContent":["import { MenuDivider, MenuItem } from '@lokalise/louis'\nimport { useProfileMenu } from '../ProfileMenuContext'\nimport styles from './ProfileSettingsMenuItem.module.css'\n\ntype ProfileSettingsMenuItemProps = {\n\t/** URL to the profile settings page */\n\thref: string\n\t/** User's email address to display below \"Profile Settings\" */\n\tuserEmail: string\n\t/** Optional callback function for tracking or additional actions */\n\tonClick?: () => void\n\t/** Whether to hide the divider that appears below this menu item */\n\thideBottomDivider?: boolean\n}\n\n/**\n * A menu item component that provides access to profile settings.\n *\n * Features:\n * - Displays \"Profile Settings\" with the user's email address below\n * - Conditionally renders based on team status\n * - Includes an optional divider below the item\n * - Will not render if:\n * - Team is suspended\n * - Team's trial period has ended\n *\n * @example\n * ```tsx\n * <ProfileSettingsMenuItem\n * href=\"/settings/profile\"\n * userEmail=\"user@example.com\"\n * onClick={() => trackSettingsClick()}\n * />\n *\n * // Without bottom divider\n * <ProfileSettingsMenuItem\n * href=\"/settings/profile\"\n * userEmail=\"user@example.com\"\n * hideBottomDivider\n * />\n * ```\n *\n * @note This component must be used within a ProfileMenu component\n * as it requires access to the ProfileMenu context for team status information.\n */\nexport const ProfileSettingsMenuItem = ({\n\thref,\n\tonClick,\n\tuserEmail,\n\thideBottomDivider,\n}: ProfileSettingsMenuItemProps) => {\n\tconst { isEndOfTrialActive, isTeamSuspended } = useProfileMenu()\n\n\tif (isEndOfTrialActive || isTeamSuspended) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem\n\t\t\t\thref={href}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tonClick?.()\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className={`flex-col ${styles.container}`}>\n\t\t\t\t\t<span>Profile Settings</span>\n\t\t\t\t\t<span className={styles.profileEmail}>{userEmail}</span>\n\t\t\t\t</div>\n\t\t\t</MenuItem>\n\n\t\t\t{!hideBottomDivider && <MenuDivider />}\n\t\t</>\n\t)\n}\n"],"names":[],"mappings":";;;;AA6CO,MAAM,0BAA0B,CAAC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,MAAoC;AACnC,QAAM,EAAE,oBAAoB,gBAAgB,IAAI,eAAe;AAE/D,MAAI,sBAAsB,iBAAiB;AACnC,WAAA;AAAA,EAAA;AAGR,SAEE,qBAAA,UAAA,EAAA,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACA;AAAA,QACA,SAAS,MAAM;AACJ;AAAA,QACX;AAAA,QAEA,+BAAC,OAAI,EAAA,WAAW,YAAY,OAAO,SAAS,IAC3C,UAAA;AAAA,UAAA,oBAAC,UAAK,UAAgB,mBAAA,CAAA;AAAA,UACrB,oBAAA,QAAA,EAAK,WAAW,OAAO,cAAe,UAAU,UAAA,CAAA;AAAA,QAAA,EAClD,CAAA;AAAA,MAAA;AAAA,IACD;AAAA,IAEC,CAAC,qBAAqB,oBAAC,aAAY,CAAA,CAAA;AAAA,EAAA,GACrC;AAEF;"}
1
+ {"version":3,"file":"harmony81.mjs","sources":["../src/components/NavigationPanel/components/NavigationTabs/helpers.ts"],"sourcesContent":["import type { DropdownItem, NavigationTabsItem } from '@features/navigation/types/navigation'\n\nconst hasVisibleItems = (dropdownSections?: DropdownItem[][]): boolean =>\n\tdropdownSections?.some((section) => section.some((item) => item.visible)) ?? false\n\nexport const isNavigationItemVisible = (item: NavigationTabsItem): boolean =>\n\titem.visible && (!item.dropdown || hasVisibleItems(item.dropdown))\n"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,CAAC,sBACxB,qDAAkB,KAAK,CAAC,YAAY,QAAQ,KAAK,CAAC,SAAS,KAAK,OAAO,OAAM;AAEjE,MAAA,0BAA0B,CAAC,SACvC,KAAK,YAAY,CAAC,KAAK,YAAY,gBAAgB,KAAK,QAAQ;"}
@@ -2,34 +2,35 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const louis = require("@lokalise/louis");
5
- const plan = require("./harmony9.cjs");
6
- const ProfileMenuContext = require("./harmony107.cjs");
7
- const TeamMenuItem_module = require("./harmony109.cjs");
8
- const TeamMenuItem = ({ team, onClick, hidePlanLabel }) => {
9
- const { currentTeam, planId } = ProfileMenuContext.useProfileMenu();
10
- const contextTeam = team || currentTeam;
11
- if (!contextTeam) {
12
- return null;
5
+ const reactTable = require("@tanstack/react-table");
6
+ const clsx = require("./harmony73.cjs");
7
+ const SortingIcon = require("./harmony88.cjs");
8
+ const TableHeaderCell_module = require("./harmony89.cjs");
9
+ const TableHeaderCell = ({
10
+ header,
11
+ align = "left",
12
+ className,
13
+ ...rest
14
+ }) => /* @__PURE__ */ jsxRuntime.jsxs(
15
+ louis.TableHeaderCell,
16
+ {
17
+ className: clsx.clsx(className, {
18
+ [TableHeaderCell_module.default.centeredCell]: align === "center",
19
+ [TableHeaderCell_module.default.rightAlignedCell]: align === "right"
20
+ }),
21
+ ...rest,
22
+ children: [
23
+ reactTable.flexRender(header.column.columnDef.header, header.getContext()),
24
+ header.column.getCanSort() && /* @__PURE__ */ jsxRuntime.jsx(
25
+ SortColumnButton,
26
+ {
27
+ direction: header.column.getIsSorted(),
28
+ onSortToggle: header.column.getToggleSortingHandler()
29
+ }
30
+ )
31
+ ]
13
32
  }
14
- const planLabel = plan.isFreePlan(planId) ? "Free" : plan.isTrialPlan(planId) ? "Trial" : void 0;
15
- const WrapperNode = onClick ? louis.MenuItem : "div";
16
- return /* @__PURE__ */ jsxRuntime.jsxs(
17
- WrapperNode,
18
- {
19
- className: TeamMenuItem_module.default.wrapper,
20
- ...onClick && { onClick: () => onClick(contextTeam) },
21
- children: [
22
- contextTeam.logoUrl ? /* @__PURE__ */ jsxRuntime.jsx("img", { className: TeamMenuItem_module.default.profileImage, src: contextTeam.logoUrl, alt: "Team logo" }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${TeamMenuItem_module.default.defaultProfileImage}`, children: /* @__PURE__ */ jsxRuntime.jsx(louis.UserIcon, { size: "25px" }) }),
23
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: TeamMenuItem_module.default.teamDetails, children: [
24
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: TeamMenuItem_module.default.planWrapper, children: [
25
- /* @__PURE__ */ jsxRuntime.jsx("span", { title: contextTeam.name, className: TeamMenuItem_module.default.teamName, children: contextTeam.name }),
26
- planLabel && !hidePlanLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: TeamMenuItem_module.default.teamName, children: planLabel })
27
- ] }),
28
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: TeamMenuItem_module.default.membership, children: contextTeam.role })
29
- ] })
30
- ]
31
- }
32
- );
33
- };
34
- exports.TeamMenuItem = TeamMenuItem;
33
+ );
34
+ const SortColumnButton = ({ direction, onSortToggle }) => /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: onSortToggle, className: TableHeaderCell_module.default.headerSortButton, children: /* @__PURE__ */ jsxRuntime.jsx(SortingIcon.SortingIcon, { direction }) });
35
+ exports.TableHeaderCell = TableHeaderCell;
35
36
  //# sourceMappingURL=harmony82.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony82.cjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/TeamMenuItem/TeamMenuItem.tsx"],"sourcesContent":["import { MenuItem, UserIcon } from '@lokalise/louis'\nimport { isFreePlan, isTrialPlan } from '../../../../../utils/billing/plan/plan'\nimport type { SidebarTeam } from '../../../types'\nimport { useProfileMenu } from '../ProfileMenuContext'\nimport styles from './TeamMenuItem.module.css'\n\ntype TeamMenuItemProps = {\n\t/** Team to display. If not provided, uses the current team from context */\n\tteam?: SidebarTeam\n\t/** Callback for when the team item is clicked. If provided, renders as a clickable MenuItem */\n\tonClick?: (team: SidebarTeam) => void\n\t/** Whether to hide the plan label (Free/Trial). Useful when displaying multiple teams */\n\thidePlanLabel?: boolean\n}\n\n/**\n * A component that displays team information in a menu item format.\n * Renders team logo (or default user icon), team name, role, and plan label.\n *\n * The component can be used in two modes:\n * 1. As a static display of the current team (when no onClick handler is provided)\n * 2. As a clickable menu item for team switching (when onClick handler is provided)\n *\n * @example\n * ```tsx\n * // Static current team display\n * <TeamMenuItem />\n *\n * // Clickable team item for switching\n * <TeamMenuItem\n * team={someTeam}\n * onClick={(team) => handleTeamSwitch(team)}\n * hidePlanLabel\n * />\n * ```\n *\n * @note This component must be used within a ProfileMenu component\n * as it requires access to the ProfileMenu context for current team\n * and plan information.\n */\nexport const TeamMenuItem = ({ team, onClick, hidePlanLabel }: TeamMenuItemProps) => {\n\tconst { currentTeam, planId } = useProfileMenu()\n\n\tconst contextTeam = team || currentTeam\n\n\tif (!contextTeam) {\n\t\treturn null\n\t}\n\n\tconst planLabel = isFreePlan(planId) ? 'Free' : isTrialPlan(planId) ? 'Trial' : undefined\n\n\tconst WrapperNode = onClick ? MenuItem : 'div'\n\n\treturn (\n\t\t<WrapperNode\n\t\t\tclassName={styles.wrapper}\n\t\t\t{...(onClick && { onClick: () => onClick(contextTeam) })}\n\t\t>\n\t\t\t{contextTeam.logoUrl ? (\n\t\t\t\t<img className={styles.profileImage} src={contextTeam.logoUrl} alt=\"Team logo\" />\n\t\t\t) : (\n\t\t\t\t<span className={`${styles.defaultProfileImage}`}>\n\t\t\t\t\t<UserIcon size=\"25px\" />\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<div className={styles.teamDetails}>\n\t\t\t\t<div className={styles.planWrapper}>\n\t\t\t\t\t<span title={contextTeam.name} className={styles.teamName}>\n\t\t\t\t\t\t{contextTeam.name}\n\t\t\t\t\t</span>\n\t\t\t\t\t{planLabel && !hidePlanLabel && <span className={styles.teamName}>{planLabel}</span>}\n\t\t\t\t</div>\n\t\t\t\t<span className={styles.membership}>{contextTeam.role}</span>\n\t\t\t</div>\n\t\t</WrapperNode>\n\t)\n}\n"],"names":["useProfileMenu","isFreePlan","isTrialPlan","MenuItem","jsxs","styles","jsx","UserIcon"],"mappings":";;;;;;;AAwCO,MAAM,eAAe,CAAC,EAAE,MAAM,SAAS,oBAAuC;AACpF,QAAM,EAAE,aAAa,OAAO,IAAIA,kCAAe;AAE/C,QAAM,cAAc,QAAQ;AAE5B,MAAI,CAAC,aAAa;AACV,WAAA;AAAA,EAAA;AAGF,QAAA,YAAYC,gBAAW,MAAM,IAAI,SAASC,iBAAY,MAAM,IAAI,UAAU;AAE1E,QAAA,cAAc,UAAUC,MAAAA,WAAW;AAGxC,SAAAC,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,WAAWC,oBAAO,QAAA;AAAA,MACjB,GAAI,WAAW,EAAE,SAAS,MAAM,QAAQ,WAAW,EAAE;AAAA,MAErD,UAAA;AAAA,QAAY,YAAA,yCACX,OAAI,EAAA,WAAWA,oBAAAA,QAAO,cAAc,KAAK,YAAY,SAAS,KAAI,YAAA,CAAY,IAE9EC,+BAAA,QAAA,EAAK,WAAW,GAAGD,oBAAO,QAAA,mBAAmB,IAC7C,UAACC,2BAAAA,IAAAC,MAAAA,UAAA,EAAS,MAAK,OAAA,CAAO,EACvB,CAAA;AAAA,QAEAH,2BAAA,KAAA,OAAA,EAAI,WAAWC,oBAAAA,QAAO,aACtB,UAAA;AAAA,UAACD,2BAAA,KAAA,OAAA,EAAI,WAAWC,oBAAAA,QAAO,aACtB,UAAA;AAAA,YAACC,2BAAAA,IAAA,QAAA,EAAK,OAAO,YAAY,MAAM,WAAWD,oBAAAA,QAAO,UAC/C,sBAAY,KACd,CAAA;AAAA,YACC,aAAa,CAAC,iBAAiBC,2BAAAA,IAAC,UAAK,WAAWD,4BAAO,UAAW,UAAU,UAAA,CAAA;AAAA,UAAA,GAC9E;AAAA,yCACC,QAAK,EAAA,WAAWA,oBAAAA,QAAO,YAAa,sBAAY,KAAK,CAAA;AAAA,QAAA,EACvD,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACD;AAEF;;"}
1
+ {"version":3,"file":"harmony82.cjs","sources":["../src/components/Table/components/TableHeaderCell.tsx"],"sourcesContent":["import {\n\tTableHeaderCell as LouisTableHeaderCell,\n\ttype TableHeaderCellProps as LouisTableHeaderCellProps,\n} from '@lokalise/louis'\nimport { type Header, type SortDirection, flexRender } from '@tanstack/react-table'\nimport cx from 'clsx'\nimport { SortingIcon } from './SortingIcon'\nimport styles from './TableHeaderCell.module.css'\n\ntype TableHeaderProps<T> = LouisTableHeaderCellProps & {\n\theader: Header<T, unknown>\n}\n\nexport const TableHeaderCell = <T,>({\n\theader,\n\talign = 'left',\n\tclassName,\n\t...rest\n}: TableHeaderProps<T>) => (\n\t<LouisTableHeaderCell\n\t\tclassName={cx(className, {\n\t\t\t[styles.centeredCell]: align === 'center',\n\t\t\t[styles.rightAlignedCell]: align === 'right',\n\t\t})}\n\t\t{...rest}\n\t>\n\t\t{flexRender(header.column.columnDef.header, header.getContext())}\n\t\t{header.column.getCanSort() && (\n\t\t\t<SortColumnButton\n\t\t\t\tdirection={header.column.getIsSorted()}\n\t\t\t\tonSortToggle={header.column.getToggleSortingHandler()}\n\t\t\t/>\n\t\t)}\n\t</LouisTableHeaderCell>\n)\n\ntype SortColumnButtonProps = {\n\tdirection: SortDirection | false\n\tonSortToggle?: (event: unknown) => void\n}\n\nconst SortColumnButton = ({ direction, onSortToggle }: SortColumnButtonProps) => (\n\t<button type=\"button\" onClick={onSortToggle} className={styles.headerSortButton}>\n\t\t<SortingIcon direction={direction} />\n\t</button>\n)\n"],"names":["jsxs","LouisTableHeaderCell","cx","styles","flexRender","jsx","SortingIcon"],"mappings":";;;;;;;;AAaO,MAAM,kBAAkB,CAAK;AAAA,EACnC;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACJ,MACCA,2BAAA;AAAA,EAACC,MAAA;AAAA,EAAA;AAAA,IACA,WAAWC,UAAG,WAAW;AAAA,MACxB,CAACC,uBAAA,QAAO,YAAY,GAAG,UAAU;AAAA,MACjC,CAACA,uBAAA,QAAO,gBAAgB,GAAG,UAAU;AAAA,IAAA,CACrC;AAAA,IACA,GAAG;AAAA,IAEH,UAAA;AAAA,MAAAC,WAAA,WAAW,OAAO,OAAO,UAAU,QAAQ,OAAO,YAAY;AAAA,MAC9D,OAAO,OAAO,WAAA,KACdC,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,WAAW,OAAO,OAAO,YAAY;AAAA,UACrC,cAAc,OAAO,OAAO,wBAAwB;AAAA,QAAA;AAAA,MAAA;AAAA,IACrD;AAAA,EAAA;AAEF;AAQD,MAAM,mBAAmB,CAAC,EAAE,WAAW,aAAa,qCAClD,UAAO,EAAA,MAAK,UAAS,SAAS,cAAc,WAAWF,+BAAO,kBAC9D,UAACE,2BAAA,IAAAC,yBAAA,EAAY,UAAsB,CAAA,GACpC;;"}
@@ -1,35 +1,36 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
- import { MenuItem, UserIcon } from "@lokalise/louis";
3
- import { isFreePlan, isTrialPlan } from "./harmony9.mjs";
4
- import { useProfileMenu } from "./harmony107.mjs";
5
- import styles from "./harmony109.mjs";
6
- const TeamMenuItem = ({ team, onClick, hidePlanLabel }) => {
7
- const { currentTeam, planId } = useProfileMenu();
8
- const contextTeam = team || currentTeam;
9
- if (!contextTeam) {
10
- return null;
2
+ import { TableHeaderCell as TableHeaderCell$1 } from "@lokalise/louis";
3
+ import { flexRender } from "@tanstack/react-table";
4
+ import { clsx } from "./harmony73.mjs";
5
+ import { SortingIcon } from "./harmony88.mjs";
6
+ import styles from "./harmony89.mjs";
7
+ const TableHeaderCell = ({
8
+ header,
9
+ align = "left",
10
+ className,
11
+ ...rest
12
+ }) => /* @__PURE__ */ jsxs(
13
+ TableHeaderCell$1,
14
+ {
15
+ className: clsx(className, {
16
+ [styles.centeredCell]: align === "center",
17
+ [styles.rightAlignedCell]: align === "right"
18
+ }),
19
+ ...rest,
20
+ children: [
21
+ flexRender(header.column.columnDef.header, header.getContext()),
22
+ header.column.getCanSort() && /* @__PURE__ */ jsx(
23
+ SortColumnButton,
24
+ {
25
+ direction: header.column.getIsSorted(),
26
+ onSortToggle: header.column.getToggleSortingHandler()
27
+ }
28
+ )
29
+ ]
11
30
  }
12
- const planLabel = isFreePlan(planId) ? "Free" : isTrialPlan(planId) ? "Trial" : void 0;
13
- const WrapperNode = onClick ? MenuItem : "div";
14
- return /* @__PURE__ */ jsxs(
15
- WrapperNode,
16
- {
17
- className: styles.wrapper,
18
- ...onClick && { onClick: () => onClick(contextTeam) },
19
- children: [
20
- contextTeam.logoUrl ? /* @__PURE__ */ jsx("img", { className: styles.profileImage, src: contextTeam.logoUrl, alt: "Team logo" }) : /* @__PURE__ */ jsx("span", { className: `${styles.defaultProfileImage}`, children: /* @__PURE__ */ jsx(UserIcon, { size: "25px" }) }),
21
- /* @__PURE__ */ jsxs("div", { className: styles.teamDetails, children: [
22
- /* @__PURE__ */ jsxs("div", { className: styles.planWrapper, children: [
23
- /* @__PURE__ */ jsx("span", { title: contextTeam.name, className: styles.teamName, children: contextTeam.name }),
24
- planLabel && !hidePlanLabel && /* @__PURE__ */ jsx("span", { className: styles.teamName, children: planLabel })
25
- ] }),
26
- /* @__PURE__ */ jsx("span", { className: styles.membership, children: contextTeam.role })
27
- ] })
28
- ]
29
- }
30
- );
31
- };
31
+ );
32
+ const SortColumnButton = ({ direction, onSortToggle }) => /* @__PURE__ */ jsx("button", { type: "button", onClick: onSortToggle, className: styles.headerSortButton, children: /* @__PURE__ */ jsx(SortingIcon, { direction }) });
32
33
  export {
33
- TeamMenuItem
34
+ TableHeaderCell
34
35
  };
35
36
  //# sourceMappingURL=harmony82.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony82.mjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/TeamMenuItem/TeamMenuItem.tsx"],"sourcesContent":["import { MenuItem, UserIcon } from '@lokalise/louis'\nimport { isFreePlan, isTrialPlan } from '../../../../../utils/billing/plan/plan'\nimport type { SidebarTeam } from '../../../types'\nimport { useProfileMenu } from '../ProfileMenuContext'\nimport styles from './TeamMenuItem.module.css'\n\ntype TeamMenuItemProps = {\n\t/** Team to display. If not provided, uses the current team from context */\n\tteam?: SidebarTeam\n\t/** Callback for when the team item is clicked. If provided, renders as a clickable MenuItem */\n\tonClick?: (team: SidebarTeam) => void\n\t/** Whether to hide the plan label (Free/Trial). Useful when displaying multiple teams */\n\thidePlanLabel?: boolean\n}\n\n/**\n * A component that displays team information in a menu item format.\n * Renders team logo (or default user icon), team name, role, and plan label.\n *\n * The component can be used in two modes:\n * 1. As a static display of the current team (when no onClick handler is provided)\n * 2. As a clickable menu item for team switching (when onClick handler is provided)\n *\n * @example\n * ```tsx\n * // Static current team display\n * <TeamMenuItem />\n *\n * // Clickable team item for switching\n * <TeamMenuItem\n * team={someTeam}\n * onClick={(team) => handleTeamSwitch(team)}\n * hidePlanLabel\n * />\n * ```\n *\n * @note This component must be used within a ProfileMenu component\n * as it requires access to the ProfileMenu context for current team\n * and plan information.\n */\nexport const TeamMenuItem = ({ team, onClick, hidePlanLabel }: TeamMenuItemProps) => {\n\tconst { currentTeam, planId } = useProfileMenu()\n\n\tconst contextTeam = team || currentTeam\n\n\tif (!contextTeam) {\n\t\treturn null\n\t}\n\n\tconst planLabel = isFreePlan(planId) ? 'Free' : isTrialPlan(planId) ? 'Trial' : undefined\n\n\tconst WrapperNode = onClick ? MenuItem : 'div'\n\n\treturn (\n\t\t<WrapperNode\n\t\t\tclassName={styles.wrapper}\n\t\t\t{...(onClick && { onClick: () => onClick(contextTeam) })}\n\t\t>\n\t\t\t{contextTeam.logoUrl ? (\n\t\t\t\t<img className={styles.profileImage} src={contextTeam.logoUrl} alt=\"Team logo\" />\n\t\t\t) : (\n\t\t\t\t<span className={`${styles.defaultProfileImage}`}>\n\t\t\t\t\t<UserIcon size=\"25px\" />\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<div className={styles.teamDetails}>\n\t\t\t\t<div className={styles.planWrapper}>\n\t\t\t\t\t<span title={contextTeam.name} className={styles.teamName}>\n\t\t\t\t\t\t{contextTeam.name}\n\t\t\t\t\t</span>\n\t\t\t\t\t{planLabel && !hidePlanLabel && <span className={styles.teamName}>{planLabel}</span>}\n\t\t\t\t</div>\n\t\t\t\t<span className={styles.membership}>{contextTeam.role}</span>\n\t\t\t</div>\n\t\t</WrapperNode>\n\t)\n}\n"],"names":[],"mappings":";;;;;AAwCO,MAAM,eAAe,CAAC,EAAE,MAAM,SAAS,oBAAuC;AACpF,QAAM,EAAE,aAAa,OAAO,IAAI,eAAe;AAE/C,QAAM,cAAc,QAAQ;AAE5B,MAAI,CAAC,aAAa;AACV,WAAA;AAAA,EAAA;AAGF,QAAA,YAAY,WAAW,MAAM,IAAI,SAAS,YAAY,MAAM,IAAI,UAAU;AAE1E,QAAA,cAAc,UAAU,WAAW;AAGxC,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,WAAW,OAAO;AAAA,MACjB,GAAI,WAAW,EAAE,SAAS,MAAM,QAAQ,WAAW,EAAE;AAAA,MAErD,UAAA;AAAA,QAAY,YAAA,8BACX,OAAI,EAAA,WAAW,OAAO,cAAc,KAAK,YAAY,SAAS,KAAI,YAAA,CAAY,IAE9E,oBAAA,QAAA,EAAK,WAAW,GAAG,OAAO,mBAAmB,IAC7C,UAAC,oBAAA,UAAA,EAAS,MAAK,OAAA,CAAO,EACvB,CAAA;AAAA,QAEA,qBAAA,OAAA,EAAI,WAAW,OAAO,aACtB,UAAA;AAAA,UAAC,qBAAA,OAAA,EAAI,WAAW,OAAO,aACtB,UAAA;AAAA,YAAC,oBAAA,QAAA,EAAK,OAAO,YAAY,MAAM,WAAW,OAAO,UAC/C,sBAAY,KACd,CAAA;AAAA,YACC,aAAa,CAAC,iBAAiB,oBAAC,UAAK,WAAW,OAAO,UAAW,UAAU,UAAA,CAAA;AAAA,UAAA,GAC9E;AAAA,8BACC,QAAK,EAAA,WAAW,OAAO,YAAa,sBAAY,KAAK,CAAA;AAAA,QAAA,EACvD,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACD;AAEF;"}
1
+ {"version":3,"file":"harmony82.mjs","sources":["../src/components/Table/components/TableHeaderCell.tsx"],"sourcesContent":["import {\n\tTableHeaderCell as LouisTableHeaderCell,\n\ttype TableHeaderCellProps as LouisTableHeaderCellProps,\n} from '@lokalise/louis'\nimport { type Header, type SortDirection, flexRender } from '@tanstack/react-table'\nimport cx from 'clsx'\nimport { SortingIcon } from './SortingIcon'\nimport styles from './TableHeaderCell.module.css'\n\ntype TableHeaderProps<T> = LouisTableHeaderCellProps & {\n\theader: Header<T, unknown>\n}\n\nexport const TableHeaderCell = <T,>({\n\theader,\n\talign = 'left',\n\tclassName,\n\t...rest\n}: TableHeaderProps<T>) => (\n\t<LouisTableHeaderCell\n\t\tclassName={cx(className, {\n\t\t\t[styles.centeredCell]: align === 'center',\n\t\t\t[styles.rightAlignedCell]: align === 'right',\n\t\t})}\n\t\t{...rest}\n\t>\n\t\t{flexRender(header.column.columnDef.header, header.getContext())}\n\t\t{header.column.getCanSort() && (\n\t\t\t<SortColumnButton\n\t\t\t\tdirection={header.column.getIsSorted()}\n\t\t\t\tonSortToggle={header.column.getToggleSortingHandler()}\n\t\t\t/>\n\t\t)}\n\t</LouisTableHeaderCell>\n)\n\ntype SortColumnButtonProps = {\n\tdirection: SortDirection | false\n\tonSortToggle?: (event: unknown) => void\n}\n\nconst SortColumnButton = ({ direction, onSortToggle }: SortColumnButtonProps) => (\n\t<button type=\"button\" onClick={onSortToggle} className={styles.headerSortButton}>\n\t\t<SortingIcon direction={direction} />\n\t</button>\n)\n"],"names":["LouisTableHeaderCell","cx"],"mappings":";;;;;;AAaO,MAAM,kBAAkB,CAAK;AAAA,EACnC;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACJ,MACC;AAAA,EAACA;AAAAA,EAAA;AAAA,IACA,WAAWC,KAAG,WAAW;AAAA,MACxB,CAAC,OAAO,YAAY,GAAG,UAAU;AAAA,MACjC,CAAC,OAAO,gBAAgB,GAAG,UAAU;AAAA,IAAA,CACrC;AAAA,IACA,GAAG;AAAA,IAEH,UAAA;AAAA,MAAA,WAAW,OAAO,OAAO,UAAU,QAAQ,OAAO,YAAY;AAAA,MAC9D,OAAO,OAAO,WAAA,KACd;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,WAAW,OAAO,OAAO,YAAY;AAAA,UACrC,cAAc,OAAO,OAAO,wBAAwB;AAAA,QAAA;AAAA,MAAA;AAAA,IACrD;AAAA,EAAA;AAEF;AAQD,MAAM,mBAAmB,CAAC,EAAE,WAAW,aAAa,0BAClD,UAAO,EAAA,MAAK,UAAS,SAAS,cAAc,WAAW,OAAO,kBAC9D,UAAC,oBAAA,aAAA,EAAY,UAAsB,CAAA,GACpC;"}
@@ -1,22 +1,46 @@
1
1
  "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
2
5
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("react/jsx-runtime");
4
- const ProfileMenuContext = require("./harmony107.cjs");
5
- const TeamMenuItem = require("./harmony82.cjs");
6
- const TeamSwitch_module = require("./harmony110.cjs");
7
- const TeamSwitch = ({ onSwitchTeam }) => {
8
- const { otherTeams } = ProfileMenuContext.useProfileMenu();
9
- if (otherTeams.length === 0) {
10
- return null;
11
- }
12
- return /* @__PURE__ */ jsxRuntime.jsx(
13
- "div",
14
- {
15
- "data-testid": "sidebar-team-switch",
16
- className: `flex-col items-stretch ${TeamSwitch_module.default.teamsContainer}`,
17
- children: otherTeams.map((team) => /* @__PURE__ */ jsxRuntime.jsx(TeamMenuItem.TeamMenuItem, { team, onClick: onSwitchTeam, hidePlanLabel: true }, team.id))
18
- }
19
- );
20
- };
21
- exports.TeamSwitch = TeamSwitch;
6
+ const wretch = require("wretch");
7
+ const FormDataAddon = require("wretch/addons/formData");
8
+ class NavigationClient {
9
+ constructor(config) {
10
+ __publicField(this, "config");
11
+ __publicField(this, "publicApiClient");
12
+ __publicField(this, "authorizedApiClient");
13
+ this.config = config;
14
+ this.publicApiClient = this.createPublicApiClient();
15
+ this.authorizedApiClient = this.createAuthorizedApiClient();
16
+ }
17
+ createPublicApiClient() {
18
+ return wretch(this.config.expertPublicApiUrl).options({ credentials: "omit" }).errorType("json");
19
+ }
20
+ createAuthorizedApiClient() {
21
+ return wretch(this.config.nextgenApiUrl).errorType("json").addon(FormDataAddon);
22
+ }
23
+ getConfig() {
24
+ return { ...this.config };
25
+ }
26
+ getPublicApiClient() {
27
+ return this.publicApiClient;
28
+ }
29
+ getAuthorizedApiClient() {
30
+ return this.authorizedApiClient;
31
+ }
32
+ getExpertUrl() {
33
+ return this.config.expertAppUrl;
34
+ }
35
+ getNextgenUrl() {
36
+ return this.config.nextgenAppUrl;
37
+ }
38
+ getExpertPublicApiUrl() {
39
+ return this.config.expertPublicApiUrl;
40
+ }
41
+ getNextgenApiUrl() {
42
+ return this.config.nextgenApiUrl;
43
+ }
44
+ }
45
+ exports.NavigationClient = NavigationClient;
22
46
  //# sourceMappingURL=harmony83.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony83.cjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/TeamSwitch/TeamSwitch.tsx"],"sourcesContent":["import type { SidebarTeam } from '../../../types'\nimport { useProfileMenu } from '../ProfileMenuContext'\nimport { TeamMenuItem } from '../TeamMenuItem/TeamMenuItem'\nimport styles from './TeamSwitch.module.css'\n\ntype TeamSwitchProps = {\n\t/** Callback function triggered when a user selects a different team */\n\tonSwitchTeam: (team: SidebarTeam) => void\n}\n\n/**\n * A component that displays a list of available teams for switching.\n * It automatically excludes the current team from the list and renders\n * nothing if there are no other teams available.\n *\n * Uses the ProfileMenu context to access the list of other teams and\n * renders each team as a TeamMenuItem with click functionality.\n *\n * @example\n * ```tsx\n * <TeamSwitch\n * onSwitchTeam={(team) => {\n * console.log(`Switching to team: ${team.name}`);\n * // Handle team switch logic\n * }}\n * />\n * ```\n *\n * @note This component must be used within a ProfileMenu component\n * as it requires access to the ProfileMenu context.\n */\nexport const TeamSwitch = ({ onSwitchTeam }: TeamSwitchProps) => {\n\tconst { otherTeams } = useProfileMenu()\n\n\tif (otherTeams.length === 0) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tdata-testid=\"sidebar-team-switch\"\n\t\t\tclassName={`flex-col items-stretch ${styles.teamsContainer}`}\n\t\t>\n\t\t\t{otherTeams.map((team) => (\n\t\t\t\t<TeamMenuItem team={team} key={team.id} onClick={onSwitchTeam} hidePlanLabel />\n\t\t\t))}\n\t\t</div>\n\t)\n}\n"],"names":["useProfileMenu","jsx","styles","TeamMenuItem"],"mappings":";;;;;;AA+BO,MAAM,aAAa,CAAC,EAAE,mBAAoC;AAC1D,QAAA,EAAE,WAAW,IAAIA,kCAAe;AAElC,MAAA,WAAW,WAAW,GAAG;AACrB,WAAA;AAAA,EAAA;AAIP,SAAAC,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,eAAY;AAAA,MACZ,WAAW,0BAA0BC,kBAAA,QAAO,cAAc;AAAA,MAEzD,UAAW,WAAA,IAAI,CAAC,SACfD,2BAAAA,IAAAE,aAAAA,cAAA,EAAa,MAA0B,SAAS,cAAc,eAAa,KAA7C,GAAA,KAAK,EAAyC,CAC7E;AAAA,IAAA;AAAA,EACF;AAEF;;"}
1
+ {"version":3,"file":"harmony83.cjs","sources":["../src/features/navigation/core/NavigationClient.ts"],"sourcesContent":["import wretch, { type Wretch } from 'wretch'\nimport FormDataAddon, { type FormDataAddon as FormDataAddonType } from 'wretch/addons/formData'\n\nexport interface NavigationConfig {\n\texpertAppUrl: string\n\tnextgenAppUrl: string\n\texpertPublicApiUrl: string\n\tnextgenApiUrl: string\n}\n\nexport class NavigationClient {\n\tprivate config: NavigationConfig\n\tprivate publicApiClient: Wretch<unknown, unknown, undefined>\n\tprivate authorizedApiClient: FormDataAddonType & Wretch<FormDataAddonType, unknown, undefined>\n\n\tconstructor(config: NavigationConfig) {\n\t\tthis.config = config\n\t\tthis.publicApiClient = this.createPublicApiClient()\n\t\tthis.authorizedApiClient = this.createAuthorizedApiClient()\n\t}\n\n\tprivate createPublicApiClient() {\n\t\treturn wretch(this.config.expertPublicApiUrl).options({ credentials: 'omit' }).errorType('json')\n\t}\n\n\tprivate createAuthorizedApiClient() {\n\t\treturn wretch(this.config.nextgenApiUrl).errorType('json').addon(FormDataAddon)\n\t}\n\n\tgetConfig(): NavigationConfig {\n\t\treturn { ...this.config }\n\t}\n\n\tgetPublicApiClient() {\n\t\treturn this.publicApiClient\n\t}\n\n\tgetAuthorizedApiClient() {\n\t\treturn this.authorizedApiClient\n\t}\n\n\tgetExpertUrl(): string {\n\t\treturn this.config.expertAppUrl\n\t}\n\n\tgetNextgenUrl(): string {\n\t\treturn this.config.nextgenAppUrl\n\t}\n\n\tgetExpertPublicApiUrl(): string {\n\t\treturn this.config.expertPublicApiUrl\n\t}\n\n\tgetNextgenApiUrl(): string {\n\t\treturn this.config.nextgenApiUrl\n\t}\n}\n"],"names":[],"mappings":";;;;;;;AAUO,MAAM,iBAAiB;AAAA,EAK7B,YAAY,QAA0B;AAJ9B;AACA;AACA;AAGP,SAAK,SAAS;AACT,SAAA,kBAAkB,KAAK,sBAAsB;AAC7C,SAAA,sBAAsB,KAAK,0BAA0B;AAAA,EAAA;AAAA,EAGnD,wBAAwB;AAC/B,WAAO,OAAO,KAAK,OAAO,kBAAkB,EAAE,QAAQ,EAAE,aAAa,OAAO,CAAC,EAAE,UAAU,MAAM;AAAA,EAAA;AAAA,EAGxF,4BAA4B;AAC5B,WAAA,OAAO,KAAK,OAAO,aAAa,EAAE,UAAU,MAAM,EAAE,MAAM,aAAa;AAAA,EAAA;AAAA,EAG/E,YAA8B;AACtB,WAAA,EAAE,GAAG,KAAK,OAAO;AAAA,EAAA;AAAA,EAGzB,qBAAqB;AACpB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGb,yBAAyB;AACxB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGb,eAAuB;AACtB,WAAO,KAAK,OAAO;AAAA,EAAA;AAAA,EAGpB,gBAAwB;AACvB,WAAO,KAAK,OAAO;AAAA,EAAA;AAAA,EAGpB,wBAAgC;AAC/B,WAAO,KAAK,OAAO;AAAA,EAAA;AAAA,EAGpB,mBAA2B;AAC1B,WAAO,KAAK,OAAO;AAAA,EAAA;AAErB;;"}
@@ -1,22 +1,46 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { useProfileMenu } from "./harmony107.mjs";
3
- import { TeamMenuItem } from "./harmony82.mjs";
4
- import styles from "./harmony110.mjs";
5
- const TeamSwitch = ({ onSwitchTeam }) => {
6
- const { otherTeams } = useProfileMenu();
7
- if (otherTeams.length === 0) {
8
- return null;
9
- }
10
- return /* @__PURE__ */ jsx(
11
- "div",
12
- {
13
- "data-testid": "sidebar-team-switch",
14
- className: `flex-col items-stretch ${styles.teamsContainer}`,
15
- children: otherTeams.map((team) => /* @__PURE__ */ jsx(TeamMenuItem, { team, onClick: onSwitchTeam, hidePlanLabel: true }, team.id))
16
- }
17
- );
18
- };
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ import wretch from "wretch";
5
+ import FormDataAddon from "wretch/addons/formData";
6
+ class NavigationClient {
7
+ constructor(config) {
8
+ __publicField(this, "config");
9
+ __publicField(this, "publicApiClient");
10
+ __publicField(this, "authorizedApiClient");
11
+ this.config = config;
12
+ this.publicApiClient = this.createPublicApiClient();
13
+ this.authorizedApiClient = this.createAuthorizedApiClient();
14
+ }
15
+ createPublicApiClient() {
16
+ return wretch(this.config.expertPublicApiUrl).options({ credentials: "omit" }).errorType("json");
17
+ }
18
+ createAuthorizedApiClient() {
19
+ return wretch(this.config.nextgenApiUrl).errorType("json").addon(FormDataAddon);
20
+ }
21
+ getConfig() {
22
+ return { ...this.config };
23
+ }
24
+ getPublicApiClient() {
25
+ return this.publicApiClient;
26
+ }
27
+ getAuthorizedApiClient() {
28
+ return this.authorizedApiClient;
29
+ }
30
+ getExpertUrl() {
31
+ return this.config.expertAppUrl;
32
+ }
33
+ getNextgenUrl() {
34
+ return this.config.nextgenAppUrl;
35
+ }
36
+ getExpertPublicApiUrl() {
37
+ return this.config.expertPublicApiUrl;
38
+ }
39
+ getNextgenApiUrl() {
40
+ return this.config.nextgenApiUrl;
41
+ }
42
+ }
19
43
  export {
20
- TeamSwitch
44
+ NavigationClient
21
45
  };
22
46
  //# sourceMappingURL=harmony83.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony83.mjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/TeamSwitch/TeamSwitch.tsx"],"sourcesContent":["import type { SidebarTeam } from '../../../types'\nimport { useProfileMenu } from '../ProfileMenuContext'\nimport { TeamMenuItem } from '../TeamMenuItem/TeamMenuItem'\nimport styles from './TeamSwitch.module.css'\n\ntype TeamSwitchProps = {\n\t/** Callback function triggered when a user selects a different team */\n\tonSwitchTeam: (team: SidebarTeam) => void\n}\n\n/**\n * A component that displays a list of available teams for switching.\n * It automatically excludes the current team from the list and renders\n * nothing if there are no other teams available.\n *\n * Uses the ProfileMenu context to access the list of other teams and\n * renders each team as a TeamMenuItem with click functionality.\n *\n * @example\n * ```tsx\n * <TeamSwitch\n * onSwitchTeam={(team) => {\n * console.log(`Switching to team: ${team.name}`);\n * // Handle team switch logic\n * }}\n * />\n * ```\n *\n * @note This component must be used within a ProfileMenu component\n * as it requires access to the ProfileMenu context.\n */\nexport const TeamSwitch = ({ onSwitchTeam }: TeamSwitchProps) => {\n\tconst { otherTeams } = useProfileMenu()\n\n\tif (otherTeams.length === 0) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tdata-testid=\"sidebar-team-switch\"\n\t\t\tclassName={`flex-col items-stretch ${styles.teamsContainer}`}\n\t\t>\n\t\t\t{otherTeams.map((team) => (\n\t\t\t\t<TeamMenuItem team={team} key={team.id} onClick={onSwitchTeam} hidePlanLabel />\n\t\t\t))}\n\t\t</div>\n\t)\n}\n"],"names":[],"mappings":";;;;AA+BO,MAAM,aAAa,CAAC,EAAE,mBAAoC;AAC1D,QAAA,EAAE,WAAW,IAAI,eAAe;AAElC,MAAA,WAAW,WAAW,GAAG;AACrB,WAAA;AAAA,EAAA;AAIP,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,eAAY;AAAA,MACZ,WAAW,0BAA0B,OAAO,cAAc;AAAA,MAEzD,UAAW,WAAA,IAAI,CAAC,SACf,oBAAA,cAAA,EAAa,MAA0B,SAAS,cAAc,eAAa,KAA7C,GAAA,KAAK,EAAyC,CAC7E;AAAA,IAAA;AAAA,EACF;AAEF;"}
1
+ {"version":3,"file":"harmony83.mjs","sources":["../src/features/navigation/core/NavigationClient.ts"],"sourcesContent":["import wretch, { type Wretch } from 'wretch'\nimport FormDataAddon, { type FormDataAddon as FormDataAddonType } from 'wretch/addons/formData'\n\nexport interface NavigationConfig {\n\texpertAppUrl: string\n\tnextgenAppUrl: string\n\texpertPublicApiUrl: string\n\tnextgenApiUrl: string\n}\n\nexport class NavigationClient {\n\tprivate config: NavigationConfig\n\tprivate publicApiClient: Wretch<unknown, unknown, undefined>\n\tprivate authorizedApiClient: FormDataAddonType & Wretch<FormDataAddonType, unknown, undefined>\n\n\tconstructor(config: NavigationConfig) {\n\t\tthis.config = config\n\t\tthis.publicApiClient = this.createPublicApiClient()\n\t\tthis.authorizedApiClient = this.createAuthorizedApiClient()\n\t}\n\n\tprivate createPublicApiClient() {\n\t\treturn wretch(this.config.expertPublicApiUrl).options({ credentials: 'omit' }).errorType('json')\n\t}\n\n\tprivate createAuthorizedApiClient() {\n\t\treturn wretch(this.config.nextgenApiUrl).errorType('json').addon(FormDataAddon)\n\t}\n\n\tgetConfig(): NavigationConfig {\n\t\treturn { ...this.config }\n\t}\n\n\tgetPublicApiClient() {\n\t\treturn this.publicApiClient\n\t}\n\n\tgetAuthorizedApiClient() {\n\t\treturn this.authorizedApiClient\n\t}\n\n\tgetExpertUrl(): string {\n\t\treturn this.config.expertAppUrl\n\t}\n\n\tgetNextgenUrl(): string {\n\t\treturn this.config.nextgenAppUrl\n\t}\n\n\tgetExpertPublicApiUrl(): string {\n\t\treturn this.config.expertPublicApiUrl\n\t}\n\n\tgetNextgenApiUrl(): string {\n\t\treturn this.config.nextgenApiUrl\n\t}\n}\n"],"names":[],"mappings":";;;;;AAUO,MAAM,iBAAiB;AAAA,EAK7B,YAAY,QAA0B;AAJ9B;AACA;AACA;AAGP,SAAK,SAAS;AACT,SAAA,kBAAkB,KAAK,sBAAsB;AAC7C,SAAA,sBAAsB,KAAK,0BAA0B;AAAA,EAAA;AAAA,EAGnD,wBAAwB;AAC/B,WAAO,OAAO,KAAK,OAAO,kBAAkB,EAAE,QAAQ,EAAE,aAAa,OAAO,CAAC,EAAE,UAAU,MAAM;AAAA,EAAA;AAAA,EAGxF,4BAA4B;AAC5B,WAAA,OAAO,KAAK,OAAO,aAAa,EAAE,UAAU,MAAM,EAAE,MAAM,aAAa;AAAA,EAAA;AAAA,EAG/E,YAA8B;AACtB,WAAA,EAAE,GAAG,KAAK,OAAO;AAAA,EAAA;AAAA,EAGzB,qBAAqB;AACpB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGb,yBAAyB;AACxB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGb,eAAuB;AACtB,WAAO,KAAK,OAAO;AAAA,EAAA;AAAA,EAGpB,gBAAwB;AACvB,WAAO,KAAK,OAAO;AAAA,EAAA;AAAA,EAGpB,wBAAgC;AAC/B,WAAO,KAAK,OAAO;AAAA,EAAA;AAAA,EAGpB,mBAA2B;AAC1B,WAAO,KAAK,OAAO;AAAA,EAAA;AAErB;"}
@@ -1,34 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("react/jsx-runtime");
4
- const louis = require("@lokalise/louis");
5
- const plan = require("./harmony9.cjs");
6
- const UpgradeIcon = require("./harmony111.cjs");
7
- const ProfileMenuContext = require("./harmony107.cjs");
8
- const UpgradeMenuItem_module = require("./harmony112.cjs");
9
- const UpgradeMenuItem = ({ upgradeOptionHref }) => {
10
- const { planId, trialDaysLeft, showUpgradeCta } = ProfileMenuContext.useProfileMenu();
11
- if (!showUpgradeCta) {
12
- return null;
13
- }
14
- const isOnFreePlan = plan.isFreePlan(planId);
15
- const daysNoun = trialDaysLeft === 1 ? "day" : "days";
16
- const ctaMessage = isOnFreePlan ? "Your team is currently on the Free plan" : `Free trial ends in ${trialDaysLeft} ${daysNoun}`;
17
- return /* @__PURE__ */ jsxRuntime.jsxs(
18
- louis.MenuItem,
19
- {
20
- "data-testid": "sidebar-upgrade-menu-item",
21
- href: upgradeOptionHref,
22
- className: `flex-col gap-1 items-start ${UpgradeMenuItem_module.default.container}`,
23
- children: [
24
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: UpgradeMenuItem_module.default.planCta, children: ctaMessage }),
25
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex-row items-center gap-1 ${UpgradeMenuItem_module.default.upgradeIconWrapper}`, children: [
26
- /* @__PURE__ */ jsxRuntime.jsx(UpgradeIcon.UpgradeIcon, {}),
27
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "See upgrade options" })
28
- ] })
29
- ]
30
- }
3
+ const React = require("react");
4
+ const useExpertNavigation = require("./harmony92.cjs");
5
+ const useNextgenNavigation = require("./harmony93.cjs");
6
+ const isLegacyProject = (type) => {
7
+ return type !== "marketing";
8
+ };
9
+ const useNavigation = (activeKey, project, contributorData) => {
10
+ const legacyNavigationItems = useExpertNavigation.useExpertNavigation(
11
+ isLegacyProject(project == null ? void 0 : project.project_type),
12
+ project,
13
+ contributorData
14
+ );
15
+ const newNavigationItems = useNextgenNavigation.useNextgenNavigation(
16
+ activeKey,
17
+ !isLegacyProject(project == null ? void 0 : project.project_type),
18
+ project
31
19
  );
20
+ return React.useMemo(() => {
21
+ if (!project) {
22
+ return [];
23
+ }
24
+ if (isLegacyProject(project.project_type)) {
25
+ return legacyNavigationItems;
26
+ }
27
+ return newNavigationItems;
28
+ }, [project, legacyNavigationItems, newNavigationItems]);
32
29
  };
33
- exports.UpgradeMenuItem = UpgradeMenuItem;
30
+ exports.isLegacyProject = isLegacyProject;
31
+ exports.useNavigation = useNavigation;
34
32
  //# sourceMappingURL=harmony84.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony84.cjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/UpgradeMenuItem/UpgradeMenuItem.tsx"],"sourcesContent":["import { MenuItem } from '@lokalise/louis'\nimport { isFreePlan } from '@utils'\nimport { UpgradeIcon } from '../../../UpgradeIcon/UpgradeIcon'\nimport { useProfileMenu } from '../ProfileMenuContext'\nimport styles from './UpgradeMenuItem.module.css'\n\ntype UpgradeMenuItemProps = {\n\t/** URL to the upgrade page or pricing options */\n\tupgradeOptionHref: string\n}\n\n/**\n * A menu item component that displays upgrade call-to-action information.\n * Only renders when upgrade options should be shown (determined by context).\n *\n * The component displays different messages based on the team's current plan:\n * - For free plans: \"Your team is currently on the Free plan\"\n * - For trial plans: \"Free trial ends in X days\"\n *\n * Includes an upgrade icon and \"See upgrade options\" text, styled to draw attention\n * to the upgrade opportunity.\n *\n * @example\n * ```tsx\n * <UpgradeMenuItem upgradeOptionHref=\"/pricing\" />\n * ```\n *\n * @note This component must be used within a ProfileMenu component\n * as it requires access to the ProfileMenu context for plan information\n * and visibility control.\n */\nexport const UpgradeMenuItem = ({ upgradeOptionHref }: UpgradeMenuItemProps) => {\n\tconst { planId, trialDaysLeft, showUpgradeCta } = useProfileMenu()\n\n\tif (!showUpgradeCta) {\n\t\treturn null\n\t}\n\n\tconst isOnFreePlan = isFreePlan(planId)\n\n\tconst daysNoun = trialDaysLeft === 1 ? 'day' : 'days'\n\tconst ctaMessage = isOnFreePlan\n\t\t? 'Your team is currently on the Free plan'\n\t\t: `Free trial ends in ${trialDaysLeft} ${daysNoun}`\n\n\treturn (\n\t\t<MenuItem\n\t\t\tdata-testid=\"sidebar-upgrade-menu-item\"\n\t\t\thref={upgradeOptionHref}\n\t\t\tclassName={`flex-col gap-1 items-start ${styles.container}`}\n\t\t>\n\t\t\t<span className={styles.planCta}>{ctaMessage}</span>\n\t\t\t<div className={`flex-row items-center gap-1 ${styles.upgradeIconWrapper}`}>\n\t\t\t\t<UpgradeIcon />\n\t\t\t\t<span>See upgrade options</span>\n\t\t\t</div>\n\t\t</MenuItem>\n\t)\n}\n"],"names":["useProfileMenu","isFreePlan","jsxs","MenuItem","styles","jsx","UpgradeIcon"],"mappings":";;;;;;;;AA+BO,MAAM,kBAAkB,CAAC,EAAE,wBAA8C;AAC/E,QAAM,EAAE,QAAQ,eAAe,eAAA,IAAmBA,mBAAAA,eAAe;AAEjE,MAAI,CAAC,gBAAgB;AACb,WAAA;AAAA,EAAA;AAGF,QAAA,eAAeC,gBAAW,MAAM;AAEhC,QAAA,WAAW,kBAAkB,IAAI,QAAQ;AAC/C,QAAM,aAAa,eAChB,4CACA,sBAAsB,aAAa,IAAI,QAAQ;AAGjD,SAAAC,2BAAA;AAAA,IAACC,MAAA;AAAA,IAAA;AAAA,MACA,eAAY;AAAA,MACZ,MAAM;AAAA,MACN,WAAW,8BAA8BC,uBAAA,QAAO,SAAS;AAAA,MAEzD,UAAA;AAAA,QAAAC,2BAAA,IAAC,QAAK,EAAA,WAAWD,uBAAO,QAAA,SAAU,UAAW,YAAA;AAAA,wCAC5C,OAAI,EAAA,WAAW,+BAA+BA,+BAAO,kBAAkB,IACvE,UAAA;AAAA,UAAAC,2BAAA,IAACC,YAAY,aAAA,EAAA;AAAA,UACbD,2BAAAA,IAAC,UAAK,UAAmB,sBAAA,CAAA;AAAA,QAAA,EAC1B,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACD;AAEF;;"}
1
+ {"version":3,"file":"harmony84.cjs","sources":["../src/features/navigation/hooks/useNavigation.ts"],"sourcesContent":["import type { Contributor, Project, ProjectType } from '@features/node'\nimport { useMemo } from 'react'\nimport { useExpertNavigation } from './useExpertNavigation'\nimport { useNextgenNavigation } from './useNextgenNavigation'\n\nexport const isLegacyProject = (type: ProjectType | undefined) => {\n\treturn type !== 'marketing'\n}\n\n/**\n * Main useNavigation hook that serves as an arbiter between legacy and new navigation.\n * It determines which navigation system to use based on project type.\n */\nexport const useNavigation = (\n\tactiveKey: string,\n\tproject?: Project,\n\tcontributorData?: Contributor,\n) => {\n\t// Get navigation items from expert or next-gen system, depending on project type\n\tconst legacyNavigationItems = useExpertNavigation(\n\t\tisLegacyProject(project?.project_type),\n\t\tproject,\n\t\tcontributorData,\n\t)\n\tconst newNavigationItems = useNextgenNavigation(\n\t\tactiveKey,\n\t\t!isLegacyProject(project?.project_type),\n\t\tproject,\n\t)\n\n\t// Determine which navigation items to use based on project type\n\treturn useMemo(() => {\n\t\tif (!project) {\n\t\t\treturn []\n\t\t}\n\t\t// Use legacy navigation for legacy project types\n\t\tif (isLegacyProject(project.project_type)) {\n\t\t\treturn legacyNavigationItems\n\t\t}\n\n\t\t// Use new navigation for new project types\n\t\treturn newNavigationItems\n\t}, [project, legacyNavigationItems, newNavigationItems])\n}\n"],"names":["useExpertNavigation","useNextgenNavigation","useMemo"],"mappings":";;;;;AAKa,MAAA,kBAAkB,CAAC,SAAkC;AACjE,SAAO,SAAS;AACjB;AAMO,MAAM,gBAAgB,CAC5B,WACA,SACA,oBACI;AAEJ,QAAM,wBAAwBA,oBAAA;AAAA,IAC7B,gBAAgB,mCAAS,YAAY;AAAA,IACrC;AAAA,IACA;AAAA,EACD;AACA,QAAM,qBAAqBC,qBAAA;AAAA,IAC1B;AAAA,IACA,CAAC,gBAAgB,mCAAS,YAAY;AAAA,IACtC;AAAA,EACD;AAGA,SAAOC,cAAQ,MAAM;AACpB,QAAI,CAAC,SAAS;AACb,aAAO,CAAC;AAAA,IAAA;AAGL,QAAA,gBAAgB,QAAQ,YAAY,GAAG;AACnC,aAAA;AAAA,IAAA;AAID,WAAA;AAAA,EACL,GAAA,CAAC,SAAS,uBAAuB,kBAAkB,CAAC;AACxD;;;"}
@@ -1,34 +1,32 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { MenuItem } from "@lokalise/louis";
3
- import { isFreePlan } from "./harmony9.mjs";
4
- import { UpgradeIcon } from "./harmony111.mjs";
5
- import { useProfileMenu } from "./harmony107.mjs";
6
- import styles from "./harmony112.mjs";
7
- const UpgradeMenuItem = ({ upgradeOptionHref }) => {
8
- const { planId, trialDaysLeft, showUpgradeCta } = useProfileMenu();
9
- if (!showUpgradeCta) {
10
- return null;
11
- }
12
- const isOnFreePlan = isFreePlan(planId);
13
- const daysNoun = trialDaysLeft === 1 ? "day" : "days";
14
- const ctaMessage = isOnFreePlan ? "Your team is currently on the Free plan" : `Free trial ends in ${trialDaysLeft} ${daysNoun}`;
15
- return /* @__PURE__ */ jsxs(
16
- MenuItem,
17
- {
18
- "data-testid": "sidebar-upgrade-menu-item",
19
- href: upgradeOptionHref,
20
- className: `flex-col gap-1 items-start ${styles.container}`,
21
- children: [
22
- /* @__PURE__ */ jsx("span", { className: styles.planCta, children: ctaMessage }),
23
- /* @__PURE__ */ jsxs("div", { className: `flex-row items-center gap-1 ${styles.upgradeIconWrapper}`, children: [
24
- /* @__PURE__ */ jsx(UpgradeIcon, {}),
25
- /* @__PURE__ */ jsx("span", { children: "See upgrade options" })
26
- ] })
27
- ]
28
- }
1
+ import { useMemo } from "react";
2
+ import { useExpertNavigation } from "./harmony92.mjs";
3
+ import { useNextgenNavigation } from "./harmony93.mjs";
4
+ const isLegacyProject = (type) => {
5
+ return type !== "marketing";
6
+ };
7
+ const useNavigation = (activeKey, project, contributorData) => {
8
+ const legacyNavigationItems = useExpertNavigation(
9
+ isLegacyProject(project == null ? void 0 : project.project_type),
10
+ project,
11
+ contributorData
12
+ );
13
+ const newNavigationItems = useNextgenNavigation(
14
+ activeKey,
15
+ !isLegacyProject(project == null ? void 0 : project.project_type),
16
+ project
29
17
  );
18
+ return useMemo(() => {
19
+ if (!project) {
20
+ return [];
21
+ }
22
+ if (isLegacyProject(project.project_type)) {
23
+ return legacyNavigationItems;
24
+ }
25
+ return newNavigationItems;
26
+ }, [project, legacyNavigationItems, newNavigationItems]);
30
27
  };
31
28
  export {
32
- UpgradeMenuItem
29
+ isLegacyProject,
30
+ useNavigation
33
31
  };
34
32
  //# sourceMappingURL=harmony84.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony84.mjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/UpgradeMenuItem/UpgradeMenuItem.tsx"],"sourcesContent":["import { MenuItem } from '@lokalise/louis'\nimport { isFreePlan } from '@utils'\nimport { UpgradeIcon } from '../../../UpgradeIcon/UpgradeIcon'\nimport { useProfileMenu } from '../ProfileMenuContext'\nimport styles from './UpgradeMenuItem.module.css'\n\ntype UpgradeMenuItemProps = {\n\t/** URL to the upgrade page or pricing options */\n\tupgradeOptionHref: string\n}\n\n/**\n * A menu item component that displays upgrade call-to-action information.\n * Only renders when upgrade options should be shown (determined by context).\n *\n * The component displays different messages based on the team's current plan:\n * - For free plans: \"Your team is currently on the Free plan\"\n * - For trial plans: \"Free trial ends in X days\"\n *\n * Includes an upgrade icon and \"See upgrade options\" text, styled to draw attention\n * to the upgrade opportunity.\n *\n * @example\n * ```tsx\n * <UpgradeMenuItem upgradeOptionHref=\"/pricing\" />\n * ```\n *\n * @note This component must be used within a ProfileMenu component\n * as it requires access to the ProfileMenu context for plan information\n * and visibility control.\n */\nexport const UpgradeMenuItem = ({ upgradeOptionHref }: UpgradeMenuItemProps) => {\n\tconst { planId, trialDaysLeft, showUpgradeCta } = useProfileMenu()\n\n\tif (!showUpgradeCta) {\n\t\treturn null\n\t}\n\n\tconst isOnFreePlan = isFreePlan(planId)\n\n\tconst daysNoun = trialDaysLeft === 1 ? 'day' : 'days'\n\tconst ctaMessage = isOnFreePlan\n\t\t? 'Your team is currently on the Free plan'\n\t\t: `Free trial ends in ${trialDaysLeft} ${daysNoun}`\n\n\treturn (\n\t\t<MenuItem\n\t\t\tdata-testid=\"sidebar-upgrade-menu-item\"\n\t\t\thref={upgradeOptionHref}\n\t\t\tclassName={`flex-col gap-1 items-start ${styles.container}`}\n\t\t>\n\t\t\t<span className={styles.planCta}>{ctaMessage}</span>\n\t\t\t<div className={`flex-row items-center gap-1 ${styles.upgradeIconWrapper}`}>\n\t\t\t\t<UpgradeIcon />\n\t\t\t\t<span>See upgrade options</span>\n\t\t\t</div>\n\t\t</MenuItem>\n\t)\n}\n"],"names":[],"mappings":";;;;;;AA+BO,MAAM,kBAAkB,CAAC,EAAE,wBAA8C;AAC/E,QAAM,EAAE,QAAQ,eAAe,eAAA,IAAmB,eAAe;AAEjE,MAAI,CAAC,gBAAgB;AACb,WAAA;AAAA,EAAA;AAGF,QAAA,eAAe,WAAW,MAAM;AAEhC,QAAA,WAAW,kBAAkB,IAAI,QAAQ;AAC/C,QAAM,aAAa,eAChB,4CACA,sBAAsB,aAAa,IAAI,QAAQ;AAGjD,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,eAAY;AAAA,MACZ,MAAM;AAAA,MACN,WAAW,8BAA8B,OAAO,SAAS;AAAA,MAEzD,UAAA;AAAA,QAAA,oBAAC,QAAK,EAAA,WAAW,OAAO,SAAU,UAAW,YAAA;AAAA,6BAC5C,OAAI,EAAA,WAAW,+BAA+B,OAAO,kBAAkB,IACvE,UAAA;AAAA,UAAA,oBAAC,aAAY,EAAA;AAAA,UACb,oBAAC,UAAK,UAAmB,sBAAA,CAAA;AAAA,QAAA,EAC1B,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACD;AAEF;"}
1
+ {"version":3,"file":"harmony84.mjs","sources":["../src/features/navigation/hooks/useNavigation.ts"],"sourcesContent":["import type { Contributor, Project, ProjectType } from '@features/node'\nimport { useMemo } from 'react'\nimport { useExpertNavigation } from './useExpertNavigation'\nimport { useNextgenNavigation } from './useNextgenNavigation'\n\nexport const isLegacyProject = (type: ProjectType | undefined) => {\n\treturn type !== 'marketing'\n}\n\n/**\n * Main useNavigation hook that serves as an arbiter between legacy and new navigation.\n * It determines which navigation system to use based on project type.\n */\nexport const useNavigation = (\n\tactiveKey: string,\n\tproject?: Project,\n\tcontributorData?: Contributor,\n) => {\n\t// Get navigation items from expert or next-gen system, depending on project type\n\tconst legacyNavigationItems = useExpertNavigation(\n\t\tisLegacyProject(project?.project_type),\n\t\tproject,\n\t\tcontributorData,\n\t)\n\tconst newNavigationItems = useNextgenNavigation(\n\t\tactiveKey,\n\t\t!isLegacyProject(project?.project_type),\n\t\tproject,\n\t)\n\n\t// Determine which navigation items to use based on project type\n\treturn useMemo(() => {\n\t\tif (!project) {\n\t\t\treturn []\n\t\t}\n\t\t// Use legacy navigation for legacy project types\n\t\tif (isLegacyProject(project.project_type)) {\n\t\t\treturn legacyNavigationItems\n\t\t}\n\n\t\t// Use new navigation for new project types\n\t\treturn newNavigationItems\n\t}, [project, legacyNavigationItems, newNavigationItems])\n}\n"],"names":[],"mappings":";;;AAKa,MAAA,kBAAkB,CAAC,SAAkC;AACjE,SAAO,SAAS;AACjB;AAMO,MAAM,gBAAgB,CAC5B,WACA,SACA,oBACI;AAEJ,QAAM,wBAAwB;AAAA,IAC7B,gBAAgB,mCAAS,YAAY;AAAA,IACrC;AAAA,IACA;AAAA,EACD;AACA,QAAM,qBAAqB;AAAA,IAC1B;AAAA,IACA,CAAC,gBAAgB,mCAAS,YAAY;AAAA,IACtC;AAAA,EACD;AAGA,SAAO,QAAQ,MAAM;AACpB,QAAI,CAAC,SAAS;AACb,aAAO,CAAC;AAAA,IAAA;AAGL,QAAA,gBAAgB,QAAQ,YAAY,GAAG;AACnC,aAAA;AAAA,IAAA;AAID,WAAA;AAAA,EACL,GAAA,CAAC,SAAS,uBAAuB,kBAAkB,CAAC;AACxD;"}