@lokalise/harmony 1.26.1 → 1.26.2

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 (404) hide show
  1. package/dist/harmony.cjs +65 -43
  2. package/dist/harmony.cjs.map +1 -1
  3. package/dist/harmony.mjs +37 -15
  4. package/dist/harmony.mjs.map +1 -1
  5. package/dist/harmony100.cjs +60 -12
  6. package/dist/harmony100.cjs.map +1 -1
  7. package/dist/harmony100.mjs +60 -12
  8. package/dist/harmony100.mjs.map +1 -1
  9. package/dist/harmony101.cjs +88 -36
  10. package/dist/harmony101.cjs.map +1 -1
  11. package/dist/harmony101.mjs +88 -36
  12. package/dist/harmony101.mjs.map +1 -1
  13. package/dist/harmony102.cjs +19 -29
  14. package/dist/harmony102.cjs.map +1 -1
  15. package/dist/harmony102.mjs +18 -28
  16. package/dist/harmony102.mjs.map +1 -1
  17. package/dist/harmony103.cjs +95 -12
  18. package/dist/harmony103.cjs.map +1 -1
  19. package/dist/harmony103.mjs +95 -12
  20. package/dist/harmony103.mjs.map +1 -1
  21. package/dist/harmony104.cjs +11 -13
  22. package/dist/harmony104.cjs.map +1 -1
  23. package/dist/harmony104.mjs +11 -13
  24. package/dist/harmony104.mjs.map +1 -1
  25. package/dist/harmony105.cjs +13 -15
  26. package/dist/harmony105.cjs.map +1 -1
  27. package/dist/harmony105.mjs +13 -15
  28. package/dist/harmony105.mjs.map +1 -1
  29. package/dist/harmony106.cjs +36 -7
  30. package/dist/harmony106.cjs.map +1 -1
  31. package/dist/harmony106.mjs +36 -7
  32. package/dist/harmony106.mjs.map +1 -1
  33. package/dist/harmony107.cjs +27 -56
  34. package/dist/harmony107.cjs.map +1 -1
  35. package/dist/harmony107.mjs +27 -56
  36. package/dist/harmony107.mjs.map +1 -1
  37. package/dist/harmony108.cjs +6 -59
  38. package/dist/harmony108.cjs.map +1 -1
  39. package/dist/harmony108.mjs +6 -59
  40. package/dist/harmony108.mjs.map +1 -1
  41. package/dist/harmony109.cjs +57 -18
  42. package/dist/harmony109.cjs.map +1 -1
  43. package/dist/harmony109.mjs +56 -17
  44. package/dist/harmony109.mjs.map +1 -1
  45. package/dist/harmony110.cjs +60 -11
  46. package/dist/harmony110.cjs.map +1 -1
  47. package/dist/harmony110.mjs +60 -11
  48. package/dist/harmony110.mjs.map +1 -1
  49. package/dist/harmony111.cjs +19 -17
  50. package/dist/harmony111.cjs.map +1 -1
  51. package/dist/harmony111.mjs +18 -16
  52. package/dist/harmony111.mjs.map +1 -1
  53. package/dist/harmony112.cjs +12 -20
  54. package/dist/harmony112.cjs.map +1 -1
  55. package/dist/harmony112.mjs +12 -20
  56. package/dist/harmony112.mjs.map +1 -1
  57. package/dist/harmony113.cjs +13 -10
  58. package/dist/harmony113.cjs.map +1 -1
  59. package/dist/harmony113.mjs +13 -10
  60. package/dist/harmony113.mjs.map +1 -1
  61. package/dist/harmony114.cjs +16 -46
  62. package/dist/harmony114.cjs.map +1 -1
  63. package/dist/harmony114.mjs +16 -46
  64. package/dist/harmony114.mjs.map +1 -1
  65. package/dist/harmony115.cjs +12 -13
  66. package/dist/harmony115.cjs.map +1 -1
  67. package/dist/harmony115.mjs +11 -12
  68. package/dist/harmony115.mjs.map +1 -1
  69. package/dist/harmony116.cjs +15 -5
  70. package/dist/harmony116.cjs.map +1 -1
  71. package/dist/harmony116.mjs +15 -5
  72. package/dist/harmony116.mjs.map +1 -1
  73. package/dist/harmony117.cjs +20 -11
  74. package/dist/harmony117.cjs.map +1 -1
  75. package/dist/harmony117.mjs +20 -11
  76. package/dist/harmony117.mjs.map +1 -1
  77. package/dist/harmony118.cjs +10 -30
  78. package/dist/harmony118.cjs.map +1 -1
  79. package/dist/harmony118.mjs +10 -30
  80. package/dist/harmony118.mjs.map +1 -1
  81. package/dist/harmony119.cjs +46 -14
  82. package/dist/harmony119.cjs.map +1 -1
  83. package/dist/harmony119.mjs +46 -14
  84. package/dist/harmony119.mjs.map +1 -1
  85. package/dist/harmony120.cjs +15 -0
  86. package/dist/harmony120.cjs.map +1 -0
  87. package/dist/harmony120.mjs +15 -0
  88. package/dist/harmony120.mjs.map +1 -0
  89. package/dist/harmony121.cjs +9 -0
  90. package/dist/harmony121.cjs.map +1 -0
  91. package/dist/harmony121.mjs +9 -0
  92. package/dist/harmony121.mjs.map +1 -0
  93. package/dist/harmony122.cjs +15 -0
  94. package/dist/harmony122.cjs.map +1 -0
  95. package/dist/harmony122.mjs +15 -0
  96. package/dist/harmony122.mjs.map +1 -0
  97. package/dist/harmony123.cjs +35 -0
  98. package/dist/harmony123.cjs.map +1 -0
  99. package/dist/harmony123.mjs +35 -0
  100. package/dist/harmony123.mjs.map +1 -0
  101. package/dist/harmony124.cjs +17 -0
  102. package/dist/harmony124.cjs.map +1 -0
  103. package/dist/harmony124.mjs +17 -0
  104. package/dist/harmony124.mjs.map +1 -0
  105. package/dist/harmony15.cjs +1 -1
  106. package/dist/harmony15.mjs +1 -1
  107. package/dist/harmony20.cjs +1 -1
  108. package/dist/harmony20.mjs +1 -1
  109. package/dist/harmony21.cjs +1 -1
  110. package/dist/harmony21.mjs +1 -1
  111. package/dist/harmony22.cjs +2 -2
  112. package/dist/harmony22.mjs +2 -2
  113. package/dist/harmony23.cjs +1 -1
  114. package/dist/harmony23.mjs +1 -1
  115. package/dist/harmony24.cjs +1 -1
  116. package/dist/harmony24.mjs +1 -1
  117. package/dist/harmony26.cjs +2 -2
  118. package/dist/harmony26.mjs +2 -2
  119. package/dist/harmony27.cjs +2 -2
  120. package/dist/harmony27.mjs +2 -2
  121. package/dist/harmony28.cjs +10 -37
  122. package/dist/harmony28.cjs.map +1 -1
  123. package/dist/harmony28.mjs +10 -37
  124. package/dist/harmony28.mjs.map +1 -1
  125. package/dist/harmony29.cjs +37 -9
  126. package/dist/harmony29.cjs.map +1 -1
  127. package/dist/harmony29.mjs +37 -9
  128. package/dist/harmony29.mjs.map +1 -1
  129. package/dist/harmony3.cjs +3 -3
  130. package/dist/harmony3.mjs +3 -3
  131. package/dist/harmony30.cjs +10 -13
  132. package/dist/harmony30.cjs.map +1 -1
  133. package/dist/harmony30.mjs +10 -13
  134. package/dist/harmony30.mjs.map +1 -1
  135. package/dist/harmony31.cjs +10 -80
  136. package/dist/harmony31.cjs.map +1 -1
  137. package/dist/harmony31.mjs +9 -79
  138. package/dist/harmony31.mjs.map +1 -1
  139. package/dist/harmony32.cjs +13 -109
  140. package/dist/harmony32.cjs.map +1 -1
  141. package/dist/harmony32.mjs +12 -108
  142. package/dist/harmony32.mjs.map +1 -1
  143. package/dist/harmony33.cjs +14 -8
  144. package/dist/harmony33.cjs.map +1 -1
  145. package/dist/harmony33.mjs +14 -8
  146. package/dist/harmony33.mjs.map +1 -1
  147. package/dist/harmony34.cjs +14 -56
  148. package/dist/harmony34.cjs.map +1 -1
  149. package/dist/harmony34.mjs +14 -56
  150. package/dist/harmony34.mjs.map +1 -1
  151. package/dist/harmony35.cjs +13 -24
  152. package/dist/harmony35.cjs.map +1 -1
  153. package/dist/harmony35.mjs +13 -24
  154. package/dist/harmony35.mjs.map +1 -1
  155. package/dist/harmony36.cjs +17 -18
  156. package/dist/harmony36.cjs.map +1 -1
  157. package/dist/harmony36.mjs +17 -18
  158. package/dist/harmony36.mjs.map +1 -1
  159. package/dist/harmony37.cjs +14 -20
  160. package/dist/harmony37.cjs.map +1 -1
  161. package/dist/harmony37.mjs +14 -20
  162. package/dist/harmony37.mjs.map +1 -1
  163. package/dist/harmony38.cjs +13 -11
  164. package/dist/harmony38.cjs.map +1 -1
  165. package/dist/harmony38.mjs +14 -12
  166. package/dist/harmony38.mjs.map +1 -1
  167. package/dist/harmony39.cjs +9 -9
  168. package/dist/harmony39.cjs.map +1 -1
  169. package/dist/harmony39.mjs +9 -9
  170. package/dist/harmony39.mjs.map +1 -1
  171. package/dist/harmony4.cjs +10 -10
  172. package/dist/harmony4.mjs +10 -10
  173. package/dist/harmony40.cjs +14 -12
  174. package/dist/harmony40.cjs.map +1 -1
  175. package/dist/harmony40.mjs +15 -13
  176. package/dist/harmony40.mjs.map +1 -1
  177. package/dist/harmony42.cjs +1 -1
  178. package/dist/harmony42.mjs +1 -1
  179. package/dist/harmony44.cjs +1 -1
  180. package/dist/harmony44.mjs +1 -1
  181. package/dist/harmony45.cjs +1 -1
  182. package/dist/harmony45.mjs +1 -1
  183. package/dist/harmony46.cjs +56 -14
  184. package/dist/harmony46.cjs.map +1 -1
  185. package/dist/harmony46.mjs +56 -14
  186. package/dist/harmony46.mjs.map +1 -1
  187. package/dist/harmony47.cjs +79 -16
  188. package/dist/harmony47.cjs.map +1 -1
  189. package/dist/harmony47.mjs +79 -16
  190. package/dist/harmony47.mjs.map +1 -1
  191. package/dist/harmony48.cjs +21 -16
  192. package/dist/harmony48.cjs.map +1 -1
  193. package/dist/harmony48.mjs +20 -15
  194. package/dist/harmony48.mjs.map +1 -1
  195. package/dist/harmony49.cjs +111 -19
  196. package/dist/harmony49.cjs.map +1 -1
  197. package/dist/harmony49.mjs +110 -18
  198. package/dist/harmony49.mjs.map +1 -1
  199. package/dist/harmony5.cjs +1 -1
  200. package/dist/harmony5.mjs +1 -1
  201. package/dist/harmony50.cjs +22 -62
  202. package/dist/harmony50.cjs.map +1 -1
  203. package/dist/harmony50.mjs +21 -61
  204. package/dist/harmony50.mjs.map +1 -1
  205. package/dist/harmony51.cjs +27 -7
  206. package/dist/harmony51.cjs.map +1 -1
  207. package/dist/harmony51.mjs +26 -6
  208. package/dist/harmony51.mjs.map +1 -1
  209. package/dist/harmony52.cjs +8 -9
  210. package/dist/harmony52.cjs.map +1 -1
  211. package/dist/harmony52.mjs +8 -9
  212. package/dist/harmony52.mjs.map +1 -1
  213. package/dist/harmony53.cjs +24 -18
  214. package/dist/harmony53.cjs.map +1 -1
  215. package/dist/harmony53.mjs +24 -18
  216. package/dist/harmony53.mjs.map +1 -1
  217. package/dist/harmony54.cjs +18 -23
  218. package/dist/harmony54.cjs.map +1 -1
  219. package/dist/harmony54.mjs +18 -23
  220. package/dist/harmony54.mjs.map +1 -1
  221. package/dist/harmony55.cjs +16 -6
  222. package/dist/harmony55.cjs.map +1 -1
  223. package/dist/harmony55.mjs +15 -5
  224. package/dist/harmony55.mjs.map +1 -1
  225. package/dist/harmony56.cjs +18 -32
  226. package/dist/harmony56.cjs.map +1 -1
  227. package/dist/harmony56.mjs +17 -31
  228. package/dist/harmony56.mjs.map +1 -1
  229. package/dist/harmony57.cjs +61 -32
  230. package/dist/harmony57.cjs.map +1 -1
  231. package/dist/harmony57.mjs +60 -31
  232. package/dist/harmony57.mjs.map +1 -1
  233. package/dist/harmony58.cjs +6 -19
  234. package/dist/harmony58.cjs.map +1 -1
  235. package/dist/harmony58.mjs +5 -18
  236. package/dist/harmony58.mjs.map +1 -1
  237. package/dist/harmony59.cjs +8 -30
  238. package/dist/harmony59.cjs.map +1 -1
  239. package/dist/harmony59.mjs +9 -31
  240. package/dist/harmony59.mjs.map +1 -1
  241. package/dist/harmony6.cjs +4 -4
  242. package/dist/harmony6.mjs +4 -4
  243. package/dist/harmony60.cjs +13 -54
  244. package/dist/harmony60.cjs.map +1 -1
  245. package/dist/harmony60.mjs +15 -56
  246. package/dist/harmony60.mjs.map +1 -1
  247. package/dist/harmony61.cjs +23 -9
  248. package/dist/harmony61.cjs.map +1 -1
  249. package/dist/harmony61.mjs +22 -8
  250. package/dist/harmony61.mjs.map +1 -1
  251. package/dist/harmony62.cjs +4 -7
  252. package/dist/harmony62.cjs.map +1 -1
  253. package/dist/harmony62.mjs +5 -8
  254. package/dist/harmony62.mjs.map +1 -1
  255. package/dist/harmony63.cjs +30 -27
  256. package/dist/harmony63.cjs.map +1 -1
  257. package/dist/harmony63.mjs +32 -29
  258. package/dist/harmony63.mjs.map +1 -1
  259. package/dist/harmony64.cjs +32 -3
  260. package/dist/harmony64.cjs.map +1 -1
  261. package/dist/harmony64.mjs +32 -3
  262. package/dist/harmony64.mjs.map +1 -1
  263. package/dist/harmony65.cjs +19 -6
  264. package/dist/harmony65.cjs.map +1 -1
  265. package/dist/harmony65.mjs +18 -5
  266. package/dist/harmony65.mjs.map +1 -1
  267. package/dist/harmony66.cjs +31 -9
  268. package/dist/harmony66.cjs.map +1 -1
  269. package/dist/harmony66.mjs +30 -8
  270. package/dist/harmony66.mjs.map +1 -1
  271. package/dist/harmony67.cjs +60 -10
  272. package/dist/harmony67.cjs.map +1 -1
  273. package/dist/harmony67.mjs +59 -9
  274. package/dist/harmony67.mjs.map +1 -1
  275. package/dist/harmony68.cjs +9 -57
  276. package/dist/harmony68.cjs.map +1 -1
  277. package/dist/harmony68.mjs +8 -56
  278. package/dist/harmony68.mjs.map +1 -1
  279. package/dist/harmony69.cjs +7 -31
  280. package/dist/harmony69.cjs.map +1 -1
  281. package/dist/harmony69.mjs +8 -32
  282. package/dist/harmony69.mjs.map +1 -1
  283. package/dist/harmony70.cjs +28 -4
  284. package/dist/harmony70.cjs.map +1 -1
  285. package/dist/harmony70.mjs +29 -5
  286. package/dist/harmony70.mjs.map +1 -1
  287. package/dist/harmony71.cjs +4 -10
  288. package/dist/harmony71.cjs.map +1 -1
  289. package/dist/harmony71.mjs +3 -9
  290. package/dist/harmony71.mjs.map +1 -1
  291. package/dist/harmony72.cjs +12 -25
  292. package/dist/harmony72.cjs.map +1 -1
  293. package/dist/harmony72.mjs +11 -24
  294. package/dist/harmony72.mjs.map +1 -1
  295. package/dist/harmony73.cjs +20 -5
  296. package/dist/harmony73.cjs.map +1 -1
  297. package/dist/harmony73.mjs +20 -5
  298. package/dist/harmony73.mjs.map +1 -1
  299. package/dist/harmony74.cjs +6 -21
  300. package/dist/harmony74.cjs.map +1 -1
  301. package/dist/harmony74.mjs +5 -20
  302. package/dist/harmony74.mjs.map +1 -1
  303. package/dist/harmony75.cjs +6 -9
  304. package/dist/harmony75.cjs.map +1 -1
  305. package/dist/harmony75.mjs +6 -9
  306. package/dist/harmony75.mjs.map +1 -1
  307. package/dist/harmony76.cjs +10 -12
  308. package/dist/harmony76.cjs.map +1 -1
  309. package/dist/harmony76.mjs +9 -11
  310. package/dist/harmony76.mjs.map +1 -1
  311. package/dist/harmony77.cjs +57 -21
  312. package/dist/harmony77.cjs.map +1 -1
  313. package/dist/harmony77.mjs +56 -20
  314. package/dist/harmony77.mjs.map +1 -1
  315. package/dist/harmony78.cjs +32 -18
  316. package/dist/harmony78.cjs.map +1 -1
  317. package/dist/harmony78.mjs +32 -18
  318. package/dist/harmony78.mjs.map +1 -1
  319. package/dist/harmony79.cjs +5 -14
  320. package/dist/harmony79.cjs.map +1 -1
  321. package/dist/harmony79.mjs +5 -14
  322. package/dist/harmony79.mjs.map +1 -1
  323. package/dist/harmony80.cjs +10 -27
  324. package/dist/harmony80.cjs.map +1 -1
  325. package/dist/harmony80.mjs +9 -26
  326. package/dist/harmony80.mjs.map +1 -1
  327. package/dist/harmony81.cjs +25 -12
  328. package/dist/harmony81.cjs.map +1 -1
  329. package/dist/harmony81.mjs +24 -11
  330. package/dist/harmony81.mjs.map +1 -1
  331. package/dist/harmony82.cjs +6 -99
  332. package/dist/harmony82.cjs.map +1 -1
  333. package/dist/harmony82.mjs +5 -81
  334. package/dist/harmony82.mjs.map +1 -1
  335. package/dist/harmony83.cjs +21 -21
  336. package/dist/harmony83.cjs.map +1 -1
  337. package/dist/harmony83.mjs +20 -20
  338. package/dist/harmony83.mjs.map +1 -1
  339. package/dist/harmony84.cjs +12 -5
  340. package/dist/harmony84.cjs.map +1 -1
  341. package/dist/harmony84.mjs +11 -4
  342. package/dist/harmony84.mjs.map +1 -1
  343. package/dist/harmony85.cjs +18 -132
  344. package/dist/harmony85.cjs.map +1 -1
  345. package/dist/harmony85.mjs +18 -132
  346. package/dist/harmony85.mjs.map +1 -1
  347. package/dist/harmony86.cjs +14 -12
  348. package/dist/harmony86.cjs.map +1 -1
  349. package/dist/harmony86.mjs +13 -11
  350. package/dist/harmony86.mjs.map +1 -1
  351. package/dist/harmony87.cjs +16 -5
  352. package/dist/harmony87.cjs.map +1 -1
  353. package/dist/harmony87.mjs +16 -5
  354. package/dist/harmony87.mjs.map +1 -1
  355. package/dist/harmony88.cjs +21 -40
  356. package/dist/harmony88.cjs.map +1 -1
  357. package/dist/harmony88.mjs +20 -39
  358. package/dist/harmony88.mjs.map +1 -1
  359. package/dist/harmony89.cjs +4 -59
  360. package/dist/harmony89.cjs.map +1 -1
  361. package/dist/harmony89.mjs +4 -59
  362. package/dist/harmony89.mjs.map +1 -1
  363. package/dist/harmony90.cjs +98 -6
  364. package/dist/harmony90.cjs.map +1 -1
  365. package/dist/harmony90.mjs +81 -6
  366. package/dist/harmony90.mjs.map +1 -1
  367. package/dist/harmony91.cjs +132 -6
  368. package/dist/harmony91.cjs.map +1 -1
  369. package/dist/harmony91.mjs +131 -5
  370. package/dist/harmony91.mjs.map +1 -1
  371. package/dist/harmony92.cjs +12 -5
  372. package/dist/harmony92.cjs.map +1 -1
  373. package/dist/harmony92.mjs +12 -5
  374. package/dist/harmony92.mjs.map +1 -1
  375. package/dist/harmony93.cjs +6 -6
  376. package/dist/harmony93.cjs.map +1 -1
  377. package/dist/harmony93.mjs +5 -5
  378. package/dist/harmony93.mjs.map +1 -1
  379. package/dist/harmony94.cjs +40 -16
  380. package/dist/harmony94.cjs.map +1 -1
  381. package/dist/harmony94.mjs +40 -16
  382. package/dist/harmony94.mjs.map +1 -1
  383. package/dist/harmony95.cjs +57 -59
  384. package/dist/harmony95.cjs.map +1 -1
  385. package/dist/harmony95.mjs +57 -59
  386. package/dist/harmony95.mjs.map +1 -1
  387. package/dist/harmony96.cjs +6 -87
  388. package/dist/harmony96.cjs.map +1 -1
  389. package/dist/harmony96.mjs +6 -87
  390. package/dist/harmony96.mjs.map +1 -1
  391. package/dist/harmony97.cjs +3 -15
  392. package/dist/harmony97.cjs.map +1 -1
  393. package/dist/harmony97.mjs +3 -15
  394. package/dist/harmony97.mjs.map +1 -1
  395. package/dist/harmony98.cjs +6 -97
  396. package/dist/harmony98.cjs.map +1 -1
  397. package/dist/harmony98.mjs +5 -96
  398. package/dist/harmony98.mjs.map +1 -1
  399. package/dist/harmony99.cjs +6 -14
  400. package/dist/harmony99.cjs.map +1 -1
  401. package/dist/harmony99.mjs +5 -13
  402. package/dist/harmony99.mjs.map +1 -1
  403. package/dist/types/src/features/publicApi/node.d.ts +16 -9
  404. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"harmony56.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":"harmony56.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
@@ -1,35 +1,64 @@
1
1
  "use strict";
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("./harmony7.cjs");
6
- const ProfileMenuContext = require("./harmony70.cjs");
7
- const TeamMenuItem_module = require("./harmony72.cjs");
8
- const TeamMenuItem = ({ team, onClick, hidePlanLabel }) => {
9
- const { currentTeam, planId } = ProfileMenuContext.useProfileMenu();
10
- const contextTeam = team || currentTeam;
11
- if (!contextTeam) {
12
- return null;
13
- }
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
- ]
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const React = require("react");
4
+ const utils = require("./harmony90.cjs");
5
+ function useResizeDetector({ skipOnMount = false, refreshMode, refreshRate = 1e3, refreshOptions, handleWidth = true, handleHeight = true, targetRef, observerOptions, onResize } = {}) {
6
+ const skipResize = React.useRef(skipOnMount);
7
+ const onResizeRef = utils.useCallbackRef(onResize);
8
+ const [size, setSize] = React.useState({
9
+ width: void 0,
10
+ height: void 0
11
+ });
12
+ const { refProxy, refElement } = utils.useRefProxy(targetRef);
13
+ const { box } = observerOptions || {};
14
+ const resizeCallback = React.useCallback((entries) => {
15
+ if (!handleWidth && !handleHeight)
16
+ return;
17
+ if (skipResize.current) {
18
+ skipResize.current = false;
19
+ return;
31
20
  }
32
- );
33
- };
34
- exports.TeamMenuItem = TeamMenuItem;
21
+ const shouldSetSize = (prevSize, nextSize) => handleWidth && prevSize.width !== nextSize.width || handleHeight && prevSize.height !== nextSize.height;
22
+ entries.forEach((entry) => {
23
+ const dimensions = utils.getDimensions(entry, box);
24
+ setSize((prevSize) => {
25
+ if (!shouldSetSize(prevSize, dimensions))
26
+ return prevSize;
27
+ onResizeRef === null || onResizeRef === void 0 ? void 0 : onResizeRef({
28
+ width: dimensions.width,
29
+ height: dimensions.height,
30
+ entry
31
+ });
32
+ return dimensions;
33
+ });
34
+ });
35
+ }, [handleWidth, handleHeight, skipResize, box]);
36
+ const resizeHandler = React.useCallback(utils.patchResizeCallback(resizeCallback, refreshMode, refreshRate, refreshOptions), [
37
+ resizeCallback,
38
+ refreshMode,
39
+ refreshRate,
40
+ refreshOptions
41
+ ]);
42
+ React.useEffect(() => {
43
+ let resizeObserver;
44
+ if (refElement) {
45
+ resizeObserver = new window.ResizeObserver(resizeHandler);
46
+ resizeObserver.observe(refElement, observerOptions);
47
+ } else if (size.width || size.height) {
48
+ onResizeRef === null || onResizeRef === void 0 ? void 0 : onResizeRef({
49
+ width: null,
50
+ height: null,
51
+ entry: null
52
+ });
53
+ setSize({ width: void 0, height: void 0 });
54
+ }
55
+ return () => {
56
+ var _a, _b, _c;
57
+ (_a = resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect) === null || _a === void 0 ? void 0 : _a.call(resizeObserver);
58
+ (_c = (_b = resizeHandler).cancel) === null || _c === void 0 ? void 0 : _c.call(_b);
59
+ };
60
+ }, [resizeHandler, refElement]);
61
+ return Object.assign({ ref: refProxy }, size);
62
+ }
63
+ exports.default = useResizeDetector;
35
64
  //# sourceMappingURL=harmony57.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony57.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":"harmony57.cjs","sources":["../node_modules/react-resize-detector/build/useResizeDetector.js"],"sourcesContent":["import { useRef, useState, useCallback, useEffect } from 'react';\nimport { useCallbackRef, useRefProxy, getDimensions, patchResizeCallback } from './utils.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction useResizeDetector({ skipOnMount = false, refreshMode, refreshRate = 1000, refreshOptions, handleWidth = true, handleHeight = true, targetRef, observerOptions, onResize, } = {}) {\n // If `skipOnMount` is enabled, skip the first resize event\n const skipResize = useRef(skipOnMount);\n // Wrap the `onResize` callback with a ref to avoid re-renders\n const onResizeRef = useCallbackRef(onResize);\n const [size, setSize] = useState({\n width: undefined,\n height: undefined,\n });\n // Create a proxy ref to handle conditional rendering and dynamic ref changes of the target element\n const { refProxy, refElement } = useRefProxy(targetRef);\n const { box } = observerOptions || {};\n const resizeCallback = useCallback((entries) => {\n if (!handleWidth && !handleHeight)\n return;\n if (skipResize.current) {\n skipResize.current = false;\n return;\n }\n // Only update the size if one of the observed dimensions has changed\n const shouldSetSize = (prevSize, nextSize) => (handleWidth && prevSize.width !== nextSize.width) || (handleHeight && prevSize.height !== nextSize.height);\n entries.forEach((entry) => {\n const dimensions = getDimensions(entry, box);\n setSize((prevSize) => {\n if (!shouldSetSize(prevSize, dimensions))\n return prevSize;\n onResizeRef === null || onResizeRef === void 0 ? void 0 : onResizeRef({\n width: dimensions.width,\n height: dimensions.height,\n entry,\n });\n return dimensions;\n });\n });\n }, [handleWidth, handleHeight, skipResize, box]);\n // Throttle/Debounce the resize event if refreshMode is configured\n const resizeHandler = useCallback(patchResizeCallback(resizeCallback, refreshMode, refreshRate, refreshOptions), [\n resizeCallback,\n refreshMode,\n refreshRate,\n refreshOptions,\n ]);\n // Attach ResizeObserver to the element\n useEffect(() => {\n let resizeObserver;\n if (refElement) {\n resizeObserver = new window.ResizeObserver(resizeHandler);\n resizeObserver.observe(refElement, observerOptions);\n }\n // If refElement is not available, reset the size\n else if (size.width || size.height) {\n onResizeRef === null || onResizeRef === void 0 ? void 0 : onResizeRef({\n width: null,\n height: null,\n entry: null,\n });\n setSize({ width: undefined, height: undefined });\n }\n // Disconnect the ResizeObserver when the component is unmounted\n return () => {\n var _a, _b, _c;\n (_a = resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect) === null || _a === void 0 ? void 0 : _a.call(resizeObserver);\n (_c = (_b = resizeHandler).cancel) === null || _c === void 0 ? void 0 : _c.call(_b);\n };\n }, [resizeHandler, refElement]);\n return Object.assign({ ref: refProxy }, size);\n}\n\nexport { useResizeDetector as default };\n//# sourceMappingURL=useResizeDetector.js.map\n"],"names":["useRef","useCallbackRef","useState","useRefProxy","useCallback","getDimensions","patchResizeCallback","useEffect"],"mappings":";;;;AAIA,SAAS,kBAAkB,EAAE,cAAc,OAAO,aAAa,cAAc,KAAM,gBAAgB,cAAc,MAAM,eAAe,MAAM,WAAW,iBAAiB,SAAW,IAAG,IAAI;AAEtL,QAAM,aAAaA,MAAM,OAAC,WAAW;AAErC,QAAM,cAAcC,MAAc,eAAC,QAAQ;AAC3C,QAAM,CAAC,MAAM,OAAO,IAAIC,eAAS;AAAA,IAC7B,OAAO;AAAA,IACP,QAAQ;AAAA,EAChB,CAAK;AAED,QAAM,EAAE,UAAU,eAAeC,MAAAA,YAAY,SAAS;AACtD,QAAM,EAAE,QAAQ,mBAAmB,CAAE;AACrC,QAAM,iBAAiBC,kBAAY,CAAC,YAAY;AAC5C,QAAI,CAAC,eAAe,CAAC;AACjB;AACJ,QAAI,WAAW,SAAS;AACpB,iBAAW,UAAU;AACrB;AAAA,IACZ;AAEQ,UAAM,gBAAgB,CAAC,UAAU,aAAc,eAAe,SAAS,UAAU,SAAS,SAAW,gBAAgB,SAAS,WAAW,SAAS;AAClJ,YAAQ,QAAQ,CAAC,UAAU;AACvB,YAAM,aAAaC,MAAAA,cAAc,OAAO,GAAG;AAC3C,cAAQ,CAAC,aAAa;AAClB,YAAI,CAAC,cAAc,UAAU,UAAU;AACnC,iBAAO;AACX,wBAAgB,QAAQ,gBAAgB,SAAS,SAAS,YAAY;AAAA,UAClE,OAAO,WAAW;AAAA,UAClB,QAAQ,WAAW;AAAA,UACnB;AAAA,QACpB,CAAiB;AACD,eAAO;AAAA,MACvB,CAAa;AAAA,IACb,CAAS;AAAA,EACJ,GAAE,CAAC,aAAa,cAAc,YAAY,GAAG,CAAC;AAE/C,QAAM,gBAAgBD,MAAAA,YAAYE,MAAmB,oBAAC,gBAAgB,aAAa,aAAa,cAAc,GAAG;AAAA,IAC7G;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACR,CAAK;AAEDC,QAAAA,UAAU,MAAM;AACZ,QAAI;AACJ,QAAI,YAAY;AACZ,uBAAiB,IAAI,OAAO,eAAe,aAAa;AACxD,qBAAe,QAAQ,YAAY,eAAe;AAAA,IAC9D,WAEiB,KAAK,SAAS,KAAK,QAAQ;AAChC,sBAAgB,QAAQ,gBAAgB,SAAS,SAAS,YAAY;AAAA,QAClE,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,MACvB,CAAa;AACD,cAAQ,EAAE,OAAO,QAAW,QAAQ,OAAS,CAAE;AAAA,IAC3D;AAEQ,WAAO,MAAM;AACT,UAAI,IAAI,IAAI;AACZ,OAAC,KAAK,mBAAmB,QAAQ,mBAAmB,SAAS,SAAS,eAAe,gBAAgB,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,cAAc;AAC5J,OAAC,MAAM,KAAK,eAAe,YAAY,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,EAAE;AAAA,IACrF;AAAA,EACT,GAAO,CAAC,eAAe,UAAU,CAAC;AAC9B,SAAO,OAAO,OAAO,EAAE,KAAK,SAAQ,GAAI,IAAI;AAChD;;","x_google_ignoreList":[0]}
@@ -1,35 +1,64 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { MenuItem, UserIcon } from "@lokalise/louis";
3
- import { isFreePlan, isTrialPlan } from "./harmony7.mjs";
4
- import { useProfileMenu } from "./harmony70.mjs";
5
- import styles from "./harmony72.mjs";
6
- const TeamMenuItem = ({ team, onClick, hidePlanLabel }) => {
7
- const { currentTeam, planId } = useProfileMenu();
8
- const contextTeam = team || currentTeam;
9
- if (!contextTeam) {
10
- return null;
11
- }
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
- ]
1
+ import { useRef, useState, useCallback, useEffect } from "react";
2
+ import { useCallbackRef, useRefProxy, getDimensions, patchResizeCallback } from "./harmony90.mjs";
3
+ function useResizeDetector({ skipOnMount = false, refreshMode, refreshRate = 1e3, refreshOptions, handleWidth = true, handleHeight = true, targetRef, observerOptions, onResize } = {}) {
4
+ const skipResize = useRef(skipOnMount);
5
+ const onResizeRef = useCallbackRef(onResize);
6
+ const [size, setSize] = useState({
7
+ width: void 0,
8
+ height: void 0
9
+ });
10
+ const { refProxy, refElement } = useRefProxy(targetRef);
11
+ const { box } = observerOptions || {};
12
+ const resizeCallback = useCallback((entries) => {
13
+ if (!handleWidth && !handleHeight)
14
+ return;
15
+ if (skipResize.current) {
16
+ skipResize.current = false;
17
+ return;
29
18
  }
30
- );
31
- };
19
+ const shouldSetSize = (prevSize, nextSize) => handleWidth && prevSize.width !== nextSize.width || handleHeight && prevSize.height !== nextSize.height;
20
+ entries.forEach((entry) => {
21
+ const dimensions = getDimensions(entry, box);
22
+ setSize((prevSize) => {
23
+ if (!shouldSetSize(prevSize, dimensions))
24
+ return prevSize;
25
+ onResizeRef === null || onResizeRef === void 0 ? void 0 : onResizeRef({
26
+ width: dimensions.width,
27
+ height: dimensions.height,
28
+ entry
29
+ });
30
+ return dimensions;
31
+ });
32
+ });
33
+ }, [handleWidth, handleHeight, skipResize, box]);
34
+ const resizeHandler = useCallback(patchResizeCallback(resizeCallback, refreshMode, refreshRate, refreshOptions), [
35
+ resizeCallback,
36
+ refreshMode,
37
+ refreshRate,
38
+ refreshOptions
39
+ ]);
40
+ useEffect(() => {
41
+ let resizeObserver;
42
+ if (refElement) {
43
+ resizeObserver = new window.ResizeObserver(resizeHandler);
44
+ resizeObserver.observe(refElement, observerOptions);
45
+ } else if (size.width || size.height) {
46
+ onResizeRef === null || onResizeRef === void 0 ? void 0 : onResizeRef({
47
+ width: null,
48
+ height: null,
49
+ entry: null
50
+ });
51
+ setSize({ width: void 0, height: void 0 });
52
+ }
53
+ return () => {
54
+ var _a, _b, _c;
55
+ (_a = resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect) === null || _a === void 0 ? void 0 : _a.call(resizeObserver);
56
+ (_c = (_b = resizeHandler).cancel) === null || _c === void 0 ? void 0 : _c.call(_b);
57
+ };
58
+ }, [resizeHandler, refElement]);
59
+ return Object.assign({ ref: refProxy }, size);
60
+ }
32
61
  export {
33
- TeamMenuItem
62
+ useResizeDetector as default
34
63
  };
35
64
  //# sourceMappingURL=harmony57.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony57.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":"harmony57.mjs","sources":["../node_modules/react-resize-detector/build/useResizeDetector.js"],"sourcesContent":["import { useRef, useState, useCallback, useEffect } from 'react';\nimport { useCallbackRef, useRefProxy, getDimensions, patchResizeCallback } from './utils.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction useResizeDetector({ skipOnMount = false, refreshMode, refreshRate = 1000, refreshOptions, handleWidth = true, handleHeight = true, targetRef, observerOptions, onResize, } = {}) {\n // If `skipOnMount` is enabled, skip the first resize event\n const skipResize = useRef(skipOnMount);\n // Wrap the `onResize` callback with a ref to avoid re-renders\n const onResizeRef = useCallbackRef(onResize);\n const [size, setSize] = useState({\n width: undefined,\n height: undefined,\n });\n // Create a proxy ref to handle conditional rendering and dynamic ref changes of the target element\n const { refProxy, refElement } = useRefProxy(targetRef);\n const { box } = observerOptions || {};\n const resizeCallback = useCallback((entries) => {\n if (!handleWidth && !handleHeight)\n return;\n if (skipResize.current) {\n skipResize.current = false;\n return;\n }\n // Only update the size if one of the observed dimensions has changed\n const shouldSetSize = (prevSize, nextSize) => (handleWidth && prevSize.width !== nextSize.width) || (handleHeight && prevSize.height !== nextSize.height);\n entries.forEach((entry) => {\n const dimensions = getDimensions(entry, box);\n setSize((prevSize) => {\n if (!shouldSetSize(prevSize, dimensions))\n return prevSize;\n onResizeRef === null || onResizeRef === void 0 ? void 0 : onResizeRef({\n width: dimensions.width,\n height: dimensions.height,\n entry,\n });\n return dimensions;\n });\n });\n }, [handleWidth, handleHeight, skipResize, box]);\n // Throttle/Debounce the resize event if refreshMode is configured\n const resizeHandler = useCallback(patchResizeCallback(resizeCallback, refreshMode, refreshRate, refreshOptions), [\n resizeCallback,\n refreshMode,\n refreshRate,\n refreshOptions,\n ]);\n // Attach ResizeObserver to the element\n useEffect(() => {\n let resizeObserver;\n if (refElement) {\n resizeObserver = new window.ResizeObserver(resizeHandler);\n resizeObserver.observe(refElement, observerOptions);\n }\n // If refElement is not available, reset the size\n else if (size.width || size.height) {\n onResizeRef === null || onResizeRef === void 0 ? void 0 : onResizeRef({\n width: null,\n height: null,\n entry: null,\n });\n setSize({ width: undefined, height: undefined });\n }\n // Disconnect the ResizeObserver when the component is unmounted\n return () => {\n var _a, _b, _c;\n (_a = resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect) === null || _a === void 0 ? void 0 : _a.call(resizeObserver);\n (_c = (_b = resizeHandler).cancel) === null || _c === void 0 ? void 0 : _c.call(_b);\n };\n }, [resizeHandler, refElement]);\n return Object.assign({ ref: refProxy }, size);\n}\n\nexport { useResizeDetector as default };\n//# sourceMappingURL=useResizeDetector.js.map\n"],"names":[],"mappings":";;AAIA,SAAS,kBAAkB,EAAE,cAAc,OAAO,aAAa,cAAc,KAAM,gBAAgB,cAAc,MAAM,eAAe,MAAM,WAAW,iBAAiB,SAAW,IAAG,IAAI;AAEtL,QAAM,aAAa,OAAO,WAAW;AAErC,QAAM,cAAc,eAAe,QAAQ;AAC3C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS;AAAA,IAC7B,OAAO;AAAA,IACP,QAAQ;AAAA,EAChB,CAAK;AAED,QAAM,EAAE,UAAU,eAAe,YAAY,SAAS;AACtD,QAAM,EAAE,QAAQ,mBAAmB,CAAE;AACrC,QAAM,iBAAiB,YAAY,CAAC,YAAY;AAC5C,QAAI,CAAC,eAAe,CAAC;AACjB;AACJ,QAAI,WAAW,SAAS;AACpB,iBAAW,UAAU;AACrB;AAAA,IACZ;AAEQ,UAAM,gBAAgB,CAAC,UAAU,aAAc,eAAe,SAAS,UAAU,SAAS,SAAW,gBAAgB,SAAS,WAAW,SAAS;AAClJ,YAAQ,QAAQ,CAAC,UAAU;AACvB,YAAM,aAAa,cAAc,OAAO,GAAG;AAC3C,cAAQ,CAAC,aAAa;AAClB,YAAI,CAAC,cAAc,UAAU,UAAU;AACnC,iBAAO;AACX,wBAAgB,QAAQ,gBAAgB,SAAS,SAAS,YAAY;AAAA,UAClE,OAAO,WAAW;AAAA,UAClB,QAAQ,WAAW;AAAA,UACnB;AAAA,QACpB,CAAiB;AACD,eAAO;AAAA,MACvB,CAAa;AAAA,IACb,CAAS;AAAA,EACJ,GAAE,CAAC,aAAa,cAAc,YAAY,GAAG,CAAC;AAE/C,QAAM,gBAAgB,YAAY,oBAAoB,gBAAgB,aAAa,aAAa,cAAc,GAAG;AAAA,IAC7G;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACR,CAAK;AAED,YAAU,MAAM;AACZ,QAAI;AACJ,QAAI,YAAY;AACZ,uBAAiB,IAAI,OAAO,eAAe,aAAa;AACxD,qBAAe,QAAQ,YAAY,eAAe;AAAA,IAC9D,WAEiB,KAAK,SAAS,KAAK,QAAQ;AAChC,sBAAgB,QAAQ,gBAAgB,SAAS,SAAS,YAAY;AAAA,QAClE,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,MACvB,CAAa;AACD,cAAQ,EAAE,OAAO,QAAW,QAAQ,OAAS,CAAE;AAAA,IAC3D;AAEQ,WAAO,MAAM;AACT,UAAI,IAAI,IAAI;AACZ,OAAC,KAAK,mBAAmB,QAAQ,mBAAmB,SAAS,SAAS,eAAe,gBAAgB,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,cAAc;AAC5J,OAAC,MAAM,KAAK,eAAe,YAAY,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,EAAE;AAAA,IACrF;AAAA,EACT,GAAO,CAAC,eAAe,UAAU,CAAC;AAC9B,SAAO,OAAO,OAAO,EAAE,KAAK,SAAQ,GAAI,IAAI;AAChD;","x_google_ignoreList":[0]}
@@ -1,22 +1,9 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("react/jsx-runtime");
4
- const ProfileMenuContext = require("./harmony70.cjs");
5
- const TeamMenuItem = require("./harmony57.cjs");
6
- const TeamSwitch_module = require("./harmony73.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
- );
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const sidebarContainer = "_sidebarContainer_bmdti_1";
4
+ const styles = {
5
+ sidebarContainer
20
6
  };
21
- exports.TeamSwitch = TeamSwitch;
7
+ exports.default = styles;
8
+ exports.sidebarContainer = sidebarContainer;
22
9
  //# sourceMappingURL=harmony58.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony58.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":"harmony58.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -1,22 +1,9 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { useProfileMenu } from "./harmony70.mjs";
3
- import { TeamMenuItem } from "./harmony57.mjs";
4
- import styles from "./harmony73.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
- );
1
+ const sidebarContainer = "_sidebarContainer_bmdti_1";
2
+ const styles = {
3
+ sidebarContainer
18
4
  };
19
5
  export {
20
- TeamSwitch
6
+ styles as default,
7
+ sidebarContainer
21
8
  };
22
9
  //# sourceMappingURL=harmony58.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony58.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":"harmony58.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,34 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
- const louis = require("@lokalise/louis");
5
- const plan = require("./harmony7.cjs");
6
- const UpgradeIcon = require("./harmony74.cjs");
7
- const ProfileMenuContext = require("./harmony70.cjs");
8
- const UpgradeMenuItem_module = require("./harmony75.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
- }
31
- );
32
- };
33
- exports.UpgradeMenuItem = UpgradeMenuItem;
4
+ const Avatar_module = require("./harmony74.cjs");
5
+ const Avatar = ({
6
+ src,
7
+ href = "/",
8
+ ariaLabel = "Lokalise App Home",
9
+ alt = "Lokalise Logo"
10
+ }) => /* @__PURE__ */ jsxRuntime.jsx("a", { className: Avatar_module.default.logoLink, href, "aria-label": ariaLabel, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt }) });
11
+ exports.Avatar = Avatar;
34
12
  //# sourceMappingURL=harmony59.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony59.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":"harmony59.cjs","sources":["../src/components/Sidebar/Widgets/Avatar/Avatar.tsx"],"sourcesContent":["import styles from './Avatar.module.css'\n\ntype AvatarProps = {\n\t/** URL of the avatar/logo image */\n\tsrc: string\n\t/** Link destination when avatar is clicked. Defaults to '/' */\n\thref?: string\n\t/** Accessibility label for the avatar link. Defaults to 'Home' */\n\tariaLabel?: string\n\t/** Alt text for the avatar image. Defaults to 'Lokalise' */\n\talt?: string\n}\n\n/**\n * Display company main avatar / logo in the top section of the Sidebar.\n * Used as the main branding element and home navigation link.\n */\nexport const Avatar = ({\n\tsrc,\n\thref = '/',\n\tariaLabel = 'Lokalise App Home',\n\talt = 'Lokalise Logo',\n}: AvatarProps) => (\n\t<a className={styles.logoLink} href={href} aria-label={ariaLabel}>\n\t\t<img src={src} alt={alt} />\n\t</a>\n)\n"],"names":["jsx","styles"],"mappings":";;;;AAiBO,MAAM,SAAS,CAAC;AAAA,EACtB;AAAA,EACA,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,MAAM;AACP,MACEA,2BAAAA,IAAA,KAAA,EAAE,WAAWC,cAAA,QAAO,UAAU,MAAY,cAAY,WACtD,UAACD,2BAAAA,IAAA,OAAA,EAAI,KAAU,IAAA,CAAU,EAC1B,CAAA;;"}
@@ -1,34 +1,12 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { MenuItem } from "@lokalise/louis";
3
- import { isFreePlan } from "./harmony7.mjs";
4
- import { UpgradeIcon } from "./harmony74.mjs";
5
- import { useProfileMenu } from "./harmony70.mjs";
6
- import styles from "./harmony75.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
- }
29
- );
30
- };
1
+ import { jsx } from "react/jsx-runtime";
2
+ import styles from "./harmony74.mjs";
3
+ const Avatar = ({
4
+ src,
5
+ href = "/",
6
+ ariaLabel = "Lokalise App Home",
7
+ alt = "Lokalise Logo"
8
+ }) => /* @__PURE__ */ jsx("a", { className: styles.logoLink, href, "aria-label": ariaLabel, children: /* @__PURE__ */ jsx("img", { src, alt }) });
31
9
  export {
32
- UpgradeMenuItem
10
+ Avatar
33
11
  };
34
12
  //# sourceMappingURL=harmony59.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"harmony59.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":"harmony59.mjs","sources":["../src/components/Sidebar/Widgets/Avatar/Avatar.tsx"],"sourcesContent":["import styles from './Avatar.module.css'\n\ntype AvatarProps = {\n\t/** URL of the avatar/logo image */\n\tsrc: string\n\t/** Link destination when avatar is clicked. Defaults to '/' */\n\thref?: string\n\t/** Accessibility label for the avatar link. Defaults to 'Home' */\n\tariaLabel?: string\n\t/** Alt text for the avatar image. Defaults to 'Lokalise' */\n\talt?: string\n}\n\n/**\n * Display company main avatar / logo in the top section of the Sidebar.\n * Used as the main branding element and home navigation link.\n */\nexport const Avatar = ({\n\tsrc,\n\thref = '/',\n\tariaLabel = 'Lokalise App Home',\n\talt = 'Lokalise Logo',\n}: AvatarProps) => (\n\t<a className={styles.logoLink} href={href} aria-label={ariaLabel}>\n\t\t<img src={src} alt={alt} />\n\t</a>\n)\n"],"names":[],"mappings":";;AAiBO,MAAM,SAAS,CAAC;AAAA,EACtB;AAAA,EACA,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,MAAM;AACP,MACE,oBAAA,KAAA,EAAE,WAAW,OAAO,UAAU,MAAY,cAAY,WACtD,UAAC,oBAAA,OAAA,EAAI,KAAU,IAAA,CAAU,EAC1B,CAAA;"}
package/dist/harmony6.cjs CHANGED
@@ -2,10 +2,10 @@
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 styles_module = require("./harmony49.cjs");
6
- const DropdownContent = require("./harmony62.cjs");
7
- const NavigationTabsItem = require("./harmony63.cjs");
8
- const helpers = require("./harmony64.cjs");
5
+ const styles_module = require("./harmony56.cjs");
6
+ const DropdownContent = require("./harmony69.cjs");
7
+ const NavigationTabsItem = require("./harmony70.cjs");
8
+ const helpers = require("./harmony71.cjs");
9
9
  const NavigationTabs = ({ navigation, activeItem }) => /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Project", children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: styles_module.default.navigationTabList, "aria-orientation": "horizontal", children: navigation.filter(helpers.isNavigationItemVisible).map((item) => {
10
10
  var _a, _b, _c;
11
11
  if (item.dropdown) {
package/dist/harmony6.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { Menu, MenuList } from "@lokalise/louis";
3
- import classes from "./harmony49.mjs";
4
- import { DropdownContent } from "./harmony62.mjs";
5
- import { NavigationTabsItem } from "./harmony63.mjs";
6
- import { isNavigationItemVisible } from "./harmony64.mjs";
3
+ import classes from "./harmony56.mjs";
4
+ import { DropdownContent } from "./harmony69.mjs";
5
+ import { NavigationTabsItem } from "./harmony70.mjs";
6
+ import { isNavigationItemVisible } from "./harmony71.mjs";
7
7
  const NavigationTabs = ({ navigation, activeItem }) => /* @__PURE__ */ jsx("nav", { "aria-label": "Project", children: /* @__PURE__ */ jsx("ul", { className: classes.navigationTabList, "aria-orientation": "horizontal", children: navigation.filter(isNavigationItemVisible).map((item) => {
8
8
  var _a, _b, _c;
9
9
  if (item.dropdown) {
@@ -1,62 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
- const floatingUi_core = require("./harmony85.cjs");
5
4
  const louis = require("@lokalise/louis");
6
- const useEffectOnce = require("./harmony11.cjs");
7
- const clsx = require("./harmony48.cjs");
8
- const React = require("react");
9
- const Tasks_module = require("./harmony86.cjs");
10
- const TasksContext = require("./harmony87.cjs");
11
- const TasksPopover = require("./harmony88.cjs");
12
- const TasksProvider = require("./harmony89.cjs");
13
- const taskEvents = require("./harmony90.cjs");
14
- const Tasks = TasksProvider.withTasksContext(() => {
15
- const [open, setOpen] = React.useState(false);
16
- const { tasksCount } = TasksContext.useTasks();
17
- useEffectOnce.useEffectOnce(() => {
18
- const showDialog = () => {
19
- setOpen(true);
20
- };
21
- document.addEventListener(taskEvents.TaskEvents.ShowDialog, showDialog);
22
- return () => {
23
- document.removeEventListener(taskEvents.TaskEvents.ShowDialog, showDialog);
24
- };
25
- });
26
- return /* @__PURE__ */ jsxRuntime.jsx(louis.Tooltip, { tooltip: "Tasks", placement: "right", children: /* @__PURE__ */ jsxRuntime.jsx(
27
- louis.Popover,
5
+ const clsx = require("./harmony55.cjs");
6
+ const IconLink_module = require("./harmony75.cjs");
7
+ const IconLink = ({ label, to, icon: Icon }) => {
8
+ return /* @__PURE__ */ jsxRuntime.jsx(louis.Tooltip, { placement: "right", tooltip: label, children: /* @__PURE__ */ jsxRuntime.jsx(
9
+ louis.Link,
28
10
  {
29
- content: /* @__PURE__ */ jsxRuntime.jsx(TasksPopover.TasksPopover, {}),
30
- placement: "right",
31
- open,
32
- onOpenChange: setOpen,
33
- middlewares: [
34
- floatingUi_core.shift({
35
- // Adding some spacing to the top and bottom so the popover
36
- // doesn't extend to the edges of the screen.
37
- padding: {
38
- top: 32,
39
- bottom: 32
40
- }
41
- })
42
- ],
43
- children: (visible) => /* @__PURE__ */ jsxRuntime.jsxs(
44
- louis.Button,
45
- {
46
- type: "button",
47
- "data-testid": "sidebar-tasks-widget-button",
48
- "aria-label": "Tasks",
49
- className: clsx.clsx(Tasks_module.default.navItem, {
50
- [Tasks_module.default.activeNavItem]: visible
51
- }),
52
- children: [
53
- /* @__PURE__ */ jsxRuntime.jsx(louis.JobIcon, { size: "25px" }),
54
- tasksCount > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: Tasks_module.default.badge, "aria-label": `${tasksCount} items requiring attention`, children: tasksCount > 9 ? "9+" : tasksCount })
55
- ]
56
- }
57
- )
11
+ "aria-label": label,
12
+ className: clsx.clsx(IconLink_module.default.link, {
13
+ [IconLink_module.default.active]: window.location.pathname.startsWith(to)
14
+ }),
15
+ href: to,
16
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: "25px" })
58
17
  }
59
18
  ) });
60
- });
61
- exports.Tasks = Tasks;
19
+ };
20
+ exports.IconLink = IconLink;
62
21
  //# sourceMappingURL=harmony60.cjs.map