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