@lokalise/harmony 1.37.0 → 1.37.1-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 (352) hide show
  1. package/dist/harmony.css +110 -317
  2. package/dist/harmony100.cjs +10 -6
  3. package/dist/harmony100.cjs.map +1 -1
  4. package/dist/harmony100.mjs +9 -5
  5. package/dist/harmony100.mjs.map +1 -1
  6. package/dist/harmony101.cjs +22 -14
  7. package/dist/harmony101.cjs.map +1 -1
  8. package/dist/harmony101.mjs +24 -16
  9. package/dist/harmony101.mjs.map +1 -1
  10. package/dist/harmony102.cjs +14 -12
  11. package/dist/harmony102.cjs.map +1 -1
  12. package/dist/harmony102.mjs +13 -11
  13. package/dist/harmony102.mjs.map +1 -1
  14. package/dist/harmony103.cjs +34 -96
  15. package/dist/harmony103.cjs.map +1 -1
  16. package/dist/harmony103.mjs +34 -79
  17. package/dist/harmony103.mjs.map +1 -1
  18. package/dist/harmony104.cjs +12 -12
  19. package/dist/harmony104.cjs.map +1 -1
  20. package/dist/harmony104.mjs +12 -12
  21. package/dist/harmony104.mjs.map +1 -1
  22. package/dist/harmony105.cjs +22 -18
  23. package/dist/harmony105.cjs.map +1 -1
  24. package/dist/harmony105.mjs +22 -18
  25. package/dist/harmony105.mjs.map +1 -1
  26. package/dist/harmony106.cjs +35 -21
  27. package/dist/harmony106.cjs.map +1 -1
  28. package/dist/harmony106.mjs +34 -20
  29. package/dist/harmony106.mjs.map +1 -1
  30. package/dist/harmony107.cjs +21 -6
  31. package/dist/harmony107.cjs.map +1 -1
  32. package/dist/harmony107.mjs +20 -5
  33. package/dist/harmony107.mjs.map +1 -1
  34. package/dist/harmony108.cjs +19 -130
  35. package/dist/harmony108.cjs.map +1 -1
  36. package/dist/harmony108.mjs +19 -130
  37. package/dist/harmony108.mjs.map +1 -1
  38. package/dist/harmony109.cjs +3 -9
  39. package/dist/harmony109.cjs.map +1 -1
  40. package/dist/harmony109.mjs +3 -9
  41. package/dist/harmony109.mjs.map +1 -1
  42. package/dist/harmony110.cjs +16 -6
  43. package/dist/harmony110.cjs.map +1 -1
  44. package/dist/harmony110.mjs +15 -5
  45. package/dist/harmony110.mjs.map +1 -1
  46. package/dist/harmony111.cjs +6 -41
  47. package/dist/harmony111.cjs.map +1 -1
  48. package/dist/harmony111.mjs +5 -40
  49. package/dist/harmony111.mjs.map +1 -1
  50. package/dist/harmony112.cjs +6 -61
  51. package/dist/harmony112.cjs.map +1 -1
  52. package/dist/harmony112.mjs +5 -60
  53. package/dist/harmony112.mjs.map +1 -1
  54. package/dist/harmony113.cjs +9 -7
  55. package/dist/harmony113.cjs.map +1 -1
  56. package/dist/harmony113.mjs +8 -6
  57. package/dist/harmony113.mjs.map +1 -1
  58. package/dist/harmony114.cjs +3 -3
  59. package/dist/harmony114.mjs +3 -3
  60. package/dist/harmony115.cjs +9 -5
  61. package/dist/harmony115.cjs.map +1 -1
  62. package/dist/harmony115.mjs +9 -5
  63. package/dist/harmony115.mjs.map +1 -1
  64. package/dist/harmony116.cjs +24 -5
  65. package/dist/harmony116.cjs.map +1 -1
  66. package/dist/harmony116.mjs +24 -5
  67. package/dist/harmony116.mjs.map +1 -1
  68. package/dist/harmony117.cjs +7 -97
  69. package/dist/harmony117.cjs.map +1 -1
  70. package/dist/harmony117.mjs +6 -96
  71. package/dist/harmony117.mjs.map +1 -1
  72. package/dist/harmony118.cjs +13 -14
  73. package/dist/harmony118.cjs.map +1 -1
  74. package/dist/harmony118.mjs +12 -13
  75. package/dist/harmony118.mjs.map +1 -1
  76. package/dist/harmony119.cjs +7 -15
  77. package/dist/harmony119.cjs.map +1 -1
  78. package/dist/harmony119.mjs +6 -14
  79. package/dist/harmony119.mjs.map +1 -1
  80. package/dist/harmony120.cjs +94 -34
  81. package/dist/harmony120.cjs.map +1 -1
  82. package/dist/harmony120.mjs +94 -34
  83. package/dist/harmony120.mjs.map +1 -1
  84. package/dist/harmony121.cjs +11 -26
  85. package/dist/harmony121.cjs.map +1 -1
  86. package/dist/harmony121.mjs +11 -26
  87. package/dist/harmony121.mjs.map +1 -1
  88. package/dist/harmony122.cjs +12 -60
  89. package/dist/harmony122.cjs.map +1 -1
  90. package/dist/harmony122.mjs +12 -60
  91. package/dist/harmony122.mjs.map +1 -1
  92. package/dist/harmony123.cjs +36 -88
  93. package/dist/harmony123.cjs.map +1 -1
  94. package/dist/harmony123.mjs +36 -88
  95. package/dist/harmony123.mjs.map +1 -1
  96. package/dist/harmony124.cjs +29 -19
  97. package/dist/harmony124.cjs.map +1 -1
  98. package/dist/harmony124.mjs +28 -18
  99. package/dist/harmony124.mjs.map +1 -1
  100. package/dist/harmony125.cjs +1 -1
  101. package/dist/harmony125.mjs +1 -1
  102. package/dist/harmony126.cjs +1 -1
  103. package/dist/harmony126.mjs +1 -1
  104. package/dist/harmony127.cjs +2 -2
  105. package/dist/harmony127.mjs +2 -2
  106. package/dist/harmony128.cjs +11 -7
  107. package/dist/harmony128.cjs.map +1 -1
  108. package/dist/harmony128.mjs +11 -7
  109. package/dist/harmony128.mjs.map +1 -1
  110. package/dist/harmony129.cjs +15 -56
  111. package/dist/harmony129.cjs.map +1 -1
  112. package/dist/harmony129.mjs +15 -56
  113. package/dist/harmony129.mjs.map +1 -1
  114. package/dist/harmony13.cjs +1 -1
  115. package/dist/harmony13.mjs +1 -1
  116. package/dist/harmony130.cjs +20 -59
  117. package/dist/harmony130.cjs.map +1 -1
  118. package/dist/harmony130.mjs +20 -59
  119. package/dist/harmony130.mjs.map +1 -1
  120. package/dist/harmony131.cjs +13 -19
  121. package/dist/harmony131.cjs.map +1 -1
  122. package/dist/harmony131.mjs +12 -18
  123. package/dist/harmony131.mjs.map +1 -1
  124. package/dist/harmony132.cjs +5 -10
  125. package/dist/harmony132.cjs.map +1 -1
  126. package/dist/harmony132.mjs +5 -10
  127. package/dist/harmony132.mjs.map +1 -1
  128. package/dist/harmony133.cjs +11 -15
  129. package/dist/harmony133.cjs.map +1 -1
  130. package/dist/harmony133.mjs +11 -15
  131. package/dist/harmony133.mjs.map +1 -1
  132. package/dist/harmony134.cjs +28 -17
  133. package/dist/harmony134.cjs.map +1 -1
  134. package/dist/harmony134.mjs +28 -17
  135. package/dist/harmony134.mjs.map +1 -1
  136. package/dist/harmony135.cjs +12 -10
  137. package/dist/harmony135.cjs.map +1 -1
  138. package/dist/harmony135.mjs +12 -10
  139. package/dist/harmony135.mjs.map +1 -1
  140. package/dist/harmony16.cjs +1 -1
  141. package/dist/harmony16.mjs +1 -1
  142. package/dist/harmony23.cjs +1 -1
  143. package/dist/harmony23.mjs +1 -1
  144. package/dist/harmony24.cjs +1 -1
  145. package/dist/harmony24.mjs +1 -1
  146. package/dist/harmony4.cjs +15 -24
  147. package/dist/harmony4.cjs.map +1 -1
  148. package/dist/harmony4.mjs +15 -24
  149. package/dist/harmony4.mjs.map +1 -1
  150. package/dist/harmony5.cjs +1 -1
  151. package/dist/harmony5.mjs +1 -1
  152. package/dist/harmony6.cjs +3 -3
  153. package/dist/harmony6.mjs +3 -3
  154. package/dist/harmony7.cjs +1 -1
  155. package/dist/harmony7.mjs +1 -1
  156. package/dist/harmony72.cjs +1 -1
  157. package/dist/harmony72.mjs +1 -1
  158. package/dist/harmony73.cjs +51 -6
  159. package/dist/harmony73.cjs.map +1 -1
  160. package/dist/harmony73.mjs +50 -5
  161. package/dist/harmony73.mjs.map +1 -1
  162. package/dist/harmony74.cjs +38 -8
  163. package/dist/harmony74.cjs.map +1 -1
  164. package/dist/harmony74.mjs +39 -9
  165. package/dist/harmony74.mjs.map +1 -1
  166. package/dist/harmony75.cjs +9 -18
  167. package/dist/harmony75.cjs.map +1 -1
  168. package/dist/harmony75.mjs +8 -17
  169. package/dist/harmony75.mjs.map +1 -1
  170. package/dist/harmony76.cjs +6 -21
  171. package/dist/harmony76.cjs.map +1 -1
  172. package/dist/harmony76.mjs +8 -23
  173. package/dist/harmony76.mjs.map +1 -1
  174. package/dist/harmony77.cjs +28 -4
  175. package/dist/harmony77.cjs.map +1 -1
  176. package/dist/harmony77.mjs +28 -4
  177. package/dist/harmony77.mjs.map +1 -1
  178. package/dist/harmony78.cjs +3 -32
  179. package/dist/harmony78.cjs.map +1 -1
  180. package/dist/harmony78.mjs +3 -32
  181. package/dist/harmony78.mjs.map +1 -1
  182. package/dist/harmony79.cjs +30 -29
  183. package/dist/harmony79.cjs.map +1 -1
  184. package/dist/harmony79.mjs +31 -30
  185. package/dist/harmony79.mjs.map +1 -1
  186. package/dist/harmony80.cjs +25 -17
  187. package/dist/harmony80.cjs.map +1 -1
  188. package/dist/harmony80.mjs +25 -17
  189. package/dist/harmony80.mjs.map +1 -1
  190. package/dist/harmony81.cjs +3 -31
  191. package/dist/harmony81.cjs.map +1 -1
  192. package/dist/harmony81.mjs +3 -31
  193. package/dist/harmony81.mjs.map +1 -1
  194. package/dist/harmony82.cjs +12 -53
  195. package/dist/harmony82.cjs.map +1 -1
  196. package/dist/harmony82.mjs +14 -55
  197. package/dist/harmony82.mjs.map +1 -1
  198. package/dist/harmony83.cjs +75 -9
  199. package/dist/harmony83.cjs.map +1 -1
  200. package/dist/harmony83.mjs +74 -8
  201. package/dist/harmony83.mjs.map +1 -1
  202. package/dist/harmony84.cjs +11 -7
  203. package/dist/harmony84.cjs.map +1 -1
  204. package/dist/harmony84.mjs +12 -8
  205. package/dist/harmony84.mjs.map +1 -1
  206. package/dist/harmony85.cjs +29 -28
  207. package/dist/harmony85.cjs.map +1 -1
  208. package/dist/harmony85.mjs +29 -28
  209. package/dist/harmony85.mjs.map +1 -1
  210. package/dist/harmony86.cjs +9 -3
  211. package/dist/harmony86.cjs.map +1 -1
  212. package/dist/harmony86.mjs +9 -3
  213. package/dist/harmony86.mjs.map +1 -1
  214. package/dist/harmony87.cjs +42 -28
  215. package/dist/harmony87.cjs.map +1 -1
  216. package/dist/harmony87.mjs +44 -30
  217. package/dist/harmony87.mjs.map +1 -1
  218. package/dist/harmony88.cjs +9 -12
  219. package/dist/harmony88.cjs.map +1 -1
  220. package/dist/harmony88.mjs +8 -11
  221. package/dist/harmony88.mjs.map +1 -1
  222. package/dist/harmony89.cjs +12 -13
  223. package/dist/harmony89.cjs.map +1 -1
  224. package/dist/harmony89.mjs +11 -12
  225. package/dist/harmony89.mjs.map +1 -1
  226. package/dist/harmony90.cjs +22 -12
  227. package/dist/harmony90.cjs.map +1 -1
  228. package/dist/harmony90.mjs +21 -11
  229. package/dist/harmony90.mjs.map +1 -1
  230. package/dist/harmony91.cjs +12 -21
  231. package/dist/harmony91.cjs.map +1 -1
  232. package/dist/harmony91.mjs +11 -20
  233. package/dist/harmony91.mjs.map +1 -1
  234. package/dist/harmony92.cjs +9 -3
  235. package/dist/harmony92.cjs.map +1 -1
  236. package/dist/harmony92.mjs +9 -3
  237. package/dist/harmony92.mjs.map +1 -1
  238. package/dist/harmony93.cjs +99 -9
  239. package/dist/harmony93.cjs.map +1 -1
  240. package/dist/harmony93.mjs +81 -8
  241. package/dist/harmony93.mjs.map +1 -1
  242. package/dist/harmony94.cjs +14 -9
  243. package/dist/harmony94.cjs.map +1 -1
  244. package/dist/harmony94.mjs +13 -8
  245. package/dist/harmony94.mjs.map +1 -1
  246. package/dist/harmony95.cjs +20 -57
  247. package/dist/harmony95.cjs.map +1 -1
  248. package/dist/harmony95.mjs +20 -57
  249. package/dist/harmony95.mjs.map +1 -1
  250. package/dist/harmony96.cjs +9 -42
  251. package/dist/harmony96.cjs.map +1 -1
  252. package/dist/harmony96.mjs +8 -41
  253. package/dist/harmony96.mjs.map +1 -1
  254. package/dist/harmony97.cjs +14 -5
  255. package/dist/harmony97.cjs.map +1 -1
  256. package/dist/harmony97.mjs +14 -5
  257. package/dist/harmony97.mjs.map +1 -1
  258. package/dist/harmony98.cjs +17 -9
  259. package/dist/harmony98.cjs.map +1 -1
  260. package/dist/harmony98.mjs +16 -8
  261. package/dist/harmony98.mjs.map +1 -1
  262. package/dist/harmony99.cjs +21 -24
  263. package/dist/harmony99.cjs.map +1 -1
  264. package/dist/harmony99.mjs +20 -23
  265. package/dist/harmony99.mjs.map +1 -1
  266. package/dist/types/src/components/Sidebar/Sidebar.d.ts +15 -49
  267. package/dist/types/src/components/Sidebar/SidebarContent/SidebarContent.d.ts +7 -0
  268. package/dist/types/src/components/Sidebar/SidebarContext.d.ts +3 -0
  269. package/dist/types/src/components/Sidebar/SidebarProvider.d.ts +3 -0
  270. package/dist/types/src/components/Sidebar/Widgets/Avatar/Avatar.d.ts +5 -0
  271. package/dist/types/src/components/Sidebar/Widgets/HelpMenu/HelpMenu.d.ts +13 -0
  272. package/dist/types/src/components/Sidebar/Widgets/HelpMenu/HelpMenu.test.d.ts +1 -0
  273. package/dist/types/src/components/Sidebar/Widgets/IconLink/IconLink.test.d.ts +1 -0
  274. package/dist/types/src/components/Sidebar/Widgets/Menu/Menu.d.ts +3 -2
  275. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/BillingMenuItem/BillingMenuItem.d.ts +13 -0
  276. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/CreateNewTeam/CreateNewTeam.d.ts +17 -0
  277. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/CreateNewTeam/CreateNewTeam.test.d.ts +1 -0
  278. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/CreateNewTeamPlaceholder/CreateNewTeamPlaceholder.d.ts +17 -0
  279. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/CreateNewTeamPlaceholder/CreateNewTeamPlaceholder.test.d.ts +1 -0
  280. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/DarkModeToggle/DarkModeToggle.d.ts +18 -0
  281. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileMenu.d.ts +11 -24
  282. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileMenu.stories.d.ts +3 -5
  283. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileSettingsMenuItem/ProfileSettingsMenuItem.d.ts +10 -35
  284. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileSettingsMenuItem/ProfileSettingsMenuItem.test.d.ts +1 -0
  285. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProviderMenuItem/ProviderMenuItem.d.ts +13 -0
  286. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProviderMenuItem/ProviderMenuItem.test.d.ts +1 -0
  287. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamMenuItem/TeamMenuItem.d.ts +1 -3
  288. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamMenuItem/TeamMenuItem.test.d.ts +1 -0
  289. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamSettingsMenuItem/TeamSettingsMenuItem.d.ts +13 -0
  290. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamSettingsMenuItem/TeamSettingsMenuItem.test.d.ts +1 -0
  291. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamSwitch/TeamSwitch.d.ts +5 -7
  292. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamSwitch/TeamSwitch.test.d.ts +1 -0
  293. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/UpgradeMenuItem/UpgradeMenuItem.d.ts +6 -9
  294. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/UpgradeMenuItem/UpgradeMenuItem.test.d.ts +1 -0
  295. package/dist/types/src/components/Sidebar/Widgets/Tasks/utils/content.d.ts +4 -0
  296. package/dist/types/src/components/Sidebar/hooks/useSidebar.d.ts +1 -0
  297. package/dist/types/src/components/Sidebar/hooks/useSidebarDataLoader.d.ts +5 -0
  298. package/dist/types/src/components/Sidebar/types.d.ts +72 -0
  299. package/dist/types/src/features/auth/core/types/jwtTokenPayload.d.ts +16 -10
  300. package/dist/types/src/features/auth/core/types/jwtTokenPayload.fixture.d.ts +15 -11
  301. package/dist/types/src/features/auth/frontend/hooks/useAuthenticatedSessionPayload.d.ts +7 -5
  302. package/dist/types/src/features/auth/frontend/hooks/useAuthenticatedUser.d.ts +1 -1
  303. package/dist/types/src/features/publicApi/hooks/useCreateProjectMutation.d.ts +1 -1
  304. package/dist/types/src/features/publicApi/hooks/useGetProjectPermissionMetaQuery.d.ts +2 -2
  305. package/dist/types/src/features/publicApi/hooks/useGetTeamUsersQuery.d.ts +1 -1
  306. package/dist/types/src/features/publicApi/hooks/useListPermissionTemplates.d.ts +1 -1
  307. package/dist/types/src/features/publicApi/hooks/useListProjectsQuery.d.ts +1 -1
  308. package/dist/types/src/features/publicApi/hooks/useListTeamUsersQuery.d.ts +1 -1
  309. package/dist/types/src/features/publicApi/hooks/useRetrieveProjectQuery.d.ts +1 -1
  310. package/dist/types/src/features/publicApi/hooks/useUpdateProjectMutation.d.ts +1 -1
  311. package/dist/types/src/features/publicApi/permissionTemplates.d.ts +4 -4
  312. package/dist/types/src/features/publicApi/projects.d.ts +18 -18
  313. package/dist/types/src/features/publicApi/teamUsers.d.ts +8 -8
  314. package/dist/types/src/features/publicApi/types/permissionTemplateTypes.d.ts +6 -6
  315. package/dist/types/src/features/publicApi/types/permissionTypes.d.ts +2 -2
  316. package/dist/types/src/features/publicApi/types/projectTypes.d.ts +18 -18
  317. package/dist/types/src/features/publicApi/types/teamUserTypes.d.ts +10 -10
  318. package/dist/types/src/utils/user/permissions.d.ts +9 -0
  319. package/dist/types/src/utils/user/permissions.test.d.ts +1 -0
  320. package/dist/types/tests/mocks/sidebar/sidebar.d.ts +19 -0
  321. package/dist/types/tests/utils/sidebar.d.ts +4 -0
  322. package/package.json +1 -1
  323. package/dist/harmony136.cjs +0 -9
  324. package/dist/harmony136.cjs.map +0 -1
  325. package/dist/harmony136.mjs +0 -9
  326. package/dist/harmony136.mjs.map +0 -1
  327. package/dist/harmony137.cjs +0 -15
  328. package/dist/harmony137.cjs.map +0 -1
  329. package/dist/harmony137.mjs +0 -15
  330. package/dist/harmony137.mjs.map +0 -1
  331. package/dist/harmony138.cjs +0 -35
  332. package/dist/harmony138.cjs.map +0 -1
  333. package/dist/harmony138.mjs +0 -35
  334. package/dist/harmony138.mjs.map +0 -1
  335. package/dist/harmony139.cjs +0 -17
  336. package/dist/harmony139.cjs.map +0 -1
  337. package/dist/harmony139.mjs +0 -17
  338. package/dist/harmony139.mjs.map +0 -1
  339. package/dist/harmony140.cjs +0 -49
  340. package/dist/harmony140.cjs.map +0 -1
  341. package/dist/harmony140.mjs +0 -49
  342. package/dist/harmony140.mjs.map +0 -1
  343. package/dist/harmony141.cjs +0 -15
  344. package/dist/harmony141.cjs.map +0 -1
  345. package/dist/harmony141.mjs +0 -15
  346. package/dist/harmony141.mjs.map +0 -1
  347. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileMenuContent.d.ts +0 -6
  348. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileMenuContext.d.ts +0 -3
  349. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileMenuProvider.d.ts +0 -7
  350. package/dist/types/src/components/Sidebar/utils/index.d.ts +0 -4
  351. /package/dist/types/src/components/Sidebar/Widgets/{ProfileMenu/ProfileMenu.test.d.ts → Avatar/Avatar.test.d.ts} +0 -0
  352. /package/dist/types/src/components/Sidebar/{UpgradeIcon → Widgets/ProfileMenu/UpgradeIcon}/UpgradeIcon.d.ts +0 -0
@@ -1,15 +1,17 @@
1
1
  "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const container = "_container_1u995_1";
4
- const planCta = "_planCta_1u995_15";
5
- const upgradeIconWrapper = "_upgradeIconWrapper_1u995_19";
6
- const styles = {
7
- container,
8
- planCta,
9
- upgradeIconWrapper
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const useSidebar = require("./harmony84.cjs");
5
+ const louis = require("@lokalise/louis");
6
+ const permissions = require("./harmony85.cjs");
7
+ const ProviderMenuItem = () => {
8
+ const {
9
+ data: { jwt }
10
+ } = useSidebar.useSidebar();
11
+ if (!permissions.canAccessProviderDashboard(jwt.result)) {
12
+ return null;
13
+ }
14
+ return /* @__PURE__ */ jsxRuntime.jsx(louis.MenuItem, { href: "/provider", children: "Provider dashboard" });
10
15
  };
11
- exports.container = container;
12
- exports.default = styles;
13
- exports.planCta = planCta;
14
- exports.upgradeIconWrapper = upgradeIconWrapper;
16
+ exports.ProviderMenuItem = ProviderMenuItem;
15
17
  //# sourceMappingURL=harmony102.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony102.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"harmony102.cjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/ProviderMenuItem/ProviderMenuItem.tsx"],"sourcesContent":["import { useSidebar } from '@components/Sidebar/hooks/useSidebar'\nimport { MenuItem } from '@lokalise/louis'\nimport { canAccessProviderDashboard } from '@utils/user/permissions'\n\n/**\n * A menu item component for navigating to the provider dashboard.\n * It checks the current user's permissions using the Sidebar context\n * and renders nothing if the user does not have access.\n *\n * @example\n * ```\n * <ProviderMenuItem />\n * ```\n *\n * @note This component must be used within a Sidebar Context.\n */\n\nexport const ProviderMenuItem = () => {\n\tconst {\n\t\tdata: { jwt },\n\t} = useSidebar()\n\n\tif (!canAccessProviderDashboard(jwt.result)) {\n\t\treturn null\n\t}\n\n\treturn <MenuItem href=\"/provider\">Provider dashboard</MenuItem>\n}\n"],"names":["useSidebar","canAccessProviderDashboard","jsx","MenuItem"],"mappings":";;;;;;AAiBO,MAAM,mBAAmB,MAAM;AAC/B,QAAA;AAAA,IACL,MAAM,EAAE,IAAI;AAAA,MACTA,sBAAW;AAEf,MAAI,CAACC,YAAA,2BAA2B,IAAI,MAAM,GAAG;AACrC,WAAA;AAAA,EAAA;AAGR,SAAQC,2BAAAA,IAAAC,MAAAA,UAAA,EAAS,MAAK,aAAY,UAAkB,sBAAA;AACrD;;"}
@@ -1,15 +1,17 @@
1
- const container = "_container_1u995_1";
2
- const planCta = "_planCta_1u995_15";
3
- const upgradeIconWrapper = "_upgradeIconWrapper_1u995_19";
4
- const styles = {
5
- container,
6
- planCta,
7
- upgradeIconWrapper
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useSidebar } from "./harmony84.mjs";
3
+ import { MenuItem } from "@lokalise/louis";
4
+ import { canAccessProviderDashboard } from "./harmony85.mjs";
5
+ const ProviderMenuItem = () => {
6
+ const {
7
+ data: { jwt }
8
+ } = useSidebar();
9
+ if (!canAccessProviderDashboard(jwt.result)) {
10
+ return null;
11
+ }
12
+ return /* @__PURE__ */ jsx(MenuItem, { href: "/provider", children: "Provider dashboard" });
8
13
  };
9
14
  export {
10
- container,
11
- styles as default,
12
- planCta,
13
- upgradeIconWrapper
15
+ ProviderMenuItem
14
16
  };
15
17
  //# sourceMappingURL=harmony102.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony102.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"harmony102.mjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/ProviderMenuItem/ProviderMenuItem.tsx"],"sourcesContent":["import { useSidebar } from '@components/Sidebar/hooks/useSidebar'\nimport { MenuItem } from '@lokalise/louis'\nimport { canAccessProviderDashboard } from '@utils/user/permissions'\n\n/**\n * A menu item component for navigating to the provider dashboard.\n * It checks the current user's permissions using the Sidebar context\n * and renders nothing if the user does not have access.\n *\n * @example\n * ```\n * <ProviderMenuItem />\n * ```\n *\n * @note This component must be used within a Sidebar Context.\n */\n\nexport const ProviderMenuItem = () => {\n\tconst {\n\t\tdata: { jwt },\n\t} = useSidebar()\n\n\tif (!canAccessProviderDashboard(jwt.result)) {\n\t\treturn null\n\t}\n\n\treturn <MenuItem href=\"/provider\">Provider dashboard</MenuItem>\n}\n"],"names":[],"mappings":";;;;AAiBO,MAAM,mBAAmB,MAAM;AAC/B,QAAA;AAAA,IACL,MAAM,EAAE,IAAI;AAAA,MACT,WAAW;AAEf,MAAI,CAAC,2BAA2B,IAAI,MAAM,GAAG;AACrC,WAAA;AAAA,EAAA;AAGR,SAAQ,oBAAA,UAAA,EAAS,MAAK,aAAY,UAAkB,sBAAA;AACrD;"}
@@ -1,102 +1,40 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const React = require("react");
4
- const debounce = require("./harmony115.cjs");
5
- const throttle = require("./harmony116.cjs");
6
- function _interopNamespaceDefault(e) {
7
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
8
- if (e) {
9
- for (const k in e) {
10
- if (k !== "default") {
11
- const d = Object.getOwnPropertyDescriptor(e, k);
12
- Object.defineProperty(n, k, d.get ? d : {
13
- enumerable: true,
14
- get: () => e[k]
15
- });
16
- }
17
- }
18
- }
19
- n.default = e;
20
- return Object.freeze(n);
21
- }
22
- const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
23
- const patchResizeCallback = (resizeCallback, refreshMode, refreshRate, refreshOptions) => {
24
- switch (refreshMode) {
25
- case "debounce":
26
- return debounce.default(resizeCallback, refreshRate, refreshOptions);
27
- case "throttle":
28
- return throttle.default(resizeCallback, refreshRate, refreshOptions);
29
- default:
30
- return resizeCallback;
31
- }
32
- };
33
- const useCallbackRef = (
34
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
- (callback) => {
36
- const callbackRef = React__namespace.useRef(callback);
37
- React__namespace.useEffect(() => {
38
- callbackRef.current = callback;
39
- });
40
- return React__namespace.useMemo(() => (...args) => {
41
- var _a;
42
- return (_a = callbackRef.current) === null || _a === void 0 ? void 0 : _a.call(callbackRef, ...args);
43
- }, []);
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const useSidebar = require("./harmony84.cjs");
5
+ const louis = require("@lokalise/louis");
6
+ const plan = require("./harmony8.cjs");
7
+ const TeamMenuItem_module = require("./harmony116.cjs");
8
+ const TeamMenuItem = ({ team, onClick, hidePlanLabel }) => {
9
+ var _a;
10
+ const {
11
+ data: { currentTeam, jwt }
12
+ } = useSidebar.useSidebar();
13
+ const contextTeam = team || currentTeam.result;
14
+ if (!contextTeam || typeof ((_a = jwt.result) == null ? void 0 : _a.planId) !== "number" || !Number.isFinite(jwt.result.planId)) {
15
+ return null;
44
16
  }
45
- );
46
- const useRefProxy = (
47
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
- (targetRef) => {
49
- const [refElement, setRefElement] = React__namespace.useState((targetRef === null || targetRef === void 0 ? void 0 : targetRef.current) || null);
50
- if (targetRef) {
51
- setTimeout(() => {
52
- if (targetRef.current !== refElement) {
53
- setRefElement(targetRef.current);
54
- }
55
- }, 0);
17
+ const planId = jwt.result.planId;
18
+ const planLabel = plan.isFreePlan(planId) ? "Free" : plan.isTrialPlan(planId) ? "Trial" : void 0;
19
+ const WrapperNode = onClick ? louis.MenuItem : "div";
20
+ return /* @__PURE__ */ jsxRuntime.jsxs(
21
+ WrapperNode,
22
+ {
23
+ "data-testid": "sidebar-team-menu-item",
24
+ className: TeamMenuItem_module.default.wrapper,
25
+ ...onClick && { onClick: () => onClick(contextTeam) },
26
+ children: [
27
+ 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" }) }),
28
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: TeamMenuItem_module.default.teamDetails, children: [
29
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: TeamMenuItem_module.default.planWrapper, children: [
30
+ /* @__PURE__ */ jsxRuntime.jsx("span", { title: contextTeam.name, className: TeamMenuItem_module.default.teamName, children: contextTeam.name }),
31
+ planLabel && !hidePlanLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: TeamMenuItem_module.default.teamName, children: planLabel })
32
+ ] }),
33
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: TeamMenuItem_module.default.membership, children: contextTeam.role })
34
+ ] })
35
+ ]
56
36
  }
57
- const refProxy = React__namespace.useMemo(() => new Proxy((node) => {
58
- if (node !== refElement) {
59
- setRefElement(node);
60
- }
61
- }, {
62
- get(target, prop) {
63
- if (prop === "current") {
64
- return refElement;
65
- }
66
- return target[prop];
67
- },
68
- set(target, prop, value) {
69
- if (prop === "current") {
70
- setRefElement(value);
71
- } else {
72
- target[prop] = value;
73
- }
74
- return true;
75
- }
76
- }), [refElement]);
77
- return { refProxy, refElement, setRefElement };
78
- }
79
- );
80
- const getDimensions = (entry, box) => {
81
- if (box === "border-box") {
82
- return {
83
- width: entry.borderBoxSize[0].inlineSize,
84
- height: entry.borderBoxSize[0].blockSize
85
- };
86
- }
87
- if (box === "content-box") {
88
- return {
89
- width: entry.contentBoxSize[0].inlineSize,
90
- height: entry.contentBoxSize[0].blockSize
91
- };
92
- }
93
- return {
94
- width: entry.contentRect.width,
95
- height: entry.contentRect.height
96
- };
37
+ );
97
38
  };
98
- exports.getDimensions = getDimensions;
99
- exports.patchResizeCallback = patchResizeCallback;
100
- exports.useCallbackRef = useCallbackRef;
101
- exports.useRefProxy = useRefProxy;
39
+ exports.TeamMenuItem = TeamMenuItem;
102
40
  //# sourceMappingURL=harmony103.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony103.cjs","sources":["../node_modules/react-resize-detector/build/utils.js"],"sourcesContent":["import * as React from 'react';\nimport debounce from 'lodash/debounce.js';\nimport throttle from 'lodash/throttle.js';\n\n/**\n * Wraps the resize callback with a lodash debounce / throttle based on the refresh mode\n */\nconst patchResizeCallback = (resizeCallback, refreshMode, refreshRate, refreshOptions) => {\n switch (refreshMode) {\n case 'debounce':\n return debounce(resizeCallback, refreshRate, refreshOptions);\n case 'throttle':\n return throttle(resizeCallback, refreshRate, refreshOptions);\n default:\n return resizeCallback;\n }\n};\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nconst useCallbackRef = \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n(callback) => {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => ((...args) => { var _a; return (_a = callbackRef.current) === null || _a === void 0 ? void 0 : _a.call(callbackRef, ...args); }), []);\n};\n/** `useRef` hook doesn't handle conditional rendering or dynamic ref changes.\n * This hook creates a proxy that ensures that `refElement` is updated whenever the ref is changed. */\nconst useRefProxy = \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n(targetRef) => {\n // we are going to use this ref to store the last element that was passed to the hook\n const [refElement, setRefElement] = React.useState((targetRef === null || targetRef === void 0 ? void 0 : targetRef.current) || null);\n // if targetRef is passed, we need to update the refElement\n // we have to use setTimeout because ref get assigned after the hook is called\n // in the future releases we are going to remove targetRef and force users to use ref returned by the hook\n if (targetRef) {\n setTimeout(() => {\n if (targetRef.current !== refElement) {\n setRefElement(targetRef.current);\n }\n }, 0);\n }\n // this is a memo that will be called every time the ref is changed\n // This proxy will properly call setState either when the ref is called as a function or when `.current` is set\n // we call setState inside to trigger rerender\n const refProxy = React.useMemo(() => new Proxy((node) => {\n if (node !== refElement) {\n setRefElement(node);\n }\n }, {\n get(target, prop) {\n if (prop === 'current') {\n return refElement;\n }\n return target[prop];\n },\n set(target, prop, value) {\n if (prop === 'current') {\n setRefElement(value);\n }\n else {\n target[prop] = value;\n }\n return true;\n },\n }), [refElement]);\n return { refProxy, refElement, setRefElement };\n};\n/** Calculates the dimensions of the element based on the current box model.\n * @see https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model\n */\nconst getDimensions = (entry, box) => {\n // Value\t Border\t Padding\t Inner Content\n // ---------------------------------------------------\n // 'border-box'\t Yes\t Yes\t Yes\n // 'content-box'\t No\t No\t Yes\n // undefined No\t No?\t Yes\n if (box === 'border-box') {\n return {\n width: entry.borderBoxSize[0].inlineSize,\n height: entry.borderBoxSize[0].blockSize,\n };\n }\n if (box === 'content-box') {\n return {\n width: entry.contentBoxSize[0].inlineSize,\n height: entry.contentBoxSize[0].blockSize,\n };\n }\n return {\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n };\n};\n\nexport { getDimensions, patchResizeCallback, useCallbackRef, useRefProxy };\n//# sourceMappingURL=utils.js.map\n"],"names":["debounce","throttle","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAOK,MAAC,sBAAsB,CAAC,gBAAgB,aAAa,aAAa,mBAAmB;AACtF,UAAQ,aAAW;AAAA,IACf,KAAK;AACD,aAAOA,iBAAS,gBAAgB,aAAa,cAAc;AAAA,IAC/D,KAAK;AACD,aAAOC,iBAAS,gBAAgB,aAAa,cAAc;AAAA,IAC/D;AACI,aAAO;AAAA,EACnB;AACA;AAKK,MAAC;AAAA;AAAA,EAEN,CAAC,aAAa;AACV,UAAM,cAAcC,iBAAM,OAAO,QAAQ;AACzCA,qBAAM,UAAU,MAAM;AAClB,kBAAY,UAAU;AAAA,IAC9B,CAAK;AACD,WAAOA,iBAAM,QAAQ,MAAO,IAAI,SAAS;AAAE,UAAI;AAAI,cAAQ,KAAK,YAAY,aAAa,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,aAAa,GAAG,IAAI;AAAA,IAAI,GAAG,CAAA,CAAE;AAAA,EACnK;AAAA;AAGK,MAAC;AAAA;AAAA,EAEN,CAAC,cAAc;AAEX,UAAM,CAAC,YAAY,aAAa,IAAIA,iBAAM,UAAU,cAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,YAAY,IAAI;AAIpI,QAAI,WAAW;AACX,iBAAW,MAAM;AACb,YAAI,UAAU,YAAY,YAAY;AAClC,wBAAc,UAAU,OAAO;AAAA,QAC/C;AAAA,MACS,GAAE,CAAC;AAAA,IACZ;AAII,UAAM,WAAWA,iBAAM,QAAQ,MAAM,IAAI,MAAM,CAAC,SAAS;AACrD,UAAI,SAAS,YAAY;AACrB,sBAAc,IAAI;AAAA,MAC9B;AAAA,IACA,GAAO;AAAA,MACC,IAAI,QAAQ,MAAM;AACd,YAAI,SAAS,WAAW;AACpB,iBAAO;AAAA,QACvB;AACY,eAAO,OAAO,IAAI;AAAA,MACrB;AAAA,MACD,IAAI,QAAQ,MAAM,OAAO;AACrB,YAAI,SAAS,WAAW;AACpB,wBAAc,KAAK;AAAA,QACnC,OACiB;AACD,iBAAO,IAAI,IAAI;AAAA,QAC/B;AACY,eAAO;AAAA,MACV;AAAA,IACT,CAAK,GAAG,CAAC,UAAU,CAAC;AAChB,WAAO,EAAE,UAAU,YAAY,cAAe;AAAA,EAClD;AAAA;AAIK,MAAC,gBAAgB,CAAC,OAAO,QAAQ;AAMlC,MAAI,QAAQ,cAAc;AACtB,WAAO;AAAA,MACH,OAAO,MAAM,cAAc,CAAC,EAAE;AAAA,MAC9B,QAAQ,MAAM,cAAc,CAAC,EAAE;AAAA,IAClC;AAAA,EACT;AACI,MAAI,QAAQ,eAAe;AACvB,WAAO;AAAA,MACH,OAAO,MAAM,eAAe,CAAC,EAAE;AAAA,MAC/B,QAAQ,MAAM,eAAe,CAAC,EAAE;AAAA,IACnC;AAAA,EACT;AACI,SAAO;AAAA,IACH,OAAO,MAAM,YAAY;AAAA,IACzB,QAAQ,MAAM,YAAY;AAAA,EAC7B;AACL;;;;;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"harmony103.cjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/TeamMenuItem/TeamMenuItem.tsx"],"sourcesContent":["import { useSidebar } from '@components/Sidebar/hooks/useSidebar'\nimport { MenuItem, UserIcon } from '@lokalise/louis'\nimport { isFreePlan, isTrialPlan } from '@utils'\nimport type { SidebarTeam } from '../../../types'\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 Sidebar Context.\n */\n\nexport const TeamMenuItem = ({ team, onClick, hidePlanLabel }: TeamMenuItemProps) => {\n\tconst {\n\t\tdata: { currentTeam, jwt },\n\t} = useSidebar()\n\n\tconst contextTeam = team || currentTeam.result\n\n\tif (\n\t\t!contextTeam ||\n\t\ttypeof jwt.result?.planId !== 'number' ||\n\t\t!Number.isFinite(jwt.result.planId)\n\t) {\n\t\treturn null\n\t}\n\n\tconst planId = jwt.result.planId\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\tdata-testid=\"sidebar-team-menu-item\"\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":["useSidebar","isFreePlan","isTrialPlan","MenuItem","jsxs","styles","jsx","UserIcon"],"mappings":";;;;;;;AAuCO,MAAM,eAAe,CAAC,EAAE,MAAM,SAAS,oBAAuC;;AAC9E,QAAA;AAAA,IACL,MAAM,EAAE,aAAa,IAAI;AAAA,MACtBA,sBAAW;AAET,QAAA,cAAc,QAAQ,YAAY;AAExC,MACC,CAAC,eACD,SAAO,SAAI,WAAJ,mBAAY,YAAW,YAC9B,CAAC,OAAO,SAAS,IAAI,OAAO,MAAM,GACjC;AACM,WAAA;AAAA,EAAA;AAGF,QAAA,SAAS,IAAI,OAAO;AAEpB,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,eAAY;AAAA,MACZ,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,85 +1,40 @@
1
- import * as React from "react";
2
- import debounce from "./harmony115.mjs";
3
- import throttle from "./harmony116.mjs";
4
- const patchResizeCallback = (resizeCallback, refreshMode, refreshRate, refreshOptions) => {
5
- switch (refreshMode) {
6
- case "debounce":
7
- return debounce(resizeCallback, refreshRate, refreshOptions);
8
- case "throttle":
9
- return throttle(resizeCallback, refreshRate, refreshOptions);
10
- default:
11
- return resizeCallback;
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useSidebar } from "./harmony84.mjs";
3
+ import { MenuItem, UserIcon } from "@lokalise/louis";
4
+ import { isFreePlan, isTrialPlan } from "./harmony8.mjs";
5
+ import styles from "./harmony116.mjs";
6
+ const TeamMenuItem = ({ team, onClick, hidePlanLabel }) => {
7
+ var _a;
8
+ const {
9
+ data: { currentTeam, jwt }
10
+ } = useSidebar();
11
+ const contextTeam = team || currentTeam.result;
12
+ if (!contextTeam || typeof ((_a = jwt.result) == null ? void 0 : _a.planId) !== "number" || !Number.isFinite(jwt.result.planId)) {
13
+ return null;
12
14
  }
13
- };
14
- const useCallbackRef = (
15
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
- (callback) => {
17
- const callbackRef = React.useRef(callback);
18
- React.useEffect(() => {
19
- callbackRef.current = callback;
20
- });
21
- return React.useMemo(() => (...args) => {
22
- var _a;
23
- return (_a = callbackRef.current) === null || _a === void 0 ? void 0 : _a.call(callbackRef, ...args);
24
- }, []);
25
- }
26
- );
27
- const useRefProxy = (
28
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
- (targetRef) => {
30
- const [refElement, setRefElement] = React.useState((targetRef === null || targetRef === void 0 ? void 0 : targetRef.current) || null);
31
- if (targetRef) {
32
- setTimeout(() => {
33
- if (targetRef.current !== refElement) {
34
- setRefElement(targetRef.current);
35
- }
36
- }, 0);
15
+ const planId = jwt.result.planId;
16
+ const planLabel = isFreePlan(planId) ? "Free" : isTrialPlan(planId) ? "Trial" : void 0;
17
+ const WrapperNode = onClick ? MenuItem : "div";
18
+ return /* @__PURE__ */ jsxs(
19
+ WrapperNode,
20
+ {
21
+ "data-testid": "sidebar-team-menu-item",
22
+ className: styles.wrapper,
23
+ ...onClick && { onClick: () => onClick(contextTeam) },
24
+ children: [
25
+ 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" }) }),
26
+ /* @__PURE__ */ jsxs("div", { className: styles.teamDetails, children: [
27
+ /* @__PURE__ */ jsxs("div", { className: styles.planWrapper, children: [
28
+ /* @__PURE__ */ jsx("span", { title: contextTeam.name, className: styles.teamName, children: contextTeam.name }),
29
+ planLabel && !hidePlanLabel && /* @__PURE__ */ jsx("span", { className: styles.teamName, children: planLabel })
30
+ ] }),
31
+ /* @__PURE__ */ jsx("span", { className: styles.membership, children: contextTeam.role })
32
+ ] })
33
+ ]
37
34
  }
38
- const refProxy = React.useMemo(() => new Proxy((node) => {
39
- if (node !== refElement) {
40
- setRefElement(node);
41
- }
42
- }, {
43
- get(target, prop) {
44
- if (prop === "current") {
45
- return refElement;
46
- }
47
- return target[prop];
48
- },
49
- set(target, prop, value) {
50
- if (prop === "current") {
51
- setRefElement(value);
52
- } else {
53
- target[prop] = value;
54
- }
55
- return true;
56
- }
57
- }), [refElement]);
58
- return { refProxy, refElement, setRefElement };
59
- }
60
- );
61
- const getDimensions = (entry, box) => {
62
- if (box === "border-box") {
63
- return {
64
- width: entry.borderBoxSize[0].inlineSize,
65
- height: entry.borderBoxSize[0].blockSize
66
- };
67
- }
68
- if (box === "content-box") {
69
- return {
70
- width: entry.contentBoxSize[0].inlineSize,
71
- height: entry.contentBoxSize[0].blockSize
72
- };
73
- }
74
- return {
75
- width: entry.contentRect.width,
76
- height: entry.contentRect.height
77
- };
35
+ );
78
36
  };
79
37
  export {
80
- getDimensions,
81
- patchResizeCallback,
82
- useCallbackRef,
83
- useRefProxy
38
+ TeamMenuItem
84
39
  };
85
40
  //# sourceMappingURL=harmony103.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony103.mjs","sources":["../node_modules/react-resize-detector/build/utils.js"],"sourcesContent":["import * as React from 'react';\nimport debounce from 'lodash/debounce.js';\nimport throttle from 'lodash/throttle.js';\n\n/**\n * Wraps the resize callback with a lodash debounce / throttle based on the refresh mode\n */\nconst patchResizeCallback = (resizeCallback, refreshMode, refreshRate, refreshOptions) => {\n switch (refreshMode) {\n case 'debounce':\n return debounce(resizeCallback, refreshRate, refreshOptions);\n case 'throttle':\n return throttle(resizeCallback, refreshRate, refreshOptions);\n default:\n return resizeCallback;\n }\n};\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nconst useCallbackRef = \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n(callback) => {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => ((...args) => { var _a; return (_a = callbackRef.current) === null || _a === void 0 ? void 0 : _a.call(callbackRef, ...args); }), []);\n};\n/** `useRef` hook doesn't handle conditional rendering or dynamic ref changes.\n * This hook creates a proxy that ensures that `refElement` is updated whenever the ref is changed. */\nconst useRefProxy = \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n(targetRef) => {\n // we are going to use this ref to store the last element that was passed to the hook\n const [refElement, setRefElement] = React.useState((targetRef === null || targetRef === void 0 ? void 0 : targetRef.current) || null);\n // if targetRef is passed, we need to update the refElement\n // we have to use setTimeout because ref get assigned after the hook is called\n // in the future releases we are going to remove targetRef and force users to use ref returned by the hook\n if (targetRef) {\n setTimeout(() => {\n if (targetRef.current !== refElement) {\n setRefElement(targetRef.current);\n }\n }, 0);\n }\n // this is a memo that will be called every time the ref is changed\n // This proxy will properly call setState either when the ref is called as a function or when `.current` is set\n // we call setState inside to trigger rerender\n const refProxy = React.useMemo(() => new Proxy((node) => {\n if (node !== refElement) {\n setRefElement(node);\n }\n }, {\n get(target, prop) {\n if (prop === 'current') {\n return refElement;\n }\n return target[prop];\n },\n set(target, prop, value) {\n if (prop === 'current') {\n setRefElement(value);\n }\n else {\n target[prop] = value;\n }\n return true;\n },\n }), [refElement]);\n return { refProxy, refElement, setRefElement };\n};\n/** Calculates the dimensions of the element based on the current box model.\n * @see https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model\n */\nconst getDimensions = (entry, box) => {\n // Value\t Border\t Padding\t Inner Content\n // ---------------------------------------------------\n // 'border-box'\t Yes\t Yes\t Yes\n // 'content-box'\t No\t No\t Yes\n // undefined No\t No?\t Yes\n if (box === 'border-box') {\n return {\n width: entry.borderBoxSize[0].inlineSize,\n height: entry.borderBoxSize[0].blockSize,\n };\n }\n if (box === 'content-box') {\n return {\n width: entry.contentBoxSize[0].inlineSize,\n height: entry.contentBoxSize[0].blockSize,\n };\n }\n return {\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n };\n};\n\nexport { getDimensions, patchResizeCallback, useCallbackRef, useRefProxy };\n//# sourceMappingURL=utils.js.map\n"],"names":[],"mappings":";;;AAOK,MAAC,sBAAsB,CAAC,gBAAgB,aAAa,aAAa,mBAAmB;AACtF,UAAQ,aAAW;AAAA,IACf,KAAK;AACD,aAAO,SAAS,gBAAgB,aAAa,cAAc;AAAA,IAC/D,KAAK;AACD,aAAO,SAAS,gBAAgB,aAAa,cAAc;AAAA,IAC/D;AACI,aAAO;AAAA,EACnB;AACA;AAKK,MAAC;AAAA;AAAA,EAEN,CAAC,aAAa;AACV,UAAM,cAAc,MAAM,OAAO,QAAQ;AACzC,UAAM,UAAU,MAAM;AAClB,kBAAY,UAAU;AAAA,IAC9B,CAAK;AACD,WAAO,MAAM,QAAQ,MAAO,IAAI,SAAS;AAAE,UAAI;AAAI,cAAQ,KAAK,YAAY,aAAa,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,aAAa,GAAG,IAAI;AAAA,IAAI,GAAG,CAAA,CAAE;AAAA,EACnK;AAAA;AAGK,MAAC;AAAA;AAAA,EAEN,CAAC,cAAc;AAEX,UAAM,CAAC,YAAY,aAAa,IAAI,MAAM,UAAU,cAAc,QAAQ,cAAc,SAAS,SAAS,UAAU,YAAY,IAAI;AAIpI,QAAI,WAAW;AACX,iBAAW,MAAM;AACb,YAAI,UAAU,YAAY,YAAY;AAClC,wBAAc,UAAU,OAAO;AAAA,QAC/C;AAAA,MACS,GAAE,CAAC;AAAA,IACZ;AAII,UAAM,WAAW,MAAM,QAAQ,MAAM,IAAI,MAAM,CAAC,SAAS;AACrD,UAAI,SAAS,YAAY;AACrB,sBAAc,IAAI;AAAA,MAC9B;AAAA,IACA,GAAO;AAAA,MACC,IAAI,QAAQ,MAAM;AACd,YAAI,SAAS,WAAW;AACpB,iBAAO;AAAA,QACvB;AACY,eAAO,OAAO,IAAI;AAAA,MACrB;AAAA,MACD,IAAI,QAAQ,MAAM,OAAO;AACrB,YAAI,SAAS,WAAW;AACpB,wBAAc,KAAK;AAAA,QACnC,OACiB;AACD,iBAAO,IAAI,IAAI;AAAA,QAC/B;AACY,eAAO;AAAA,MACV;AAAA,IACT,CAAK,GAAG,CAAC,UAAU,CAAC;AAChB,WAAO,EAAE,UAAU,YAAY,cAAe;AAAA,EAClD;AAAA;AAIK,MAAC,gBAAgB,CAAC,OAAO,QAAQ;AAMlC,MAAI,QAAQ,cAAc;AACtB,WAAO;AAAA,MACH,OAAO,MAAM,cAAc,CAAC,EAAE;AAAA,MAC9B,QAAQ,MAAM,cAAc,CAAC,EAAE;AAAA,IAClC;AAAA,EACT;AACI,MAAI,QAAQ,eAAe;AACvB,WAAO;AAAA,MACH,OAAO,MAAM,eAAe,CAAC,EAAE;AAAA,MAC/B,QAAQ,MAAM,eAAe,CAAC,EAAE;AAAA,IACnC;AAAA,EACT;AACI,SAAO;AAAA,IACH,OAAO,MAAM,YAAY;AAAA,IACzB,QAAQ,MAAM,YAAY;AAAA,EAC7B;AACL;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"harmony103.mjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/TeamMenuItem/TeamMenuItem.tsx"],"sourcesContent":["import { useSidebar } from '@components/Sidebar/hooks/useSidebar'\nimport { MenuItem, UserIcon } from '@lokalise/louis'\nimport { isFreePlan, isTrialPlan } from '@utils'\nimport type { SidebarTeam } from '../../../types'\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 Sidebar Context.\n */\n\nexport const TeamMenuItem = ({ team, onClick, hidePlanLabel }: TeamMenuItemProps) => {\n\tconst {\n\t\tdata: { currentTeam, jwt },\n\t} = useSidebar()\n\n\tconst contextTeam = team || currentTeam.result\n\n\tif (\n\t\t!contextTeam ||\n\t\ttypeof jwt.result?.planId !== 'number' ||\n\t\t!Number.isFinite(jwt.result.planId)\n\t) {\n\t\treturn null\n\t}\n\n\tconst planId = jwt.result.planId\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\tdata-testid=\"sidebar-team-menu-item\"\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":";;;;;AAuCO,MAAM,eAAe,CAAC,EAAE,MAAM,SAAS,oBAAuC;;AAC9E,QAAA;AAAA,IACL,MAAM,EAAE,aAAa,IAAI;AAAA,MACtB,WAAW;AAET,QAAA,cAAc,QAAQ,YAAY;AAExC,MACC,CAAC,eACD,SAAO,SAAI,WAAJ,mBAAY,YAAW,YAC9B,CAAC,OAAO,SAAS,IAAI,OAAO,MAAM,GACjC;AACM,WAAA;AAAA,EAAA;AAGF,QAAA,SAAS,IAAI,OAAO;AAEpB,QAAA,YAAY,WAAW,MAAM,IAAI,SAAS,YAAY,MAAM,IAAI,UAAU;AAE1E,QAAA,cAAc,UAAU,WAAW;AAGxC,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,eAAY;AAAA,MACZ,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,17 +1,17 @@
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);
5
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
6
- const jwtTokenPayload = require("./harmony16.cjs");
7
- const _NewJwtIssuedEvent = class _NewJwtIssuedEvent extends CustomEvent {
8
- constructor(token) {
9
- super(_NewJwtIssuedEvent.eventName, {
10
- detail: { token, payload: jwtTokenPayload.parseJwtTokenPayload(token.accessToken) }
11
- });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const useSidebar = require("./harmony84.cjs");
5
+ const louis = require("@lokalise/louis");
6
+ const permissions = require("./harmony85.cjs");
7
+ const TeamSettingsMenuItem = () => {
8
+ const {
9
+ data: { jwt }
10
+ } = useSidebar.useSidebar();
11
+ if (!permissions.canAccessTeamSettings(jwt.result)) {
12
+ return null;
12
13
  }
14
+ return /* @__PURE__ */ jsxRuntime.jsx(louis.MenuItem, { href: "/team", children: "Team settings" });
13
15
  };
14
- __publicField(_NewJwtIssuedEvent, "eventName", "new-jwt-issued");
15
- let NewJwtIssuedEvent = _NewJwtIssuedEvent;
16
- exports.NewJwtIssuedEvent = NewJwtIssuedEvent;
16
+ exports.TeamSettingsMenuItem = TeamSettingsMenuItem;
17
17
  //# sourceMappingURL=harmony104.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony104.cjs","sources":["../src/features/auth/frontend/events/NewJwtIssuedEvent.ts"],"sourcesContent":["import type { JwtTokenPayload } from '@features/auth/core/types/jwtTokenPayload'\nimport { parseJwtTokenPayload } from '@features/auth/core/utils/jwtTokenPayload'\nimport type { JwtToken } from '@features/publicApi/types/userTokenTypes'\n\ntype NewJwtIssuedEventDetail = {\n\ttoken: JwtToken\n\tpayload: JwtTokenPayload | undefined\n}\n\n/**\n * This event is emitted when a new JWT token is issued or refreshed.\n */\nexport class NewJwtIssuedEvent extends CustomEvent<NewJwtIssuedEventDetail> {\n\tstatic readonly eventName = 'new-jwt-issued' as const\n\n\tconstructor(token: JwtToken) {\n\t\tsuper(NewJwtIssuedEvent.eventName, {\n\t\t\tdetail: { token, payload: parseJwtTokenPayload(token.accessToken) },\n\t\t})\n\t}\n}\n\nexport const isNewJwtIssuedEvent = (event: Event): event is NewJwtIssuedEvent =>\n\tevent.type === NewJwtIssuedEvent.eventName\n\ndeclare global {\n\tinterface WindowEventMap {\n\t\t[NewJwtIssuedEvent.eventName]: NewJwtIssuedEvent\n\t}\n}\n"],"names":["parseJwtTokenPayload"],"mappings":";;;;;;AAYO,MAAM,qBAAN,MAAM,2BAA0B,YAAqC;AAAA,EAG3E,YAAY,OAAiB;AAC5B,UAAM,mBAAkB,WAAW;AAAA,MAClC,QAAQ,EAAE,OAAO,SAASA,gBAAAA,qBAAqB,MAAM,WAAW,EAAE;AAAA,IAAA,CAClE;AAAA,EAAA;AAEH;AAPC,cADY,oBACI,aAAY;AADtB,IAAM,oBAAN;;"}
1
+ {"version":3,"file":"harmony104.cjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/TeamSettingsMenuItem/TeamSettingsMenuItem.tsx"],"sourcesContent":["import { useSidebar } from '@components/Sidebar/hooks/useSidebar'\nimport { MenuItem } from '@lokalise/louis'\nimport { canAccessTeamSettings } from '@utils/user/permissions'\n\n/**\n * A menu item component for navigating to the team settings page.\n * It checks the current user's permissions using the Sidebar context\n * and renders nothing if the user does not have access.\n *\n * @example\n * ```\n * <TeamSettingsMenuItem />\n * ```\n *\n * @note This component must be used within a Sidebar Context.\n */\n\nexport const TeamSettingsMenuItem = () => {\n\tconst {\n\t\tdata: { jwt },\n\t} = useSidebar()\n\n\tif (!canAccessTeamSettings(jwt.result)) {\n\t\treturn null\n\t}\n\n\treturn <MenuItem href=\"/team\">Team settings</MenuItem>\n}\n"],"names":["useSidebar","canAccessTeamSettings","jsx","MenuItem"],"mappings":";;;;;;AAiBO,MAAM,uBAAuB,MAAM;AACnC,QAAA;AAAA,IACL,MAAM,EAAE,IAAI;AAAA,MACTA,sBAAW;AAEf,MAAI,CAACC,YAAA,sBAAsB,IAAI,MAAM,GAAG;AAChC,WAAA;AAAA,EAAA;AAGR,SAAQC,2BAAAA,IAAAC,MAAAA,UAAA,EAAS,MAAK,SAAQ,UAAa,iBAAA;AAC5C;;"}
@@ -1,17 +1,17 @@
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 { parseJwtTokenPayload } from "./harmony16.mjs";
5
- const _NewJwtIssuedEvent = class _NewJwtIssuedEvent extends CustomEvent {
6
- constructor(token) {
7
- super(_NewJwtIssuedEvent.eventName, {
8
- detail: { token, payload: parseJwtTokenPayload(token.accessToken) }
9
- });
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useSidebar } from "./harmony84.mjs";
3
+ import { MenuItem } from "@lokalise/louis";
4
+ import { canAccessTeamSettings } from "./harmony85.mjs";
5
+ const TeamSettingsMenuItem = () => {
6
+ const {
7
+ data: { jwt }
8
+ } = useSidebar();
9
+ if (!canAccessTeamSettings(jwt.result)) {
10
+ return null;
10
11
  }
12
+ return /* @__PURE__ */ jsx(MenuItem, { href: "/team", children: "Team settings" });
11
13
  };
12
- __publicField(_NewJwtIssuedEvent, "eventName", "new-jwt-issued");
13
- let NewJwtIssuedEvent = _NewJwtIssuedEvent;
14
14
  export {
15
- NewJwtIssuedEvent
15
+ TeamSettingsMenuItem
16
16
  };
17
17
  //# sourceMappingURL=harmony104.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony104.mjs","sources":["../src/features/auth/frontend/events/NewJwtIssuedEvent.ts"],"sourcesContent":["import type { JwtTokenPayload } from '@features/auth/core/types/jwtTokenPayload'\nimport { parseJwtTokenPayload } from '@features/auth/core/utils/jwtTokenPayload'\nimport type { JwtToken } from '@features/publicApi/types/userTokenTypes'\n\ntype NewJwtIssuedEventDetail = {\n\ttoken: JwtToken\n\tpayload: JwtTokenPayload | undefined\n}\n\n/**\n * This event is emitted when a new JWT token is issued or refreshed.\n */\nexport class NewJwtIssuedEvent extends CustomEvent<NewJwtIssuedEventDetail> {\n\tstatic readonly eventName = 'new-jwt-issued' as const\n\n\tconstructor(token: JwtToken) {\n\t\tsuper(NewJwtIssuedEvent.eventName, {\n\t\t\tdetail: { token, payload: parseJwtTokenPayload(token.accessToken) },\n\t\t})\n\t}\n}\n\nexport const isNewJwtIssuedEvent = (event: Event): event is NewJwtIssuedEvent =>\n\tevent.type === NewJwtIssuedEvent.eventName\n\ndeclare global {\n\tinterface WindowEventMap {\n\t\t[NewJwtIssuedEvent.eventName]: NewJwtIssuedEvent\n\t}\n}\n"],"names":[],"mappings":";;;;AAYO,MAAM,qBAAN,MAAM,2BAA0B,YAAqC;AAAA,EAG3E,YAAY,OAAiB;AAC5B,UAAM,mBAAkB,WAAW;AAAA,MAClC,QAAQ,EAAE,OAAO,SAAS,qBAAqB,MAAM,WAAW,EAAE;AAAA,IAAA,CAClE;AAAA,EAAA;AAEH;AAPC,cADY,oBACI,aAAY;AADtB,IAAM,oBAAN;"}
1
+ {"version":3,"file":"harmony104.mjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/TeamSettingsMenuItem/TeamSettingsMenuItem.tsx"],"sourcesContent":["import { useSidebar } from '@components/Sidebar/hooks/useSidebar'\nimport { MenuItem } from '@lokalise/louis'\nimport { canAccessTeamSettings } from '@utils/user/permissions'\n\n/**\n * A menu item component for navigating to the team settings page.\n * It checks the current user's permissions using the Sidebar context\n * and renders nothing if the user does not have access.\n *\n * @example\n * ```\n * <TeamSettingsMenuItem />\n * ```\n *\n * @note This component must be used within a Sidebar Context.\n */\n\nexport const TeamSettingsMenuItem = () => {\n\tconst {\n\t\tdata: { jwt },\n\t} = useSidebar()\n\n\tif (!canAccessTeamSettings(jwt.result)) {\n\t\treturn null\n\t}\n\n\treturn <MenuItem href=\"/team\">Team settings</MenuItem>\n}\n"],"names":[],"mappings":";;;;AAiBO,MAAM,uBAAuB,MAAM;AACnC,QAAA;AAAA,IACL,MAAM,EAAE,IAAI;AAAA,MACT,WAAW;AAEf,MAAI,CAAC,sBAAsB,IAAI,MAAM,GAAG;AAChC,WAAA;AAAA,EAAA;AAGR,SAAQ,oBAAA,UAAA,EAAS,MAAK,SAAQ,UAAa,iBAAA;AAC5C;"}
@@ -1,21 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const zod = require("zod");
4
- const teamRoleTypes = require("./harmony66.cjs");
5
- const JWT_TOKEN_PAYLOAD_SCHEMA = zod.z.object({
6
- userId: zod.z.number(),
7
- userUuid: zod.z.string().uuid(),
8
- teamId: zod.z.number(),
9
- teamUuid: zod.z.string().uuid(),
10
- userTeamRole: teamRoleTypes.TEAM_ROLE_SCHEMA,
11
- userEmail: zod.z.string().email(),
12
- userName: zod.z.string(),
13
- userCurrentTeamId: zod.z.number(),
14
- planId: zod.z.number(),
15
- planName: zod.z.string(),
16
- isProviderAlpha: zod.z.boolean(),
17
- isFullyAuthenticated: zod.z.boolean(),
18
- exp: zod.z.number()
19
- });
20
- exports.JWT_TOKEN_PAYLOAD_SCHEMA = JWT_TOKEN_PAYLOAD_SCHEMA;
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const useSidebar = require("./harmony84.cjs");
5
+ const TeamMenuItem = require("./harmony103.cjs");
6
+ const TeamSwitch_module = require("./harmony117.cjs");
7
+ const TeamSwitch = ({ onSwitchTeam }) => {
8
+ var _a, _b;
9
+ const {
10
+ data: { otherTeams }
11
+ } = useSidebar.useSidebar();
12
+ if (((_a = otherTeams.result) == null ? void 0 : _a.length) === 0) {
13
+ return null;
14
+ }
15
+ return /* @__PURE__ */ jsxRuntime.jsx(
16
+ "div",
17
+ {
18
+ "data-testid": "sidebar-team-switch",
19
+ className: `flex-col items-stretch ${TeamSwitch_module.default.teamsContainer}`,
20
+ children: (_b = otherTeams.result) == null ? void 0 : _b.map((team) => /* @__PURE__ */ jsxRuntime.jsx(TeamMenuItem.TeamMenuItem, { team, onClick: onSwitchTeam, hidePlanLabel: true }, team.id))
21
+ }
22
+ );
23
+ };
24
+ exports.TeamSwitch = TeamSwitch;
21
25
  //# sourceMappingURL=harmony105.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony105.cjs","sources":["../src/features/auth/core/types/jwtTokenPayload.ts"],"sourcesContent":["import { z } from 'zod'\nimport { TEAM_ROLE_SCHEMA } from '../../../publicApi/types/teamRoleTypes'\n\nexport const JWT_TOKEN_PAYLOAD_SCHEMA = z.object({\n\tuserId: z.number(),\n\tuserUuid: z.string().uuid(),\n\tteamId: z.number(),\n\tteamUuid: z.string().uuid(),\n\tuserTeamRole: TEAM_ROLE_SCHEMA,\n\tuserEmail: z.string().email(),\n\tuserName: z.string(),\n\tuserCurrentTeamId: z.number(),\n\tplanId: z.number(),\n\tplanName: z.string(),\n\tisProviderAlpha: z.boolean(),\n\tisFullyAuthenticated: z.boolean(),\n\texp: z.number(),\n})\nexport type JwtTokenPayload = z.infer<typeof JWT_TOKEN_PAYLOAD_SCHEMA>\n"],"names":["z","TEAM_ROLE_SCHEMA"],"mappings":";;;;AAGa,MAAA,2BAA2BA,MAAE,OAAO;AAAA,EAChD,QAAQA,MAAE,OAAO;AAAA,EACjB,UAAUA,IAAA,EAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,QAAQA,MAAE,OAAO;AAAA,EACjB,UAAUA,IAAA,EAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,cAAcC,cAAA;AAAA,EACd,WAAWD,IAAA,EAAE,OAAO,EAAE,MAAM;AAAA,EAC5B,UAAUA,MAAE,OAAO;AAAA,EACnB,mBAAmBA,MAAE,OAAO;AAAA,EAC5B,QAAQA,MAAE,OAAO;AAAA,EACjB,UAAUA,MAAE,OAAO;AAAA,EACnB,iBAAiBA,MAAE,QAAQ;AAAA,EAC3B,sBAAsBA,MAAE,QAAQ;AAAA,EAChC,KAAKA,MAAE,OAAO;AACf,CAAC;;"}
1
+ {"version":3,"file":"harmony105.cjs","sources":["../src/components/Sidebar/Widgets/ProfileMenu/TeamSwitch/TeamSwitch.tsx"],"sourcesContent":["import { useSidebar } from '@components/Sidebar/hooks/useSidebar'\nimport type { SidebarTeam } from '@components/Sidebar/types'\nimport { TeamMenuItem } from '../TeamMenuItem/TeamMenuItem'\nimport styles from './TeamSwitch.module.css'\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 Sidebar 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 Sidebar Context\n */\n\ntype TeamSwitchProps = {\n\tonSwitchTeam: (team: SidebarTeam) => void\n}\n\nexport const TeamSwitch = ({ onSwitchTeam }: TeamSwitchProps) => {\n\tconst {\n\t\tdata: { otherTeams },\n\t} = useSidebar()\n\n\tif (otherTeams.result?.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.result?.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":["useSidebar","jsx","styles","TeamMenuItem"],"mappings":";;;;;;AA8BO,MAAM,aAAa,CAAC,EAAE,mBAAoC;;AAC1D,QAAA;AAAA,IACL,MAAM,EAAE,WAAW;AAAA,MAChBA,sBAAW;AAEX,QAAA,gBAAW,WAAX,mBAAmB,YAAW,GAAG;AAC7B,WAAA;AAAA,EAAA;AAIP,SAAAC,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACA,eAAY;AAAA,MACZ,WAAW,0BAA0BC,kBAAA,QAAO,cAAc;AAAA,MAEzD,WAAW,gBAAA,WAAA,mBAAQ,IAAI,CAAC,SACvBD,2BAAAA,IAAAE,aAAA,cAAA,EAAa,MAA0B,SAAS,cAAc,eAAa,KAA7C,GAAA,KAAK,EAAyC;AAAA,IAC7E;AAAA,EACF;AAEF;;"}