@lokalise/harmony 1.10.0 → 1.11.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 (62) hide show
  1. package/README.md +62 -0
  2. package/dist/harmony.cjs +1 -1
  3. package/dist/harmony.mjs +923 -507
  4. package/dist/types/src/components/Sidebar/Sidebar.stories.d.ts +0 -84
  5. package/dist/types/src/components/Sidebar/Widgets/Avatar/Avatar.d.ts +6 -1
  6. package/dist/types/src/components/Sidebar/Widgets/IconLink/IconLink.d.ts +11 -1
  7. package/dist/types/src/components/Sidebar/Widgets/Menu/Menu.d.ts +15 -1
  8. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileMenu.d.ts +20 -2
  9. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/ProfileSettingsMenuItem/ProfileSettingsMenuItem.d.ts +32 -2
  10. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamMenuItem/TeamMenuItem.d.ts +26 -3
  11. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/TeamSwitch/TeamSwitch.d.ts +20 -1
  12. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/UpgradeMenuItem/UpgradeMenuItem.d.ts +19 -3
  13. package/dist/types/src/components/Sidebar/Widgets/ProfileMenu/types.d.ts +7 -0
  14. package/dist/types/src/features/auth/backend/services/getAuthenticatedSessionDetailFromRequest.d.ts +10 -0
  15. package/dist/types/src/features/auth/backend/services/getAuthenticatedSessionPayloadFromRequest.test.d.ts +1 -0
  16. package/dist/types/src/features/auth/core/jwtTokenPayload.d.ts +7 -0
  17. package/dist/types/src/features/auth/core/jwtTokenPayload.test.d.ts +1 -0
  18. package/dist/types/src/features/auth/core/lokaliseAuthAddon.d.ts +14 -0
  19. package/dist/types/src/features/auth/core/middleware/jwtAuthMiddleware.d.ts +13 -0
  20. package/dist/types/src/features/auth/core/middleware/jwtAuthMiddleware.test.d.ts +1 -0
  21. package/dist/types/src/features/auth/core/middleware/publicApiHeadersMiddleware.d.ts +5 -0
  22. package/dist/types/src/features/auth/core/types/jwtTokenPayload.d.ts +42 -0
  23. package/dist/types/src/features/auth/core/types/jwtTokenPayload.fixture.d.ts +27 -0
  24. package/dist/types/src/features/auth/core/utils/makeAuthHeader.d.ts +2 -0
  25. package/dist/types/src/features/auth/core/utils/makeAuthHeader.test.d.ts +1 -0
  26. package/dist/types/src/features/auth/frontend/addon/lokaliseAuthBrowserAddon.d.ts +35 -0
  27. package/dist/types/src/features/auth/frontend/events/NewJwtIssuedEvent.d.ts +20 -0
  28. package/dist/types/src/features/auth/frontend/hooks/useAuthenticatedProjectContributor.d.ts +28 -0
  29. package/dist/types/src/features/auth/frontend/hooks/useAuthenticatedSessionPayload.d.ts +18 -0
  30. package/dist/types/src/features/auth/frontend/hooks/useAuthenticatedUser.d.ts +18 -0
  31. package/dist/types/src/features/auth/frontend/hooks/useGetPromotedClassicSessionJwtQuery.d.ts +12 -0
  32. package/dist/types/src/features/auth/frontend/middleware/promoteClassicSessionToJwtMiddleware.d.ts +14 -0
  33. package/dist/types/src/features/auth/frontend/middleware/promoteClassicSessionToJwtMiddleware.test.d.ts +1 -0
  34. package/dist/types/src/features/auth/frontend/utils/cookieTokenUtils.d.ts +4 -0
  35. package/dist/types/src/features/auth/frontend/utils/cookieTokenUtils.test.d.ts +1 -0
  36. package/dist/types/src/features/auth/node.d.ts +9 -0
  37. package/dist/types/src/features/node.d.ts +2 -0
  38. package/dist/types/src/features/publicApi/contributors.d.ts +111 -0
  39. package/dist/types/src/features/publicApi/hooks/useCreateProjectMutation.d.ts +76 -0
  40. package/dist/types/src/features/publicApi/hooks/useGetTeamUsersQuery.d.ts +26 -0
  41. package/dist/types/src/features/publicApi/hooks/useGetUserTokenQuery.d.ts +20 -0
  42. package/dist/types/src/features/publicApi/hooks/useListProjectsQuery.d.ts +81 -0
  43. package/dist/types/src/features/publicApi/hooks/useRetrieveContributorQuery.d.ts +34 -0
  44. package/dist/types/src/features/publicApi/hooks/useRetrieveProjectQuery.d.ts +72 -0
  45. package/dist/types/src/features/publicApi/node.d.ts +16 -0
  46. package/dist/types/src/features/publicApi/projects.d.ts +1132 -0
  47. package/dist/types/src/features/publicApi/teamUsers.d.ts +61 -0
  48. package/dist/types/src/features/publicApi/types/contributorTypes.d.ts +171 -0
  49. package/dist/types/src/features/publicApi/types/languageTypes.d.ts +29 -0
  50. package/dist/types/src/features/publicApi/types/projectTypes.d.ts +1061 -0
  51. package/dist/types/src/features/publicApi/types/teamRoleTypes.d.ts +3 -0
  52. package/dist/types/src/features/publicApi/types/teamUserTypes.d.ts +70 -0
  53. package/dist/types/src/features/publicApi/types/userTokenTypes.d.ts +26 -0
  54. package/dist/types/src/features/publicApi/userToken.d.ts +35 -0
  55. package/dist/types/src/node.d.ts +2 -1
  56. package/dist/types/src/utils/testing/createMockFactoryWithDefaults.d.ts +2 -0
  57. package/dist/types/src/utils/testing/createMockFactoryWithDefaults.test.d.ts +1 -0
  58. package/dist/types/src/utils/testing/deepOverride.d.ts +4 -0
  59. package/dist/types/src/utils/testing/deepOverride.test.d.ts +1 -0
  60. package/dist/types/src/utils/types/apiMutationOverrides.d.ts +2 -0
  61. package/dist/types/src/utils/types/apiQueryOverrides.d.ts +2 -0
  62. package/package.json +13 -2
package/README.md CHANGED
@@ -4,3 +4,65 @@ A temporary shared library designed to house reusable components, such as molecu
4
4
  ## Storybook
5
5
  https://lokalise.github.io/harmony/?path=/story/app-shell-navigationpanel--default&args=sticky:!true
6
6
 
7
+ ## Features
8
+
9
+ ### Authentication
10
+
11
+ This provides a wretch addon for authentication. It is used to add the authentication token to the request headers, and will handle automatic token refreshes.
12
+
13
+ To compliment this, there are a number of convenience hooks and functions to help with authentication in both a frontend and backend context.
14
+
15
+ #### Basic Frontend Usage
16
+
17
+ ```typescript
18
+ import { LokaliseAuthBrowserAddon } from '@lokalise/harmony';
19
+ import wretch from 'wretch';
20
+
21
+ // Add the addon to your client definition
22
+ export const appHttpClient = wretch('...')
23
+ .addon(LokaliseAuthBrowserAddon)
24
+ .errorType('json');
25
+
26
+ // You can create an authenticated client by calling the `lokaliseAuth` method,
27
+ // or you can use this metion to add authentication at a later point.
28
+ export const appAuthenticatedHttpClient = appHttpClient.lokaliseAuth();
29
+
30
+ // Additionally, you can promote a classic session to an authenticated session
31
+ // when configuring a client in the context of a classic PHP CSRF session.
32
+ // this `promoteClassicSession` method will automatically promote the session to JWT
33
+ // but does not apply the authentication token to the request headers.
34
+ // For this you should still chain the `lokaliseAuth` method.
35
+ export const appPromotingHttpClient = appHttpClient.promoteClassicSession({
36
+ getTeamId: async () => 000 /* Get the team ID from somewhere*/,
37
+ });
38
+ ```
39
+
40
+ ### Public API
41
+
42
+ This provides a set of type safe request routes for the public API. They are designed to be used with the `sendByRoute` style functions that accept a wretch client and a route object.
43
+ Additionally, there are a number of convenience hooks and functions to help with public API requests.
44
+
45
+ #### Basic Frontend Usage
46
+
47
+ ```typescript
48
+ import { sendByGetRoute } from '@lokalise/frontend-http-client'
49
+ import { type TeamUserResponse, getTeamUser } from '@lokalise/harmony';
50
+ import { appAuthenticatedHttpClient } from '../path/to/appAuthenticatedHttpClient';
51
+
52
+ const result: TeamUserResponse = await sendByGetRoute(appAuthenticatedHttpClient, getTeamUser, { pathParams: { teamId, userId } });
53
+ ```
54
+
55
+ #### Basic Backend Usage
56
+
57
+ ```typescript
58
+ import { sendByGetRoute } from '@lokalise/backend-http-client'
59
+ import { type TeamUserResponse, getTeamUser } from '@lokalise/harmony';
60
+ import { Client } from 'undici'
61
+
62
+ const result: TeamUserResponse = async (client: Client) => {
63
+ return sendByGetRoute(client, getTeamUser, {
64
+ pathParams: { teamId, userId },
65
+ headers: { 'Authorization': `Bearer token` }
66
+ });
67
+ }
68
+ ```
package/dist/harmony.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),p=require("react"),f=require("@lokalise/louis"),qe=require("date-fns"),Qe=require("date-fns-tz");function en(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const k=en(p);var B=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function De(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var z,fe;function ae(){if(fe)return z;fe=1;function e(n){var t=typeof n;return n!=null&&(t=="object"||t=="function")}return z=e,z}var F,me;function nn(){if(me)return F;me=1;var e=typeof B=="object"&&B&&B.Object===Object&&B;return F=e,F}var W,ge;function Be(){if(ge)return W;ge=1;var e=nn(),n=typeof self=="object"&&self&&self.Object===Object&&self,t=e||n||Function("return this")();return W=t,W}var H,be;function tn(){if(be)return H;be=1;var e=Be(),n=function(){return e.Date.now()};return H=n,H}var G,pe;function rn(){if(pe)return G;pe=1;var e=/\s/;function n(t){for(var r=t.length;r--&&e.test(t.charAt(r)););return r}return G=n,G}var V,he;function an(){if(he)return V;he=1;var e=rn(),n=/^\s+/;function t(r){return r&&r.slice(0,e(r)+1).replace(n,"")}return V=t,V}var Y,_e;function $e(){if(_e)return Y;_e=1;var e=Be(),n=e.Symbol;return Y=n,Y}var Z,ve;function sn(){if(ve)return Z;ve=1;var e=$e(),n=Object.prototype,t=n.hasOwnProperty,r=n.toString,a=e?e.toStringTag:void 0;function s(o){var l=t.call(o,a),u=o[a];try{o[a]=void 0;var c=!0}catch{}var d=r.call(o);return c&&(l?o[a]=u:delete o[a]),d}return Z=s,Z}var X,je;function on(){if(je)return X;je=1;var e=Object.prototype,n=e.toString;function t(r){return n.call(r)}return X=t,X}var J,xe;function cn(){if(xe)return J;xe=1;var e=$e(),n=sn(),t=on(),r="[object Null]",a="[object Undefined]",s=e?e.toStringTag:void 0;function o(l){return l==null?l===void 0?a:r:s&&s in Object(l)?n(l):t(l)}return J=o,J}var K,Te;function ln(){if(Te)return K;Te=1;function e(n){return n!=null&&typeof n=="object"}return K=e,K}var Q,Ie;function un(){if(Ie)return Q;Ie=1;var e=cn(),n=ln(),t="[object Symbol]";function r(a){return typeof a=="symbol"||n(a)&&e(a)==t}return Q=r,Q}var ee,Ne;function dn(){if(Ne)return ee;Ne=1;var e=an(),n=ae(),t=un(),r=NaN,a=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,o=/^0o[0-7]+$/i,l=parseInt;function u(c){if(typeof c=="number")return c;if(t(c))return r;if(n(c)){var d=typeof c.valueOf=="function"?c.valueOf():c;c=n(d)?d+"":d}if(typeof c!="string")return c===0?c:+c;c=e(c);var b=s.test(c);return b||o.test(c)?l(c.slice(2),b?2:8):a.test(c)?r:+c}return ee=u,ee}var ne,we;function Ue(){if(we)return ne;we=1;var e=ae(),n=tn(),t=dn(),r="Expected a function",a=Math.max,s=Math.min;function o(l,u,c){var d,b,T,w,g,j,I=0,N=!1,h=!1,y=!0;if(typeof l!="function")throw new TypeError(r);u=t(u)||0,e(c)&&(N=!!c.leading,h="maxWait"in c,T=h?a(t(c.maxWait)||0,u):T,y="trailing"in c?!!c.trailing:y);function v(m){var S=d,O=b;return d=b=void 0,I=m,w=l.apply(O,S),w}function _(m){return I=m,g=setTimeout(D,u),N?v(m):w}function q(m){var S=m-j,O=m-I,de=u-S;return h?s(de,T-O):de}function le(m){var S=m-j,O=m-I;return j===void 0||S>=u||S<0||h&&O>=T}function D(){var m=n();if(le(m))return ue(m);g=setTimeout(D,q(m))}function ue(m){return g=void 0,y&&d?v(m):(d=b=void 0,w)}function Je(){g!==void 0&&clearTimeout(g),I=0,d=j=b=g=void 0}function Ke(){return g===void 0?w:ue(n())}function U(){var m=n(),S=le(m);if(d=arguments,b=this,j=m,S){if(g===void 0)return _(j);if(h)return clearTimeout(g),g=setTimeout(D,u),v(j)}return g===void 0&&(g=setTimeout(D,u)),w}return U.cancel=Je,U.flush=Ke,U}return ne=o,ne}var fn=Ue();const mn=De(fn);var te,ye;function gn(){if(ye)return te;ye=1;var e=Ue(),n=ae(),t="Expected a function";function r(a,s,o){var l=!0,u=!0;if(typeof a!="function")throw new TypeError(t);return n(o)&&(l="leading"in o?!!o.leading:l,u="trailing"in o?!!o.trailing:u),e(a,s,{leading:l,maxWait:s,trailing:u})}return te=r,te}var bn=gn();const pn=De(bn),hn=(e,n,t,r)=>{switch(n){case"debounce":return mn(e,t,r);case"throttle":return pn(e,t,r);default:return e}},_n=e=>{const n=k.useRef(e);return k.useEffect(()=>{n.current=e}),k.useMemo(()=>(...t)=>{var r;return(r=n.current)===null||r===void 0?void 0:r.call(n,...t)},[])},vn=e=>{const[n,t]=k.useState((e==null?void 0:e.current)||null);return e&&setTimeout(()=>{e.current!==n&&t(e.current)},0),{refProxy:k.useMemo(()=>new Proxy(a=>{a!==n&&t(a)},{get(a,s){return s==="current"?n:a[s]},set(a,s,o){return s==="current"?t(o):a[s]=o,!0}}),[n]),refElement:n,setRefElement:t}},jn=(e,n)=>n==="border-box"?{width:e.borderBoxSize[0].inlineSize,height:e.borderBoxSize[0].blockSize}:n==="content-box"?{width:e.contentBoxSize[0].inlineSize,height:e.contentBoxSize[0].blockSize}:{width:e.contentRect.width,height:e.contentRect.height};function xn({skipOnMount:e=!1,refreshMode:n,refreshRate:t=1e3,refreshOptions:r,handleWidth:a=!0,handleHeight:s=!0,targetRef:o,observerOptions:l,onResize:u}={}){const c=p.useRef(e),d=_n(u),[b,T]=p.useState({width:void 0,height:void 0}),{refProxy:w,refElement:g}=vn(o),{box:j}=l||{},I=p.useCallback(h=>{if(!a&&!s)return;if(c.current){c.current=!1;return}const y=(v,_)=>a&&v.width!==_.width||s&&v.height!==_.height;h.forEach(v=>{const _=jn(v,j);T(q=>y(q,_)?(d==null||d({width:_.width,height:_.height,entry:v}),_):q)})},[a,s,c,j]),N=p.useCallback(hn(I,n,t,r),[I,n,t,r]);return p.useEffect(()=>{let h;return g?(h=new window.ResizeObserver(N),h.observe(g,l)):(b.width||b.height)&&(d==null||d({width:null,height:null,entry:null}),T({width:void 0,height:void 0})),()=>{var y,v,_;(y=h==null?void 0:h.disconnect)===null||y===void 0||y.call(h),(_=(v=N).cancel)===null||_===void 0||_.call(v)}},[N,g]),Object.assign({ref:w},b)}function ze(e){var n,t,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(n=0;n<a;n++)e[n]&&(t=ze(e[n]))&&(r&&(r+=" "),r+=t)}else for(t in e)e[t]&&(r&&(r+=" "),r+=t);return r}function L(){for(var e,n,t=0,r="",a=arguments.length;t<a;t++)(e=arguments[t])&&(n=ze(e))&&(r&&(r+=" "),r+=n);return r}const Tn="_headerContainer_1cubo_1",In="_navigationTabList_1cubo_8",Nn="_navigationTab_1cubo_8",wn="_headerContent_1cubo_34",yn="_staticEnabled_1cubo_50",C={headerContainer:Tn,navigationTabList:In,navigationTab:Nn,headerContent:wn,staticEnabled:yn},Sn=77,A=({sticky:e,children:n})=>{const{ref:t,height:r}=xn({refreshMode:"debounce",refreshRate:0}),[a,s]=p.useState(!1),o=()=>a?!e:!0;p.useEffect(()=>{const u=()=>{s(window.scrollY>0)};return window.addEventListener("scroll",u),()=>window.removeEventListener("scroll",u)},[]);const l=`${r||Sn}px`;return i.jsx("div",{style:{minHeight:l},children:i.jsx("div",{children:i.jsxs("div",{ref:t,className:L(C.headerContent,{[C.staticEnabled]:o()}),children:[i.jsx(A.Header,{}),i.jsx(A.Tabs,{}),n]})})})};A.Header=({children:e})=>i.jsx("div",{className:C.headerContainer,children:e});A.Tabs=({children:e})=>i.jsx("div",{className:"flex justify-between gap-2 nowrap",children:e});const Pn="_sidebarContainer_bmdti_1",En={sidebarContainer:Pn},Ln="_logoLink_1baxb_1",Rn={logoLink:Ln},Cn=({src:e,href:n="/",ariaLabel:t="Home",alt:r="Lokalise"})=>i.jsx("a",{className:Rn.logoLink,href:n,"aria-label":t,children:i.jsx("img",{src:e,alt:r})}),On="_link_1weq1_1",kn="_active_1weq1_18",Se={link:On,active:kn},An=({label:e,to:n,icon:t})=>i.jsx(f.Tooltip,{placement:"right",tooltip:e,children:i.jsx(f.Link,{className:L(Se.link,{[Se.active]:window.location.pathname.startsWith(n)}),href:n,children:i.jsx(t,{size:"25px"})})}),Mn="_dropdownButton_hwh0c_1",qn="_dropdownButtonActive_hwh0c_18",Pe={dropdownButton:Mn,dropdownButtonActive:qn},Dn=({children:e,icon:n})=>i.jsx(f.Menu,{menuButton:({opened:t})=>i.jsx(f.Tooltip,{placement:"right",tooltip:"Help",children:i.jsx("button",{type:"button",className:L(Pe.dropdownButton,{[Pe.dropdownButtonActive]:t}),children:i.jsx(n,{size:"25px"})})}),children:i.jsx(f.MenuList,{placement:"right-start",children:e})}),Bn="_iconContainer_nz34m_1",$n={iconContainer:Bn},Fe=({className:e=""})=>i.jsx("div",{"aria-label":"Upgrade Icon",className:L($n.iconContainer,"flex-row","items-center","justify-center",e),children:i.jsx(f.CaretUpIcon,{})}),Un="_menuContainer_wbu3u_5",zn="_profileButton_wbu3u_16",Fn="_profileImage_wbu3u_29",Wn="_profileImageHighlight_wbu3u_37",Hn="_profileImageUpgradeIcon_wbu3u_41",Gn="_userIconWrapper_wbu3u_47",P={menuContainer:Un,profileButton:zn,profileImage:Fn,profileImageHighlight:Wn,profileImageUpgradeIcon:Hn,userIconWrapper:Gn},We=p.createContext({}),M=()=>p.useContext(We),Vn=({children:e})=>{const{currentTeam:n,otherTeams:t,showUpgradeCta:r,showBillingButton:a,allowTeamCreation:s,isProviderAlpha:o,canAccessTeamSettings:l,isEndOfTrialActive:u,isTeamSuspended:c,isFullyAuthenticated:d}=M();return i.jsx(f.Menu,{menuButton:()=>i.jsxs("button",{className:P.profileButton,"aria-label":"Profile menu",type:"button",children:[n!=null&&n.logoUrl?i.jsx("img",{src:n.logoUrl,className:L(P.profileImage,{[P.profileImageHighlight]:r}),alt:"Team Logo"}):i.jsx("div",{className:L(P.userIconWrapper,"flex-row","align-center","items-center",{[P.profileImageHighlight]:r}),children:i.jsx(f.UserIcon,{size:"25px"})}),r&&i.jsx(Fe,{className:P.profileImageUpgradeIcon})]}),children:i.jsx(f.MenuList,{placement:"right-end",className:P.menuContainer,children:e({allowTeamCreation:s,otherTeams:t,canAccessTeamSettings:l,isEndOfTrialActive:u,isTeamSuspended:c,showBillingButton:a,isProviderAlpha:o,isFullyAuthenticated:d})})})},se=0,He=9999,Ge=[150,151,250,251],Ve=[152,153,252,253],Ye=[154,155,157,158,254,255,258,354,355,358],Ze=[156,159,160,256,259,260],oe=9998,$=e=>e===se,ce=e=>e===He,Yn=e=>Ge.includes(e),Zn=e=>Ve.includes(e),Xn=e=>Ye.includes(e),Jn=e=>Ze.includes(e),Kn=e=>e>se&&e<oe,Qn=e=>e===oe,et=/\n/,Ee=(e,n,t)=>e.split(n).flatMap((r,a)=>a!==0?[p.cloneElement(t,{key:Math.random().toString(32).slice(0,10)}),r]:r),nt=(e,n,t)=>typeof e=="string"?Ee(e,n,t):e.flatMap(r=>typeof r=="string"?Ee(r,n,t):r),tt=e=>nt(e,et,i.jsx("br",{})),rt=/(\b(https?|):\/\/[-a-zA-Zа-яА-Я0-9+&@#/%?=~_|!:,.;]*[-a-zA-Zа-яА-Я0-9+&@#/%=~_|])/gi,it=e=>e.match(rt)??[],Le=(e,n,t)=>{const r=e.split(n);if(r.length===1)return e;const a=[];return r[0]!==""&&a.push(r[0]),r.shift(),r[r.length-1]===""&&r.pop(),a.push(i.jsx("a",{href:n,target:"_blank",rel:"noreferrer noopener",children:n},n+t)),a.push(r.join(n)),a.filter(s=>s!=="")},Re=e=>{const n=it(e);return n!=null&&n.length?n.reduce((t,r,a)=>typeof t=="string"?Le(t,r,a):t.flatMap(s=>typeof s=="string"?Le(s,r,a):s),e):e},at=e=>typeof e=="string"?Re(e):e.flatMap(n=>typeof n=="string"?Re(n):n,e),st=(e,n="PP")=>qe.format(e,n),ot=(e,n,t="PP")=>qe.format(Qe.toZonedTime(e,n),t),ct=e=>{p.useEffect(e,[])},Ce={biller:"biller",owner:"owner"},Oe=[Ce.biller,Ce.owner],lt=({children:e,config:n})=>{const{teams:t,currentTeamId:r,planId:a,isEndOfTrialActive:s,isFullyAuthenticated:o,userTeamRole:l}=n,u=t.find(N=>N.id===r),c=t.filter(N=>N.id!==r),d=Oe.includes(l),b=Oe.includes(l),T=$(a)||ce(a),I={...n,currentTeam:u,otherTeams:c,canChangeBilling:d,canAccessTeamSettings:b,isOnFreeOrTrialPlan:T,showUpgradeCta:o&&T&&d,showBillingButton:o&&b&&d,allowTeamCreation:o&&!s};return i.jsx(We.Provider,{value:I,children:e})},ut=({config:e,children:n})=>i.jsx(lt,{config:e,children:i.jsx(Vn,{children:n})}),dt="_container_q5pot_1",ft="_profileEmail_q5pot_5",ke={container:dt,profileEmail:ft},mt=({href:e,onClick:n,userEmail:t,hideBottomDivider:r})=>{const{isEndOfTrialActive:a,isTeamSuspended:s}=M();return a||s?null:i.jsxs(i.Fragment,{children:[i.jsx(f.MenuItem,{href:e,onClick:()=>{n==null||n()},children:i.jsxs("div",{className:`flex-col ${ke.container}`,children:[i.jsx("span",{children:"Profile Settings"}),i.jsx("span",{className:ke.profileEmail,children:t})]})}),!r&&i.jsx(f.MenuDivider,{})]})},gt="_wrapper_15d85_1",bt="_profileImage_15d85_14",pt="_teamName_15d85_22",ht="_planLabel_15d85_29",_t="_membership_15d85_38",vt="_defaultProfileImage_15d85_44",R={wrapper:gt,profileImage:bt,teamName:pt,planLabel:ht,membership:_t,defaultProfileImage:vt},Xe=({team:e,onClick:n,hidePlanLabel:t})=>{const{currentTeam:r,planId:a}=M(),s=e||r;if(!s)return null;const o=$(a)?"Free":ce(a)?"Trial":void 0,l=n?f.MenuItem:"div";return i.jsxs(l,{className:`flex-row gap-2 flex-nowrap items-center ${R.wrapper}`,...n&&{onClick:()=>n(s)},children:[s.logoUrl?i.jsx("img",{className:R.profileImage,src:s.logoUrl,alt:"Team Logo"}):i.jsx("span",{className:`flex-row justify-center items-center ${R.defaultProfileImage}`,children:i.jsx(f.UserIcon,{size:"25px"})}),i.jsxs("div",{className:"flex-col items-start",children:[i.jsxs("div",{className:"flex-row items-center flex-nowrap gap-2",children:[i.jsx("span",{title:s.name,className:R.teamName,children:s.name}),o&&!t&&i.jsx("span",{className:`flex-row justify-center items-center ${R.planLabel}`,children:o})]}),i.jsx("span",{className:R.membership,children:s.role})]})]})},jt="_teamsContainer_1t68g_1",xt={teamsContainer:jt},Tt=({onSwitchTeam:e})=>{const{otherTeams:n}=M();return n.length===0?null:i.jsx("div",{className:`flex-col items-stretch ${xt.teamsContainer}`,children:n.map(t=>i.jsx(Xe,{team:t,onClick:e,hidePlanLabel:!0},t.id))})},It="_container_1u995_1",Nt="_planCta_1u995_15",wt="_upgradeIconWrapper_1u995_19",re={container:It,planCta:Nt,upgradeIconWrapper:wt},yt=({upgradeOptionHref:e})=>{const{planId:n,trialDaysLeft:t,showUpgradeCta:r}=M();if(!r)return null;const o=$(n)?"Your team is currently on the Free plan":`Free trial ends in ${t} ${t===1?"day":"days"}`;return i.jsxs(f.MenuItem,{href:e,className:`flex-col gap-1 items-start ${re.container}`,children:[i.jsx("span",{className:re.planCta,children:o}),i.jsxs("div",{className:`flex-row items-center gap-1 ${re.upgradeIconWrapper}`,children:[i.jsx(Fe,{}),i.jsx("span",{children:"See upgrade options"})]})]})},x=({children:e,...n})=>i.jsx("nav",{...n,className:En.sidebarContainer,children:e}),St=({children:e})=>i.jsx("div",{children:e});x.Top=St;const Pt=({children:e})=>i.jsx("div",{children:e});x.Bottom=Pt;x.Avatar=Cn;x.IconLink=An;x.Menu=Dn;x.ProfileMenu=ut;x.TeamSwitch=Tt;x.TeamMenuItem=Xe;x.UpgradeMenuItem=yt;x.ProfileSettingsMenuItem=mt;const Et="_breadcrumbsItem_1hm6a_1",Lt="_breadcrumbs_1hm6a_1",Ae={breadcrumbsItem:Et,breadcrumbs:Lt},Rt=({items:e})=>i.jsx("nav",{"aria-label":"breadcrumb",className:Ae.breadcrumbs,children:e.map((n,t)=>i.jsxs(p.Fragment,{children:[i.jsx(f.Link,{className:Ae.breadcrumbsItem,href:n.link,rel:"noreferrer",children:n.name}),t<e.length-1&&i.jsx("span",{children:" — "})]},`${n.link}-${n.name}`))}),Ct=({items:e})=>i.jsx(i.Fragment,{children:e.map((n,t)=>i.jsxs(p.Fragment,{children:[!!t&&n.some(r=>r.visible)&&i.jsx(f.MenuDivider,{}),n.filter(({visible:r})=>r).map(({link:r,label:a,onClick:s})=>i.jsx(f.MenuItem,{href:r||"#","aria-label":a,onClick:s,children:a},a))]},n[0].label))}),Ot="_badge_1pc1v_1",kt="_tag_1pc1v_15",At="_withNavLinkStyle_1pc1v_42 _withLinkStyle_1pc1v_21",Mt="_disabled_1pc1v_57",qt="_projectNavigationItem_1pc1v_61",Dt="_projectNavigationItemDisabled_1pc1v_67",E={badge:Ot,tag:kt,withNavLinkStyle:At,disabled:Mt,projectNavigationItem:qt,projectNavigationItemDisabled:Dt},Me=({label:e,badge:n,novel:t})=>i.jsxs("div",{className:"flex gap-1",children:[i.jsxs("div",{children:[i.jsx("span",{children:e}),!!n&&i.jsx("div",{className:E.badge,"aria-label":`${n} items requiring attention`,children:n>9?"9+":n})]}),!!t&&i.jsx(f.Tag,{className:E.tag,children:t})]}),ie=p.forwardRef(({label:e,href:n="",disabled:t=!1,badge:r,onClick:a,novel:s},o)=>i.jsx(f.Tooltip,{tooltip:"You do not have access to this function",show:t,children:i.jsx("div",{className:t?E.projectNavigationItemDisabled:E.projectNavigationItem,children:a||t||!n?i.jsx("button",{type:"button",ref:o,className:L(E.withNavLinkStyle,{[E.disabled]:t}),disabled:t,onClick:a,children:i.jsx(Me,{label:e,badge:r,novel:s})}):i.jsx("a",{href:n,className:E.withNavLinkStyle,children:i.jsx(Me,{label:e,badge:r,novel:s})})})}));ie.displayName="NavigationTabsItem";const Bt=e=>(e==null?void 0:e.some(n=>n.some(t=>t.visible)))??!1,$t=e=>e.visible&&(!e.dropdown||Bt(e.dropdown)),Ut=({navigation:e,activeItem:n})=>i.jsx("nav",{"aria-label":"Project",children:i.jsx("ul",{className:C.navigationTabList,"aria-orientation":"horizontal",children:e.filter($t).map(t=>{var r,a,s;return t.dropdown?i.jsx("li",{className:C.navigationTab,"data-testid":t.key,"aria-selected":(r=t.isActive)==null?void 0:r.call(t,n),children:i.jsx(f.Menu,{menuButton:({opened:o})=>i.jsx(ie,{label:t.label,disabled:t.disabled,active:o}),children:i.jsx(f.MenuList,{children:i.jsx(Ct,{items:t.dropdown})})})},t.key):i.jsx("li",{className:C.navigationTab,"data-testid":t.key,"aria-selected":(a=t.isActive)==null?void 0:a.call(t,n),children:i.jsx(ie,{label:t.label,href:t.link,onClick:t.onClick,disabled:t.disabled,badge:t.badge,novel:t.novel,active:(s=t.isActive)==null?void 0:s.call(t,n)})},t.key)})})});exports.Breadcrumbs=Rt;exports.ENTERPRISE_OPENSOURCE_PLAN_ID=oe;exports.ENTERPRISE_PLAN_IDS=Ze;exports.ESSENTIAL_PLAN_IDS=Ve;exports.FREE_PLAN_ID=se;exports.NavigationPanel=A;exports.NavigationTabs=Ut;exports.PRO_PLAN_IDS=Ye;exports.START_PLAN_IDS=Ge;exports.Sidebar=x;exports.TRIAL_PLAN_ID=He;exports.convertNewLineToBreakTag=tt;exports.formatDate=st;exports.formatDateTz=ot;exports.isEnterpriseOpenSourcePlan=Qn;exports.isEnterprisePlan=Jn;exports.isEssentialPlan=Zn;exports.isFreePlan=$;exports.isPaidPlan=Kn;exports.isProPlan=Xn;exports.isStartPlan=Yn;exports.isTrialPlan=ce;exports.makeUrlClickable=at;exports.useEffectOnce=ct;
1
+ "use strict";var kt=Object.defineProperty;var Nt=(e,t,n)=>t in e?kt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Ie=(e,t,n)=>Nt(e,typeof t!="symbol"?t+"":t,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),_=require("react"),f=require("@lokalise/louis"),et=require("date-fns"),Ct=require("date-fns-tz"),r=require("zod"),x=require("@lokalise/frontend-http-client"),tt=require("@lokalise/universal-ts-utils/api-contracts/apiContracts"),O=require("@tanstack/react-query"),J=require("@lokalise/universal-ts-utils/node");function At(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const s=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,s.get?s:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const M=At(_);var G=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function nt(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Z,Pe;function ge(){if(Pe)return Z;Pe=1;function e(t){var n=typeof t;return t!=null&&(n=="object"||n=="function")}return Z=e,Z}var X,xe;function Lt(){if(xe)return X;xe=1;var e=typeof G=="object"&&G&&G.Object===Object&&G;return X=e,X}var ee,Re;function rt(){if(Re)return ee;Re=1;var e=Lt(),t=typeof self=="object"&&self&&self.Object===Object&&self,n=e||t||Function("return this")();return ee=n,ee}var te,ke;function Ot(){if(ke)return te;ke=1;var e=rt(),t=function(){return e.Date.now()};return te=t,te}var ne,Ne;function qt(){if(Ne)return ne;Ne=1;var e=/\s/;function t(n){for(var s=n.length;s--&&e.test(n.charAt(s)););return s}return ne=t,ne}var re,Ce;function Mt(){if(Ce)return re;Ce=1;var e=qt(),t=/^\s+/;function n(s){return s&&s.slice(0,e(s)+1).replace(t,"")}return re=n,re}var se,Ae;function st(){if(Ae)return se;Ae=1;var e=rt(),t=e.Symbol;return se=t,se}var ae,Le;function Ut(){if(Le)return ae;Le=1;var e=st(),t=Object.prototype,n=t.hasOwnProperty,s=t.toString,a=e?e.toStringTag:void 0;function i(c){var l=n.call(c,a),d=c[a];try{c[a]=void 0;var u=!0}catch{}var m=s.call(c);return u&&(l?c[a]=d:delete c[a]),m}return ae=i,ae}var oe,Oe;function Bt(){if(Oe)return oe;Oe=1;var e=Object.prototype,t=e.toString;function n(s){return t.call(s)}return oe=n,oe}var ie,qe;function Dt(){if(qe)return ie;qe=1;var e=st(),t=Ut(),n=Bt(),s="[object Null]",a="[object Undefined]",i=e?e.toStringTag:void 0;function c(l){return l==null?l===void 0?a:s:i&&i in Object(l)?t(l):n(l)}return ie=c,ie}var ce,Me;function Ht(){if(Me)return ce;Me=1;function e(t){return t!=null&&typeof t=="object"}return ce=e,ce}var ue,Ue;function $t(){if(Ue)return ue;Ue=1;var e=Dt(),t=Ht(),n="[object Symbol]";function s(a){return typeof a=="symbol"||t(a)&&e(a)==n}return ue=s,ue}var le,Be;function Gt(){if(Be)return le;Be=1;var e=Mt(),t=ge(),n=$t(),s=NaN,a=/^[-+]0x[0-9a-f]+$/i,i=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt;function d(u){if(typeof u=="number")return u;if(n(u))return s;if(t(u)){var m=typeof u.valueOf=="function"?u.valueOf():u;u=t(m)?m+"":m}if(typeof u!="string")return u===0?u:+u;u=e(u);var h=i.test(u);return h||c.test(u)?l(u.slice(2),h?2:8):a.test(u)?s:+u}return le=d,le}var de,De;function at(){if(De)return de;De=1;var e=ge(),t=Ot(),n=Gt(),s="Expected a function",a=Math.max,i=Math.min;function c(l,d,u){var m,h,z,E,g,y,S=0,w=!1,p=!1,I=!0;if(typeof l!="function")throw new TypeError(s);d=n(d)||0,e(u)&&(w=!!u.leading,p="maxWait"in u,z=p?a(n(u.maxWait)||0,d):z,I="trailing"in u?!!u.trailing:I);function v(b){var P=m,q=h;return m=h=void 0,S=b,E=l.apply(q,P),E}function T(b){return S=b,g=setTimeout($,d),w?v(b):E}function H(b){var P=b-y,q=b-S,Ee=d-P;return p?i(Ee,z-q):Ee}function Se(b){var P=b-y,q=b-S;return y===void 0||P>=d||P<0||p&&q>=z}function $(){var b=t();if(Se(b))return we(b);g=setTimeout($,H(b))}function we(b){return g=void 0,I&&m?v(b):(m=h=void 0,E)}function xt(){g!==void 0&&clearTimeout(g),S=0,m=y=h=g=void 0}function Rt(){return g===void 0?E:we(t())}function V(){var b=t(),P=Se(b);if(m=arguments,h=this,y=b,P){if(g===void 0)return T(y);if(p)return clearTimeout(g),g=setTimeout($,d),v(y)}return g===void 0&&(g=setTimeout($,d)),E}return V.cancel=xt,V.flush=Rt,V}return de=c,de}var Ft=at();const Qt=nt(Ft);var me,He;function Kt(){if(He)return me;He=1;var e=at(),t=ge(),n="Expected a function";function s(a,i,c){var l=!0,d=!0;if(typeof a!="function")throw new TypeError(n);return t(c)&&(l="leading"in c?!!c.leading:l,d="trailing"in c?!!c.trailing:d),e(a,i,{leading:l,maxWait:i,trailing:d})}return me=s,me}var Jt=Kt();const Wt=nt(Jt),Yt=(e,t,n,s)=>{switch(t){case"debounce":return Qt(e,n,s);case"throttle":return Wt(e,n,s);default:return e}},Vt=e=>{const t=M.useRef(e);return M.useEffect(()=>{t.current=e}),M.useMemo(()=>(...n)=>{var s;return(s=t.current)===null||s===void 0?void 0:s.call(t,...n)},[])},Zt=e=>{const[t,n]=M.useState((e==null?void 0:e.current)||null);return e&&setTimeout(()=>{e.current!==t&&n(e.current)},0),{refProxy:M.useMemo(()=>new Proxy(a=>{a!==t&&n(a)},{get(a,i){return i==="current"?t:a[i]},set(a,i,c){return i==="current"?n(c):a[i]=c,!0}}),[t]),refElement:t,setRefElement:n}},Xt=(e,t)=>t==="border-box"?{width:e.borderBoxSize[0].inlineSize,height:e.borderBoxSize[0].blockSize}:t==="content-box"?{width:e.contentBoxSize[0].inlineSize,height:e.contentBoxSize[0].blockSize}:{width:e.contentRect.width,height:e.contentRect.height};function en({skipOnMount:e=!1,refreshMode:t,refreshRate:n=1e3,refreshOptions:s,handleWidth:a=!0,handleHeight:i=!0,targetRef:c,observerOptions:l,onResize:d}={}){const u=_.useRef(e),m=Vt(d),[h,z]=_.useState({width:void 0,height:void 0}),{refProxy:E,refElement:g}=Zt(c),{box:y}=l||{},S=_.useCallback(p=>{if(!a&&!i)return;if(u.current){u.current=!1;return}const I=(v,T)=>a&&v.width!==T.width||i&&v.height!==T.height;p.forEach(v=>{const T=Xt(v,y);z(H=>I(H,T)?(m==null||m({width:T.width,height:T.height,entry:v}),T):H)})},[a,i,u,y]),w=_.useCallback(Yt(S,t,n,s),[S,t,n,s]);return _.useEffect(()=>{let p;return g?(p=new window.ResizeObserver(w),p.observe(g,l)):(h.width||h.height)&&(m==null||m({width:null,height:null,entry:null}),z({width:void 0,height:void 0})),()=>{var I,v,T;(I=p==null?void 0:p.disconnect)===null||I===void 0||I.call(p),(T=(v=w).cancel)===null||T===void 0||T.call(v)}},[w,g]),Object.assign({ref:E},h)}function ot(e){var t,n,s="";if(typeof e=="string"||typeof e=="number")s+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=ot(e[t]))&&(s&&(s+=" "),s+=n)}else for(n in e)e[n]&&(s&&(s+=" "),s+=n);return s}function N(){for(var e,t,n=0,s="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=ot(e))&&(s&&(s+=" "),s+=t);return s}const tn="_headerContainer_1cubo_1",nn="_navigationTabList_1cubo_8",rn="_navigationTab_1cubo_8",sn="_headerContent_1cubo_34",an="_staticEnabled_1cubo_50",A={headerContainer:tn,navigationTabList:nn,navigationTab:rn,headerContent:sn,staticEnabled:an},on=77,U=({sticky:e,children:t})=>{const{ref:n,height:s}=en({refreshMode:"debounce",refreshRate:0}),[a,i]=_.useState(!1),c=()=>a?!e:!0;_.useEffect(()=>{const d=()=>{i(window.scrollY>0)};return window.addEventListener("scroll",d),()=>window.removeEventListener("scroll",d)},[]);const l=`${s||on}px`;return o.jsx("div",{style:{minHeight:l},children:o.jsx("div",{children:o.jsxs("div",{ref:n,className:N(A.headerContent,{[A.staticEnabled]:c()}),children:[o.jsx(U.Header,{}),o.jsx(U.Tabs,{}),t]})})})};U.Header=({children:e})=>o.jsx("div",{className:A.headerContainer,children:e});U.Tabs=({children:e})=>o.jsx("div",{className:"flex justify-between gap-2 nowrap",children:e});const cn="_sidebarContainer_bmdti_1",un={sidebarContainer:cn},ln="_logoLink_1baxb_1",dn={logoLink:ln},mn=({src:e,href:t="/",ariaLabel:n="Home",alt:s="Lokalise"})=>o.jsx("a",{className:dn.logoLink,href:t,"aria-label":n,children:o.jsx("img",{src:e,alt:s})}),fn="_link_1weq1_1",bn="_active_1weq1_18",$e={link:fn,active:bn},_n=({label:e,to:t,icon:n})=>o.jsx(f.Tooltip,{placement:"right",tooltip:e,children:o.jsx(f.Link,{className:N($e.link,{[$e.active]:window.location.pathname.startsWith(t)}),href:t,children:o.jsx(n,{size:"25px"})})}),gn="_dropdownButton_hwh0c_1",hn="_dropdownButtonActive_hwh0c_18",Ge={dropdownButton:gn,dropdownButtonActive:hn},pn=({children:e,icon:t})=>o.jsx(f.Menu,{menuButton:({opened:n})=>o.jsx(f.Tooltip,{placement:"right",tooltip:"Help",children:o.jsx("button",{type:"button",className:N(Ge.dropdownButton,{[Ge.dropdownButtonActive]:n}),children:o.jsx(t,{size:"25px"})})}),children:o.jsx(f.MenuList,{placement:"right-start",children:e})}),Tn="_iconContainer_nz34m_1",vn={iconContainer:Tn},it=({className:e=""})=>o.jsx("div",{"aria-label":"Upgrade Icon",className:N(vn.iconContainer,"flex-row","items-center","justify-center",e),children:o.jsx(f.CaretUpIcon,{})}),yn="_menuContainer_wbu3u_5",jn="_profileButton_wbu3u_16",zn="_profileImage_wbu3u_29",Sn="_profileImageHighlight_wbu3u_37",wn="_profileImageUpgradeIcon_wbu3u_41",En="_userIconWrapper_wbu3u_47",R={menuContainer:yn,profileButton:jn,profileImage:zn,profileImageHighlight:Sn,profileImageUpgradeIcon:wn,userIconWrapper:En},ct=_.createContext({}),B=()=>_.useContext(ct),In=({children:e})=>{const{currentTeam:t,otherTeams:n,showUpgradeCta:s,showBillingButton:a,allowTeamCreation:i,isProviderAlpha:c,canAccessTeamSettings:l,isEndOfTrialActive:d,isTeamSuspended:u,isFullyAuthenticated:m}=B();return o.jsx(f.Menu,{menuButton:()=>o.jsxs("button",{className:R.profileButton,"aria-label":"Profile menu",type:"button",children:[t!=null&&t.logoUrl?o.jsx("img",{src:t.logoUrl,className:N(R.profileImage,{[R.profileImageHighlight]:s}),alt:"Team Logo"}):o.jsx("div",{className:N(R.userIconWrapper,"flex-row","align-center","items-center",{[R.profileImageHighlight]:s}),children:o.jsx(f.UserIcon,{size:"25px"})}),s&&o.jsx(it,{className:R.profileImageUpgradeIcon})]}),children:o.jsx(f.MenuList,{placement:"right-end",className:R.menuContainer,children:e({allowTeamCreation:i,otherTeams:n,canAccessTeamSettings:l,isEndOfTrialActive:d,isTeamSuspended:u,showBillingButton:a,isProviderAlpha:c,isFullyAuthenticated:m})})})},he=0,ut=9999,lt=[150,151,250,251],dt=[152,153,252,253],mt=[154,155,157,158,254,255,258,354,355,358],ft=[156,159,160,256,259,260],pe=9998,W=e=>e===he,Te=e=>e===ut,Pn=e=>lt.includes(e),xn=e=>dt.includes(e),Rn=e=>mt.includes(e),kn=e=>ft.includes(e),Nn=e=>e>he&&e<pe,Cn=e=>e===pe,An=/\n/,Fe=(e,t,n)=>e.split(t).flatMap((s,a)=>a!==0?[_.cloneElement(n,{key:Math.random().toString(32).slice(0,10)}),s]:s),Ln=(e,t,n)=>typeof e=="string"?Fe(e,t,n):e.flatMap(s=>typeof s=="string"?Fe(s,t,n):s),On=e=>Ln(e,An,o.jsx("br",{})),qn=/(\b(https?|):\/\/[-a-zA-Zа-яА-Я0-9+&@#/%?=~_|!:,.;]*[-a-zA-Zа-яА-Я0-9+&@#/%=~_|])/gi,Mn=e=>e.match(qn)??[],Qe=(e,t,n)=>{const s=e.split(t);if(s.length===1)return e;const a=[];return s[0]!==""&&a.push(s[0]),s.shift(),s[s.length-1]===""&&s.pop(),a.push(o.jsx("a",{href:t,target:"_blank",rel:"noreferrer noopener",children:t},t+n)),a.push(s.join(t)),a.filter(i=>i!=="")},Ke=e=>{const t=Mn(e);return t!=null&&t.length?t.reduce((n,s,a)=>typeof n=="string"?Qe(n,s,a):n.flatMap(i=>typeof i=="string"?Qe(i,s,a):i),e):e},Un=e=>typeof e=="string"?Ke(e):e.flatMap(t=>typeof t=="string"?Ke(t):t,e),Bn=(e,t="PP")=>et.format(e,t),Dn=(e,t,n="PP")=>et.format(Ct.toZonedTime(e,t),n),Hn=e=>{_.useEffect(e,[])},Je={biller:"biller",owner:"owner"},We=[Je.biller,Je.owner],$n=({children:e,config:t})=>{const{teams:n,currentTeamId:s,planId:a,isEndOfTrialActive:i,isFullyAuthenticated:c,userTeamRole:l}=t,d=n.find(w=>w.id===s),u=n.filter(w=>w.id!==s),m=We.includes(l),h=We.includes(l),z=W(a)||Te(a),S={...t,currentTeam:d,otherTeams:u,canChangeBilling:m,canAccessTeamSettings:h,isOnFreeOrTrialPlan:z,showUpgradeCta:c&&z&&m,showBillingButton:c&&h&&m,allowTeamCreation:c&&!i};return o.jsx(ct.Provider,{value:S,children:e})},Gn=({config:e,children:t})=>o.jsx($n,{config:e,children:o.jsx(In,{children:t})}),Fn="_container_q5pot_1",Qn="_profileEmail_q5pot_5",Ye={container:Fn,profileEmail:Qn},Kn=({href:e,onClick:t,userEmail:n,hideBottomDivider:s})=>{const{isEndOfTrialActive:a,isTeamSuspended:i}=B();return a||i?null:o.jsxs(o.Fragment,{children:[o.jsx(f.MenuItem,{href:e,onClick:()=>{t==null||t()},children:o.jsxs("div",{className:`flex-col ${Ye.container}`,children:[o.jsx("span",{children:"Profile Settings"}),o.jsx("span",{className:Ye.profileEmail,children:n})]})}),!s&&o.jsx(f.MenuDivider,{})]})},Jn="_wrapper_15d85_1",Wn="_profileImage_15d85_14",Yn="_teamName_15d85_22",Vn="_planLabel_15d85_29",Zn="_membership_15d85_38",Xn="_defaultProfileImage_15d85_44",C={wrapper:Jn,profileImage:Wn,teamName:Yn,planLabel:Vn,membership:Zn,defaultProfileImage:Xn},bt=({team:e,onClick:t,hidePlanLabel:n})=>{const{currentTeam:s,planId:a}=B(),i=e||s;if(!i)return null;const c=W(a)?"Free":Te(a)?"Trial":void 0,l=t?f.MenuItem:"div";return o.jsxs(l,{className:`flex-row gap-2 flex-nowrap items-center ${C.wrapper}`,...t&&{onClick:()=>t(i)},children:[i.logoUrl?o.jsx("img",{className:C.profileImage,src:i.logoUrl,alt:"Team Logo"}):o.jsx("span",{className:`flex-row justify-center items-center ${C.defaultProfileImage}`,children:o.jsx(f.UserIcon,{size:"25px"})}),o.jsxs("div",{className:"flex-col items-start",children:[o.jsxs("div",{className:"flex-row items-center flex-nowrap gap-2",children:[o.jsx("span",{title:i.name,className:C.teamName,children:i.name}),c&&!n&&o.jsx("span",{className:`flex-row justify-center items-center ${C.planLabel}`,children:c})]}),o.jsx("span",{className:C.membership,children:i.role})]})]})},er="_teamsContainer_1t68g_1",tr={teamsContainer:er},nr=({onSwitchTeam:e})=>{const{otherTeams:t}=B();return t.length===0?null:o.jsx("div",{className:`flex-col items-stretch ${tr.teamsContainer}`,children:t.map(n=>o.jsx(bt,{team:n,onClick:e,hidePlanLabel:!0},n.id))})},rr="_container_1u995_1",sr="_planCta_1u995_15",ar="_upgradeIconWrapper_1u995_19",fe={container:rr,planCta:sr,upgradeIconWrapper:ar},or=({upgradeOptionHref:e})=>{const{planId:t,trialDaysLeft:n,showUpgradeCta:s}=B();if(!s)return null;const c=W(t)?"Your team is currently on the Free plan":`Free trial ends in ${n} ${n===1?"day":"days"}`;return o.jsxs(f.MenuItem,{href:e,className:`flex-col gap-1 items-start ${fe.container}`,children:[o.jsx("span",{className:fe.planCta,children:c}),o.jsxs("div",{className:`flex-row items-center gap-1 ${fe.upgradeIconWrapper}`,children:[o.jsx(it,{}),o.jsx("span",{children:"See upgrade options"})]})]})},j=({children:e,...t})=>o.jsx("nav",{...t,className:un.sidebarContainer,children:e}),ir=({children:e})=>o.jsx("div",{children:e});j.Top=ir;const cr=({children:e})=>o.jsx("div",{children:e});j.Bottom=cr;j.Avatar=mn;j.IconLink=_n;j.Menu=pn;j.ProfileMenu=Gn;j.TeamSwitch=nr;j.TeamMenuItem=bt;j.UpgradeMenuItem=or;j.ProfileSettingsMenuItem=Kn;const ur="_breadcrumbsItem_1hm6a_1",lr="_breadcrumbs_1hm6a_1",Ve={breadcrumbsItem:ur,breadcrumbs:lr},dr=({items:e})=>o.jsx("nav",{"aria-label":"breadcrumb",className:Ve.breadcrumbs,children:e.map((t,n)=>o.jsxs(_.Fragment,{children:[o.jsx(f.Link,{className:Ve.breadcrumbsItem,href:t.link,rel:"noreferrer",children:t.name}),n<e.length-1&&o.jsx("span",{children:" — "})]},`${t.link}-${t.name}`))}),mr=({items:e})=>o.jsx(o.Fragment,{children:e.map((t,n)=>o.jsxs(_.Fragment,{children:[!!n&&t.some(s=>s.visible)&&o.jsx(f.MenuDivider,{}),t.filter(({visible:s})=>s).map(({link:s,label:a,onClick:i})=>o.jsx(f.MenuItem,{href:s||"#","aria-label":a,onClick:i,children:a},a))]},t[0].label))}),fr="_badge_1pc1v_1",br="_tag_1pc1v_15",_r="_withNavLinkStyle_1pc1v_42 _withLinkStyle_1pc1v_21",gr="_disabled_1pc1v_57",hr="_projectNavigationItem_1pc1v_61",pr="_projectNavigationItemDisabled_1pc1v_67",k={badge:fr,tag:br,withNavLinkStyle:_r,disabled:gr,projectNavigationItem:hr,projectNavigationItemDisabled:pr},Ze=({label:e,badge:t,novel:n})=>o.jsxs("div",{className:"flex gap-1",children:[o.jsxs("div",{children:[o.jsx("span",{children:e}),!!t&&o.jsx("div",{className:k.badge,"aria-label":`${t} items requiring attention`,children:t>9?"9+":t})]}),!!n&&o.jsx(f.Tag,{className:k.tag,children:n})]}),be=_.forwardRef(({label:e,href:t="",disabled:n=!1,badge:s,onClick:a,novel:i},c)=>o.jsx(f.Tooltip,{tooltip:"You do not have access to this function",show:n,children:o.jsx("div",{className:n?k.projectNavigationItemDisabled:k.projectNavigationItem,children:a||n||!t?o.jsx("button",{type:"button",ref:c,className:N(k.withNavLinkStyle,{[k.disabled]:n}),disabled:n,onClick:a,children:o.jsx(Ze,{label:e,badge:s,novel:i})}):o.jsx("a",{href:t,className:k.withNavLinkStyle,children:o.jsx(Ze,{label:e,badge:s,novel:i})})})}));be.displayName="NavigationTabsItem";const Tr=e=>(e==null?void 0:e.some(t=>t.some(n=>n.visible)))??!1,vr=e=>e.visible&&(!e.dropdown||Tr(e.dropdown)),yr=({navigation:e,activeItem:t})=>o.jsx("nav",{"aria-label":"Project",children:o.jsx("ul",{className:A.navigationTabList,"aria-orientation":"horizontal",children:e.filter(vr).map(n=>{var s,a,i;return n.dropdown?o.jsx("li",{className:A.navigationTab,"data-testid":n.key,"aria-selected":(s=n.isActive)==null?void 0:s.call(n,t),children:o.jsx(f.Menu,{menuButton:({opened:c})=>o.jsx(be,{label:n.label,disabled:n.disabled,active:c}),children:o.jsx(f.MenuList,{children:o.jsx(mr,{items:n.dropdown})})})},n.key):o.jsx("li",{className:A.navigationTab,"data-testid":n.key,"aria-selected":(a=n.isActive)==null?void 0:a.call(n,t),children:o.jsx(be,{label:n.label,href:n.link,onClick:n.onClick,disabled:n.disabled,badge:n.badge,novel:n.novel,active:(i=n.isActive)==null?void 0:i.call(n,t)})},n.key)})})}),jr=r.z.object({accessToken:r.z.string(),refreshToken:r.z.string()}),zr=r.z.union([r.z.object({Authorization:r.z.string().startsWith("Bearer ")}),r.z.object({"x-csrf-token":r.z.string()})]),Y=tt.buildPayloadRoute({description:"Takes a teamId and returns a JWT token access and refresh token for the user",method:"post",requestPathParamsSchema:r.z.object({teamId:r.z.number()}),pathResolver:e=>`/team/${e.teamId}/actions/get-user-token`,requestHeaderSchema:zr,requestBodySchema:r.z.undefined(),successResponseBodySchema:jr}),_t={teamKeyCsrf:(e,t)=>["getUserToken","x-csrf-token",t,e],teamKeyJwt:(e,t)=>["getUserToken","Authorization",`Bearer ${t}`,e]},gt=(e,t)=>O.useQuery({...t,queryFn:({queryKey:[n,s,a,i]})=>x.sendByPayloadRoute(e,Y,{pathParams:{teamId:i},headers:s==="x-csrf-token"?{"x-csrf-token":a}:{Authorization:a}})}),ht=r.z.union([r.z.literal("owner"),r.z.literal("admin"),r.z.literal("biller"),r.z.literal("member")]),Sr=r.z.object({userId:r.z.number(),userUuid:r.z.string(),teamId:r.z.number(),userTeamRole:ht,userEmail:r.z.string().email(),userName:r.z.string(),userCurrentTeamId:r.z.number(),planId:r.z.number(),planName:r.z.string(),isProviderAlpha:r.z.boolean(),isFullyAuthenticated:r.z.boolean(),exp:r.z.number()});function D(e){try{const t=e.split(".")[1],n=atob(t);return Sr.parse(JSON.parse(n))}catch{return}}const K=class K extends CustomEvent{constructor(t){super(K.eventName,{detail:{token:t,payload:D(t.accessToken)}})}};Ie(K,"eventName","new-jwt-issued");let L=K;function ve(){const e=_e(document.cookie,"accessToken"),t=_e(document.cookie,"refreshToken");if(!(!e||!t))return{accessToken:e,refreshToken:t}}function pt(){return _e(document.cookie,"csrf_token")}function _e(e,t){var n,s;return(s=(n=e.split(";").find(a=>a.trim().startsWith(`${t}=`)))==null?void 0:n.trim())==null?void 0:s.substring(t.length+1)}function wr(e,t){const n=pt(),s=gt(e,{queryKey:_t.teamKeyCsrf(t,n??""),enabled:n!==void 0}),a=_.useRef();return _.useEffect(()=>{s.data&&s.data.accessToken!==a.current&&(window.dispatchEvent(new L(s.data)),a.current=s.data.accessToken)},[s.data]),s}function ye(){const[e,t]=_.useState();return _.useEffect(()=>{const n=a=>{t(a.detail.payload)},s=ve();return t(s&&D(s.accessToken)),window.addEventListener(L.eventName,n),()=>{window.removeEventListener(L.eventName,n)}},[]),e}const Er=r.z.object({user_id:r.z.number(),email:r.z.string().email(),fullname:r.z.string(),created_at:r.z.string(),created_at_timestamp:r.z.number(),role:ht}),Ir=r.z.object({team_id:r.z.number(),team_user:Er}),Tt=J.buildGetRoute({description:"Get the details of a team user",requestPathParamsSchema:r.z.object({teamId:r.z.number(),userId:r.z.number()}),pathResolver:({teamId:e,userId:t})=>`/teams/${e}/users/${t}`,successResponseBodySchema:Ir}),vt={teamUserKey:(e,t)=>["GetTeamUsers",e,t]},yt=(e,t)=>O.useQuery({...t,queryFn:({queryKey:[n,s,a]})=>x.sendByGetRoute(e,Tt,{pathParams:{teamId:s,userId:a}})});function Pr(e){const t=ye();return yt(e,{queryKey:vt.teamUserKey((t==null?void 0:t.teamId)??0,(t==null?void 0:t.userId)??0),enabled:(t==null?void 0:t.userId)!==void 0&&t.teamId!==void 0})}const xr=r.z.object({lang_id:r.z.number(),lang_iso:r.z.string(),lang_name:r.z.string(),is_writable:r.z.union([r.z.literal(0),r.z.literal(1)])}),Rr=r.z.object({user_id:r.z.number(),email:r.z.string().email(),fullname:r.z.string(),created_at:r.z.string(),created_at_timestamp:r.z.number(),admin_rights:r.z.array(r.z.string()),languages:r.z.array(xr),is_admin:r.z.boolean(),is_reviewer:r.z.boolean()}),kr=r.z.object({project_id:r.z.string(),contributors:r.z.array(Rr)}),jt=J.buildGetRoute({description:"Get the details of a project contributor",requestPathParamsSchema:r.z.object({projectId:r.z.string(),contributorId:r.z.number()}),pathResolver:({projectId:e,contributorId:t})=>`/projects/${e}/contributors/${t}`,successResponseBodySchema:kr}),zt={projectUserKey:(e,t)=>["RetrieveContributor",e,t]},St=(e,t)=>O.useQuery({...t,queryFn:({queryKey:[n,s,a]})=>x.sendByGetRoute(e,jt,{pathParams:{projectId:s,contributorId:a}})});function Nr(e,t){const n=ye();return St(e,{queryKey:zt.projectUserKey(t,(n==null?void 0:n.userId)??0),enabled:n!==void 0})}function Cr(){const e=ve();if(!e)return;const t=D(e.accessToken);if(t)return{...e,payload:t}}function Ar(){return e=>(t,n)=>e(t,{...n,headers:{...n.headers,"x-lokalise-plugin":"true"},credentials:"omit"})}function F(e){return{Authorization:`Bearer ${e}`}}function Lr(e,t){return n=>async(s,a)=>{var l;const i=await t.getCachedJwtToken();if(i===void 0)return n(s,a);const c=await n(s,{...a,headers:{...a.headers,...F(i.accessToken)}});if(i&&(c.status===401||c.status===403)){const d=D(i.accessToken);if(!d)return c;const u=await x.sendByPayloadRoute(e,Y,{pathParams:{teamId:d.teamId},headers:F(i.refreshToken)});return await((l=t.onNewJwtTokenIssued)==null?void 0:l.call(t,u)),n(s,{...a,headers:{...a.headers,...F(u.accessToken)}})}return c}}const wt={wretch:{lokaliseAuth(e){return this.middlewares([Lr(this,e)])}}};function Or(e,t){return n=>async(s,a)=>{var d;if(await t.getCachedJwtToken()!==void 0)return n(s,a);const c=await t.getCsrfToken();if(c===void 0)return n(s,a);const l=await x.sendByPayloadRoute(e,Y,{pathParams:{teamId:await t.getTeamId()},headers:{"x-csrf-token":c}});return await((d=t.onNewJwtTokenIssued)==null?void 0:d.call(t,l)),n(s,{...a,headers:{...a.headers,...F(l.accessToken)}})}}const qr={wretch:{lokaliseAuth(e={}){return this.addon(wt).lokaliseAuth(Xe(e))},promoteClassicSession(e){const t=Xe(e);return this.middlewares([Or(this,t)])}}};function Xe(e){return{...e,getCachedJwtToken:e.getCachedJwtToken??(async()=>ve()),getCsrfToken:"getCsrfToken"in e?e.getCsrfToken:async()=>pt(),onNewJwtTokenIssued:t=>{var n;return window.dispatchEvent(new L(t)),((n=e.onNewJwtTokenIssued)==null?void 0:n.call(e,t))??Promise.resolve()}}}const Mr=r.z.object({lang_iso:r.z.string(),custom_iso:r.z.string().optional()}),Ur=r.z.object({language_id:r.z.number(),language_iso:r.z.string(),progress:r.z.number(),words_to_do:r.z.number()}),je=r.z.union([r.z.literal("localization_files"),r.z.literal("paged_documents"),r.z.literal("marketing")]),Br=r.z.object({per_platform_key_names:r.z.boolean(),reviewing:r.z.boolean(),auto_toggle_unverified:r.z.boolean(),offline_translation:r.z.boolean(),key_editing:r.z.boolean(),inline_machine_translations:r.z.boolean(),custom_translation_statuses:r.z.boolean(),custom_translation_statuses_allow_multiple:r.z.boolean(),segmentation:r.z.boolean(),contributor_preview_download_enabled:r.z.boolean()}),Dr=r.z.object({not_reviewed:r.z.number(),unverified:r.z.number(),spelling_grammar:r.z.number(),inconsistent_placeholders:r.z.number(),inconsistent_html:r.z.number(),different_number_of_urls:r.z.number(),different_urls:r.z.number(),leading_whitespace:r.z.number(),trailing_whitespace:r.z.number(),different_number_of_email_address:r.z.number(),different_email_address:r.z.number(),different_brackets:r.z.number(),different_numbers:r.z.number(),double_space:r.z.number(),special_placeholder:r.z.number(),unbalanced_brackets:r.z.number()}),Hr=r.z.object({progress_total:r.z.number(),keys_total:r.z.number(),team:r.z.number(),base_words:r.z.number(),qa_issues_total:r.z.number(),qa_issues:Dr,languages:r.z.array(Ur)}),Q=r.z.object({project_id:r.z.string(),uuid:r.z.string().uuid(),project_type:je,name:r.z.string(),description:r.z.string(),created_at:r.z.string(),created_at_timestamp:r.z.number(),created_by:r.z.number(),created_by_email:r.z.string(),team_id:r.z.number(),base_language_id:r.z.number(),base_language_iso:r.z.string(),settings:Br,statistics:Hr}),$r=r.z.object({name:r.z.string(),team_id:r.z.string(),base_lang_iso:r.z.string(),languages:r.z.array(Mr),project_type:je,is_segmentation_enabled:r.z.boolean()}),Gr=r.z.object({project_type:je.optional(),filter_team_id:r.z.number().optional(),filter_names:r.z.string().optional(),include_statistics:r.z.boolean().optional(),include_settings:r.z.boolean().optional(),limit:r.z.number().optional(),page:r.z.number().optional()}),Fr=r.z.array(r.z.union([Q.omit({statistics:!0,settings:!0}),Q.pick({settings:!0,statistics:!0}).partial()])),Qr=r.z.object({project_id:r.z.string()}),ze=()=>"/projects",Et=tt.buildPayloadRoute({description:"Create a new project",method:"post",pathResolver:ze,requestBodySchema:$r,successResponseBodySchema:Q}),It=J.buildGetRoute({description:"List all projects",pathResolver:ze,requestQuerySchema:Gr,successResponseBodySchema:Fr}),Pt=J.buildGetRoute({description:"Retrieve a project",pathResolver:ze,requestQuerySchema:Qr,successResponseBodySchema:Q});function Kr(e,t={}){return O.useMutation({...t,mutationFn:n=>x.sendByPayloadRoute(e,Et,{body:n})})}const Jr={paramsKey:e=>["listProjects",e]};function Wr(e,t){return O.useQuery({...t,queryFn:({queryKey:[n,s]})=>x.sendByGetRoute(e,It,{queryParams:s})})}const Yr={projectIdKey:e=>["retrieveProject",e]};function Vr(e,t){return O.useQuery({...t,queryFn:({queryKey:[n,s]})=>x.sendByGetRoute(e,Pt,{queryParams:{project_id:s}})})}exports.Breadcrumbs=dr;exports.ENTERPRISE_OPENSOURCE_PLAN_ID=pe;exports.ENTERPRISE_PLAN_IDS=ft;exports.ESSENTIAL_PLAN_IDS=dt;exports.FREE_PLAN_ID=he;exports.LokaliseAuthAddon=wt;exports.LokaliseAuthBrowserAddon=qr;exports.NavigationPanel=U;exports.NavigationTabs=yr;exports.PRO_PLAN_IDS=mt;exports.START_PLAN_IDS=lt;exports.Sidebar=j;exports.TRIAL_PLAN_ID=ut;exports.convertNewLineToBreakTag=On;exports.createProject=Et;exports.formatDate=Bn;exports.formatDateTz=Dn;exports.getAuthenticatedSessionDetailFromRequest=Cr;exports.getTeamUser=Tt;exports.getTeamUsersQueryKey=vt;exports.getUserToken=Y;exports.getUserTokenKey=_t;exports.isEnterpriseOpenSourcePlan=Cn;exports.isEnterprisePlan=kn;exports.isEssentialPlan=xn;exports.isFreePlan=W;exports.isPaidPlan=Nn;exports.isProPlan=Rn;exports.isStartPlan=Pn;exports.isTrialPlan=Te;exports.listProjects=It;exports.listProjectsKey=Jr;exports.makeUrlClickable=Un;exports.parseJwtTokenPayload=D;exports.publicApiHeadersMiddleware=Ar;exports.retrieveContributor=jt;exports.retrieveContributorKeys=zt;exports.retrieveProject=Pt;exports.retrieveProjectQueryKey=Yr;exports.useAuthenticatedProjectContributor=Nr;exports.useAuthenticatedSessionPayload=ye;exports.useAuthenticatedUser=Pr;exports.useCreateProjectMutation=Kr;exports.useEffectOnce=Hn;exports.useGetPromotedClassicSessionJwtQuery=wr;exports.useGetTeamUsersQuery=yt;exports.useGetUserTokenQuery=gt;exports.useListProjectsQuery=Wr;exports.useRetrieveContributorQuery=St;exports.useRetrieveProjectQuery=Vr;