forlogic-core 2.3.0 → 2.3.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.
- package/.note/memory/patterns/dynamic-supabase-config.md +2 -2
- package/.note/memory/patterns/environment-detection-logic.md +21 -15
- package/README.md +1 -1
- package/dist/action-plans/config/environments.d.ts +18 -3
- package/dist/action-plans/config/index.d.ts +3 -3
- package/dist/action-plans/index.d.ts +1 -1
- package/dist/audit-trail/config/environments.d.ts +18 -3
- package/dist/audit-trail/config/index.d.ts +3 -3
- package/dist/audit-trail/index.d.ts +1 -1
- package/dist/config/environments.d.ts +18 -3
- package/dist/config/index.d.ts +3 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/leadership/config/environments.d.ts +18 -3
- package/dist/leadership/config/index.d.ts +3 -3
- package/dist/leadership/index.d.ts +1 -1
- package/dist/leadership/index.esm.js +1 -1
- package/dist/leadership/index.js +1 -1
- package/dist/places/config/environments.d.ts +18 -3
- package/dist/places/config/index.d.ts +3 -3
- package/dist/places/index.d.ts +1 -1
- package/dist/places/index.esm.js +1 -1
- package/dist/places/index.js +1 -1
- package/dist/sign/config/environments.d.ts +18 -3
- package/dist/sign/config/index.d.ts +3 -3
- package/dist/sign/index.d.ts +1 -1
- package/dist/sign/index.esm.js +1 -1
- package/dist/sign/index.js +1 -1
- package/dist/vite/index.esm.js +24 -1
- package/dist/vite/index.js +24 -0
- package/docs/WORKSPACE_KNOWLEDGE.md +1 -1
- package/docs/design-system/patterns/core-providers.md +11 -2
- package/docs/design-system/patterns/feature-flags.md +53 -21
- package/package.json +1 -1
package/dist/leadership/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("i18next"),a=require("react"),t=require("@tanstack/react-query"),r=require("react/jsx-runtime"),s=require("@supabase/supabase-js"),n=require("sonner"),o=require("react-i18next"),i=require("lucide-react"),l=require("@radix-ui/react-slot"),d=require("class-variance-authority"),c=require("clsx"),u=require("tailwind-merge");require("date-fns");var m=require("@radix-ui/react-checkbox"),h=require("@radix-ui/react-hover-card"),p=require("@radix-ui/react-dialog"),f=require("@radix-ui/react-separator"),g=require("@radix-ui/react-alert-dialog"),x=require("zod"),y=require("react-hook-form"),v=require("@hookform/resolvers"),w=require("@radix-ui/react-label"),b=require("@radix-ui/react-scroll-area"),_=require("@radix-ui/react-select");function N(e){var a=Object.create(null);return e&&Object.keys(e).forEach(function(t){if("default"!==t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(a,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})}}),a.default=e,Object.freeze(a)}var k=N(a),j=N(m),S=N(h),C=N(p),E=N(f),A=N(g),I=N(w),T=N(b),D=N(_);function U(e){const a=new Map,t=new Map,r=[];e.forEach(e=>{const r={...e,children:[],level:0};a.set(e.id,r),t.set(e.id_user,r)}),e.forEach(e=>{const s=a.get(e.id);if(e.id_leader){const a=t.get(e.id_leader);if(a)return void a.children.push(s)}r.push(s)});const s=(e,a)=>{e.level=a,e.children.forEach(e=>s(e,a+1))};r.forEach(e=>s(e,0));const n=e=>{e.sort((e,a)=>{const t=e.name||e.id_user||e.email||"",r=a.name||a.id_user||a.email||"";return t.localeCompare(r)}),e.forEach(e=>e.children.length>0&&n(e.children))};return n(r),r}function R(e){const a=[],t=e=>{a.push(e),e.children.forEach(t)};return e.forEach(t),a}class P{static normalizeBase64Url(e){let a=e.replace(/-/g,"+").replace(/_/g,"/");const t=(4-a.length%4)%4;return a+="=".repeat(t),a}static parseJwtPayload(e){try{const s=e.split(".");if(3!==s.length)return null;const n=s[1];n.length,this.LARGE_PAYLOAD_THRESHOLD;try{const e=this.normalizeBase64Url(n),a=atob(e),t=new Uint8Array(a.length);for(let s=0;s<a.length;s++)t[s]=a.charCodeAt(s);const r=new TextDecoder("utf-8").decode(t);return JSON.parse(r)}catch(a){try{const e=this.normalizeBase64Url(n),a=decodeURIComponent(atob(e).split("").map(e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)).join(""));return JSON.parse(a)}catch(t){try{const e=this.normalizeBase64Url(n),a=atob(e);return JSON.parse(a)}catch(r){throw r}}}}catch(s){return null}}static validateTokens(e,a){const t=[],r=[];try{a.split(".")[1],e.split(".")[1];const s=this.parseJwtPayload(a),n=this.parseJwtPayload(e);if(!s){const e="ID token decode falhou - possível problema com base64url encoding";return r.push(e),{isValid:!1,idTokenValid:!1,accessTokenValid:!1,warnings:t,errors:r}}let o=!0;if(!n){const e="Access token decode falhou - será tentado novamente nas chamadas de API";t.push(e),o=!1}const i=Math.floor(Date.now()/1e3);if(n?.exp&&n.exp<i){const e="Access token expirado - pode precisar de refresh";t.push(e),o=!1}if(s.exp&&s.exp<i){const e="ID token expirado - autenticação inválida";return r.push(e),{isValid:!1,idTokenValid:!1,accessTokenValid:o,warnings:t,errors:r}}return{isValid:!0,idTokenValid:!0,accessTokenValid:o,warnings:t,errors:r}}catch(s){const e=`Erro na validação de tokens: ${s}`;return r.push(e),{isValid:!1,idTokenValid:!1,accessTokenValid:!1,warnings:t,errors:r}}}static isTokenExpired(e){const a=this.parseJwtPayload(e);return!a||!a.exp||1e3*a.exp<Date.now()}}P.LARGE_PAYLOAD_THRESHOLD=1e3;const L="qualiex_access_token",V="qualiex_id_token",q="supabase_token",O="oauth_state",z="oauth_nonce",M="selected_alias",B="manual_logout",$="supabase_project_id",F={setAccessToken:e=>localStorage.setItem(L,e),getAccessToken:()=>localStorage.getItem(L),setIdToken:e=>localStorage.setItem(V,e),getIdToken:()=>localStorage.getItem(V),getSupabaseToken:()=>localStorage.getItem(q),setOAuthState:e=>sessionStorage.setItem(O,e),getOAuthState:()=>sessionStorage.getItem(O),clearOAuthState:()=>sessionStorage.removeItem(O),setOAuthNonce:e=>sessionStorage.setItem(z,e),getOAuthNonce:()=>sessionStorage.getItem(z),clearOAuthNonce:()=>sessionStorage.removeItem(z),setSelectedAlias:e=>localStorage.setItem(M,e),getSelectedAlias:()=>localStorage.getItem(M),clearSelectedAlias:()=>localStorage.removeItem(M),generateOAuthNonce:()=>{const e=new Uint8Array(32);return crypto.getRandomValues(e),btoa(String.fromCharCode(...e)).replace(/[+/=]/g,"")},hasAllTokens:()=>!(!F.getAccessToken()||!F.getIdToken()),checkProjectMismatch:()=>{const e=(void 0).VITE_SUPABASE_PROJECT_ID;if(!e)return!1;const a=localStorage.getItem($);return a&&a!==e?(F.clearAll(),localStorage.setItem($,e),!0):(a||localStorage.setItem($,e),!1)},setSupabaseToken:e=>{localStorage.setItem(q,e),F._clearValidationCache()},areAllTokensValid:()=>{const e=F.getAccessToken(),a=F.getIdToken();if(!e||!a)return!1;try{const t=P.validateTokens(e,a);return!!t.idTokenValid&&t.idTokenValid}catch(t){return!1}},clearExpiredTokens:()=>{let e=!1;const a=F.getAccessToken(),t=F.getIdToken(),r=F.getSupabaseToken();return a&&F.isTokenExpired(a)&&(localStorage.removeItem(L),e=!0),t&&F.isTokenExpired(t)&&(localStorage.removeItem(V),e=!0),r&&F.isTokenExpired(r)&&(localStorage.removeItem(q),e=!0),e},clearAll:()=>{localStorage.removeItem(L),localStorage.removeItem(V),localStorage.removeItem(q),localStorage.removeItem(M),localStorage.removeItem(B),sessionStorage.removeItem(O),sessionStorage.removeItem(z),F._clearValidationCache()},setManualLogout:()=>localStorage.setItem(B,"true"),isManualLogout:()=>"true"===localStorage.getItem(B),clearManualLogout:()=>localStorage.removeItem(B),isTokenExpired:e=>{try{return P.isTokenExpired(e)}catch{return!0}},_validationCache:{isValid:!1,timestamp:0,cacheValidityMs:3e5},_clearValidationCache:()=>{F._validationCache.isValid=!1,F._validationCache.timestamp=0},isSupabaseTokenValid:()=>{const e=F.getSupabaseToken();if(!e)return!1;if(F.isTokenExpired(e))return F._clearValidationCache(),F._handleExpiredToken(),!1;const a=Date.now();return a-F._validationCache.timestamp<F._validationCache.cacheValidityMs?F._validationCache.isValid:(F._validationCache.isValid=!0,F._validationCache.timestamp=a,!0)},getValidSupabaseToken:()=>F.isSupabaseTokenValid()?F.getSupabaseToken():null,_handleExpiredToken:()=>{F.clearAll()},extractTokenData:()=>{if(!F.isSupabaseTokenValid())return null;const e=F.getSupabaseToken();if(!e)return null;try{const a=P.parseJwtPayload(e);if(!a)return null;const t=a.alias||a.default||a.user_alias,r=a.place_id||null,s=a.place_name||null;let n=a.company_id;if(!n&&t)for(const e in a)if(e.startsWith("co")&&/^co\d+$/.test(e)){const r=a[e];if(r&&"string"==typeof r){const e=r.split(";");if(e.length>7&&e[0]===t){n=e[7];break}}}return{alias:t,companyId:n,placeId:r,placeName:s,payload:a}}catch(a){return F._handleExpiredToken(),null}},getCompanyId:e=>{const a=F.getAccessToken();if(a)try{const t=P.parseJwtPayload(a);if(t)for(const a in t)if(a.startsWith("co")&&/^co\d+$/.test(a)){const r=t[a];if(r&&"string"==typeof r){const a=r.split(";");if(e&&a.length>7&&a[0]===e)return a[7];if(!e&&a.length>7)return a[7]}}}catch(s){}const t=F.extractTokenData();if(t?.companyId)return t.companyId;const r=F.getIdToken();if(r)try{const a=P.parseJwtPayload(r);if(a)for(const t in a)if(t.startsWith("co")&&/^co\d+$/.test(t)){const r=a[t];if(r&&"string"==typeof r){const a=r.split(";");if(e&&a.length>7&&a[0]===e)return a[7];if(!e&&a.length>7)return a[7]}}}catch(s){}return null},getCompanyIdInt:e=>{const a=[F.getAccessToken(),F.getIdToken()];for(const t of a)if(t)try{const a=P.parseJwtPayload(t);if(!a)continue;for(const t in a)if(t.startsWith("co")&&/^co\d+$/.test(t)){const r=a[t];if(r&&"string"==typeof r){const a=r.split(";");if(e&&a.length>1&&a[0]===e)return a[1];if(!e&&a.length>1)return a[1]}}}catch{}return null},getCurrentCompanyId:()=>{const e=F.extractTokenData();return e?.companyId||null},getAllCompaniesData:()=>{const e=F.getIdToken();if(!e)return[];try{const a=P.parseJwtPayload(e);if(!a)return[];const t=[];for(const e in a)if(e.startsWith("co")&&/^co\d+$/.test(e)){const r=a[e];if(r&&"string"==typeof r){const e=r.split(";");e.length>=4&&t.push({id:e.length>7?e[7]:"",alias:e[0].trim(),name:e[3].trim(),payload:a})}}return t}catch{return[]}}},H={storageProjectId:"ccjfvpnndclajkleyqkc",oauth:{authUrl:"https://login.qualiex.com/oauth2/authorize",clientId:"ae6021a0-e874-4aab-9716-b478e59cec20"},qualiexApiUrl:"https://common-v4-api.qualiex.com"},W={storageProjectId:"ccjfvpnndclajkleyqkc",oauth:{authUrl:"https://login-dev.qualiex.com/oauth2/authorize",clientId:"ae6021a0-e874-4aab-9716-b478e59cec20"},qualiexApiUrl:"https://common-v4-api-dev.qualiex.com"};function Q(){let e=(void 0).VITE_SUPABASE_PROJECT_ID;if(!e)try{const a=(void 0).VITE_SUPABASE_URL;a&&(e=new URL(a).hostname.split(".")[0])}catch{}return"ccjfvpnndclajkleyqkc"===e?H:W}const J={get oauth(){const e=Q();return{authUrl:e.oauth.authUrl,clientId:e.oauth.clientId,responseType:"id_token token",scope:"openid profile email"}}};(void 0).VITE_IS_QUALIEX;const K=new class{constructor(){this.errors=[],this.toastCount=0,this.lastToastTime=0}handleError(e,a=!0){const t="string"==typeof e?e:e.message;if(this.errors.push({id:Date.now().toString(),message:t,timestamp:Date.now(),count:1}),this.errors.length>50&&(this.errors=this.errors.slice(-50)),a&&this.shouldShowToast()){const e=this.getErrorTitle(t);n.toast.error(e,{description:t})}}getErrorTitle(a){const t=a.toLowerCase();return t.includes("401")||t.includes("unauthorized")||t.includes("expirou")?e.t("error_session_expired"):t.includes("token")||t.includes("autenticação")?e.t("error_authentication"):t.includes("api")||t.includes("network")?e.t("error_connection"):"Erro"}success(e,a){n.toast.success(e,{description:a})}shouldShowToast(){const e=Date.now();return e-this.lastToastTime>6e4&&(this.toastCount=0),this.toastCount<3&&(this.toastCount++,this.lastToastTime=e,!0)}getErrors(){return this.errors.slice(-50)}clearErrors(){this.errors=[]}};["[forlogic-core] ⚠️ VITE_SUPABASE_PUBLISHABLE_KEY contém uma legacy anon key (JWT).","O Supabase desativou legacy API keys. Substitua pela nova publishable key (formato sb_publishable_*).","Todas as requests retornarão 401 Unauthorized.","Causa provável: a integração Supabase do Lovable sobrescreveu o .env com a anon key legada.","Solução: defina VITE_SUPABASE_PK_OVERRIDE no .env com a publishable key correta."].join(" ");function Y(e){return!!e&&e.startsWith("eyJ")}function G(){const e=(void 0).VITE_SUPABASE_PK_OVERRIDE;return e||((void 0).VITE_SUPABASE_PUBLISHABLE_KEY??"")}let X=!1;class Z{constructor(e){this.currentToken=null,this.config=e,function(){const e=(void 0).VITE_SUPABASE_PK_OVERRIDE,a=(void 0).VITE_SUPABASE_PUBLISHABLE_KEY;X?Y(a):e&&Y(a)?X=!0:Y(a)?X=!0:X=!0}(),this.client=this.createClientWithToken(null)}createClientWithToken(e){const a={apikey:this.config.key};e&&this.isTokenValid(e)&&(a.Authorization=`Bearer ${e}`);return s.createClient(this.config.url,this.config.key,{auth:{persistSession:!1,autoRefreshToken:!1,detectSessionInUrl:!1,storage:void 0},global:{headers:a,fetch:async(e,a)=>("string"==typeof e?e:e.url).includes("/auth/v1/user")?new Response(JSON.stringify({error:"blocked"}),{status:401,headers:{"Content-Type":"application/json"}}):fetch(e,a)}})}static getInstance(){if(!Z.instance){const e=function(){const e=(void 0).VITE_SUPABASE_URL,a=G();return e&&a?{url:e,key:a}:null}();if(!e)throw new Error("[forlogic-core] Supabase não configurado. Defina VITE_SUPABASE_URL e VITE_SUPABASE_PUBLISHABLE_KEY no .env, ou não invoque getSupabaseClient() (use isSupabaseConfigured() para checar antes).");Z.instance=new Z(e)}return Z.instance}getClient(){const e=F.getValidSupabaseToken();return e!==this.currentToken&&(this.client=this.createClientWithToken(e),this.currentToken=e),this.client}isTokenValid(e){try{return!P.isTokenExpired(e)}catch(a){return K.handleError(a instanceof Error?a:"Supabase - Error validating token",!1),!1}}}function ee(){return Z.getInstance().getClient()}class ae{static async generateToken(e,a,t,r=!1){try{if(!r){const e=F.getSupabaseToken();if(e&&F.isSupabaseTokenValid())return e}const s=ee(),{data:n,error:o}=await s.functions.invoke("validate-token",{body:{access_token:e,alias:a}});return o&&(o.message?.includes("401")||o.message?.includes("Unauthorized"))?(t?.(),null):n?.access_token?(F.setSupabaseToken(n.access_token),n.access_token):null}catch(s){return s instanceof Error&&(s.message.includes("401")||s.message.includes("Unauthorized"))&&t?.(),null}}}class te{static setLogoutCallback(e){this.onLogoutCallback=e}static async attemptRegeneration(e=!1){if(this.regenerationPromise)return this.regenerationPromise;this.regenerationPromise=this._doRegenerate(e);try{return await this.regenerationPromise}finally{this.regenerationPromise=null}}static async _doRegenerate(e=!1){try{const a=F.getAccessToken(),t=F.getSelectedAlias();if(!a||!t)return null;const r=await ae.generateToken(a,t,this.onLogoutCallback||void 0,e);return r||null}catch(a){return null}}}te.regenerationPromise=null,te.onLogoutCallback=null;var re;const se={isAuthenticated:!1,isLoading:!1,user:null,alias:null,companies:[],selectedUnit:null,userId:null,userAlias:null,placeId:null,placeName:null,activePlaceId:null,activePlaceName:null};re=class{static async initialize(){try{const e=!0;if(e){if(F.checkProjectMismatch())return{...se}}if(!F.hasAllTokens()||!F.areAllTokensValid())return F.clearExpiredTokens(),{...se};const a=F.getAccessToken(),t=F.getIdToken();F.clearManualLogout();const r=this.extractUserFromIdToken(t,a),s=this.extractCompaniesFromIdToken(t),n=this.extractAliasFromAccessToken(a),o=e?F.extractTokenData():null,i=o?.alias;let l=null;if(i&&s.some(e=>e.alias===i))l=i;else{const e=F.getSelectedAlias(),a=e&&s.some(a=>a.alias===e);l=a?e:n||s[0]?.alias||null}if(e&&(!F.isSupabaseTokenValid()&&l&&await te.attemptRegeneration(),!F.isSupabaseTokenValid()))return{...se};let d=null;if(l){const e=F.getCompanyId(l),a=s.find(e=>e.alias===l);a&&(d={id:e||a.id,name:a.name,alias:a.alias})}const c=o?.placeId??null,u=o?.placeName??null;return{isAuthenticated:!0,isLoading:!1,user:r,alias:l,companies:s,selectedUnit:d,userId:r?.id||null,userAlias:r?.id||null,placeId:c,placeName:u,activePlaceId:c,activePlaceName:u}}catch(e){return{...se}}}static async loginDev(){try{const e=ee(),{data:a,error:t}=await e.functions.invoke("dev-tokens",{body:{environment:"development"}});if(t)return!1;if(!a?.access_token||!a?.id_token)return!1;const r=new URL("/callback",window.location.origin);return r.hash=`access_token=${a.access_token}&id_token=${a.id_token}&token_type=bearer`,window.location.href=r.toString(),!0}catch(e){return!1}}static loginProd(){const e="Lw==";F.setOAuthState(e);const a=F.generateOAuthNonce();F.setOAuthNonce(a);const t=`${window.location.origin}/callback`,r=new URL(J.oauth.authUrl);r.searchParams.set("client_id",J.oauth.clientId),r.searchParams.set("response_type",J.oauth.responseType),r.searchParams.set("scope",J.oauth.scope),r.searchParams.set("redirect_uri",t),r.searchParams.set("state",e),r.searchParams.set("nonce",a),r.searchParams.set("response_mode","fragment"),window.location.href=r.toString()}static async processCallback(){try{const e=new URLSearchParams(window.location.hash.startsWith("#")?window.location.hash.substring(1):window.location.hash),a=new URLSearchParams(window.location.search),t=t=>e.get(t)||a.get(t),r=t("access_token"),s=t("id_token"),n=t("error");if(n)throw new Error(`Erro OAuth: ${n}`);if(r&&s){const e=F.getAccessToken();e!==r&&F.clearAll()}const o=!0;if(F.hasAllTokens()){if(o){F.getValidSupabaseToken()||await te.attemptRegeneration(!0)}return!0}const i=r,l=s;if(!i||!l)throw new Error("Tokens não encontrados na URL de callback");F.setAccessToken(i),F.setIdToken(l),F.clearManualLogout();const d=this.extractAliasFromAccessToken(i);if(d)F.setSelectedAlias(d);else{const e=this.extractCompaniesFromIdToken(l);if(0===e.length)throw new Error("Nenhuma empresa encontrada nos tokens");F.setSelectedAlias(e[0].alias)}if(o){if(!await te.attemptRegeneration(!0))throw new Error("Falha ao gerar token Supabase")}return F.clearOAuthState(),F.clearOAuthNonce(),!0}catch(e){throw e}}static async logout(){F.setManualLogout(),F.clearAll(),localStorage.removeItem("auth_return_url"),sessionStorage.clear();try{if("caches"in window){const e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}}catch{}window.location.href="/login"}static decodeToken(e){return P.parseJwtPayload(e)}static extractUserFromIdToken(e,a){const t=this.decodeToken(e);if(!t)return null;const r=a?this.decodeToken(a):null;return{id:t.subNewId,email:t.email,name:t.name,identifier:t.identifier,isSysAdmin:"1"===r?.admin}}static extractCompaniesFromIdToken(e){const a=this.decodeToken(e);if(!a)return[];const t=[];return Object.keys(a).forEach(e=>{if(e.match(/^co(\d+)$/)&&"string"==typeof a[e]){const r=a[e].split(";");if(r.length>=4)t.push({id:r.length>7?r[7].trim():"",alias:r[0].trim(),name:r[3].trim()});else{const[r,s]=a[e].split("|");r&&s&&t.push({id:"",alias:r.trim(),name:s.trim()})}}}),t}static extractAliasFromAccessToken(e){const a=this.decodeToken(e);return a?.default||null}},te.setLogoutCallback(()=>{re.logout()});class ne{static handleError(e){if(!e)return!1;const a=e.message||e.toString();return!!this.isAuthenticationError(e,a)&&(F.clearAll(),window.location.href="/login",!0)}static isAuthenticationError(e,a){if(401===e.status||401===e.statusCode)return!0;const t=a.toLowerCase();return["401","unauthorized","token expired","invalid token","session expired","jwt expired","authentication failed","not authenticated"].some(e=>t.includes(e))}static async wrapAsync(e){try{return await e}catch(a){if(!this.handleError(a))throw a;throw new Error("Sua sessão expirou. Você será redirecionado para fazer login novamente.")}}}class oe{static async handleApiError(e){if(!e||this.isRetrying)return!1;const a=e.status||e.statusCode,t=e.message||e.toString();if(401===a||t.includes("401")||t.includes("Unauthorized")){this.isRetrying=!0;try{return await te.attemptRegeneration()?(this.isRetrying=!1,!0):(ne.handleError(e),this.isRetrying=!1,!1)}catch(r){return ne.handleError(e),this.isRetrying=!1,!1}}return!1}static validateToken(){const e=F.getAccessToken();return e?F.isTokenExpired(e)?{valid:!1,message:"Sua sessão expirou. Você será redirecionado para fazer login."}:{valid:!0}:{valid:!1,message:"Token OAuth não encontrado. Faça login novamente."}}}oe.isRetrying=!1;const ie=new class{get baseUrl(){return Q().qualiexApiUrl}async makeApiCall(e,a,t){const r=oe.validateToken();if(!r.valid)throw new Error(r.message||"Token inválido");const s=F.getAccessToken();if(!s)throw new Error("Token Qualiex não encontrado");if(!t||""===t.trim())throw new Error("Alias da unidade é obrigatório para chamadas à API do Qualiex");const n=new URL(e,this.baseUrl);Object.entries(a).forEach(([e,a])=>{n.searchParams.append(e,a)});const o=await fetch(n.toString(),{method:"GET",headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json",Accept:"application/json","un-alias":t}});if(!o.ok){const e=new Error(`API call failed: ${o.status} ${o.statusText}`);throw e.status=o.status,e.statusCode=o.status,e}return await o.json()}mapToQualiexUser(e){let a;return a="boolean"==typeof e.isActive?e.isActive:"boolean"==typeof e.active?e.active:"string"!=typeof e.status||"active"===e.status.toLowerCase(),{id:e.id||e.ID||"",userId:e.userId||String(e.ID),userName:e.userName||"Nome não disponível",userEmail:e.userEmail||"Email não disponível",placeId:null,placeName:e.placeName||null,roleId:e.roleId||void 0,roleName:e.roleName||void 0,companyId:e.companyId||void 0,companyName:e.companyName||void 0,isActive:a}}parseUsersResponse(e,a=""){let t=e;if(e.data)t=e.data;else{if(!Array.isArray(e))return K.handleError(`[QualiexApi] Formato de resposta inesperado${a}`,!1),null;t=e}return Array.isArray(t)?t.map(e=>this.mapToQualiexUser(e)):(K.handleError(`[QualiexApi] Resposta não é um array${a}`,!1),null)}async fetchUsers(e,a,t="active"){const r={companyId:a,search:"",filterStatus:t};try{const a=await this.makeApiCall("/api/common/v1/companiesusers",r,e);return this.parseUsersResponse(a)??[]}catch(s){if(await oe.handleApiError(s))try{const a=await this.makeApiCall("/api/common/v1/companiesusers",r,e);return this.parseUsersResponse(a," após retry")??[]}catch(n){return K.handleError(n instanceof Error?n:"Erro ao buscar usuários após renovação de token",!0),[]}return K.handleError(s instanceof Error?s.message:"Erro ao buscar usuários da API Qualiex",!0),[]}}async fetchUserById(e,a,t){try{return(await this.fetchUsers(a,t)).find(a=>a.userId===e)||null}catch(r){return K.handleError(r instanceof Error?r:"[QualiexApi] Error fetching user by ID"),null}}async fetchActiveUsersMap(e,a){const t=await this.fetchUsers(e,a,"active"),r=new Map;return t.forEach(e=>r.set(e.userId,e)),r}async fetchAllUsersMap(e,a){const t=await this.fetchUsers(e,a,"all"),r=new Map;return t.forEach(e=>r.set(e.userId,e)),r}async getUsers(e,a="active"){const t=F.extractTokenData();return t&&t.companyId?this.fetchUsers(e,t.companyId,a):[]}async fetchSoftwares(e){try{const a=await this.makeApiCall("/api/common/v1/softwares",{},e),t=a?.data||a;return Array.isArray(t)?t.map(e=>({id:e.id,alias:e.alias||"",color:e.color||"",colorLight:e.colorLight||"",namePtBr:e.namePtBr||"",nameUs:e.nameUs||"",nameEs:e.nameEs||""})):(K.handleError("[QualiexApi] fetchSoftwares: formato de resposta inesperado",!1),[])}catch(a){if(await oe.handleApiError(a))try{const a=await this.makeApiCall("/api/common/v1/softwares",{},e),t=a?.data||a;return Array.isArray(t)?t.map(e=>({id:e.id,alias:e.alias||"",color:e.color||"",colorLight:e.colorLight||"",namePtBr:e.namePtBr||"",nameUs:e.nameUs||"",nameEs:e.nameEs||""})):[]}catch(t){return K.handleError(t instanceof Error?t:"Erro ao buscar softwares após renovação de token",!0),[]}return K.handleError(a instanceof Error?a.message:"Erro ao buscar softwares da API Qualiex",!0),[]}}async fetchUserAssociations(e,a){try{const t=await this.makeApiCall(`/api/common/v1/Users/${e}/associations`,{},a),r=t?.data||t;return Array.isArray(r)?r.map(e=>({associationId:e.associationId||"",userId:e.userId||"",userName:e.userName||"",companyId:e.companyId||"",companyName:e.companyName||"",companyAlias:e.companyAlias||"",companyPhotoDate:e.companyPhotoDate,language:e.language,roleId:e.roleId||"",roleName:e.roleName||"",placeId:e.placeId,placeName:e.placeName,softwares:Array.isArray(e.softwares)?e.softwares:[],functionalities:Array.isArray(e.functionalities)?e.functionalities:[],isQualitfy:e.isQualitfy??!1,isMetroex:e.isMetroex??!1})):(K.handleError("[QualiexApi] fetchUserAssociations: formato de resposta inesperado",!1),[])}catch(t){if(await oe.handleApiError(t))try{const t=await this.makeApiCall(`/api/common/v1/Users/${e}/associations`,{},a),r=t?.data||t;return Array.isArray(r)?r.map(e=>({associationId:e.associationId||"",userId:e.userId||"",userName:e.userName||"",companyId:e.companyId||"",companyName:e.companyName||"",companyAlias:e.companyAlias||"",companyPhotoDate:e.companyPhotoDate,language:e.language,roleId:e.roleId||"",roleName:e.roleName||"",placeId:e.placeId,placeName:e.placeName,softwares:Array.isArray(e.softwares)?e.softwares:[],functionalities:Array.isArray(e.functionalities)?e.functionalities:[],isQualitfy:e.isQualitfy??!1,isMetroex:e.isMetroex??!1})):[]}catch(r){return K.handleError(r instanceof Error?r:"Erro ao buscar associações após renovação de token",!0),[]}return K.handleError(t instanceof Error?t.message:"Erro ao buscar associações do usuário",!0),[]}}},le=a.createContext(void 0),de=()=>{const e=a.useContext(le);if(void 0===e)throw new Error("useAuth deve ser usado dentro de um AuthProvider");return e};(void 0).VITE_SUPABASE_URL,G();const ce=(e={})=>{const{user:a,alias:r}=de(),{enabled:s=!0,status:n="active"}=e;return t.useQuery({queryKey:["qualiex-users",r,n],queryFn:()=>ie.getUsers(r,n),enabled:s&&!!r&&!!a,staleTime:3e5,retry:2,retryDelay:1e3})};function ue(){const{alias:r,isAuthenticated:s}=de(),n=F.getAccessToken(),{data:o=[]}=ce(),i=t.useQuery({queryKey:["leadership-raw",r],queryFn:async()=>{if(!n||!r)throw new Error("Usuário não autenticado ou unidade não selecionada");const e=ee(),{data:a,error:t}=await e.schema("common").from("leaders").select("*").eq("is_removed",!1).eq("alias",r);if(t)throw new Error("Erro ao buscar hierarquia de liderança");return a??[]},enabled:!!n&&!!r&&s}),l=a.useMemo(()=>{const a=i.data;if(!a)return;if(0===a.length)return[];const t={};o.forEach(e=>{t[e.userId]={name:e.userName||e.userEmail,email:e.userEmail||""}});const r=a.map(r=>{const s=a.filter(e=>e.id_leader===r.id_user);return{...r,name:t[r.id_user]?.name||e.t("inactive_user"),email:t[r.id_user]?.email||"",subordinatesCount:s.length,subordinateNames:s.map(e=>t[e.id_user]?.name||"[Usuário inativo]").sort((e,a)=>e.localeCompare(a))}}),s=new Set(a.map(e=>e.id_user));return new Set(a.filter(e=>e.id_leader&&!s.has(e.id_leader)).map(e=>e.id_leader)).forEach(s=>{const n=t[s],o=a.filter(e=>e.id_leader===s);r.push({id:`virtual-${s}`,alias:a[0]?.alias||"",id_user:s,id_leader:null,is_removed:!1,is_active:!0,created_at:(new Date).toISOString(),updated_at:(new Date).toISOString(),name:n?.name||e.t("inactive_user"),email:n?.email||"",subordinatesCount:o.length,subordinateNames:o.map(e=>t[e.id_user]?.name||"[Usuário inativo]").sort((e,a)=>e.localeCompare(a))})}),U(r)},[i.data,o]);return{...i,data:l}}const me="common";function he(){const{alias:e}=de(),a=t.useQueryClient(),r=ee(),{t:s}=o.useTranslation();return t.useMutation({mutationFn:async a=>{if(!e)throw new Error(s("unit_not_selected","Unidade não selecionada"));if(a.id_user===a.id_leader)throw new Error(s("cannot_be_own_leader","Usuário não pode ser seu próprio líder"));a.id_leader&&await ye(r,e,a.id_user,a.id_leader);const{data:t,error:n}=await r.schema(me).from("leaders").insert({alias:e,id_user:a.id_user,id_leader:a.id_leader,is_active:!0,is_removed:!1}).select().single();if(n)throw n;return t},onSuccess:()=>{a.invalidateQueries({queryKey:["leadership-raw",e]}),n.toast.success(s("leader_promoted_success","Líder virtual promovido com sucesso"))},onError:e=>{n.toast.error(e.message||s("leader_create_error","Erro ao criar líder"))}})}function pe(){const{alias:e}=de(),a=t.useQueryClient(),r=ee(),{t:s}=o.useTranslation();return t.useMutation({mutationFn:async a=>{if(!e)throw new Error(s("unit_not_selected","Unidade não selecionada"));if(!a.users.length)throw new Error(s("select_at_least_one",s("leadership_select_subordinates")));const t=a.users.map(e=>e.id_user),{data:n}=await r.schema(me).from("leaders").select("id_user").eq("alias",e).in("id_user",t).eq("is_removed",!1);if(n&&n.length>0){const e=n.map(e=>e.id_user);throw new Error(s("users_already_leaders",`Alguns usuários já estão cadastrados como líderes: ${e.join(", ")}`))}for(const d of a.users){if(a.id_leader&&d.id_user===a.id_leader)throw new Error(s("cannot_be_own_leader","Usuário não pode ser seu próprio líder"));a.id_leader&&await ye(r,e,d.id_user,a.id_leader)}const o=a.users.map(t=>({alias:e,id_user:t.id_user,id_leader:a.id_leader,is_active:!0,is_removed:!1})),{data:i,error:l}=await r.schema(me).from("leaders").insert(o).select();if(l)throw l;return i},onSuccess:t=>{a.invalidateQueries({queryKey:["leadership-raw",e]}),n.toast.success(s("subordinates_added_success",`${t?.length||0} liderado(s) adicionado(s) com sucesso`))},onError:e=>{n.toast.error(e.message||s("subordinates_add_error","Erro ao adicionar liderados"))}})}function fe(){const{alias:e}=de(),a=t.useQueryClient(),r=ee(),{t:s}=o.useTranslation();return t.useMutation({mutationFn:async a=>{if(!e)throw new Error(s("unit_not_selected","Unidade não selecionada"));const{data:t}=await r.schema(me).from("leaders").select("id_user").eq("id",a.id).eq("alias",e).single();if(!t)throw new Error(s("leader_not_found","Líder não encontrado"));if(t.id_user===a.id_leader)throw new Error(s("cannot_be_own_leader","Usuário não pode ser seu próprio líder"));a.id_leader&&await ye(r,e,t.id_user,a.id_leader,a.id);const{data:n,error:o}=await r.schema(me).from("leaders").update({id_leader:a.id_leader}).eq("id",a.id).eq("alias",e).select().single();if(o)throw o;return n},onSuccess:()=>{a.invalidateQueries({queryKey:["leadership-raw",e]}),n.toast.success(s("leader_updated_success","Líder atualizado com sucesso"))},onError:e=>{n.toast.error(e.message||s("leader_update_error","Erro ao atualizar líder"))}})}function ge(){const{alias:e}=de(),a=t.useQueryClient(),r=ee(),{t:s}=o.useTranslation();return t.useMutation({mutationFn:async a=>{if(!e)throw new Error(s("unit_not_selected","Unidade não selecionada"));const{error:t}=await r.schema(me).from("leaders").update({is_removed:!0}).eq("id",a).eq("alias",e);if(t)throw t},onSuccess:()=>{a.invalidateQueries({queryKey:["leadership-raw",e]}),n.toast.success(s("leader_removed_success","Líder removido com sucesso"))},onError:e=>{n.toast.error(e.message||s("leader_remove_error","Erro ao remover líder"))}})}function xe(){const{alias:e}=de(),a=t.useQueryClient(),r=ee(),{t:s}=o.useTranslation();return t.useMutation({mutationFn:async({leaderUserId:a,selectedUsers:t})=>{if(!e)throw new Error(s("unit_not_selected","Unidade não selecionada"));const n=t.map(e=>e.id_user),o=await Promise.all([r.schema(me).from("leaders").select("id, id_user, id_leader").eq("alias",e).eq("is_removed",!1).eq("id_leader",a),r.schema(me).from("leaders").select("id, id_user, id_leader").eq("alias",e).eq("is_removed",!1).in("id_user",n.length?n:["__none__"])]),[{data:i,error:l},{data:d,error:c}]=o;if(l)throw l;if(c)throw c;const u=i||[],m=d||[],h=new Set(n),p=u.filter(e=>!h.has(e.id_user)),f=m.filter(e=>e.id_leader!==a),g=new Set(m.map(e=>e.id_user)),x=t.filter(e=>!g.has(e.id_user));for(const s of f)await ye(r,e,s.id_user,a,s.id);for(const w of x){if(w.id_user===a)throw new Error(s("cannot_be_own_leader","Usuário não pode ser seu próprio líder"));await ye(r,e,w.id_user,a)}const y=[];if(p.length){const a=p.map(e=>e.id);y.push(r.schema(me).from("leaders").update({is_removed:!0}).in("id",a).eq("alias",e))}if(f.length){const t=f.map(e=>e.id);y.push(r.schema(me).from("leaders").update({id_leader:a}).in("id",t).eq("alias",e))}if(x.length){const t=x.map(t=>({alias:e,id_user:t.id_user,id_leader:a,is_active:!0,is_removed:!1}));y.push(r.schema(me).from("leaders").insert(t))}const v=(await Promise.all(y)).find(e=>e?.error);if(v?.error)throw v.error;return{unlinked:p.length,updated:f.length,created:x.length}},onSuccess:t=>{a.invalidateQueries({queryKey:["leadership-raw",e]}),n.toast.success(s("subordinates_synced_success",`Subordinados sincronizados (${t.created} adicionados, ${t.updated} atualizados, ${t.unlinked} removidos)`))},onError:e=>{n.toast.error(e.message||s("subordinates_sync_error","Erro ao sincronizar subordinados"))}})}async function ye(a,t,r,s,n){const{data:o,error:i}=await a.schema(me).from("leaders").select("id, id_user, id_leader").eq("alias",t).eq("is_removed",!1);if(i)throw i;const l=n?o.filter(e=>e.id!==n):o,d=new Set;let c=s;for(;c;){if(d.has(c))throw new Error(e.t("leadership_cycle_error"));if(c===r)throw new Error("Esta associação criaria um ciclo na hierarquia");d.add(c);const a=l.find(e=>e.id_user===c);c=a?.id_leader||null}}function ve(...e){return u.twMerge(c.clsx(e))}const we=d.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{primary:"bg-primary text-primary-foreground hover:bg-primary-hover shadow-sm hover:shadow-md active:scale-[0.98]",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary-hover border border-input shadow-sm",tertiary:"bg-background text-foreground hover:bg-accent hover:text-accent-foreground border border-border",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",ghost:"hover:bg-accent hover:text-accent-foreground",subtle:"text-muted-foreground hover:text-foreground hover:bg-accent/50",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90 shadow-sm hover:shadow-md",danger:"bg-destructive text-destructive-foreground hover:bg-destructive/90 shadow-sm hover:shadow-md",link:"text-primary underline-offset-4 hover:underline",icon:"bg-transparent border border-input hover:bg-accent hover:text-accent-foreground p-2",loading:"bg-primary/50 text-primary-foreground cursor-wait",default:"bg-primary text-primary-foreground hover:bg-primary/90",action:"bg-primary/10 text-primary hover:bg-primary/20 border border-primary/30","icon-only":"bg-transparent border border-input hover:bg-accent hover:text-accent-foreground p-2","external-link":"bg-transparent text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors","action-primary":"bg-primary text-primary-foreground hover:bg-primary/90 shadow-sm","action-secondary":"bg-secondary text-secondary-foreground hover:bg-secondary/80 border border-input"},size:{sm:"h-8 px-3 text-xs rounded-lg",md:"h-10 px-4 py-2 text-sm rounded-md",lg:"h-12 px-8 text-base rounded-lg",xl:"h-14 px-10 text-lg rounded-lg",icon:"h-10 w-10","icon-sm":"h-8 w-8","icon-xs":"h-6 w-6",default:"h-10 px-4 py-2"}},defaultVariants:{variant:"primary",size:"md"}}),be=k.forwardRef(({className:e,variant:a,size:t,asChild:s=!1,...n},o)=>{const i=s?l.Slot:"button";return r.jsx(i,{className:ve(we({variant:a,size:t,className:e})),ref:o,...n})});be.displayName="Button";const _e=k.forwardRef(({className:e,...a},t)=>r.jsx(j.Root,{ref:t,className:ve("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",e),...a,children:r.jsx(j.Indicator,{className:ve("flex items-center justify-center text-current"),children:r.jsx(i.Check,{className:"h-4 w-4"})})}));_e.displayName=j.Root.displayName;const Ne=k.forwardRef(({className:e,...a},t)=>r.jsx("table",{ref:t,className:ve("w-full caption-bottom text-[13px] table-fixed",e),...a}));Ne.displayName="Table";const ke=k.forwardRef(({className:e,...a},t)=>r.jsx("thead",{ref:t,className:ve("[&_tr]:border-b sticky top-0 z-[1] bg-background",e),...a}));ke.displayName="TableHeader";const je=k.forwardRef(({className:e,...a},t)=>r.jsx("tbody",{ref:t,className:ve("[&_tr:last-child]:border-0",e),...a}));je.displayName="TableBody";k.forwardRef(({className:e,...a},t)=>r.jsx("tfoot",{ref:t,className:ve("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...a})).displayName="TableFooter";const Se=k.forwardRef(({className:e,...a},t)=>r.jsx("tr",{ref:t,className:ve("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted even:bg-table-stripe",e),...a}));Se.displayName="TableRow";const Ce=k.forwardRef(({className:e,...a},t)=>r.jsx("th",{ref:t,className:ve("h-9 px-4 py-2 text-left align-middle font-medium text-muted-foreground bg-background border-b [&:has([role=checkbox])]:pr-0",e),...a}));Ce.displayName="TableHead";const Ee=k.forwardRef(({className:e,...a},t)=>r.jsx("td",{ref:t,className:ve("px-4 py-2 align-middle overflow-hidden [&:has([role=checkbox])]:pr-0",e),...a}));Ee.displayName="TableCell";k.forwardRef(({className:e,...a},t)=>r.jsx("caption",{ref:t,className:ve("mt-4 text-sm text-muted-foreground",e),...a})).displayName="TableCaption";const Ae=S.Root,Ie=S.Trigger,Te=k.forwardRef(({className:e,align:a="center",sideOffset:t=4,...s},n)=>r.jsx(S.Content,{ref:n,align:a,sideOffset:t,className:ve("z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...s}));function De(e,a){const t=new Set;function r(e){if(e)for(const a of e)t.add(a.id),r(a.children)}return function e(t){for(const s of t){if(s.id===a)return r(s.children),!0;if(s.children&&e(s.children))return!0}return!1}(e),t}function Ue({children:e,itemId:a,enableDrag:t,onDragStartCell:s,onDragEndCell:n,onDragOverCell:o,onDropCell:i,className:l}){return r.jsx(Ee,{draggable:t,onDragStart:t?e=>s(a,e):void 0,onDragEnd:t?n:void 0,onDragOver:e=>{e.preventDefault(),e.stopPropagation(),o(a,e)},onDragEnter:e=>{e.preventDefault(),e.stopPropagation(),o(a,e)},onDrop:e=>{e.preventDefault(),e.stopPropagation(),i(a,e)},className:l,children:e})}function Re({item:e,level:a,columns:t,nameKey:s,iconComponent:n,expandedIds:o,onToggleExpand:l,onRowClick:d,renderActions:c,rowActionsVariant:u="default",enableSelection:m,selectedIds:h,onSelectItem:p,enableRowDrag:f,draggedId:g,dragOverId:x,onDragStartCell:y,onDragEndCell:v,onDragOverCell:w,onDropCell:b,dragCount:_}){const N=o.has(e.id),k=(e.children?.length??0)>0,j=24*a,S="inline"===u,C=g===e.id||h?.has(e.id)&&g&&h?.has(g),E=x===e.id&&g!==e.id,A=h?.has(e.id)??!1,I={itemId:e.id,enableDrag:f,onDragStartCell:y,onDragEndCell:v,onDragOverCell:w,onDropCell:b};return r.jsxs(r.Fragment,{children:[r.jsxs(Se,{className:ve(d&&"cursor-pointer",S&&"group",C&&"opacity-40",E&&"ring-2 ring-primary ring-inset bg-primary/5"),onClick:d?()=>d(e):void 0,children:[r.jsx(Ue,{...I,children:r.jsxs("div",{className:"flex items-center gap-2",style:{paddingLeft:`${j}px`},children:[m&&r.jsx(_e,{checked:A,onCheckedChange:()=>p?.(e.id),onClick:e=>e.stopPropagation(),className:"shrink-0"}),f&&r.jsx("span",{className:"cursor-grab text-muted-foreground shrink-0 select-none",title:"Arrastar",children:"⠿"}),k?r.jsx("button",{onClick:a=>{a.stopPropagation(),l(e.id)},className:"p-1 hover:bg-accent rounded shrink-0",children:N?r.jsx(i.ChevronDown,{className:"h-4 w-4"}):r.jsx(i.ChevronRight,{className:"h-4 w-4"})}):r.jsx("div",{className:"w-6 shrink-0"}),n??r.jsx(i.User,{className:"h-4 w-4 text-muted-foreground shrink-0"}),r.jsx("span",{className:"truncate",children:String(e[s]??e.id)}),g===e.id&&_&&_>1&&r.jsx("span",{className:"ml-1 inline-flex items-center rounded-full bg-primary px-1.5 py-0 text-xs font-semibold text-primary-foreground",children:_})]})}),t.map(t=>{const s=e[t.key],n=t.render?t.render(e,a):null!=s?String(s):"—";return r.jsx(Ue,{...I,className:ve("text-center",t.className),children:t.hoverContent?r.jsxs(Ae,{openDelay:200,children:[r.jsx(Ie,{asChild:!0,children:r.jsx("span",{className:"cursor-default underline decoration-dotted underline-offset-4 text-foreground",children:n})}),r.jsx(Te,{side:"bottom",align:"center",className:"w-auto max-w-xs",children:t.hoverContent(e)})]}):n},String(t.key))}),c&&r.jsx(Ue,{...I,className:"text-right",children:r.jsx("div",{onClick:e=>e.stopPropagation(),className:ve("flex items-center justify-end gap-1",S&&"opacity-0 group-hover:opacity-100 transition-opacity"),children:c(e)})})]}),k&&N&&e.children.map(e=>r.jsx(Re,{item:e,level:a+1,columns:t,nameKey:s,iconComponent:n,expandedIds:o,onToggleExpand:l,onRowClick:d,renderActions:c,rowActionsVariant:u,enableSelection:m,selectedIds:h,onSelectItem:p,enableRowDrag:f,draggedId:g,dragOverId:x,onDragStartCell:y,onDragEndCell:v,onDragOverCell:w,onDropCell:b,dragCount:_},e.id))]})}function Pe({onDrop:a,isDragOver:t,onDragOver:s,onDragLeave:n,label:o}){return r.jsxs("div",{className:ve("absolute top-0 left-0 right-0 z-10 flex items-center justify-center gap-2 py-2 px-4 border-2 border-dashed rounded-md text-sm transition-colors mx-2 mt-2",t?"border-primary bg-primary/10 text-primary":"border-muted-foreground/30 text-muted-foreground bg-background/95"),onDragOver:s,onDragEnter:s,onDragLeave:n,onDrop:a,children:[r.jsx(i.ArrowUpToLine,{className:"h-4 w-4"}),o??e.t("leadership_make_root_short")]})}function Le({data:t,columns:s,nameKey:n,nameHeader:o=e.t("ap_name"),iconComponent:l,expandedIds:d,onToggleExpand:c,onRowClick:u,renderActions:m,actionsHeader:h="",rowActionsVariant:p="default",isLoading:f,emptyMessage:g="Nenhum registro encontrado.",className:x,enableSelection:y,selectedIds:v,onSelectItem:w,onSelectAll:b,isAllSelected:_,enableRowDrag:N,onMoveNode:k,onMoveNodes:j,rootDropLabel:S,actionsWidth:C=20,nameMinWidth:E=200}){const[A,I]=a.useState(null),[T,D]=a.useState(null),[U,R]=a.useState(!1),[P,L]=a.useState(1),V=a.useRef(null),q=a.useRef([]),O=a.useRef(null),z=a.useMemo(()=>new Set(v??[]),[v]),M=a.useMemo(()=>{if(!A||!t)return new Set;const e=q.current.length>0?q.current:[A],a=function(e,a){const t=new Set;for(const r of a)De(e,r).forEach(e=>t.add(e));return t}(t,e);return e.forEach(e=>a.add(e)),a},[A,t]),B=a.useRef(M);B.current=M;const $=a.useCallback(()=>{V.current=null,q.current=[],O.current=null,I(null),D(null),R(!1),L(1)},[]),F=a.useCallback((e,a)=>{e.length>1&&j?j(e,a):1===e.length&&k?.(e[0],a)},[k,j]),H=a.useCallback((e,a)=>{const t=z.has(e)&&z.size>1?Array.from(z):[e];V.current=e,q.current=t,O.current=null,I(e),L(t.length),a.dataTransfer.effectAllowed="move",a.dataTransfer.setData("text/plain",e),a.dataTransfer.setData("application/x-tree-ids",JSON.stringify(t))},[z]),W=a.useCallback((e,a)=>{a.preventDefault(),a.dataTransfer.dropEffect="move",B.current.has(e)?D(null):(O.current=e,D(e))},[]),Q=a.useCallback((e,a)=>{a.preventDefault(),a.stopPropagation();const t=B.current.has(e)?O.current:e;if(!t)return void $();let r=q.current;if(0===r.length){try{const e=a.dataTransfer.getData("application/x-tree-ids");if(e){const a=JSON.parse(e);Array.isArray(a)&&a.length>0&&(r=a)}}catch{}if(0===r.length){const e=a.dataTransfer.getData("text/plain");e&&(r=[e])}}0===r.length||r.includes(t)||F(r,t),$()},[F,$]),J=a.useCallback(e=>{e.preventDefault(),e.stopPropagation();let a=q.current;if(0===a.length){try{const t=e.dataTransfer.getData("application/x-tree-ids");if(t){const e=JSON.parse(t);Array.isArray(e)&&e.length>0&&(a=e)}}catch{}if(0===a.length){const t=e.dataTransfer.getData("text/plain");t&&(a=[t])}}0!==a.length?(F(a,null),$()):$()},[F,$]),K=a.useCallback(e=>{e.preventDefault(),e.dataTransfer.dropEffect="move",R(!0)},[]),Y=a.useCallback(e=>{N&&(e.preventDefault(),e.dataTransfer.dropEffect="move")},[N]),G=a.useCallback(e=>{if(!N)return;const a=document.elementFromPoint(e.clientX,e.clientY)?.closest?.("[data-tree-row-id]"),t=a?.dataset?.treeRowId??O.current;t&&Q(t,e)},[N,Q]);if(f)return r.jsx("div",{className:"flex items-center justify-center py-12",children:r.jsxs("div",{className:"text-center space-y-2",children:[r.jsx("div",{className:"animate-spin h-8 w-8 border-4 border-primary border-t-transparent rounded-full mx-auto"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Carregando..."})]})});if(!t||0===t.length)return r.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-center space-y-2",children:[r.jsx(i.User,{className:"h-10 w-10 text-muted-foreground/50"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:g})]});const X=null!==A;return r.jsxs("div",{className:ve("border rounded-lg overflow-hidden relative",x),onDragOver:Y,onDrop:G,onDragLeave:N?e=>{const a=e.relatedTarget;a&&e.currentTarget.contains(a)||(D(null),R(!1))}:void 0,children:[N&&X&&r.jsx(Pe,{onDrop:J,isDragOver:U,onDragOver:K,onDragLeave:()=>R(!1),label:S}),r.jsxs(Ne,{children:[r.jsx(ke,{children:r.jsxs(Se,{children:[r.jsx(Ce,{className:"text-left",style:{minWidth:E},children:r.jsxs("div",{className:"flex items-center gap-2",children:[y&&r.jsx(_e,{checked:_??!1,onCheckedChange:()=>b?.()}),o]})}),s.map(e=>r.jsx(Ce,{className:ve("text-center",e.className),style:e.width?{width:e.width}:void 0,children:e.header},String(e.key))),m&&r.jsx(Ce,{className:"text-right",style:{width:C},children:h})]})}),r.jsx(je,{children:t.map(e=>r.jsx(Re,{item:e,level:0,columns:s,nameKey:n,iconComponent:l,expandedIds:d,onToggleExpand:c,onRowClick:u,renderActions:m,rowActionsVariant:p,enableSelection:y,selectedIds:z,onSelectItem:w,enableRowDrag:N,draggedId:A,dragOverId:T,onDragStartCell:H,onDragEndCell:$,onDragOverCell:W,onDropCell:Q,dragCount:P},e.id))})]})]})}Te.displayName=S.Content.displayName;const Ve=k.forwardRef(({className:e,orientation:a="horizontal",decorative:t=!0,...s},n)=>r.jsx(E.Root,{ref:n,decorative:t,orientation:a,className:ve("shrink-0 bg-border","horizontal"===a?"h-[1px] w-full":"h-full w-[1px]",e),...s}));Ve.displayName=E.Root.displayName;const qe=A.Root,Oe=A.Trigger,ze=A.Portal,Me=k.forwardRef(({className:e,...a},t)=>r.jsx(A.Overlay,{className:ve("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...a,ref:t}));Me.displayName=A.Overlay.displayName;const Be=k.forwardRef(({className:e,...a},t)=>r.jsxs(ze,{children:[r.jsx(Me,{}),r.jsx(A.Content,{ref:t,className:ve("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",e),...a})]}));Be.displayName=A.Content.displayName;const $e=({className:e,...a})=>r.jsx("div",{className:ve("flex flex-col space-y-2 text-center sm:text-left",e),...a});$e.displayName="AlertDialogHeader";const Fe=({className:e,...a})=>r.jsx("div",{className:ve("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...a});Fe.displayName="AlertDialogFooter";const He=k.forwardRef(({className:e,...a},t)=>r.jsx(A.Title,{ref:t,className:ve("text-lg font-semibold",e),...a}));He.displayName=A.Title.displayName;const We=k.forwardRef(({className:e,...a},t)=>r.jsx(A.Description,{ref:t,className:ve("text-sm text-muted-foreground",e),...a}));We.displayName=A.Description.displayName;const Qe=k.forwardRef(({className:e,...a},t)=>r.jsx(A.Action,{ref:t,className:ve(we(),e),...a}));Qe.displayName=A.Action.displayName;const Je=k.forwardRef(({className:e,...a},t)=>r.jsx(A.Cancel,{ref:t,className:ve(we({variant:"outline"}),"mt-2 sm:mt-0",e),...a}));Je.displayName=A.Cancel.displayName;const Ke=C.Root,Ye=C.Portal,Ge=k.forwardRef(({className:e,...a},t)=>r.jsx(C.Overlay,{ref:t,className:ve("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...a}));Ge.displayName=C.Overlay.displayName;const Xe={sm:{width:"30vw",minWidth:"320px",maxWidth:"480px",maxHeight:"320px"},md:{width:"50vw",minWidth:"480px",maxWidth:"720px",maxHeight:"70vh"},lg:{width:"85vw",height:"85vh",maxWidth:"1440px",minHeight:"480px",maxHeight:"900px"}},Ze=k.forwardRef(({className:a,children:t,size:s,variant:n="informative",isDirty:o,customWidth:l,customMinWidth:d,customMaxWidth:c,customHeight:u,customMinHeight:m,customMaxHeight:h,unsavedChangesTitle:p=e.t("unsaved_changes"),unsavedChangesDescription:f=e.t("unsaved_changes_description"),cancelText:g=e.t("cancel"),leaveWithoutSavingText:x=e.t("leave_without_saving"),style:y,onInteractOutside:v,onEscapeKeyDown:w,...b},_)=>{const[N,j]=k.useState(!1),S=k.useRef(null),E=k.useRef(!1),A=s??(l||d||c||u||m||h?void 0:"md"),I=A?Xe[A]:{},T={...l??I.width?{width:l??I.width}:{},...d??I.minWidth?{minWidth:d??I.minWidth}:{},...c??I.maxWidth?{maxWidth:c??I.maxWidth}:{},...u??I.height?{height:u??I.height}:{},...m??I.minHeight?{minHeight:m??I.minHeight}:{},...h??I.maxHeight?{maxHeight:h??I.maxHeight}:{},...y},D=k.useCallback(e=>{"form"===n&&o?(S.current=e,j(!0)):e()},[n,o]),U=k.useRef(null),R="destructive"!==n;if("development"===process.env.NODE_ENV&&t){const e=k.Children.toArray(t);e.some(e=>k.isValidElement(e)&&"DialogFooter"===e.type?.displayName),e.some(e=>k.isValidElement(e)&&"DialogBody"===e.type?.displayName)}return r.jsxs(Ye,{children:[r.jsx(Ge,{}),r.jsxs(C.Content,{ref:_,className:ve("fixed left-[50%] top-[50%] z-50 flex flex-col translate-x-[-50%] translate-y-[-50%] border-0 border-l-[10px] border-l-primary bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-lg max-sm:!w-[calc(100vw-2rem)] max-sm:!h-[calc(100dvh-2rem)] max-sm:!min-w-0 max-sm:!min-h-0 max-sm:!max-w-none max-sm:!max-h-none max-sm:p-4",a),style:T,onInteractOutside:e=>{"form"!==n&&"destructive"!==n?v?.(e):e.preventDefault()},onEscapeKeyDown:e=>{if("destructive"!==n)return"form"===n&&o?(e.preventDefault(),void D(()=>{E.current=!0,U.current?.click()})):void w?.(e);e.preventDefault()},...b,children:[t,R&&r.jsxs(C.Close,{ref:U,onClick:e=>{E.current?E.current=!1:"form"===n&&o&&(e.preventDefault(),D(()=>{E.current=!0,U.current?.click()}))},className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-0 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[r.jsx(i.X,{className:"h-4 w-4"}),r.jsx("span",{className:"sr-only",children:"Close"})]})]}),r.jsx(qe,{open:N,onOpenChange:j,children:r.jsxs(Be,{children:[r.jsxs($e,{children:[r.jsx(He,{children:p}),r.jsx(We,{children:f})]}),r.jsxs(Fe,{children:[r.jsx(Je,{onClick:()=>{j(!1),S.current=null},children:g}),r.jsx(Qe,{onClick:()=>{j(!1),S.current?.(),S.current=null},children:x})]})]})})]})});Ze.displayName=C.Content.displayName;const ea=({className:e,showSeparator:a=!1,children:t,...s})=>r.jsxs("div",{className:ve("flex flex-col flex-shrink-0",e),...s,children:[r.jsx("div",{className:"flex flex-col text-left",children:t}),a&&r.jsx(Ve,{className:"mt-2"})]});ea.displayName="DialogHeader";const aa=({className:e,...a})=>r.jsx("div",{className:ve("flex-1 min-h-0 overflow-auto py-4 px-2 -mx-2",e),...a});aa.displayName="DialogBody";const ta=k.forwardRef(({className:e,...a},t)=>r.jsx(C.Title,{ref:t,className:ve("text-xl font-semibold leading-none tracking-tight",e),...a}));ta.displayName=C.Title.displayName;k.forwardRef(({className:e,...a},t)=>r.jsx(C.Description,{ref:t,className:ve("text-sm text-muted-foreground",e),...a})).displayName=C.Description.displayName;var ra=function(e,a){for(var t={};e.length;){var r=e[0],s=r.code,n=r.message,o=r.path.join(".");if(!t[o])if("unionErrors"in r){var i=r.unionErrors[0].errors[0];t[o]={message:i.message,type:i.code}}else t[o]={message:n,type:s};if("unionErrors"in r&&r.unionErrors.forEach(function(a){return a.errors.forEach(function(a){return e.push(a)})}),a){var l=t[o].types,d=l&&l[r.code];t[o]=y.appendErrors(o,a,t,s,d?[].concat(d,r.message):r.message)}e.shift()}return t},sa=function(e,a,t){return void 0===t&&(t={}),function(r,s,n){try{return Promise.resolve(function(s,o){try{var i=Promise.resolve(e["sync"===t.mode?"parse":"parseAsync"](r,a)).then(function(e){return n.shouldUseNativeValidation&&v.validateFieldsNatively({},n),{errors:{},values:t.raw?r:e}})}catch(l){return o(l)}return i&&i.then?i.then(void 0,o):i}(0,function(e){if(function(e){return Array.isArray(null==e?void 0:e.errors)}(e))return{values:{},errors:v.toNestErrors(ra(e.errors,!n.shouldUseNativeValidation&&"all"===n.criteriaMode),n)};throw e}))}catch(o){return Promise.reject(o)}}};const na=d.cva("text-xs font-medium leading-none text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),oa=k.forwardRef(({className:e,...a},t)=>r.jsx(I.Root,{ref:t,className:ve(na(),e),...a}));oa.displayName=I.Root.displayName;const ia=k.forwardRef(({className:e,children:a,...t},s)=>r.jsxs(T.Root,{ref:s,className:ve("relative overflow-hidden",e),...t,children:[r.jsx(T.Viewport,{className:"h-full w-full rounded-[inherit]",children:a}),r.jsx(la,{}),r.jsx(T.Corner,{})]}));ia.displayName=T.Root.displayName;const la=k.forwardRef(({className:e,orientation:a="vertical",...t},s)=>r.jsx(T.ScrollAreaScrollbar,{ref:s,orientation:a,className:ve("flex touch-none select-none transition-colors","vertical"===a&&"h-full w-2.5 border-l border-l-transparent p-[1px]","horizontal"===a&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",e),...t,children:r.jsx(T.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"})}));la.displayName=T.ScrollAreaScrollbar.displayName;const da=k.forwardRef(({className:e,type:a,showCharCount:t,maxLength:s,onChange:n,...o},i)=>{const[l,d]=k.useState(0);k.useEffect(()=>{"string"==typeof o.value?d(o.value.length):"string"==typeof o.defaultValue&&d(o.defaultValue.length)},[o.value,o.defaultValue]);return r.jsxs("div",{className:"w-full",children:[r.jsx("input",{type:a,className:ve("flex h-10 w-full rounded-lg border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground hover:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-colors md:text-sm",e),ref:i,maxLength:s,onChange:e=>{d(e.target.value.length),n?.(e)},...o}),t&&s&&r.jsxs("div",{className:"text-right text-xs text-muted-foreground mt-1",children:[l," / ",s]})]})});da.displayName="Input";const ca=k.createContext({showCheck:!1}),ua=({showCheck:e=!1,...a})=>r.jsx(ca.Provider,{value:{showCheck:e},children:r.jsx(D.Root,{...a})}),ma=D.Value,ha=k.forwardRef(({className:e,children:a,...t},s)=>r.jsxs(D.Trigger,{ref:s,className:ve("flex h-10 w-full items-center justify-between rounded-lg border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground hover:border-primary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-colors [&>span]:line-clamp-1",e),...t,children:[a,r.jsx(D.Icon,{asChild:!0,children:r.jsx(i.ChevronDown,{className:"h-4 w-4 opacity-50"})})]}));ha.displayName=D.Trigger.displayName;const pa=k.forwardRef(({className:e,...a},t)=>r.jsx(D.ScrollUpButton,{ref:t,className:ve("flex cursor-default items-center justify-center py-1",e),...a,children:r.jsx(i.ChevronUp,{className:"h-4 w-4"})}));pa.displayName=D.ScrollUpButton.displayName;const fa=k.forwardRef(({className:e,...a},t)=>r.jsx(D.ScrollDownButton,{ref:t,className:ve("flex cursor-default items-center justify-center py-1",e),...a,children:r.jsx(i.ChevronDown,{className:"h-4 w-4"})}));fa.displayName=D.ScrollDownButton.displayName;const ga=k.forwardRef(({className:e,children:a,position:t="popper",container:s,collisionBoundary:n,...o},i)=>r.jsx(D.Portal,{container:s,children:r.jsxs(D.Content,{ref:i,className:ve("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2","popper"===t&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:t,collisionBoundary:n,...o,children:[r.jsx(pa,{}),r.jsx(D.Viewport,{className:ve("p-1","popper"===t&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:a}),r.jsx(fa,{})]})}));ga.displayName=D.Content.displayName;k.forwardRef(({className:e,...a},t)=>r.jsx(D.Label,{ref:t,className:ve("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...a})).displayName=D.Label.displayName;const xa=k.forwardRef(({className:e,children:a,...t},s)=>{const{showCheck:n}=k.useContext(ca);return r.jsxs(D.Item,{ref:s,className:ve("relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",n?"pl-8":"pl-2","data-[state=checked]:bg-accent data-[state=checked]:text-accent-foreground data-[state=checked]:font-medium data-[state=checked]:border-l-2 data-[state=checked]:border-primary",n?"data-[state=checked]:pl-[calc(2rem-2px)]":"data-[state=checked]:pl-[calc(0.5rem-2px)]",e),...t,children:[n&&r.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:r.jsx(D.ItemIndicator,{children:r.jsx(i.Check,{className:"h-4 w-4"})})}),r.jsx(D.ItemText,{children:a})]})});xa.displayName=D.Item.displayName;k.forwardRef(({className:e,...a},t)=>r.jsx(D.Separator,{ref:t,className:ve("-mx-1 my-1 h-px bg-muted",e),...a})).displayName=D.Separator.displayName;const ya=x.z.object({id_leader:x.z.string().nullable(),id_users:x.z.array(x.z.string()).min(1,e.t("leadership_select_subordinates"))}),va=x.z.object({id_leader:x.z.string().nullable(),id_users:x.z.array(x.z.string())});function wa({value:t,onChange:s,excludeUserIds:n=[],error:o}){const{data:l=[],isLoading:d}=ce(),[c,u]=a.useState(""),m=a.useRef(null),h=a.useRef(0),p=l.filter(e=>!n.includes(e.userId||"")).filter(e=>{const a=c.toLowerCase(),t=e.userName?.toLowerCase().includes(a);return t}).sort((e,a)=>{const r=t.includes(e.userId),s=t.includes(a.userId);if(r&&!s)return-1;if(!r&&s)return 1;const n=e.userName||e.userEmail||"",o=a.userName||a.userEmail||"";return n.localeCompare(o)});return a.useEffect(()=>{m.current&&h.current>0&&(m.current.scrollTop=h.current)},[p]),d?r.jsxs("div",{className:"flex items-center justify-center p-4",children:[r.jsx(i.Loader2,{className:"h-6 w-6 animate-spin"}),r.jsx("span",{className:"ml-2",children:"Carregando dados..."})]}):r.jsxs("div",{className:"space-y-2",children:[r.jsx(da,{placeholder:e.t("search_user_placeholder"),value:c,onChange:e=>u(e.target.value)}),r.jsx("div",{ref:m,className:"border rounded-md p-4 max-h-[300px] overflow-y-auto",children:0===p.length?r.jsx("p",{className:"text-sm text-muted-foreground",children:e.t("search_user_placeholder")}):r.jsx("div",{className:"space-y-2",children:p.map(e=>r.jsxs("div",{className:"flex items-center space-x-2",children:[r.jsx(_e,{id:e.userId,checked:t.includes(e.userId),onCheckedChange:()=>{return a=e.userId,m.current&&(h.current=m.current.scrollTop),void(t.includes(a)?s(t.filter(e=>e!==a)):s([...t,a]));var a}}),r.jsx(oa,{htmlFor:e.userId,className:"flex-1 cursor-pointer",children:e.userName||e.userEmail})]},e.userId))})}),t.length>0&&r.jsxs("p",{className:"text-sm text-muted-foreground",children:[t.length," selecionado(s)"]}),o&&r.jsx("p",{className:"text-sm text-destructive",children:o})]})}function ba({leader:t,prefilledLeaderId:s,onSuccess:n}){const{t:l}=o.useTranslation(),{alias:d}=de(),c=!!t,u=t?.id.startsWith("virtual-"),m=pe(),h=he(),p=fe(),f=xe(),g=ge(),{data:x=[]}=ue(),{data:v=[]}=ce(),[w,b]=a.useState(""),_=R(x).map(e=>e.id_user),N=c?R(x).filter(e=>e.id_leader===t.id_user).map(e=>e.id_user):[],k=y.useForm({resolver:sa(c?va:ya),defaultValues:{id_leader:s||(c?t?.id_leader:null)||null,id_users:c?N:[]}});a.useEffect(()=>{if(t){const e=R(x).filter(e=>e.id_leader===t.id_user).map(e=>e.id_user);k.reset({id_leader:t.id_leader||null,id_users:e})}else s?k.reset({id_leader:s,id_users:[]}):k.reset({id_leader:null,id_users:[]})},[d,t?.id,t?.id_user,t?.id_leader,s,x]);const j=m.isPending||h.isPending||p.isPending||f.isPending||g.isPending,S=k.watch("id_leader"),C=k.watch("id_users"),E=c?[t.id_user,..._.filter(e=>e!==t.id_user&&!C.includes(e)&&!N.includes(e))]:[S,..._.filter(e=>!C.includes(e))].filter(Boolean);return r.jsxs("form",{onSubmit:k.handleSubmit(async e=>{try{if(c)if(u){await h.mutateAsync({id_user:t.id_user,id_leader:e.id_leader});const a=v.filter(a=>e.id_users.includes(a.userId)).map(e=>({id_user:e.userId}));await f.mutateAsync({leaderUserId:t.id_user,selectedUsers:a})}else{await p.mutateAsync({id:t.id,id_leader:e.id_leader});const a=v.filter(a=>e.id_users.includes(a.userId)).map(e=>({id_user:e.userId}));await f.mutateAsync({leaderUserId:t.id_user,selectedUsers:a})}else{const a=v.filter(a=>e.id_users.includes(a.userId)).map(e=>({id_user:e.userId}));await m.mutateAsync({id_leader:e.id_leader,users:a})}n?.()}catch(a){}}),className:"space-y-4",children:[c&&r.jsxs("div",{children:[r.jsx(oa,{children:e.t("leader")}),r.jsx(da,{value:v.find(e=>e.userId===t.id_user)?.userName||t.name||e.t("inactive_user"),disabled:!0,className:"bg-muted"})]}),r.jsxs("div",{children:[r.jsx(oa,{children:l("leadership_immediate_superior")}),r.jsxs(ua,{value:S||"none",onValueChange:e=>k.setValue("id_leader","none"===e?null:e),children:[r.jsx(ha,{children:r.jsx(ma,{placeholder:"Selecione..."})}),r.jsxs(ga,{children:[r.jsx("div",{className:"sticky top-0 z-10 bg-background p-2 border-b",children:r.jsx(da,{placeholder:"Buscar superior...",value:w,onChange:e=>b(e.target.value),onKeyDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),className:"h-8"})}),r.jsxs(ia,{className:"h-[200px]",children:[r.jsx(xa,{value:"none",children:"[Nenhum]"}),v.filter(e=>{const a=c?e.userId!==t.id_user:!C.includes(e.userId),r=!w||e.userName?.toLowerCase().includes(w.toLowerCase());return a&&r}).sort((e,a)=>{const t=e.userName||e.userEmail||"",r=a.userName||a.userEmail||"";return t.localeCompare(r)}).map(e=>r.jsx(xa,{value:e.userId,children:e.userName},e.userId))]})]})]},`superior-select-${d}`),k.formState.errors.id_leader&&r.jsx("p",{className:"text-sm text-destructive mt-1",children:k.formState.errors.id_leader.message})]}),r.jsxs("div",{children:[r.jsx(oa,{children:"Subordinados *"}),r.jsx(wa,{value:C,onChange:e=>k.setValue("id_users",e),excludeUserIds:E,error:k.formState.errors.id_users?.message},`users-multiselect-${d}`)]}),r.jsxs("div",{className:"flex items-center justify-between gap-2",children:[r.jsx(be,{type:"submit",disabled:j||!c&&0===C.length,children:j&&!g.isPending?r.jsxs(r.Fragment,{children:[r.jsx(i.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),c?"Atualizando...":"Salvando..."]}):c?"Atualizar":"Criar"}),c&&!S&&0===C.length&&r.jsxs(qe,{children:[r.jsx(Oe,{asChild:!0,children:r.jsx(be,{type:"button",variant:"destructive",disabled:j,className:"ml-auto",children:g.isPending?r.jsxs(r.Fragment,{children:[r.jsx(i.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),"Removendo..."]}):r.jsxs(r.Fragment,{children:[r.jsx(i.Trash2,{className:"mr-2 h-4 w-4"}),"Remover"]})})}),r.jsxs(Be,{children:[r.jsxs($e,{children:[r.jsx(He,{children:l("confirm_removal")}),r.jsx(We,{children:"Tem certeza que deseja remover este líder? Esta ação não pode ser desfeita."})]}),r.jsxs(Fe,{children:[r.jsx(Je,{children:l("cancel")}),r.jsx(Qe,{onClick:async()=>{if(t)try{await g.mutateAsync(t.id),n?.()}catch(e){}},children:l("remove")})]})]})]})]})]})}function _a({open:e,onOpenChange:a,leader:t,prefilledLeaderId:s,title:n}){return r.jsx(Ke,{open:e,onOpenChange:a,children:r.jsxs(Ze,{variant:"form",className:"sm:max-w-[500px]",children:[r.jsx(ea,{showSeparator:!0,children:r.jsx(ta,{children:n})}),r.jsx(aa,{children:r.jsx(ba,{leader:t,prefilledLeaderId:s,onSuccess:()=>a(!1)})})]})})}const Na="leadership-expanded-nodes",ka=(e,a)=>{try{localStorage.setItem(`${Na}-${e}`,JSON.stringify(Array.from(a)))}catch{}};exports.LeadershipDialog=_a,exports.LeadershipForm=ba,exports.LeadershipPage=function({unassociatedUsers:t=[],onAssociateUser:s,onMoveNode:n,onMoveNodes:o,columns:l,nameHeader:d=e.t("leader"),rootDropLabel:c=e.t("leadership_make_root")}={}){const{alias:u}=de(),{data:m,isLoading:h,error:p,refetch:f}=ue(),g=fe(),x=he(),[y,v]=a.useState(()=>u?(e=>{try{const a=localStorage.getItem(`${Na}-${e}`);if(a)return new Set(JSON.parse(a))}catch{}return new Set})(u):new Set),[w,b]=a.useState([]),[_,N]=a.useState(new Set),[k,j]=a.useState(!0),[S,C]=a.useState(!1),[E,A]=a.useState(),[I,T]=a.useState(null),D=a.useMemo(()=>m?R(m):[],[m]),U=a.useMemo(()=>D.map(e=>e.id),[D]),P=U.length>0&&w.length===U.length,L=D.filter(e=>e.children.length>0).every(e=>y.has(e.id));a.useEffect(()=>{if(m&&m.length>0&&u){if(!localStorage.getItem(`${Na}-${u}`)){const e=m.map(e=>e.id),a=new Set(e);v(a),ka(u,a)}}},[m,u]);const V=a.useCallback(e=>{v(a=>{const t=new Set(a);return t.has(e)?t.delete(e):t.add(e),u&&ka(u,t),t})},[u]),q=a.useCallback(()=>{if(L){const e=new Set;v(e),u&&ka(u,e)}else{const e=new Set(D.filter(e=>e.children.length>0).map(e=>e.id));v(e),u&&ka(u,e)}},[L,D,u]),O=a.useCallback(e=>{b(a=>a.includes(e)?a.filter(a=>a!==e):[...a,e])},[]),z=a.useCallback(()=>{b(P?[]:U)},[P,U]),M=a.useCallback(e=>{N(a=>{const t=new Set(a);return t.has(e)?t.delete(e):t.add(e),t})},[]),B=a.useCallback(e=>D.find(a=>a.id===e),[D]),$=a.useCallback((e,a)=>{if(n)return void n(e,a);const r=t.find(a=>a.id===e);if(r){if(s){const e=a?B(a):null;s(r.id,e?.id_user||null)}else x.mutate({id_user:r.id,id_leader:a&&B(a)?.id_user||null});return}const o=B(e);if(!o)return;const i=a?B(a):null;g.mutate({id:o.id,id_leader:i?.id_user||null})},[n,t,s,B,g,x]),F=a.useCallback((e,a)=>{o?o(e,a):(e.forEach(e=>$(e,a)),b([]))},[o,$]),H=a.useCallback(e=>{A(e),T(null),C(!0)},[]),W=a.useCallback(()=>{A(void 0),T(null),C(!0)},[]),Q=a.useCallback(()=>{C(!1),A(void 0),T(null)},[]),J=a.useCallback((e,a)=>{const t=_.has(e)&&_.size>1?Array.from(_):[e];a.dataTransfer.effectAllowed="move",a.dataTransfer.setData("text/plain",e),a.dataTransfer.setData("application/x-tree-ids",JSON.stringify(t)),a.currentTarget.style.opacity="0.4"},[_]),K=a.useMemo(()=>[{key:"subordinatesCount",header:"Subordinados",hoverContent:e=>e.subordinateNames&&e.subordinateNames.length>0?r.jsxs("div",{className:"space-y-1.5",children:[r.jsx("p",{className:"text-xs font-medium text-muted-foreground mb-1",children:"Subordinados diretos:"}),[...e.subordinateNames].sort((e,a)=>e.localeCompare(a)).map(e=>r.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[r.jsx(i.User,{className:"h-3 w-3 text-muted-foreground"}),r.jsx("span",{children:e})]},e))]}):r.jsx("p",{className:"text-xs text-muted-foreground",children:"Sem subordinados diretos"})},{key:"email",header:"Email",className:"text-left",width:180,render:e=>r.jsxs("span",{className:"flex items-center gap-1.5 text-muted-foreground text-sm",children:[r.jsx(i.Mail,{className:"h-3.5 w-3.5"}),e.email||"—"]})}],[]),Y=l??K;if(h)return r.jsx("div",{className:"flex items-center justify-center h-full",children:r.jsxs("div",{className:"text-center space-y-2",children:[r.jsx("div",{className:"animate-spin h-8 w-8 border-4 border-primary border-t-transparent rounded-full mx-auto"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Carregando..."})]})});if(p)return r.jsx("div",{className:"flex items-center justify-center h-full",children:r.jsxs("div",{className:"text-center",children:[r.jsx("p",{className:"text-destructive mb-4",children:"Erro ao carregar hierarquia de liderança"}),r.jsx(be,{onClick:()=>f(),children:e.t("try_again")})]})});const G=D.filter(a=>a.name!==e.t("inactive_user")).length;return r.jsxs("div",{className:"flex flex-col h-full gap-3 p-4",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex gap-2 items-center",children:[r.jsxs(be,{size:"sm",onClick:W,children:[r.jsx(i.Plus,{className:"h-4 w-4 mr-2"}),"Definir Líder"]}),r.jsx(be,{size:"sm",variant:"outline",onClick:q,children:L?r.jsxs(r.Fragment,{children:[r.jsx(i.ChevronDown,{className:"h-4 w-4 mr-1"}),"Colapsar"]}):r.jsxs(r.Fragment,{children:[r.jsx(i.ChevronRight,{className:"h-4 w-4 mr-1"}),"Expandir"]})}),r.jsx("div",{className:"flex items-center gap-2 ml-4",children:r.jsxs("div",{className:"flex items-center gap-2 px-3 py-1.5 bg-muted rounded-md",children:[r.jsx(i.Users,{className:"h-4 w-4 text-muted-foreground"}),r.jsxs("span",{className:"text-sm font-medium",children:[G," usuário",1!==G?"s":""," associado",1!==G?"s":""]})]})})]}),r.jsx("p",{className:"text-xs text-muted-foreground",children:"Arraste as linhas para reorganizar • Selecione múltiplos para mover em lote"})]}),r.jsx(Le,{data:m||[],columns:Y,nameKey:"name",nameHeader:d,expandedIds:y,onToggleExpand:V,iconComponent:r.jsx(i.Users,{className:"h-4 w-4 text-muted-foreground shrink-0"}),rowActionsVariant:"inline",enableRowDrag:!0,enableSelection:!0,selectedIds:w,onSelectItem:O,onSelectAll:z,isAllSelected:P,onMoveNode:$,onMoveNodes:F,rootDropLabel:c,emptyMessage:e.t("leadership_no_hierarchy"),renderActions:e=>r.jsx(be,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>H(e),children:r.jsx(i.Pencil,{className:"h-4 w-4"})})}),t.length>0&&r.jsxs("div",{className:"border rounded-lg overflow-hidden",children:[r.jsxs("button",{type:"button",onClick:()=>j(e=>!e),className:"w-full px-4 py-2.5 bg-muted/50 border-b flex items-center gap-2 hover:bg-muted/70 transition-colors cursor-pointer",children:[k?r.jsx(i.ChevronDown,{className:"h-4 w-4 text-muted-foreground shrink-0"}):r.jsx(i.ChevronRight,{className:"h-4 w-4 text-muted-foreground shrink-0"}),r.jsx(i.UserPlus,{className:"h-4 w-4 text-muted-foreground"}),r.jsx("span",{className:"text-sm font-medium",children:"Usuários não associados"}),r.jsxs("span",{className:"text-xs text-muted-foreground ml-1",children:["(",t.length,")"]}),_.size>0&&r.jsxs("span",{className:"text-xs text-primary ml-1",children:["(",_.size," selecionado",_.size>1?"s":"",")"]}),r.jsx("span",{className:"text-xs text-muted-foreground ml-auto",children:"Arraste para a hierarquia acima"})]}),k&&r.jsx("div",{className:"divide-y",children:t.map(e=>r.jsxs("div",{draggable:!0,onDragStart:a=>J(e.id,a),onDragEnd:e=>{e.currentTarget.style.opacity="1"},className:ve("flex items-center gap-3 px-4 py-2.5 hover:bg-accent/50 cursor-grab active:cursor-grabbing transition-colors",_.has(e.id)&&"bg-primary/5"),children:[r.jsx(_e,{checked:_.has(e.id),onCheckedChange:()=>M(e.id),onClick:e=>e.stopPropagation(),className:"shrink-0"}),r.jsx("span",{className:"text-muted-foreground shrink-0 select-none",children:"⠿"}),r.jsx(i.User,{className:"h-4 w-4 text-muted-foreground shrink-0"}),r.jsxs("div",{className:"flex flex-col min-w-0",children:[r.jsx("span",{className:"text-sm truncate",children:e.name}),r.jsx("span",{className:"text-xs text-muted-foreground truncate",children:e.email})]})]},e.id))})]}),r.jsxs("div",{className:"px-3 py-2 bg-muted/20 border rounded-lg text-xs text-muted-foreground flex justify-between",children:[r.jsxs("span",{children:["Usuários associados: ",G]}),t.length>0&&r.jsxs("span",{children:["Usuários não associados: ",t.length]})]}),r.jsx(_a,{open:S,onOpenChange:Q,leader:E,prefilledLeaderId:I,title:E?e.t("edit_name"):I?e.t("leadership_add_subordinate"):e.t("leadership_add_root")},`leadership-dialog-${u}`)]})},exports.buildHierarchy=U,exports.filterAndPromoteOrphans=function(e,a){const t=e.map(e=>({...e})),r=new Set(t.filter(e=>!a.has(e.id_user)).map(e=>e.id_user));return t.forEach(e=>{if(e.id_leader&&r.has(e.id_leader)){let a=e.id_leader;for(;a&&r.has(a);){const e=t.find(e=>e.id_user===a);a=e?.id_leader||null}e.id_leader=a}}),t.filter(e=>a.has(e.id_user))},exports.flattenTree=R,exports.useCreateMultipleLeadersMutation=pe,exports.useCreateSingleLeaderMutation=he,exports.useLeadershipApi=ue,exports.useRemoveLeaderMutation=ge,exports.useSyncSubordinatesMutation=xe,exports.useUpdateLeaderMutation=fe;
|
|
1
|
+
"use strict";var e=require("i18next"),a=require("react"),t=require("@tanstack/react-query"),r=require("react/jsx-runtime"),s=require("@supabase/supabase-js"),n=require("sonner"),o=require("react-i18next"),i=require("lucide-react"),l=require("@radix-ui/react-slot"),d=require("class-variance-authority"),c=require("clsx"),u=require("tailwind-merge");require("date-fns");var m=require("@radix-ui/react-checkbox"),h=require("@radix-ui/react-hover-card"),p=require("@radix-ui/react-dialog"),f=require("@radix-ui/react-separator"),g=require("@radix-ui/react-alert-dialog"),x=require("zod"),y=require("react-hook-form"),v=require("@hookform/resolvers"),b=require("@radix-ui/react-label"),w=require("@radix-ui/react-scroll-area"),_=require("@radix-ui/react-select");function N(e){var a=Object.create(null);return e&&Object.keys(e).forEach(function(t){if("default"!==t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(a,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})}}),a.default=e,Object.freeze(a)}var k=N(a),j=N(m),S=N(h),C=N(p),E=N(f),I=N(g),A=N(b),T=N(w),D=N(_);function U(e){const a=new Map,t=new Map,r=[];e.forEach(e=>{const r={...e,children:[],level:0};a.set(e.id,r),t.set(e.id_user,r)}),e.forEach(e=>{const s=a.get(e.id);if(e.id_leader){const a=t.get(e.id_leader);if(a)return void a.children.push(s)}r.push(s)});const s=(e,a)=>{e.level=a,e.children.forEach(e=>s(e,a+1))};r.forEach(e=>s(e,0));const n=e=>{e.sort((e,a)=>{const t=e.name||e.id_user||e.email||"",r=a.name||a.id_user||a.email||"";return t.localeCompare(r)}),e.forEach(e=>e.children.length>0&&n(e.children))};return n(r),r}function P(e){const a=[],t=e=>{a.push(e),e.children.forEach(t)};return e.forEach(t),a}class R{static normalizeBase64Url(e){let a=e.replace(/-/g,"+").replace(/_/g,"/");const t=(4-a.length%4)%4;return a+="=".repeat(t),a}static parseJwtPayload(e){try{const s=e.split(".");if(3!==s.length)return null;const n=s[1];n.length,this.LARGE_PAYLOAD_THRESHOLD;try{const e=this.normalizeBase64Url(n),a=atob(e),t=new Uint8Array(a.length);for(let s=0;s<a.length;s++)t[s]=a.charCodeAt(s);const r=new TextDecoder("utf-8").decode(t);return JSON.parse(r)}catch(a){try{const e=this.normalizeBase64Url(n),a=decodeURIComponent(atob(e).split("").map(e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)).join(""));return JSON.parse(a)}catch(t){try{const e=this.normalizeBase64Url(n),a=atob(e);return JSON.parse(a)}catch(r){throw r}}}}catch(s){return null}}static validateTokens(e,a){const t=[],r=[];try{a.split(".")[1],e.split(".")[1];const s=this.parseJwtPayload(a),n=this.parseJwtPayload(e);if(!s){const e="ID token decode falhou - possível problema com base64url encoding";return r.push(e),{isValid:!1,idTokenValid:!1,accessTokenValid:!1,warnings:t,errors:r}}let o=!0;if(!n){const e="Access token decode falhou - será tentado novamente nas chamadas de API";t.push(e),o=!1}const i=Math.floor(Date.now()/1e3);if(n?.exp&&n.exp<i){const e="Access token expirado - pode precisar de refresh";t.push(e),o=!1}if(s.exp&&s.exp<i){const e="ID token expirado - autenticação inválida";return r.push(e),{isValid:!1,idTokenValid:!1,accessTokenValid:o,warnings:t,errors:r}}return{isValid:!0,idTokenValid:!0,accessTokenValid:o,warnings:t,errors:r}}catch(s){const e=`Erro na validação de tokens: ${s}`;return r.push(e),{isValid:!1,idTokenValid:!1,accessTokenValid:!1,warnings:t,errors:r}}}static isTokenExpired(e){const a=this.parseJwtPayload(e);return!a||!a.exp||1e3*a.exp<Date.now()}}R.LARGE_PAYLOAD_THRESHOLD=1e3;const L={storageProjectId:"ccjfvpnndclajkleyqkc",supabaseProjectId:"ccjfvpnndclajkleyqkc",supabaseUrl:"https://ccjfvpnndclajkleyqkc.supabase.co",supabasePublishableKey:"sb_publishable_w-TKU0hE4bjM_uOgt3fK1g_ewrXKJ8J",oauth:{authUrl:"https://login.qualiex.com/oauth2/authorize",clientId:"ae6021a0-e874-4aab-9716-b478e59cec20"},qualiexApiUrl:"https://common-v4-api.qualiex.com"},V={storageProjectId:"ccjfvpnndclajkleyqkc",supabaseProjectId:"tskpcuganynhsppzoqgj",supabaseUrl:"https://tskpcuganynhsppzoqgj.supabase.co",supabasePublishableKey:"sb_publishable_2EIWdYocxgrN4t_f64Ms3g_pKRcbHfL",oauth:{authUrl:"https://login-dev.qualiex.com/oauth2/authorize",clientId:"ae6021a0-e874-4aab-9716-b478e59cec20"},qualiexApiUrl:"https://common-v4-api-dev.qualiex.com"};function q(){return"DEV"===(void 0).VITE_APP_ENV?"DEV":"PROD"}function O(){return"DEV"===q()?V:L}const z="qualiex_access_token",M="qualiex_id_token",B="supabase_token",$="oauth_state",F="oauth_nonce",H="selected_alias",W="manual_logout",K="supabase_project_id",Q={setAccessToken:e=>localStorage.setItem(z,e),getAccessToken:()=>localStorage.getItem(z),setIdToken:e=>localStorage.setItem(M,e),getIdToken:()=>localStorage.getItem(M),getSupabaseToken:()=>localStorage.getItem(B),setOAuthState:e=>sessionStorage.setItem($,e),getOAuthState:()=>sessionStorage.getItem($),clearOAuthState:()=>sessionStorage.removeItem($),setOAuthNonce:e=>sessionStorage.setItem(F,e),getOAuthNonce:()=>sessionStorage.getItem(F),clearOAuthNonce:()=>sessionStorage.removeItem(F),setSelectedAlias:e=>localStorage.setItem(H,e),getSelectedAlias:()=>localStorage.getItem(H),clearSelectedAlias:()=>localStorage.removeItem(H),generateOAuthNonce:()=>{const e=new Uint8Array(32);return crypto.getRandomValues(e),btoa(String.fromCharCode(...e)).replace(/[+/=]/g,"")},hasAllTokens:()=>!(!Q.getAccessToken()||!Q.getIdToken()),checkProjectMismatch:()=>{const e=O().supabaseProjectId,a=localStorage.getItem(K);return a&&a!==e?(Q.clearAll(),localStorage.setItem(K,e),!0):(a||localStorage.setItem(K,e),!1)},setSupabaseToken:e=>{localStorage.setItem(B,e),Q._clearValidationCache()},areAllTokensValid:()=>{const e=Q.getAccessToken(),a=Q.getIdToken();if(!e||!a)return!1;try{const t=R.validateTokens(e,a);return!!t.idTokenValid&&t.idTokenValid}catch(t){return!1}},clearExpiredTokens:()=>{let e=!1;const a=Q.getAccessToken(),t=Q.getIdToken(),r=Q.getSupabaseToken();return a&&Q.isTokenExpired(a)&&(localStorage.removeItem(z),e=!0),t&&Q.isTokenExpired(t)&&(localStorage.removeItem(M),e=!0),r&&Q.isTokenExpired(r)&&(localStorage.removeItem(B),e=!0),e},clearAll:()=>{localStorage.removeItem(z),localStorage.removeItem(M),localStorage.removeItem(B),localStorage.removeItem(H),sessionStorage.removeItem($),sessionStorage.removeItem(F),Q._clearValidationCache()},setManualLogout:()=>localStorage.setItem(W,"true"),isManualLogout:()=>"true"===localStorage.getItem(W),clearManualLogout:()=>localStorage.removeItem(W),isTokenExpired:e=>{try{return R.isTokenExpired(e)}catch{return!0}},_validationCache:{isValid:!1,timestamp:0,cacheValidityMs:3e5},_clearValidationCache:()=>{Q._validationCache.isValid=!1,Q._validationCache.timestamp=0},isSupabaseTokenValid:()=>{const e=Q.getSupabaseToken();if(!e)return!1;if(Q.isTokenExpired(e))return Q._clearValidationCache(),Q._handleExpiredToken(),!1;const a=Date.now();return a-Q._validationCache.timestamp<Q._validationCache.cacheValidityMs?Q._validationCache.isValid:(Q._validationCache.isValid=!0,Q._validationCache.timestamp=a,!0)},getValidSupabaseToken:()=>Q.isSupabaseTokenValid()?Q.getSupabaseToken():null,_handleExpiredToken:()=>{Q.clearAll()},extractTokenData:()=>{if(!Q.isSupabaseTokenValid())return null;const e=Q.getSupabaseToken();if(!e)return null;try{const a=R.parseJwtPayload(e);if(!a)return null;const t=a.alias||a.default||a.user_alias,r=a.place_id||null,s=a.place_name||null;let n=a.company_id;if(!n&&t)for(const e in a)if(e.startsWith("co")&&/^co\d+$/.test(e)){const r=a[e];if(r&&"string"==typeof r){const e=r.split(";");if(e.length>7&&e[0]===t){n=e[7];break}}}return{alias:t,companyId:n,placeId:r,placeName:s,payload:a}}catch(a){return Q._handleExpiredToken(),null}},getCompanyId:e=>{const a=Q.getAccessToken();if(a)try{const t=R.parseJwtPayload(a);if(t)for(const a in t)if(a.startsWith("co")&&/^co\d+$/.test(a)){const r=t[a];if(r&&"string"==typeof r){const a=r.split(";");if(e&&a.length>7&&a[0]===e)return a[7];if(!e&&a.length>7)return a[7]}}}catch(s){}const t=Q.extractTokenData();if(t?.companyId)return t.companyId;const r=Q.getIdToken();if(r)try{const a=R.parseJwtPayload(r);if(a)for(const t in a)if(t.startsWith("co")&&/^co\d+$/.test(t)){const r=a[t];if(r&&"string"==typeof r){const a=r.split(";");if(e&&a.length>7&&a[0]===e)return a[7];if(!e&&a.length>7)return a[7]}}}catch(s){}return null},getCompanyIdInt:e=>{const a=[Q.getAccessToken(),Q.getIdToken()];for(const t of a)if(t)try{const a=R.parseJwtPayload(t);if(!a)continue;for(const t in a)if(t.startsWith("co")&&/^co\d+$/.test(t)){const r=a[t];if(r&&"string"==typeof r){const a=r.split(";");if(e&&a.length>1&&a[0]===e)return a[1];if(!e&&a.length>1)return a[1]}}}catch{}return null},getCurrentCompanyId:()=>{const e=Q.extractTokenData();return e?.companyId||null},getAllCompaniesData:()=>{const e=Q.getIdToken();if(!e)return[];try{const a=R.parseJwtPayload(e);if(!a)return[];const t=[];for(const e in a)if(e.startsWith("co")&&/^co\d+$/.test(e)){const r=a[e];if(r&&"string"==typeof r){const e=r.split(";");e.length>=4&&t.push({id:e.length>7?e[7]:"",alias:e[0].trim(),name:e[3].trim(),payload:a})}}return t}catch{return[]}}};const J={get oauth(){const e=O();return{authUrl:e.oauth.authUrl,clientId:e.oauth.clientId,responseType:"id_token token",scope:"openid profile email"}}};(void 0).VITE_IS_QUALIEX;const Y=new class{constructor(){this.errors=[],this.toastCount=0,this.lastToastTime=0}handleError(e,a=!0){const t="string"==typeof e?e:e.message;if(this.errors.push({id:Date.now().toString(),message:t,timestamp:Date.now(),count:1}),this.errors.length>50&&(this.errors=this.errors.slice(-50)),a&&this.shouldShowToast()){const e=this.getErrorTitle(t);n.toast.error(e,{description:t})}}getErrorTitle(a){const t=a.toLowerCase();return t.includes("401")||t.includes("unauthorized")||t.includes("expirou")?e.t("error_session_expired"):t.includes("token")||t.includes("autenticação")?e.t("error_authentication"):t.includes("api")||t.includes("network")?e.t("error_connection"):"Erro"}success(e,a){n.toast.success(e,{description:a})}shouldShowToast(){const e=Date.now();return e-this.lastToastTime>6e4&&(this.toastCount=0),this.toastCount<3&&(this.toastCount++,this.lastToastTime=e,!0)}getErrors(){return this.errors.slice(-50)}clearErrors(){this.errors=[]}};["[forlogic-core] ⚠️ VITE_SUPABASE_PUBLISHABLE_KEY contém uma legacy anon key (JWT).","O Supabase desativou legacy API keys. Substitua pela nova publishable key (formato sb_publishable_*).","Todas as requests retornarão 401 Unauthorized.","Causa provável: a integração Supabase do Lovable sobrescreveu o .env com a anon key legada.","Solução: defina VITE_SUPABASE_PK_OVERRIDE no .env com a publishable key correta."].join(" ");function X(e){return!!e&&e.startsWith("eyJ")}let G=!1;function Z(){if("DEV"===q()){const e=O();return{url:e.supabaseUrl,key:e.supabasePublishableKey}}const e=(void 0).VITE_SUPABASE_URL,a=(void 0).VITE_SUPABASE_PK_OVERRIDE||((void 0).VITE_SUPABASE_PUBLISHABLE_KEY??"");return e&&a?{url:e,key:a}:null}class ee{constructor(e){this.currentToken=null,this.config=e,function(){const e=(void 0).VITE_SUPABASE_PK_OVERRIDE,a=(void 0).VITE_SUPABASE_PUBLISHABLE_KEY;G?X(a):e&&X(a)?G=!0:X(a)?G=!0:G=!0}(),this.client=this.createClientWithToken(null)}createClientWithToken(e){const a={apikey:this.config.key};e&&this.isTokenValid(e)&&(a.Authorization=`Bearer ${e}`);return s.createClient(this.config.url,this.config.key,{auth:{persistSession:!1,autoRefreshToken:!1,detectSessionInUrl:!1,storage:void 0},global:{headers:a,fetch:async(e,a)=>("string"==typeof e?e:e.url).includes("/auth/v1/user")?new Response(JSON.stringify({error:"blocked"}),{status:401,headers:{"Content-Type":"application/json"}}):fetch(e,a)}})}static getInstance(){if(!ee.instance){const e=Z();if(!e)throw new Error("[forlogic-core] Supabase não configurado. Defina VITE_SUPABASE_URL e VITE_SUPABASE_PUBLISHABLE_KEY no .env, ou não invoque getSupabaseClient() (use isSupabaseConfigured() para checar antes).");ee.instance=new ee(e)}return ee.instance}getClient(){const e=Q.getValidSupabaseToken();return e!==this.currentToken&&(this.client=this.createClientWithToken(e),this.currentToken=e),this.client}isTokenValid(e){try{return!R.isTokenExpired(e)}catch(a){return Y.handleError(a instanceof Error?a:"Supabase - Error validating token",!1),!1}}}function ae(){return ee.getInstance().getClient()}class te{static async generateToken(e,a,t,r=!1){try{if(!r){const e=Q.getSupabaseToken();if(e&&Q.isSupabaseTokenValid())return e}const s=ae(),{data:n,error:o}=await s.functions.invoke("validate-token",{body:{access_token:e,alias:a}});return o&&(o.message?.includes("401")||o.message?.includes("Unauthorized"))?(t?.(),null):n?.access_token?(Q.setSupabaseToken(n.access_token),n.access_token):null}catch(s){return s instanceof Error&&(s.message.includes("401")||s.message.includes("Unauthorized"))&&t?.(),null}}}class re{static setLogoutCallback(e){this.onLogoutCallback=e}static async attemptRegeneration(e=!1){if(this.regenerationPromise)return this.regenerationPromise;this.regenerationPromise=this._doRegenerate(e);try{return await this.regenerationPromise}finally{this.regenerationPromise=null}}static async _doRegenerate(e=!1){try{const a=Q.getAccessToken(),t=Q.getSelectedAlias();if(!a||!t)return null;const r=await te.generateToken(a,t,this.onLogoutCallback||void 0,e);return r||null}catch(a){return null}}}var se;re.regenerationPromise=null,re.onLogoutCallback=null;const ne={isAuthenticated:!1,isLoading:!1,user:null,alias:null,companies:[],selectedUnit:null,userId:null,userAlias:null,placeId:null,placeName:null,activePlaceId:null,activePlaceName:null};se=class{static async initialize(){try{const e=!0;if(e){if(Q.checkProjectMismatch())return{...ne}}if(!Q.hasAllTokens()||!Q.areAllTokensValid())return Q.clearExpiredTokens(),{...ne};const a=Q.getAccessToken(),t=Q.getIdToken();Q.clearManualLogout();const r=this.extractUserFromIdToken(t,a),s=this.extractCompaniesFromIdToken(t),n=this.extractAliasFromAccessToken(a),o=e?Q.extractTokenData():null,i=o?.alias;let l=null;if(i&&s.some(e=>e.alias===i))l=i;else{const e=Q.getSelectedAlias(),a=e&&s.some(a=>a.alias===e);l=a?e:n||s[0]?.alias||null}if(e&&(!Q.isSupabaseTokenValid()&&l&&await re.attemptRegeneration(),!Q.isSupabaseTokenValid()))return{...ne};let d=null;if(l){const e=Q.getCompanyId(l),a=s.find(e=>e.alias===l);a&&(d={id:e||a.id,name:a.name,alias:a.alias})}const c=o?.placeId??null,u=o?.placeName??null;return{isAuthenticated:!0,isLoading:!1,user:r,alias:l,companies:s,selectedUnit:d,userId:r?.id||null,userAlias:r?.id||null,placeId:c,placeName:u,activePlaceId:c,activePlaceName:u}}catch(e){return{...ne}}}static async loginDev(){try{const e=ae(),{data:a,error:t}=await e.functions.invoke("dev-tokens",{body:{environment:"development"}});if(t)return!1;if(!a?.access_token||!a?.id_token)return!1;const r=new URL("/callback",window.location.origin);return r.hash=`access_token=${a.access_token}&id_token=${a.id_token}&token_type=bearer`,window.location.href=r.toString(),!0}catch(e){return!1}}static loginProd(){const e="Lw==";Q.setOAuthState(e);const a=Q.generateOAuthNonce();Q.setOAuthNonce(a);const t=`${window.location.origin}/callback`,r=new URL(J.oauth.authUrl);r.searchParams.set("client_id",J.oauth.clientId),r.searchParams.set("response_type",J.oauth.responseType),r.searchParams.set("scope",J.oauth.scope),r.searchParams.set("redirect_uri",t),r.searchParams.set("state",e),r.searchParams.set("nonce",a),r.searchParams.set("response_mode","fragment"),window.location.href=r.toString()}static async processCallback(){try{const e=new URLSearchParams(window.location.hash.startsWith("#")?window.location.hash.substring(1):window.location.hash),a=new URLSearchParams(window.location.search),t=t=>e.get(t)||a.get(t),r=t("access_token"),s=t("id_token"),n=t("error");if(n)throw new Error(`Erro OAuth: ${n}`);if(r&&s){const e=Q.getAccessToken();e!==r&&Q.clearAll()}const o=!0;if(Q.hasAllTokens()){if(o){Q.getValidSupabaseToken()||await re.attemptRegeneration(!0)}return!0}const i=r,l=s;if(!i||!l)throw new Error("Tokens não encontrados na URL de callback");Q.setAccessToken(i),Q.setIdToken(l),Q.clearManualLogout();const d=this.extractAliasFromAccessToken(i);if(d)Q.setSelectedAlias(d);else{const e=this.extractCompaniesFromIdToken(l);if(0===e.length)throw new Error("Nenhuma empresa encontrada nos tokens");Q.setSelectedAlias(e[0].alias)}if(o){if(!await re.attemptRegeneration(!0))throw new Error("Falha ao gerar token Supabase")}return Q.clearOAuthState(),Q.clearOAuthNonce(),!0}catch(e){throw e}}static async logout(){Q.clearAll(),Q.setManualLogout(),localStorage.removeItem("auth_return_url"),sessionStorage.clear();try{if("caches"in window){const e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}}catch{}window.location.href="/login"}static decodeToken(e){return R.parseJwtPayload(e)}static extractUserFromIdToken(e,a){const t=this.decodeToken(e);if(!t)return null;const r=a?this.decodeToken(a):null;return{id:t.subNewId,email:t.email,name:t.name,identifier:t.identifier,isSysAdmin:"1"===r?.admin}}static extractCompaniesFromIdToken(e){const a=this.decodeToken(e);if(!a)return[];const t=[];return Object.keys(a).forEach(e=>{if(e.match(/^co(\d+)$/)&&"string"==typeof a[e]){const r=a[e].split(";");if(r.length>=4)t.push({id:r.length>7?r[7].trim():"",alias:r[0].trim(),name:r[3].trim()});else{const[r,s]=a[e].split("|");r&&s&&t.push({id:"",alias:r.trim(),name:s.trim()})}}}),t}static extractAliasFromAccessToken(e){const a=this.decodeToken(e);return a?.default||null}},re.setLogoutCallback(()=>{se.logout()});class oe{static handleError(e){if(!e)return!1;const a=e.message||e.toString();return!!this.isAuthenticationError(e,a)&&(Q.clearAll(),window.location.href="/login",!0)}static isAuthenticationError(e,a){if(401===e.status||401===e.statusCode)return!0;const t=a.toLowerCase();return["401","unauthorized","token expired","invalid token","session expired","jwt expired","authentication failed","not authenticated"].some(e=>t.includes(e))}static async wrapAsync(e){try{return await e}catch(a){if(!this.handleError(a))throw a;throw new Error("Sua sessão expirou. Você será redirecionado para fazer login novamente.")}}}class ie{static async handleApiError(e){if(!e||this.isRetrying)return!1;const a=e.status||e.statusCode,t=e.message||e.toString();if(401===a||t.includes("401")||t.includes("Unauthorized")){this.isRetrying=!0;try{return await re.attemptRegeneration()?(this.isRetrying=!1,!0):(oe.handleError(e),this.isRetrying=!1,!1)}catch(r){return oe.handleError(e),this.isRetrying=!1,!1}}return!1}static validateToken(){const e=Q.getAccessToken();return e?Q.isTokenExpired(e)?{valid:!1,message:"Sua sessão expirou. Você será redirecionado para fazer login."}:{valid:!0}:{valid:!1,message:"Token OAuth não encontrado. Faça login novamente."}}}ie.isRetrying=!1;const le=new class{get baseUrl(){return O().qualiexApiUrl}async makeApiCall(e,a,t){const r=ie.validateToken();if(!r.valid)throw new Error(r.message||"Token inválido");const s=Q.getAccessToken();if(!s)throw new Error("Token Qualiex não encontrado");if(!t||""===t.trim())throw new Error("Alias da unidade é obrigatório para chamadas à API do Qualiex");const n=new URL(e,this.baseUrl);Object.entries(a).forEach(([e,a])=>{n.searchParams.append(e,a)});const o=await fetch(n.toString(),{method:"GET",headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json",Accept:"application/json","un-alias":t}});if(!o.ok){const e=new Error(`API call failed: ${o.status} ${o.statusText}`);throw e.status=o.status,e.statusCode=o.status,e}return await o.json()}mapToQualiexUser(e){let a;return a="boolean"==typeof e.isActive?e.isActive:"boolean"==typeof e.active?e.active:"string"!=typeof e.status||"active"===e.status.toLowerCase(),{id:e.id||e.ID||"",userId:e.userId||String(e.ID),userName:e.userName||"Nome não disponível",userEmail:e.userEmail||"Email não disponível",placeId:null,placeName:e.placeName||null,roleId:e.roleId||void 0,roleName:e.roleName||void 0,companyId:e.companyId||void 0,companyName:e.companyName||void 0,isActive:a}}parseUsersResponse(e,a=""){let t=e;if(e.data)t=e.data;else{if(!Array.isArray(e))return Y.handleError(`[QualiexApi] Formato de resposta inesperado${a}`,!1),null;t=e}return Array.isArray(t)?t.map(e=>this.mapToQualiexUser(e)):(Y.handleError(`[QualiexApi] Resposta não é um array${a}`,!1),null)}async fetchUsers(e,a,t="active"){const r={companyId:a,search:"",filterStatus:t};try{const a=await this.makeApiCall("/api/common/v1/companiesusers",r,e);return this.parseUsersResponse(a)??[]}catch(s){if(await ie.handleApiError(s))try{const a=await this.makeApiCall("/api/common/v1/companiesusers",r,e);return this.parseUsersResponse(a," após retry")??[]}catch(n){return Y.handleError(n instanceof Error?n:"Erro ao buscar usuários após renovação de token",!0),[]}return Y.handleError(s instanceof Error?s.message:"Erro ao buscar usuários da API Qualiex",!0),[]}}async fetchUserById(e,a,t){try{return(await this.fetchUsers(a,t)).find(a=>a.userId===e)||null}catch(r){return Y.handleError(r instanceof Error?r:"[QualiexApi] Error fetching user by ID"),null}}async fetchActiveUsersMap(e,a){const t=await this.fetchUsers(e,a,"active"),r=new Map;return t.forEach(e=>r.set(e.userId,e)),r}async fetchAllUsersMap(e,a){const t=await this.fetchUsers(e,a,"all"),r=new Map;return t.forEach(e=>r.set(e.userId,e)),r}async getUsers(e,a="active"){const t=Q.extractTokenData();return t&&t.companyId?this.fetchUsers(e,t.companyId,a):[]}async fetchSoftwares(e){try{const a=await this.makeApiCall("/api/common/v1/softwares",{},e),t=a?.data||a;return Array.isArray(t)?t.map(e=>({id:e.id,alias:e.alias||"",color:e.color||"",colorLight:e.colorLight||"",namePtBr:e.namePtBr||"",nameUs:e.nameUs||"",nameEs:e.nameEs||""})):(Y.handleError("[QualiexApi] fetchSoftwares: formato de resposta inesperado",!1),[])}catch(a){if(await ie.handleApiError(a))try{const a=await this.makeApiCall("/api/common/v1/softwares",{},e),t=a?.data||a;return Array.isArray(t)?t.map(e=>({id:e.id,alias:e.alias||"",color:e.color||"",colorLight:e.colorLight||"",namePtBr:e.namePtBr||"",nameUs:e.nameUs||"",nameEs:e.nameEs||""})):[]}catch(t){return Y.handleError(t instanceof Error?t:"Erro ao buscar softwares após renovação de token",!0),[]}return Y.handleError(a instanceof Error?a.message:"Erro ao buscar softwares da API Qualiex",!0),[]}}async fetchUserAssociations(e,a){try{const t=await this.makeApiCall(`/api/common/v1/Users/${e}/associations`,{},a),r=t?.data||t;return Array.isArray(r)?r.map(e=>({associationId:e.associationId||"",userId:e.userId||"",userName:e.userName||"",companyId:e.companyId||"",companyName:e.companyName||"",companyAlias:e.companyAlias||"",companyPhotoDate:e.companyPhotoDate,language:e.language,roleId:e.roleId||"",roleName:e.roleName||"",placeId:e.placeId,placeName:e.placeName,softwares:Array.isArray(e.softwares)?e.softwares:[],functionalities:Array.isArray(e.functionalities)?e.functionalities:[],isQualitfy:e.isQualitfy??!1,isMetroex:e.isMetroex??!1})):(Y.handleError("[QualiexApi] fetchUserAssociations: formato de resposta inesperado",!1),[])}catch(t){if(await ie.handleApiError(t))try{const t=await this.makeApiCall(`/api/common/v1/Users/${e}/associations`,{},a),r=t?.data||t;return Array.isArray(r)?r.map(e=>({associationId:e.associationId||"",userId:e.userId||"",userName:e.userName||"",companyId:e.companyId||"",companyName:e.companyName||"",companyAlias:e.companyAlias||"",companyPhotoDate:e.companyPhotoDate,language:e.language,roleId:e.roleId||"",roleName:e.roleName||"",placeId:e.placeId,placeName:e.placeName,softwares:Array.isArray(e.softwares)?e.softwares:[],functionalities:Array.isArray(e.functionalities)?e.functionalities:[],isQualitfy:e.isQualitfy??!1,isMetroex:e.isMetroex??!1})):[]}catch(r){return Y.handleError(r instanceof Error?r:"Erro ao buscar associações após renovação de token",!0),[]}return Y.handleError(t instanceof Error?t.message:"Erro ao buscar associações do usuário",!0),[]}}},de=a.createContext(void 0),ce=()=>{const e=a.useContext(de);if(void 0===e)throw new Error("useAuth deve ser usado dentro de um AuthProvider");return e},ue=(e={})=>{const{user:a,alias:r}=ce(),{enabled:s=!0,status:n="active"}=e;return t.useQuery({queryKey:["qualiex-users",r,n],queryFn:()=>le.getUsers(r,n),enabled:s&&!!r&&!!a,staleTime:3e5,retry:2,retryDelay:1e3})};function me(){const{alias:r,isAuthenticated:s}=ce(),n=Q.getAccessToken(),{data:o=[]}=ue(),i=t.useQuery({queryKey:["leadership-raw",r],queryFn:async()=>{if(!n||!r)throw new Error("Usuário não autenticado ou unidade não selecionada");const e=ae(),{data:a,error:t}=await e.schema("common").from("leaders").select("*").eq("is_removed",!1).eq("alias",r);if(t)throw new Error("Erro ao buscar hierarquia de liderança");return a??[]},enabled:!!n&&!!r&&s}),l=a.useMemo(()=>{const a=i.data;if(!a)return;if(0===a.length)return[];const t={};o.forEach(e=>{t[e.userId]={name:e.userName||e.userEmail,email:e.userEmail||""}});const r=a.map(r=>{const s=a.filter(e=>e.id_leader===r.id_user);return{...r,name:t[r.id_user]?.name||e.t("inactive_user"),email:t[r.id_user]?.email||"",subordinatesCount:s.length,subordinateNames:s.map(e=>t[e.id_user]?.name||"[Usuário inativo]").sort((e,a)=>e.localeCompare(a))}}),s=new Set(a.map(e=>e.id_user));return new Set(a.filter(e=>e.id_leader&&!s.has(e.id_leader)).map(e=>e.id_leader)).forEach(s=>{const n=t[s],o=a.filter(e=>e.id_leader===s);r.push({id:`virtual-${s}`,alias:a[0]?.alias||"",id_user:s,id_leader:null,is_removed:!1,is_active:!0,created_at:(new Date).toISOString(),updated_at:(new Date).toISOString(),name:n?.name||e.t("inactive_user"),email:n?.email||"",subordinatesCount:o.length,subordinateNames:o.map(e=>t[e.id_user]?.name||"[Usuário inativo]").sort((e,a)=>e.localeCompare(a))})}),U(r)},[i.data,o]);return{...i,data:l}}const he="common";function pe(){const{alias:e}=ce(),a=t.useQueryClient(),r=ae(),{t:s}=o.useTranslation();return t.useMutation({mutationFn:async a=>{if(!e)throw new Error(s("unit_not_selected","Unidade não selecionada"));if(a.id_user===a.id_leader)throw new Error(s("cannot_be_own_leader","Usuário não pode ser seu próprio líder"));a.id_leader&&await ve(r,e,a.id_user,a.id_leader);const{data:t,error:n}=await r.schema(he).from("leaders").insert({alias:e,id_user:a.id_user,id_leader:a.id_leader,is_active:!0,is_removed:!1}).select().single();if(n)throw n;return t},onSuccess:()=>{a.invalidateQueries({queryKey:["leadership-raw",e]}),n.toast.success(s("leader_promoted_success","Líder virtual promovido com sucesso"))},onError:e=>{n.toast.error(e.message||s("leader_create_error","Erro ao criar líder"))}})}function fe(){const{alias:e}=ce(),a=t.useQueryClient(),r=ae(),{t:s}=o.useTranslation();return t.useMutation({mutationFn:async a=>{if(!e)throw new Error(s("unit_not_selected","Unidade não selecionada"));if(!a.users.length)throw new Error(s("select_at_least_one",s("leadership_select_subordinates")));const t=a.users.map(e=>e.id_user),{data:n}=await r.schema(he).from("leaders").select("id_user").eq("alias",e).in("id_user",t).eq("is_removed",!1);if(n&&n.length>0){const e=n.map(e=>e.id_user);throw new Error(s("users_already_leaders",`Alguns usuários já estão cadastrados como líderes: ${e.join(", ")}`))}for(const d of a.users){if(a.id_leader&&d.id_user===a.id_leader)throw new Error(s("cannot_be_own_leader","Usuário não pode ser seu próprio líder"));a.id_leader&&await ve(r,e,d.id_user,a.id_leader)}const o=a.users.map(t=>({alias:e,id_user:t.id_user,id_leader:a.id_leader,is_active:!0,is_removed:!1})),{data:i,error:l}=await r.schema(he).from("leaders").insert(o).select();if(l)throw l;return i},onSuccess:t=>{a.invalidateQueries({queryKey:["leadership-raw",e]}),n.toast.success(s("subordinates_added_success",`${t?.length||0} liderado(s) adicionado(s) com sucesso`))},onError:e=>{n.toast.error(e.message||s("subordinates_add_error","Erro ao adicionar liderados"))}})}function ge(){const{alias:e}=ce(),a=t.useQueryClient(),r=ae(),{t:s}=o.useTranslation();return t.useMutation({mutationFn:async a=>{if(!e)throw new Error(s("unit_not_selected","Unidade não selecionada"));const{data:t}=await r.schema(he).from("leaders").select("id_user").eq("id",a.id).eq("alias",e).single();if(!t)throw new Error(s("leader_not_found","Líder não encontrado"));if(t.id_user===a.id_leader)throw new Error(s("cannot_be_own_leader","Usuário não pode ser seu próprio líder"));a.id_leader&&await ve(r,e,t.id_user,a.id_leader,a.id);const{data:n,error:o}=await r.schema(he).from("leaders").update({id_leader:a.id_leader}).eq("id",a.id).eq("alias",e).select().single();if(o)throw o;return n},onSuccess:()=>{a.invalidateQueries({queryKey:["leadership-raw",e]}),n.toast.success(s("leader_updated_success","Líder atualizado com sucesso"))},onError:e=>{n.toast.error(e.message||s("leader_update_error","Erro ao atualizar líder"))}})}function xe(){const{alias:e}=ce(),a=t.useQueryClient(),r=ae(),{t:s}=o.useTranslation();return t.useMutation({mutationFn:async a=>{if(!e)throw new Error(s("unit_not_selected","Unidade não selecionada"));const{error:t}=await r.schema(he).from("leaders").update({is_removed:!0}).eq("id",a).eq("alias",e);if(t)throw t},onSuccess:()=>{a.invalidateQueries({queryKey:["leadership-raw",e]}),n.toast.success(s("leader_removed_success","Líder removido com sucesso"))},onError:e=>{n.toast.error(e.message||s("leader_remove_error","Erro ao remover líder"))}})}function ye(){const{alias:e}=ce(),a=t.useQueryClient(),r=ae(),{t:s}=o.useTranslation();return t.useMutation({mutationFn:async({leaderUserId:a,selectedUsers:t})=>{if(!e)throw new Error(s("unit_not_selected","Unidade não selecionada"));const n=t.map(e=>e.id_user),o=await Promise.all([r.schema(he).from("leaders").select("id, id_user, id_leader").eq("alias",e).eq("is_removed",!1).eq("id_leader",a),r.schema(he).from("leaders").select("id, id_user, id_leader").eq("alias",e).eq("is_removed",!1).in("id_user",n.length?n:["__none__"])]),[{data:i,error:l},{data:d,error:c}]=o;if(l)throw l;if(c)throw c;const u=i||[],m=d||[],h=new Set(n),p=u.filter(e=>!h.has(e.id_user)),f=m.filter(e=>e.id_leader!==a),g=new Set(m.map(e=>e.id_user)),x=t.filter(e=>!g.has(e.id_user));for(const s of f)await ve(r,e,s.id_user,a,s.id);for(const b of x){if(b.id_user===a)throw new Error(s("cannot_be_own_leader","Usuário não pode ser seu próprio líder"));await ve(r,e,b.id_user,a)}const y=[];if(p.length){const a=p.map(e=>e.id);y.push(r.schema(he).from("leaders").update({is_removed:!0}).in("id",a).eq("alias",e))}if(f.length){const t=f.map(e=>e.id);y.push(r.schema(he).from("leaders").update({id_leader:a}).in("id",t).eq("alias",e))}if(x.length){const t=x.map(t=>({alias:e,id_user:t.id_user,id_leader:a,is_active:!0,is_removed:!1}));y.push(r.schema(he).from("leaders").insert(t))}const v=(await Promise.all(y)).find(e=>e?.error);if(v?.error)throw v.error;return{unlinked:p.length,updated:f.length,created:x.length}},onSuccess:t=>{a.invalidateQueries({queryKey:["leadership-raw",e]}),n.toast.success(s("subordinates_synced_success",`Subordinados sincronizados (${t.created} adicionados, ${t.updated} atualizados, ${t.unlinked} removidos)`))},onError:e=>{n.toast.error(e.message||s("subordinates_sync_error","Erro ao sincronizar subordinados"))}})}async function ve(a,t,r,s,n){const{data:o,error:i}=await a.schema(he).from("leaders").select("id, id_user, id_leader").eq("alias",t).eq("is_removed",!1);if(i)throw i;const l=n?o.filter(e=>e.id!==n):o,d=new Set;let c=s;for(;c;){if(d.has(c))throw new Error(e.t("leadership_cycle_error"));if(c===r)throw new Error("Esta associação criaria um ciclo na hierarquia");d.add(c);const a=l.find(e=>e.id_user===c);c=a?.id_leader||null}}function be(...e){return u.twMerge(c.clsx(e))}const we=d.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{primary:"bg-primary text-primary-foreground hover:bg-primary-hover shadow-sm hover:shadow-md active:scale-[0.98]",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary-hover border border-input shadow-sm",tertiary:"bg-background text-foreground hover:bg-accent hover:text-accent-foreground border border-border",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",ghost:"hover:bg-accent hover:text-accent-foreground",subtle:"text-muted-foreground hover:text-foreground hover:bg-accent/50",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90 shadow-sm hover:shadow-md",danger:"bg-destructive text-destructive-foreground hover:bg-destructive/90 shadow-sm hover:shadow-md",link:"text-primary underline-offset-4 hover:underline",icon:"bg-transparent border border-input hover:bg-accent hover:text-accent-foreground p-2",loading:"bg-primary/50 text-primary-foreground cursor-wait",default:"bg-primary text-primary-foreground hover:bg-primary/90",action:"bg-primary/10 text-primary hover:bg-primary/20 border border-primary/30","icon-only":"bg-transparent border border-input hover:bg-accent hover:text-accent-foreground p-2","external-link":"bg-transparent text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors","action-primary":"bg-primary text-primary-foreground hover:bg-primary/90 shadow-sm","action-secondary":"bg-secondary text-secondary-foreground hover:bg-secondary/80 border border-input"},size:{sm:"h-8 px-3 text-xs rounded-lg",md:"h-10 px-4 py-2 text-sm rounded-md",lg:"h-12 px-8 text-base rounded-lg",xl:"h-14 px-10 text-lg rounded-lg",icon:"h-10 w-10","icon-sm":"h-8 w-8","icon-xs":"h-6 w-6",default:"h-10 px-4 py-2"}},defaultVariants:{variant:"primary",size:"md"}}),_e=k.forwardRef(({className:e,variant:a,size:t,asChild:s=!1,...n},o)=>{const i=s?l.Slot:"button";return r.jsx(i,{className:be(we({variant:a,size:t,className:e})),ref:o,...n})});_e.displayName="Button";const Ne=k.forwardRef(({className:e,...a},t)=>r.jsx(j.Root,{ref:t,className:be("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",e),...a,children:r.jsx(j.Indicator,{className:be("flex items-center justify-center text-current"),children:r.jsx(i.Check,{className:"h-4 w-4"})})}));Ne.displayName=j.Root.displayName;const ke=k.forwardRef(({className:e,...a},t)=>r.jsx("table",{ref:t,className:be("w-full caption-bottom text-[13px] table-fixed",e),...a}));ke.displayName="Table";const je=k.forwardRef(({className:e,...a},t)=>r.jsx("thead",{ref:t,className:be("[&_tr]:border-b sticky top-0 z-[1] bg-background",e),...a}));je.displayName="TableHeader";const Se=k.forwardRef(({className:e,...a},t)=>r.jsx("tbody",{ref:t,className:be("[&_tr:last-child]:border-0",e),...a}));Se.displayName="TableBody";k.forwardRef(({className:e,...a},t)=>r.jsx("tfoot",{ref:t,className:be("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...a})).displayName="TableFooter";const Ce=k.forwardRef(({className:e,...a},t)=>r.jsx("tr",{ref:t,className:be("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted even:bg-table-stripe",e),...a}));Ce.displayName="TableRow";const Ee=k.forwardRef(({className:e,...a},t)=>r.jsx("th",{ref:t,className:be("h-9 px-4 py-2 text-left align-middle font-medium text-muted-foreground bg-background border-b [&:has([role=checkbox])]:pr-0",e),...a}));Ee.displayName="TableHead";const Ie=k.forwardRef(({className:e,...a},t)=>r.jsx("td",{ref:t,className:be("px-4 py-2 align-middle overflow-hidden [&:has([role=checkbox])]:pr-0",e),...a}));Ie.displayName="TableCell";k.forwardRef(({className:e,...a},t)=>r.jsx("caption",{ref:t,className:be("mt-4 text-sm text-muted-foreground",e),...a})).displayName="TableCaption";const Ae=S.Root,Te=S.Trigger,De=k.forwardRef(({className:e,align:a="center",sideOffset:t=4,...s},n)=>r.jsx(S.Content,{ref:n,align:a,sideOffset:t,className:be("z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...s}));function Ue(e,a){const t=new Set;function r(e){if(e)for(const a of e)t.add(a.id),r(a.children)}return function e(t){for(const s of t){if(s.id===a)return r(s.children),!0;if(s.children&&e(s.children))return!0}return!1}(e),t}function Pe({children:e,itemId:a,enableDrag:t,onDragStartCell:s,onDragEndCell:n,onDragOverCell:o,onDropCell:i,className:l}){return r.jsx(Ie,{draggable:t,onDragStart:t?e=>s(a,e):void 0,onDragEnd:t?n:void 0,onDragOver:e=>{e.preventDefault(),e.stopPropagation(),o(a,e)},onDragEnter:e=>{e.preventDefault(),e.stopPropagation(),o(a,e)},onDrop:e=>{e.preventDefault(),e.stopPropagation(),i(a,e)},className:l,children:e})}function Re({item:e,level:a,columns:t,nameKey:s,iconComponent:n,expandedIds:o,onToggleExpand:l,onRowClick:d,renderActions:c,rowActionsVariant:u="default",enableSelection:m,selectedIds:h,onSelectItem:p,enableRowDrag:f,draggedId:g,dragOverId:x,onDragStartCell:y,onDragEndCell:v,onDragOverCell:b,onDropCell:w,dragCount:_}){const N=o.has(e.id),k=(e.children?.length??0)>0,j=24*a,S="inline"===u,C=g===e.id||h?.has(e.id)&&g&&h?.has(g),E=x===e.id&&g!==e.id,I=h?.has(e.id)??!1,A={itemId:e.id,enableDrag:f,onDragStartCell:y,onDragEndCell:v,onDragOverCell:b,onDropCell:w};return r.jsxs(r.Fragment,{children:[r.jsxs(Ce,{className:be(d&&"cursor-pointer",S&&"group",C&&"opacity-40",E&&"ring-2 ring-primary ring-inset bg-primary/5"),onClick:d?()=>d(e):void 0,children:[r.jsx(Pe,{...A,children:r.jsxs("div",{className:"flex items-center gap-2",style:{paddingLeft:`${j}px`},children:[m&&r.jsx(Ne,{checked:I,onCheckedChange:()=>p?.(e.id),onClick:e=>e.stopPropagation(),className:"shrink-0"}),f&&r.jsx("span",{className:"cursor-grab text-muted-foreground shrink-0 select-none",title:"Arrastar",children:"⠿"}),k?r.jsx("button",{onClick:a=>{a.stopPropagation(),l(e.id)},className:"p-1 hover:bg-accent rounded shrink-0",children:N?r.jsx(i.ChevronDown,{className:"h-4 w-4"}):r.jsx(i.ChevronRight,{className:"h-4 w-4"})}):r.jsx("div",{className:"w-6 shrink-0"}),n??r.jsx(i.User,{className:"h-4 w-4 text-muted-foreground shrink-0"}),r.jsx("span",{className:"truncate",children:String(e[s]??e.id)}),g===e.id&&_&&_>1&&r.jsx("span",{className:"ml-1 inline-flex items-center rounded-full bg-primary px-1.5 py-0 text-xs font-semibold text-primary-foreground",children:_})]})}),t.map(t=>{const s=e[t.key],n=t.render?t.render(e,a):null!=s?String(s):"—";return r.jsx(Pe,{...A,className:be("text-center",t.className),children:t.hoverContent?r.jsxs(Ae,{openDelay:200,children:[r.jsx(Te,{asChild:!0,children:r.jsx("span",{className:"cursor-default underline decoration-dotted underline-offset-4 text-foreground",children:n})}),r.jsx(De,{side:"bottom",align:"center",className:"w-auto max-w-xs",children:t.hoverContent(e)})]}):n},String(t.key))}),c&&r.jsx(Pe,{...A,className:"text-right",children:r.jsx("div",{onClick:e=>e.stopPropagation(),className:be("flex items-center justify-end gap-1",S&&"opacity-0 group-hover:opacity-100 transition-opacity"),children:c(e)})})]}),k&&N&&e.children.map(e=>r.jsx(Re,{item:e,level:a+1,columns:t,nameKey:s,iconComponent:n,expandedIds:o,onToggleExpand:l,onRowClick:d,renderActions:c,rowActionsVariant:u,enableSelection:m,selectedIds:h,onSelectItem:p,enableRowDrag:f,draggedId:g,dragOverId:x,onDragStartCell:y,onDragEndCell:v,onDragOverCell:b,onDropCell:w,dragCount:_},e.id))]})}function Le({onDrop:a,isDragOver:t,onDragOver:s,onDragLeave:n,label:o}){return r.jsxs("div",{className:be("absolute top-0 left-0 right-0 z-10 flex items-center justify-center gap-2 py-2 px-4 border-2 border-dashed rounded-md text-sm transition-colors mx-2 mt-2",t?"border-primary bg-primary/10 text-primary":"border-muted-foreground/30 text-muted-foreground bg-background/95"),onDragOver:s,onDragEnter:s,onDragLeave:n,onDrop:a,children:[r.jsx(i.ArrowUpToLine,{className:"h-4 w-4"}),o??e.t("leadership_make_root_short")]})}function Ve({data:t,columns:s,nameKey:n,nameHeader:o=e.t("ap_name"),iconComponent:l,expandedIds:d,onToggleExpand:c,onRowClick:u,renderActions:m,actionsHeader:h="",rowActionsVariant:p="default",isLoading:f,emptyMessage:g="Nenhum registro encontrado.",className:x,enableSelection:y,selectedIds:v,onSelectItem:b,onSelectAll:w,isAllSelected:_,enableRowDrag:N,onMoveNode:k,onMoveNodes:j,rootDropLabel:S,actionsWidth:C=20,nameMinWidth:E=200}){const[I,A]=a.useState(null),[T,D]=a.useState(null),[U,P]=a.useState(!1),[R,L]=a.useState(1),V=a.useRef(null),q=a.useRef([]),O=a.useRef(null),z=a.useMemo(()=>new Set(v??[]),[v]),M=a.useMemo(()=>{if(!I||!t)return new Set;const e=q.current.length>0?q.current:[I],a=function(e,a){const t=new Set;for(const r of a)Ue(e,r).forEach(e=>t.add(e));return t}(t,e);return e.forEach(e=>a.add(e)),a},[I,t]),B=a.useRef(M);B.current=M;const $=a.useCallback(()=>{V.current=null,q.current=[],O.current=null,A(null),D(null),P(!1),L(1)},[]),F=a.useCallback((e,a)=>{e.length>1&&j?j(e,a):1===e.length&&k?.(e[0],a)},[k,j]),H=a.useCallback((e,a)=>{const t=z.has(e)&&z.size>1?Array.from(z):[e];V.current=e,q.current=t,O.current=null,A(e),L(t.length),a.dataTransfer.effectAllowed="move",a.dataTransfer.setData("text/plain",e),a.dataTransfer.setData("application/x-tree-ids",JSON.stringify(t))},[z]),W=a.useCallback((e,a)=>{a.preventDefault(),a.dataTransfer.dropEffect="move",B.current.has(e)?D(null):(O.current=e,D(e))},[]),K=a.useCallback((e,a)=>{a.preventDefault(),a.stopPropagation();const t=B.current.has(e)?O.current:e;if(!t)return void $();let r=q.current;if(0===r.length){try{const e=a.dataTransfer.getData("application/x-tree-ids");if(e){const a=JSON.parse(e);Array.isArray(a)&&a.length>0&&(r=a)}}catch{}if(0===r.length){const e=a.dataTransfer.getData("text/plain");e&&(r=[e])}}0===r.length||r.includes(t)||F(r,t),$()},[F,$]),Q=a.useCallback(e=>{e.preventDefault(),e.stopPropagation();let a=q.current;if(0===a.length){try{const t=e.dataTransfer.getData("application/x-tree-ids");if(t){const e=JSON.parse(t);Array.isArray(e)&&e.length>0&&(a=e)}}catch{}if(0===a.length){const t=e.dataTransfer.getData("text/plain");t&&(a=[t])}}0!==a.length?(F(a,null),$()):$()},[F,$]),J=a.useCallback(e=>{e.preventDefault(),e.dataTransfer.dropEffect="move",P(!0)},[]),Y=a.useCallback(e=>{N&&(e.preventDefault(),e.dataTransfer.dropEffect="move")},[N]),X=a.useCallback(e=>{if(!N)return;const a=document.elementFromPoint(e.clientX,e.clientY)?.closest?.("[data-tree-row-id]"),t=a?.dataset?.treeRowId??O.current;t&&K(t,e)},[N,K]);if(f)return r.jsx("div",{className:"flex items-center justify-center py-12",children:r.jsxs("div",{className:"text-center space-y-2",children:[r.jsx("div",{className:"animate-spin h-8 w-8 border-4 border-primary border-t-transparent rounded-full mx-auto"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Carregando..."})]})});if(!t||0===t.length)return r.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-center space-y-2",children:[r.jsx(i.User,{className:"h-10 w-10 text-muted-foreground/50"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:g})]});const G=null!==I;return r.jsxs("div",{className:be("border rounded-lg overflow-hidden relative",x),onDragOver:Y,onDrop:X,onDragLeave:N?e=>{const a=e.relatedTarget;a&&e.currentTarget.contains(a)||(D(null),P(!1))}:void 0,children:[N&&G&&r.jsx(Le,{onDrop:Q,isDragOver:U,onDragOver:J,onDragLeave:()=>P(!1),label:S}),r.jsxs(ke,{children:[r.jsx(je,{children:r.jsxs(Ce,{children:[r.jsx(Ee,{className:"text-left",style:{minWidth:E},children:r.jsxs("div",{className:"flex items-center gap-2",children:[y&&r.jsx(Ne,{checked:_??!1,onCheckedChange:()=>w?.()}),o]})}),s.map(e=>r.jsx(Ee,{className:be("text-center",e.className),style:e.width?{width:e.width}:void 0,children:e.header},String(e.key))),m&&r.jsx(Ee,{className:"text-right",style:{width:C},children:h})]})}),r.jsx(Se,{children:t.map(e=>r.jsx(Re,{item:e,level:0,columns:s,nameKey:n,iconComponent:l,expandedIds:d,onToggleExpand:c,onRowClick:u,renderActions:m,rowActionsVariant:p,enableSelection:y,selectedIds:z,onSelectItem:b,enableRowDrag:N,draggedId:I,dragOverId:T,onDragStartCell:H,onDragEndCell:$,onDragOverCell:W,onDropCell:K,dragCount:R},e.id))})]})]})}De.displayName=S.Content.displayName;const qe=k.forwardRef(({className:e,orientation:a="horizontal",decorative:t=!0,...s},n)=>r.jsx(E.Root,{ref:n,decorative:t,orientation:a,className:be("shrink-0 bg-border","horizontal"===a?"h-[1px] w-full":"h-full w-[1px]",e),...s}));qe.displayName=E.Root.displayName;const Oe=I.Root,ze=I.Trigger,Me=I.Portal,Be=k.forwardRef(({className:e,...a},t)=>r.jsx(I.Overlay,{className:be("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...a,ref:t}));Be.displayName=I.Overlay.displayName;const $e=k.forwardRef(({className:e,...a},t)=>r.jsxs(Me,{children:[r.jsx(Be,{}),r.jsx(I.Content,{ref:t,className:be("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",e),...a})]}));$e.displayName=I.Content.displayName;const Fe=({className:e,...a})=>r.jsx("div",{className:be("flex flex-col space-y-2 text-center sm:text-left",e),...a});Fe.displayName="AlertDialogHeader";const He=({className:e,...a})=>r.jsx("div",{className:be("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...a});He.displayName="AlertDialogFooter";const We=k.forwardRef(({className:e,...a},t)=>r.jsx(I.Title,{ref:t,className:be("text-lg font-semibold",e),...a}));We.displayName=I.Title.displayName;const Ke=k.forwardRef(({className:e,...a},t)=>r.jsx(I.Description,{ref:t,className:be("text-sm text-muted-foreground",e),...a}));Ke.displayName=I.Description.displayName;const Qe=k.forwardRef(({className:e,...a},t)=>r.jsx(I.Action,{ref:t,className:be(we(),e),...a}));Qe.displayName=I.Action.displayName;const Je=k.forwardRef(({className:e,...a},t)=>r.jsx(I.Cancel,{ref:t,className:be(we({variant:"outline"}),"mt-2 sm:mt-0",e),...a}));Je.displayName=I.Cancel.displayName;const Ye=C.Root,Xe=C.Portal,Ge=k.forwardRef(({className:e,...a},t)=>r.jsx(C.Overlay,{ref:t,className:be("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...a}));Ge.displayName=C.Overlay.displayName;const Ze={sm:{width:"30vw",minWidth:"320px",maxWidth:"480px",maxHeight:"320px"},md:{width:"50vw",minWidth:"480px",maxWidth:"720px",maxHeight:"70vh"},lg:{width:"85vw",height:"85vh",maxWidth:"1440px",minHeight:"480px",maxHeight:"900px"}},ea=k.forwardRef(({className:a,children:t,size:s,variant:n="informative",isDirty:o,customWidth:l,customMinWidth:d,customMaxWidth:c,customHeight:u,customMinHeight:m,customMaxHeight:h,unsavedChangesTitle:p=e.t("unsaved_changes"),unsavedChangesDescription:f=e.t("unsaved_changes_description"),cancelText:g=e.t("cancel"),leaveWithoutSavingText:x=e.t("leave_without_saving"),style:y,onInteractOutside:v,onEscapeKeyDown:b,...w},_)=>{const[N,j]=k.useState(!1),S=k.useRef(null),E=k.useRef(!1),I=s??(l||d||c||u||m||h?void 0:"md"),A=I?Ze[I]:{},T={...l??A.width?{width:l??A.width}:{},...d??A.minWidth?{minWidth:d??A.minWidth}:{},...c??A.maxWidth?{maxWidth:c??A.maxWidth}:{},...u??A.height?{height:u??A.height}:{},...m??A.minHeight?{minHeight:m??A.minHeight}:{},...h??A.maxHeight?{maxHeight:h??A.maxHeight}:{},...y},D=k.useCallback(e=>{"form"===n&&o?(S.current=e,j(!0)):e()},[n,o]),U=k.useRef(null),P="destructive"!==n;if("development"===process.env.NODE_ENV&&t){const e=k.Children.toArray(t);e.some(e=>k.isValidElement(e)&&"DialogFooter"===e.type?.displayName),e.some(e=>k.isValidElement(e)&&"DialogBody"===e.type?.displayName)}return r.jsxs(Xe,{children:[r.jsx(Ge,{}),r.jsxs(C.Content,{ref:_,className:be("fixed left-[50%] top-[50%] z-50 flex flex-col translate-x-[-50%] translate-y-[-50%] border-0 border-l-[10px] border-l-primary bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-lg max-sm:!w-[calc(100vw-2rem)] max-sm:!h-[calc(100dvh-2rem)] max-sm:!min-w-0 max-sm:!min-h-0 max-sm:!max-w-none max-sm:!max-h-none max-sm:p-4",a),style:T,onInteractOutside:e=>{"form"!==n&&"destructive"!==n?v?.(e):e.preventDefault()},onEscapeKeyDown:e=>{if("destructive"!==n)return"form"===n&&o?(e.preventDefault(),void D(()=>{E.current=!0,U.current?.click()})):void b?.(e);e.preventDefault()},...w,children:[t,P&&r.jsxs(C.Close,{ref:U,onClick:e=>{E.current?E.current=!1:"form"===n&&o&&(e.preventDefault(),D(()=>{E.current=!0,U.current?.click()}))},className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-0 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[r.jsx(i.X,{className:"h-4 w-4"}),r.jsx("span",{className:"sr-only",children:"Close"})]})]}),r.jsx(Oe,{open:N,onOpenChange:j,children:r.jsxs($e,{children:[r.jsxs(Fe,{children:[r.jsx(We,{children:p}),r.jsx(Ke,{children:f})]}),r.jsxs(He,{children:[r.jsx(Je,{onClick:()=>{j(!1),S.current=null},children:g}),r.jsx(Qe,{onClick:()=>{j(!1),S.current?.(),S.current=null},children:x})]})]})})]})});ea.displayName=C.Content.displayName;const aa=({className:e,showSeparator:a=!1,children:t,...s})=>r.jsxs("div",{className:be("flex flex-col flex-shrink-0",e),...s,children:[r.jsx("div",{className:"flex flex-col text-left",children:t}),a&&r.jsx(qe,{className:"mt-2"})]});aa.displayName="DialogHeader";const ta=({className:e,...a})=>r.jsx("div",{className:be("flex-1 min-h-0 overflow-auto py-4 px-2 -mx-2",e),...a});ta.displayName="DialogBody";const ra=k.forwardRef(({className:e,...a},t)=>r.jsx(C.Title,{ref:t,className:be("text-xl font-semibold leading-none tracking-tight",e),...a}));ra.displayName=C.Title.displayName;k.forwardRef(({className:e,...a},t)=>r.jsx(C.Description,{ref:t,className:be("text-sm text-muted-foreground",e),...a})).displayName=C.Description.displayName;var sa=function(e,a){for(var t={};e.length;){var r=e[0],s=r.code,n=r.message,o=r.path.join(".");if(!t[o])if("unionErrors"in r){var i=r.unionErrors[0].errors[0];t[o]={message:i.message,type:i.code}}else t[o]={message:n,type:s};if("unionErrors"in r&&r.unionErrors.forEach(function(a){return a.errors.forEach(function(a){return e.push(a)})}),a){var l=t[o].types,d=l&&l[r.code];t[o]=y.appendErrors(o,a,t,s,d?[].concat(d,r.message):r.message)}e.shift()}return t},na=function(e,a,t){return void 0===t&&(t={}),function(r,s,n){try{return Promise.resolve(function(s,o){try{var i=Promise.resolve(e["sync"===t.mode?"parse":"parseAsync"](r,a)).then(function(e){return n.shouldUseNativeValidation&&v.validateFieldsNatively({},n),{errors:{},values:t.raw?r:e}})}catch(l){return o(l)}return i&&i.then?i.then(void 0,o):i}(0,function(e){if(function(e){return Array.isArray(null==e?void 0:e.errors)}(e))return{values:{},errors:v.toNestErrors(sa(e.errors,!n.shouldUseNativeValidation&&"all"===n.criteriaMode),n)};throw e}))}catch(o){return Promise.reject(o)}}};const oa=d.cva("text-xs font-medium leading-none text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),ia=k.forwardRef(({className:e,...a},t)=>r.jsx(A.Root,{ref:t,className:be(oa(),e),...a}));ia.displayName=A.Root.displayName;const la=k.forwardRef(({className:e,children:a,...t},s)=>r.jsxs(T.Root,{ref:s,className:be("relative overflow-hidden",e),...t,children:[r.jsx(T.Viewport,{className:"h-full w-full rounded-[inherit]",children:a}),r.jsx(da,{}),r.jsx(T.Corner,{})]}));la.displayName=T.Root.displayName;const da=k.forwardRef(({className:e,orientation:a="vertical",...t},s)=>r.jsx(T.ScrollAreaScrollbar,{ref:s,orientation:a,className:be("flex touch-none select-none transition-colors","vertical"===a&&"h-full w-2.5 border-l border-l-transparent p-[1px]","horizontal"===a&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",e),...t,children:r.jsx(T.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"})}));da.displayName=T.ScrollAreaScrollbar.displayName;const ca=k.forwardRef(({className:e,type:a,showCharCount:t,maxLength:s,onChange:n,...o},i)=>{const[l,d]=k.useState(0);k.useEffect(()=>{"string"==typeof o.value?d(o.value.length):"string"==typeof o.defaultValue&&d(o.defaultValue.length)},[o.value,o.defaultValue]);return r.jsxs("div",{className:"w-full",children:[r.jsx("input",{type:a,className:be("flex h-10 w-full rounded-lg border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground hover:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-colors md:text-sm",e),ref:i,maxLength:s,onChange:e=>{d(e.target.value.length),n?.(e)},...o}),t&&s&&r.jsxs("div",{className:"text-right text-xs text-muted-foreground mt-1",children:[l," / ",s]})]})});ca.displayName="Input";const ua=k.createContext({showCheck:!1}),ma=({showCheck:e=!1,...a})=>r.jsx(ua.Provider,{value:{showCheck:e},children:r.jsx(D.Root,{...a})}),ha=D.Value,pa=k.forwardRef(({className:e,children:a,...t},s)=>r.jsxs(D.Trigger,{ref:s,className:be("flex h-10 w-full items-center justify-between rounded-lg border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground hover:border-primary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-colors [&>span]:line-clamp-1",e),...t,children:[a,r.jsx(D.Icon,{asChild:!0,children:r.jsx(i.ChevronDown,{className:"h-4 w-4 opacity-50"})})]}));pa.displayName=D.Trigger.displayName;const fa=k.forwardRef(({className:e,...a},t)=>r.jsx(D.ScrollUpButton,{ref:t,className:be("flex cursor-default items-center justify-center py-1",e),...a,children:r.jsx(i.ChevronUp,{className:"h-4 w-4"})}));fa.displayName=D.ScrollUpButton.displayName;const ga=k.forwardRef(({className:e,...a},t)=>r.jsx(D.ScrollDownButton,{ref:t,className:be("flex cursor-default items-center justify-center py-1",e),...a,children:r.jsx(i.ChevronDown,{className:"h-4 w-4"})}));ga.displayName=D.ScrollDownButton.displayName;const xa=k.forwardRef(({className:e,children:a,position:t="popper",container:s,collisionBoundary:n,...o},i)=>r.jsx(D.Portal,{container:s,children:r.jsxs(D.Content,{ref:i,className:be("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2","popper"===t&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:t,collisionBoundary:n,...o,children:[r.jsx(fa,{}),r.jsx(D.Viewport,{className:be("p-1","popper"===t&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:a}),r.jsx(ga,{})]})}));xa.displayName=D.Content.displayName;k.forwardRef(({className:e,...a},t)=>r.jsx(D.Label,{ref:t,className:be("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...a})).displayName=D.Label.displayName;const ya=k.forwardRef(({className:e,children:a,...t},s)=>{const{showCheck:n}=k.useContext(ua);return r.jsxs(D.Item,{ref:s,className:be("relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",n?"pl-8":"pl-2","data-[state=checked]:bg-accent data-[state=checked]:text-accent-foreground data-[state=checked]:font-medium data-[state=checked]:border-l-2 data-[state=checked]:border-primary",n?"data-[state=checked]:pl-[calc(2rem-2px)]":"data-[state=checked]:pl-[calc(0.5rem-2px)]",e),...t,children:[n&&r.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:r.jsx(D.ItemIndicator,{children:r.jsx(i.Check,{className:"h-4 w-4"})})}),r.jsx(D.ItemText,{children:a})]})});ya.displayName=D.Item.displayName;k.forwardRef(({className:e,...a},t)=>r.jsx(D.Separator,{ref:t,className:be("-mx-1 my-1 h-px bg-muted",e),...a})).displayName=D.Separator.displayName;const va=x.z.object({id_leader:x.z.string().nullable(),id_users:x.z.array(x.z.string()).min(1,e.t("leadership_select_subordinates"))}),ba=x.z.object({id_leader:x.z.string().nullable(),id_users:x.z.array(x.z.string())});function wa({value:t,onChange:s,excludeUserIds:n=[],error:o}){const{data:l=[],isLoading:d}=ue(),[c,u]=a.useState(""),m=a.useRef(null),h=a.useRef(0),p=l.filter(e=>!n.includes(e.userId||"")).filter(e=>{const a=c.toLowerCase(),t=e.userName?.toLowerCase().includes(a);return t}).sort((e,a)=>{const r=t.includes(e.userId),s=t.includes(a.userId);if(r&&!s)return-1;if(!r&&s)return 1;const n=e.userName||e.userEmail||"",o=a.userName||a.userEmail||"";return n.localeCompare(o)});return a.useEffect(()=>{m.current&&h.current>0&&(m.current.scrollTop=h.current)},[p]),d?r.jsxs("div",{className:"flex items-center justify-center p-4",children:[r.jsx(i.Loader2,{className:"h-6 w-6 animate-spin"}),r.jsx("span",{className:"ml-2",children:"Carregando dados..."})]}):r.jsxs("div",{className:"space-y-2",children:[r.jsx(ca,{placeholder:e.t("search_user_placeholder"),value:c,onChange:e=>u(e.target.value)}),r.jsx("div",{ref:m,className:"border rounded-md p-4 max-h-[300px] overflow-y-auto",children:0===p.length?r.jsx("p",{className:"text-sm text-muted-foreground",children:e.t("search_user_placeholder")}):r.jsx("div",{className:"space-y-2",children:p.map(e=>r.jsxs("div",{className:"flex items-center space-x-2",children:[r.jsx(Ne,{id:e.userId,checked:t.includes(e.userId),onCheckedChange:()=>{return a=e.userId,m.current&&(h.current=m.current.scrollTop),void(t.includes(a)?s(t.filter(e=>e!==a)):s([...t,a]));var a}}),r.jsx(ia,{htmlFor:e.userId,className:"flex-1 cursor-pointer",children:e.userName||e.userEmail})]},e.userId))})}),t.length>0&&r.jsxs("p",{className:"text-sm text-muted-foreground",children:[t.length," selecionado(s)"]}),o&&r.jsx("p",{className:"text-sm text-destructive",children:o})]})}function _a({leader:t,prefilledLeaderId:s,onSuccess:n}){const{t:l}=o.useTranslation(),{alias:d}=ce(),c=!!t,u=t?.id.startsWith("virtual-"),m=fe(),h=pe(),p=ge(),f=ye(),g=xe(),{data:x=[]}=me(),{data:v=[]}=ue(),[b,w]=a.useState(""),_=P(x).map(e=>e.id_user),N=c?P(x).filter(e=>e.id_leader===t.id_user).map(e=>e.id_user):[],k=y.useForm({resolver:na(c?ba:va),defaultValues:{id_leader:s||(c?t?.id_leader:null)||null,id_users:c?N:[]}});a.useEffect(()=>{if(t){const e=P(x).filter(e=>e.id_leader===t.id_user).map(e=>e.id_user);k.reset({id_leader:t.id_leader||null,id_users:e})}else s?k.reset({id_leader:s,id_users:[]}):k.reset({id_leader:null,id_users:[]})},[d,t?.id,t?.id_user,t?.id_leader,s,x]);const j=m.isPending||h.isPending||p.isPending||f.isPending||g.isPending,S=k.watch("id_leader"),C=k.watch("id_users"),E=c?[t.id_user,..._.filter(e=>e!==t.id_user&&!C.includes(e)&&!N.includes(e))]:[S,..._.filter(e=>!C.includes(e))].filter(Boolean);return r.jsxs("form",{onSubmit:k.handleSubmit(async e=>{try{if(c)if(u){await h.mutateAsync({id_user:t.id_user,id_leader:e.id_leader});const a=v.filter(a=>e.id_users.includes(a.userId)).map(e=>({id_user:e.userId}));await f.mutateAsync({leaderUserId:t.id_user,selectedUsers:a})}else{await p.mutateAsync({id:t.id,id_leader:e.id_leader});const a=v.filter(a=>e.id_users.includes(a.userId)).map(e=>({id_user:e.userId}));await f.mutateAsync({leaderUserId:t.id_user,selectedUsers:a})}else{const a=v.filter(a=>e.id_users.includes(a.userId)).map(e=>({id_user:e.userId}));await m.mutateAsync({id_leader:e.id_leader,users:a})}n?.()}catch(a){}}),className:"space-y-4",children:[c&&r.jsxs("div",{children:[r.jsx(ia,{children:e.t("leader")}),r.jsx(ca,{value:v.find(e=>e.userId===t.id_user)?.userName||t.name||e.t("inactive_user"),disabled:!0,className:"bg-muted"})]}),r.jsxs("div",{children:[r.jsx(ia,{children:l("leadership_immediate_superior")}),r.jsxs(ma,{value:S||"none",onValueChange:e=>k.setValue("id_leader","none"===e?null:e),children:[r.jsx(pa,{children:r.jsx(ha,{placeholder:"Selecione..."})}),r.jsxs(xa,{children:[r.jsx("div",{className:"sticky top-0 z-10 bg-background p-2 border-b",children:r.jsx(ca,{placeholder:"Buscar superior...",value:b,onChange:e=>w(e.target.value),onKeyDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),className:"h-8"})}),r.jsxs(la,{className:"h-[200px]",children:[r.jsx(ya,{value:"none",children:"[Nenhum]"}),v.filter(e=>{const a=c?e.userId!==t.id_user:!C.includes(e.userId),r=!b||e.userName?.toLowerCase().includes(b.toLowerCase());return a&&r}).sort((e,a)=>{const t=e.userName||e.userEmail||"",r=a.userName||a.userEmail||"";return t.localeCompare(r)}).map(e=>r.jsx(ya,{value:e.userId,children:e.userName},e.userId))]})]})]},`superior-select-${d}`),k.formState.errors.id_leader&&r.jsx("p",{className:"text-sm text-destructive mt-1",children:k.formState.errors.id_leader.message})]}),r.jsxs("div",{children:[r.jsx(ia,{children:"Subordinados *"}),r.jsx(wa,{value:C,onChange:e=>k.setValue("id_users",e),excludeUserIds:E,error:k.formState.errors.id_users?.message},`users-multiselect-${d}`)]}),r.jsxs("div",{className:"flex items-center justify-between gap-2",children:[r.jsx(_e,{type:"submit",disabled:j||!c&&0===C.length,children:j&&!g.isPending?r.jsxs(r.Fragment,{children:[r.jsx(i.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),c?"Atualizando...":"Salvando..."]}):c?"Atualizar":"Criar"}),c&&!S&&0===C.length&&r.jsxs(Oe,{children:[r.jsx(ze,{asChild:!0,children:r.jsx(_e,{type:"button",variant:"destructive",disabled:j,className:"ml-auto",children:g.isPending?r.jsxs(r.Fragment,{children:[r.jsx(i.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),"Removendo..."]}):r.jsxs(r.Fragment,{children:[r.jsx(i.Trash2,{className:"mr-2 h-4 w-4"}),"Remover"]})})}),r.jsxs($e,{children:[r.jsxs(Fe,{children:[r.jsx(We,{children:l("confirm_removal")}),r.jsx(Ke,{children:"Tem certeza que deseja remover este líder? Esta ação não pode ser desfeita."})]}),r.jsxs(He,{children:[r.jsx(Je,{children:l("cancel")}),r.jsx(Qe,{onClick:async()=>{if(t)try{await g.mutateAsync(t.id),n?.()}catch(e){}},children:l("remove")})]})]})]})]})]})}function Na({open:e,onOpenChange:a,leader:t,prefilledLeaderId:s,title:n}){return r.jsx(Ye,{open:e,onOpenChange:a,children:r.jsxs(ea,{variant:"form",className:"sm:max-w-[500px]",children:[r.jsx(aa,{showSeparator:!0,children:r.jsx(ra,{children:n})}),r.jsx(ta,{children:r.jsx(_a,{leader:t,prefilledLeaderId:s,onSuccess:()=>a(!1)})})]})})}const ka="leadership-expanded-nodes",ja=(e,a)=>{try{localStorage.setItem(`${ka}-${e}`,JSON.stringify(Array.from(a)))}catch{}};exports.LeadershipDialog=Na,exports.LeadershipForm=_a,exports.LeadershipPage=function({unassociatedUsers:t=[],onAssociateUser:s,onMoveNode:n,onMoveNodes:o,columns:l,nameHeader:d=e.t("leader"),rootDropLabel:c=e.t("leadership_make_root")}={}){const{alias:u}=ce(),{data:m,isLoading:h,error:p,refetch:f}=me(),g=ge(),x=pe(),[y,v]=a.useState(()=>u?(e=>{try{const a=localStorage.getItem(`${ka}-${e}`);if(a)return new Set(JSON.parse(a))}catch{}return new Set})(u):new Set),[b,w]=a.useState([]),[_,N]=a.useState(new Set),[k,j]=a.useState(!0),[S,C]=a.useState(!1),[E,I]=a.useState(),[A,T]=a.useState(null),D=a.useMemo(()=>m?P(m):[],[m]),U=a.useMemo(()=>D.map(e=>e.id),[D]),R=U.length>0&&b.length===U.length,L=D.filter(e=>e.children.length>0).every(e=>y.has(e.id));a.useEffect(()=>{if(m&&m.length>0&&u){if(!localStorage.getItem(`${ka}-${u}`)){const e=m.map(e=>e.id),a=new Set(e);v(a),ja(u,a)}}},[m,u]);const V=a.useCallback(e=>{v(a=>{const t=new Set(a);return t.has(e)?t.delete(e):t.add(e),u&&ja(u,t),t})},[u]),q=a.useCallback(()=>{if(L){const e=new Set;v(e),u&&ja(u,e)}else{const e=new Set(D.filter(e=>e.children.length>0).map(e=>e.id));v(e),u&&ja(u,e)}},[L,D,u]),O=a.useCallback(e=>{w(a=>a.includes(e)?a.filter(a=>a!==e):[...a,e])},[]),z=a.useCallback(()=>{w(R?[]:U)},[R,U]),M=a.useCallback(e=>{N(a=>{const t=new Set(a);return t.has(e)?t.delete(e):t.add(e),t})},[]),B=a.useCallback(e=>D.find(a=>a.id===e),[D]),$=a.useCallback((e,a)=>{if(n)return void n(e,a);const r=t.find(a=>a.id===e);if(r){if(s){const e=a?B(a):null;s(r.id,e?.id_user||null)}else x.mutate({id_user:r.id,id_leader:a&&B(a)?.id_user||null});return}const o=B(e);if(!o)return;const i=a?B(a):null;g.mutate({id:o.id,id_leader:i?.id_user||null})},[n,t,s,B,g,x]),F=a.useCallback((e,a)=>{o?o(e,a):(e.forEach(e=>$(e,a)),w([]))},[o,$]),H=a.useCallback(e=>{I(e),T(null),C(!0)},[]),W=a.useCallback(()=>{I(void 0),T(null),C(!0)},[]),K=a.useCallback(()=>{C(!1),I(void 0),T(null)},[]),Q=a.useCallback((e,a)=>{const t=_.has(e)&&_.size>1?Array.from(_):[e];a.dataTransfer.effectAllowed="move",a.dataTransfer.setData("text/plain",e),a.dataTransfer.setData("application/x-tree-ids",JSON.stringify(t)),a.currentTarget.style.opacity="0.4"},[_]),J=a.useMemo(()=>[{key:"subordinatesCount",header:"Subordinados",hoverContent:e=>e.subordinateNames&&e.subordinateNames.length>0?r.jsxs("div",{className:"space-y-1.5",children:[r.jsx("p",{className:"text-xs font-medium text-muted-foreground mb-1",children:"Subordinados diretos:"}),[...e.subordinateNames].sort((e,a)=>e.localeCompare(a)).map(e=>r.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[r.jsx(i.User,{className:"h-3 w-3 text-muted-foreground"}),r.jsx("span",{children:e})]},e))]}):r.jsx("p",{className:"text-xs text-muted-foreground",children:"Sem subordinados diretos"})},{key:"email",header:"Email",className:"text-left",width:180,render:e=>r.jsxs("span",{className:"flex items-center gap-1.5 text-muted-foreground text-sm",children:[r.jsx(i.Mail,{className:"h-3.5 w-3.5"}),e.email||"—"]})}],[]),Y=l??J;if(h)return r.jsx("div",{className:"flex items-center justify-center h-full",children:r.jsxs("div",{className:"text-center space-y-2",children:[r.jsx("div",{className:"animate-spin h-8 w-8 border-4 border-primary border-t-transparent rounded-full mx-auto"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Carregando..."})]})});if(p)return r.jsx("div",{className:"flex items-center justify-center h-full",children:r.jsxs("div",{className:"text-center",children:[r.jsx("p",{className:"text-destructive mb-4",children:"Erro ao carregar hierarquia de liderança"}),r.jsx(_e,{onClick:()=>f(),children:e.t("try_again")})]})});const X=D.filter(a=>a.name!==e.t("inactive_user")).length;return r.jsxs("div",{className:"flex flex-col h-full gap-3 p-4",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex gap-2 items-center",children:[r.jsxs(_e,{size:"sm",onClick:W,children:[r.jsx(i.Plus,{className:"h-4 w-4 mr-2"}),"Definir Líder"]}),r.jsx(_e,{size:"sm",variant:"outline",onClick:q,children:L?r.jsxs(r.Fragment,{children:[r.jsx(i.ChevronDown,{className:"h-4 w-4 mr-1"}),"Colapsar"]}):r.jsxs(r.Fragment,{children:[r.jsx(i.ChevronRight,{className:"h-4 w-4 mr-1"}),"Expandir"]})}),r.jsx("div",{className:"flex items-center gap-2 ml-4",children:r.jsxs("div",{className:"flex items-center gap-2 px-3 py-1.5 bg-muted rounded-md",children:[r.jsx(i.Users,{className:"h-4 w-4 text-muted-foreground"}),r.jsxs("span",{className:"text-sm font-medium",children:[X," usuário",1!==X?"s":""," associado",1!==X?"s":""]})]})})]}),r.jsx("p",{className:"text-xs text-muted-foreground",children:"Arraste as linhas para reorganizar • Selecione múltiplos para mover em lote"})]}),r.jsx(Ve,{data:m||[],columns:Y,nameKey:"name",nameHeader:d,expandedIds:y,onToggleExpand:V,iconComponent:r.jsx(i.Users,{className:"h-4 w-4 text-muted-foreground shrink-0"}),rowActionsVariant:"inline",enableRowDrag:!0,enableSelection:!0,selectedIds:b,onSelectItem:O,onSelectAll:z,isAllSelected:R,onMoveNode:$,onMoveNodes:F,rootDropLabel:c,emptyMessage:e.t("leadership_no_hierarchy"),renderActions:e=>r.jsx(_e,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>H(e),children:r.jsx(i.Pencil,{className:"h-4 w-4"})})}),t.length>0&&r.jsxs("div",{className:"border rounded-lg overflow-hidden",children:[r.jsxs("button",{type:"button",onClick:()=>j(e=>!e),className:"w-full px-4 py-2.5 bg-muted/50 border-b flex items-center gap-2 hover:bg-muted/70 transition-colors cursor-pointer",children:[k?r.jsx(i.ChevronDown,{className:"h-4 w-4 text-muted-foreground shrink-0"}):r.jsx(i.ChevronRight,{className:"h-4 w-4 text-muted-foreground shrink-0"}),r.jsx(i.UserPlus,{className:"h-4 w-4 text-muted-foreground"}),r.jsx("span",{className:"text-sm font-medium",children:"Usuários não associados"}),r.jsxs("span",{className:"text-xs text-muted-foreground ml-1",children:["(",t.length,")"]}),_.size>0&&r.jsxs("span",{className:"text-xs text-primary ml-1",children:["(",_.size," selecionado",_.size>1?"s":"",")"]}),r.jsx("span",{className:"text-xs text-muted-foreground ml-auto",children:"Arraste para a hierarquia acima"})]}),k&&r.jsx("div",{className:"divide-y",children:t.map(e=>r.jsxs("div",{draggable:!0,onDragStart:a=>Q(e.id,a),onDragEnd:e=>{e.currentTarget.style.opacity="1"},className:be("flex items-center gap-3 px-4 py-2.5 hover:bg-accent/50 cursor-grab active:cursor-grabbing transition-colors",_.has(e.id)&&"bg-primary/5"),children:[r.jsx(Ne,{checked:_.has(e.id),onCheckedChange:()=>M(e.id),onClick:e=>e.stopPropagation(),className:"shrink-0"}),r.jsx("span",{className:"text-muted-foreground shrink-0 select-none",children:"⠿"}),r.jsx(i.User,{className:"h-4 w-4 text-muted-foreground shrink-0"}),r.jsxs("div",{className:"flex flex-col min-w-0",children:[r.jsx("span",{className:"text-sm truncate",children:e.name}),r.jsx("span",{className:"text-xs text-muted-foreground truncate",children:e.email})]})]},e.id))})]}),r.jsxs("div",{className:"px-3 py-2 bg-muted/20 border rounded-lg text-xs text-muted-foreground flex justify-between",children:[r.jsxs("span",{children:["Usuários associados: ",X]}),t.length>0&&r.jsxs("span",{children:["Usuários não associados: ",t.length]})]}),r.jsx(Na,{open:S,onOpenChange:K,leader:E,prefilledLeaderId:A,title:E?e.t("edit_name"):A?e.t("leadership_add_subordinate"):e.t("leadership_add_root")},`leadership-dialog-${u}`)]})},exports.buildHierarchy=U,exports.filterAndPromoteOrphans=function(e,a){const t=e.map(e=>({...e})),r=new Set(t.filter(e=>!a.has(e.id_user)).map(e=>e.id_user));return t.forEach(e=>{if(e.id_leader&&r.has(e.id_leader)){let a=e.id_leader;for(;a&&r.has(a);){const e=t.find(e=>e.id_user===a);a=e?.id_leader||null}e.id_leader=a}}),t.filter(e=>a.has(e.id_user))},exports.flattenTree=P,exports.useCreateMultipleLeadersMutation=fe,exports.useCreateSingleLeaderMutation=pe,exports.useLeadershipApi=me,exports.useRemoveLeaderMutation=xe,exports.useSyncSubordinatesMutation=ye,exports.useUpdateLeaderMutation=ge;
|
|
@@ -1,12 +1,27 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Detecção de ambiente prod/dev.
|
|
3
|
+
*
|
|
4
|
+
* Fonte de verdade ÚNICA: `VITE_APP_ENV` (`"PROD"` | `"DEV"`).
|
|
5
|
+
* - `"DEV"` → API/OAuth/Supabase de dev.
|
|
6
|
+
* - `"PROD"` ou ausente / qualquer outro valor → PROD (failsafe).
|
|
7
|
+
*
|
|
8
|
+
* Não há fallback baseado em env vars Supabase: apps sem Supabase precisam
|
|
9
|
+
* configurar `VITE_APP_ENV="DEV"` explicitamente quando quiserem apontar para dev.
|
|
10
|
+
*
|
|
11
|
+
* **Storage de assets (logos/favicon) é sempre prod** — bucket público fixo.
|
|
12
|
+
*/
|
|
13
|
+
export type AppEnv = 'PROD' | 'DEV';
|
|
2
14
|
export interface EnvironmentConfig {
|
|
3
15
|
storageProjectId: string;
|
|
16
|
+
supabaseProjectId: string;
|
|
17
|
+
supabaseUrl: string;
|
|
18
|
+
supabasePublishableKey: string;
|
|
4
19
|
oauth: {
|
|
5
20
|
authUrl: string;
|
|
6
21
|
clientId: string;
|
|
7
22
|
};
|
|
8
23
|
qualiexApiUrl: string;
|
|
9
24
|
}
|
|
25
|
+
export declare function getAppEnv(): AppEnv;
|
|
10
26
|
export declare function getEnvironmentConfig(): EnvironmentConfig;
|
|
11
|
-
export declare function
|
|
12
|
-
export { PROD_PROJECT_ID };
|
|
27
|
+
export declare function isDevEnv(): boolean;
|
|
@@ -22,13 +22,13 @@ export declare const SEARCH_CONFIG: {
|
|
|
22
22
|
export declare const isLovablePreview: () => boolean;
|
|
23
23
|
/**
|
|
24
24
|
* Determines auth method: true → use dev-tokens edge function, false → use OAuth.
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* Requer modo Supabase: em modo dotnet, dev-tokens não existe e devemos sempre
|
|
26
|
+
* cair no OAuth real (loginProd), mesmo em localhost/preview.
|
|
27
27
|
*/
|
|
28
28
|
export declare const shouldUseDevTokens: () => boolean;
|
|
29
29
|
/** @deprecated Use `isLovablePreview()` or `shouldUseDevTokens()` instead */
|
|
30
30
|
export declare const isDevEnvironment: () => boolean;
|
|
31
|
-
export {
|
|
31
|
+
export { isDevEnv, getAppEnv, type AppEnv } from './environments';
|
|
32
32
|
export declare const getQualiexApiUrl: () => string;
|
|
33
33
|
export declare const QUERY_KEYS: {
|
|
34
34
|
readonly crud: (entity: string) => readonly [string];
|
package/dist/places/index.d.ts
CHANGED
|
@@ -90,7 +90,7 @@ export { loadForlogicFonts } from './utils/load-fonts';
|
|
|
90
90
|
export * from './types';
|
|
91
91
|
export * from './types/sidebar';
|
|
92
92
|
export * from './config';
|
|
93
|
-
export { getEnvironmentConfig,
|
|
93
|
+
export { getEnvironmentConfig, isDevEnv, getAppEnv, type AppEnv } from './config/environments';
|
|
94
94
|
export type { EnvironmentConfig } from './config/environments';
|
|
95
95
|
export { setBackendMode, getBackendMode, isSupabaseBackend } from './config/backend';
|
|
96
96
|
export type { BackendMode } from './config/backend';
|