forlogic-core 2.3.2 → 2.3.4

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 (57) hide show
  1. package/dist/action-plans/auth/services/AuthService.d.ts +19 -0
  2. package/dist/action-plans/exports/ui.d.ts +2 -0
  3. package/dist/action-plans/i18n/LanguageBootstrap.d.ts +14 -0
  4. package/dist/action-plans/i18n/index.d.ts +1 -0
  5. package/dist/action-plans/index.d.ts +14 -103
  6. package/dist/action-plans/index.esm.js +1 -1
  7. package/dist/action-plans/index.js +1 -1
  8. package/dist/action-plans/types.d.ts +361 -551
  9. package/dist/audit-trail/auth/services/AuthService.d.ts +19 -0
  10. package/dist/audit-trail/exports/ui.d.ts +2 -0
  11. package/dist/audit-trail/i18n/LanguageBootstrap.d.ts +14 -0
  12. package/dist/audit-trail/i18n/index.d.ts +1 -0
  13. package/dist/audit-trail/index.d.ts +8 -103
  14. package/dist/audit-trail/types.d.ts +173 -567
  15. package/dist/auth/services/AuthService.d.ts +19 -0
  16. package/dist/auth/services/TokenService.d.ts +1 -0
  17. package/dist/auth/utils/authDebug.d.ts +18 -0
  18. package/dist/components/ui/combobox.d.ts +2 -1
  19. package/dist/exports/ui.d.ts +2 -0
  20. package/dist/i18n/LanguageBootstrap.d.ts +14 -0
  21. package/dist/i18n/index.d.ts +1 -0
  22. package/dist/index.css +1 -1
  23. package/dist/index.css.map +1 -1
  24. package/dist/index.d.ts +1 -0
  25. package/dist/index.esm.js +1 -1
  26. package/dist/index.js +1 -1
  27. package/dist/leadership/auth/services/AuthService.d.ts +19 -0
  28. package/dist/leadership/exports/ui.d.ts +2 -0
  29. package/dist/leadership/i18n/LanguageBootstrap.d.ts +14 -0
  30. package/dist/leadership/i18n/index.d.ts +1 -0
  31. package/dist/leadership/index.d.ts +12 -103
  32. package/dist/leadership/types.d.ts +13 -593
  33. package/dist/places/auth/services/AuthService.d.ts +19 -0
  34. package/dist/places/exports/ui.d.ts +2 -0
  35. package/dist/places/i18n/LanguageBootstrap.d.ts +14 -0
  36. package/dist/places/i18n/index.d.ts +1 -0
  37. package/dist/places/index.d.ts +8 -104
  38. package/dist/places/types.d.ts +6 -599
  39. package/dist/qualiex/hooks/useQualiexReady.d.ts +15 -0
  40. package/dist/qualiex/services/qualiexApiService.d.ts +18 -0
  41. package/dist/sign/auth/services/AuthService.d.ts +19 -0
  42. package/dist/sign/exports/ui.d.ts +2 -0
  43. package/dist/sign/i18n/LanguageBootstrap.d.ts +14 -0
  44. package/dist/sign/i18n/index.d.ts +1 -0
  45. package/dist/sign/index.d.ts +8 -104
  46. package/dist/sign/index.esm.js +1 -1
  47. package/dist/sign/index.js +1 -1
  48. package/dist/sign/types.d.ts +46 -596
  49. package/dist/updates/components/UpdatesBar.d.ts +10 -0
  50. package/dist/updates/components/UpdatesDialog.d.ts +10 -0
  51. package/dist/updates/components/UserUpdatesViewer.d.ts +5 -0
  52. package/dist/updates/hooks/useUserUpdates.d.ts +5 -0
  53. package/dist/updates/index.d.ts +9 -0
  54. package/dist/updates/services/userUpdatesApi.d.ts +3 -0
  55. package/dist/updates/types.d.ts +24 -0
  56. package/dist/updates/utils/dismissedStore.d.ts +4 -0
  57. package/package.json +2 -2
@@ -1,104 +1,8 @@
1
- import './index.css';
2
- import './setup/favicon';
3
- export { Button } from './components/ui/button';
4
- export { ActionButton } from './components/ui/action-button';
5
- export { Input } from './components/ui/input';
6
- export { Label } from './components/ui/label';
7
- export { Card, CardContent, CardHeader, CardTitle, CardDescription } from './components/ui/card';
8
- export { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, DialogFooter } from './components/ui/dialog';
9
- export { Form, FormField, FormItem, FormLabel, FormControl, FormMessage } from './components/ui/form';
10
- export { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './components/ui/select';
11
- export { Checkbox } from './components/ui/checkbox';
12
- export { Textarea } from './components/ui/textarea';
13
- export { Badge } from './components/ui/badge';
14
- export { LoadingState } from './components/ui/loading-state';
15
- export { Toaster, toast } from './components/ui/sonner';
16
- export { DisabledMenuItem } from './components/ui/disabled-menu-item';
17
- export { Combobox } from './components/ui/combobox';
18
- export type { ComboboxProps } from './components/ui/combobox';
19
- export { Combobox as SelectSearch } from './components/ui/combobox';
20
- export type { ComboboxProps as SelectSearchProps } from './components/ui/combobox';
21
- export { Combobox as MultiSelect } from './components/ui/combobox';
22
- export type { ComboboxProps as MultiSelectProps } from './components/ui/combobox';
23
- export { ComboTree } from './components/ui/combo-tree';
24
- export type { ComboTreeProps, ComboTreeOption } from './components/ui/combo-tree';
25
- export { createSimpleService } from './crud/createSimpleService';
26
- export { createCrudPage, createSimpleSaveHandler, CrudPageInternal } from './crud/createCrudPage';
27
- export { generateCrudConfig } from './crud/generateCrudConfig';
28
- export { default as BaseForm } from './crud/components/BaseForm';
29
- export { useAuth } from './auth/contexts/AuthContext';
30
- export { ProtectedRoute } from './auth/components/ProtectedRoute';
31
- export { AliasRouteGuard } from './auth/components/AliasRouteGuard';
32
- export { AliasRedirect } from './auth/components/AliasRedirect';
33
- export type { AliasRouteGuardProps } from './auth/components/AliasRouteGuard';
34
- export { CallbackPage } from './auth/pages/CallbackPage';
35
- export { LoginPage } from './auth/pages/LoginPage';
36
- export { cn } from './utils';
37
- export { formatDatetime, formatDate, formatCurrency } from './utils';
38
- export { usePageMetadata, PageMetadataProvider, usePageMetadataContext } from './contexts/PageMetadataContext';
39
- export type { PageBreadcrumbItem } from './contexts/PageMetadataContext';
40
- export type { CrudEntity, FormSection, BulkAction, CrudFilter, QualiexUserFieldMapping, QualiexEnrichmentConfig } from './types';
41
- export { setupQualiexCore } from './setup';
42
- export { CoreProviders } from './providers/CoreProviders';
43
- export type { CoreProvidersProps, AppTranslationsMap } from './providers/CoreProviders';
44
- export * from './exports/ui';
45
- export * from './exports/crud';
46
- export * from './exports/integrations';
47
- export { default as AppHeader } from './components/layout/AppHeader';
48
- export * from './components/layout/AppSidebar';
49
- export * from './components/layout/AppLayout';
50
- export { SidebarHeader } from './components/layout/SidebarHeader';
51
- export type { SidebarHeaderProps } from './components/layout/SidebarHeader';
52
- export { SidebarLogo } from './components/layout/SidebarLogo';
53
- export { SidebarActionTrigger } from './components/layout/SidebarActionTrigger';
54
- export type { SidebarActionTriggerProps } from './components/layout/SidebarActionTrigger';
55
- export { BodyContent, ContentContainer } from './components/layout/BodyContent';
56
- export type { BodyContentProps, ContentContainerProps, BreadcrumbItemConfig } from './components/layout/BodyContent';
57
- export * from './components/ErrorBoundary';
58
- export * from './hooks/useActiveModules';
59
- export * from './hooks/useDebounce';
60
- export * from './hooks/usePageTitle';
61
- export { useMediaQuery, useIsMobile } from './hooks/useMediaQuery';
62
- export * from './hooks/usePermissionQuery';
63
- export { useSidebarResize } from './hooks/useSidebarResize';
64
- export { useColumnResize } from './hooks/useColumnResize';
65
- export { useRowResize } from './hooks/useRowResize';
66
- export { useWizard } from './hooks/useWizard';
67
- export type { WizardStep, UseWizardOptions, UseWizardReturn } from './hooks/useWizard';
68
- export { useAliasFromUrl } from './hooks/useAliasFromUrl';
69
- export type { UseAliasFromUrlOptions, UseAliasFromUrlReturn } from './hooks/useAliasFromUrl';
70
- export { useModuleAccess } from './hooks/useModuleAccess';
71
- export { useDerivedContractedModules } from './hooks/useDerivedContractedModules';
72
- export * from './i18n';
73
- export * from './contexts/LocaleContext';
74
- export * from './hooks/useI18nFormatters';
75
- export * from './utils/formatters/dateFormatters';
76
- export * from './utils/formatters/currencyFormatters';
77
- export * from './contexts/NavigationContext';
78
- export { ModalStateProvider, useModalState, useHasOpenModal } from './contexts/ModalStateContext';
79
- export type { ModalStateProviderProps } from './contexts/ModalStateContext';
80
- export { ModuleProvider, useModuleConfig } from './contexts/ModuleContext';
81
- export type { ModuleProviderProps } from './contexts/ModuleContext';
82
- export * from './services/BaseService';
83
- export { errorService } from './services/ErrorService';
84
- export { emailService, EmailService } from './services/EmailService';
85
- export type { SendEmailParams } from './services/EmailService';
86
- export * from './services/QualiexEnrichmentService';
87
- export { resolveFieldMappings, deriveNameField, deriveEmailField, deriveUsernameField } from './services/QualiexFieldHelpers';
88
- export * from './utils';
89
- export { loadForlogicFonts } from './utils/load-fonts';
90
- export * from './types';
91
- export * from './types/sidebar';
92
- export * from './config';
93
- export { getEnvironmentConfig, isDevEnv, getAppEnv, type AppEnv } from './config/environments';
94
- export type { EnvironmentConfig } from './config/environments';
95
- export { setBackendMode, getBackendMode, isSupabaseBackend } from './config/backend';
96
- export type { BackendMode } from './config/backend';
97
- export { isSupabaseConfigured } from './supabase/SupabaseSingleton';
98
- export * from './assets';
99
- export * from './components/modules';
100
- export * from './media';
101
- export * from './file-upload';
102
- export * from './custom-form-fields';
103
- export * from './approval-flow';
104
- export * from './team-selector';
1
+ export { DocumentSigner } from './components/DocumentSigner';
2
+ export { SignWidget } from './components/SignWidget';
3
+ export { D4SignWidget } from './components/D4SignWidget';
4
+ export { SignConfigForm } from './components/SignConfigForm';
5
+ export { useSignConfig } from './hooks/useSignConfig';
6
+ export { signService } from './services/signService';
7
+ export { loadClicksignScript } from './utils/loadClicksignScript';
8
+ export type { SignProvider, SignConfig, SignEnvelopeResult, SignedDocumentResult, DocumentSignerProps, SignWidgetProps, D4SignWidgetProps, SignConfigFormProps, } from './types';
@@ -1 +1 @@
1
- import{jsxs as e,jsx as n}from"react/jsx-runtime";import{useState as i,useEffect as a,useCallback as r,useRef as s}from"react";import{useAuth as t,getSupabaseClient as o,resolvePublishableKey as c,TokenManager as l,Alert as d,AlertTitle as m,AlertDescription as g,toast as u,Card as p,CardContent as _,Button as h,CardHeader as f,CardTitle as v,Label as y,Input as x,Select as w,SelectTrigger as N,SelectValue as b,SelectContent as E,SelectItem as k}from"forlogic-core";import{Loader2 as S,CheckCircle2 as C,Download as D,RefreshCw as $,Upload as A,CheckCircle as P,AlertCircle as T}from"lucide-react";import{useTranslation as L}from"react-i18next";import j from"i18next";function I(){const{alias:e}=t(),[n,s]=i(null),[c,l]=i(!0);a(()=>{if(!e)return void l(!1);let n=!1;return(async()=>{l(!0);try{const i=o(),{data:a,error:r}=await i.schema("common").from("sign_configs").select("*").eq("alias",e).is("deleted_at",null).maybeSingle();n||s(a)}catch(i){n||s(null)}finally{n||l(!1)}})(),()=>{n=!0}},[e]);return{config:n,isLoading:c,saveConfig:r(async(n,i)=>{if(!e)throw new Error("Alias not available");const a=o(),{data:r,error:t}=await a.schema("common").from("sign_configs").upsert({alias:e,api_key:n,environment:i,updated_at:(new Date).toISOString()},{onConflict:"alias"}).select().maybeSingle();if(t)throw t;return s(r),r},[e])}}const q=import.meta.env.VITE_SUPABASE_URL,B=c();async function F(e,n,i){const a=l.getSupabaseToken(),r={"Content-Type":"application/json",apikey:B};a&&(r.Authorization=`Bearer ${a}`);const s=await fetch(`${q}/functions/v1/${e}`,{method:"POST",headers:r,body:JSON.stringify({action:n,data:i})});if(!s.ok){const e=await s.json().catch(()=>({}));throw new Error(e.error||`Erro na requisição: ${s.status}`)}return s}const O={async createEnvelopeWithSigner(e){const n="d4sign"===e.provider?"d4sign":"clicksign",i="d4sign"===e.provider?"create_and_send":"create_envelope_with_signer";return(await F(n,i,{content_base64:e.contentBase64,filename:e.filename,signer_email:e.signerEmail,signer_name:e.signerName})).json()},async getSignedDocument(e){const n="d4sign"===e.provider?"d4sign":"clicksign";return(await F(n,"get_signed_document",{envelope_id:e.envelopeId,document_id:e.documentId})).json()}};let R=null;function U(){return window.Clicksign?Promise.resolve():R||(R=new Promise((e,n)=>{const i=document.createElement("script");i.src="https://cdn-public-library.clicksign.com/embedded/embedded.min-2.1.0.js",i.onload=()=>e(),i.onerror=()=>n(new Error("Falha ao carregar script do Clicksign")),document.head.appendChild(i)}),R)}const z="clicksign-container";function K({signerId:r,environment:t="sandbox",onSign:o,onError:c,onClose:l}){const{t:d}=L(),m=s(null),[g,u]=i(!0),[p,_]=i(null);return a(()=>{let e=!1;return m.current&&(m.current.unmount(),m.current=null),_(null),u(!0),U().then(()=>{if(e)return;const n=new window.Clicksign(r);n.endpoint="production"===t?"https://app.clicksign.com":"https://sandbox.clicksign.com",n.origin=window.origin,n.mount(z),n.on("loaded",function(){u(!1)}),n.on("signed",function(){o?.()}),n.on("resized",function(e){const n=e,i=document.getElementById(z);i&&n?.data?.height&&(i.style.height=n.data.height+"px")}),n.on("error",function(e){u(!1),c?.(e instanceof Error?e:new Error(d("sign_widget_error")))}),n.on("closed",function(){l?.()}),m.current=n}).catch(n=>{e||(_("Falha ao carregar o script de assinatura."),u(!1),c?.(n))}),()=>{e=!0,m.current&&(m.current.unmount(),m.current=null)}},[r,t]),e("div",{className:"relative h-full",children:[g&&n("div",{className:"absolute inset-0 flex items-center justify-center",children:e("div",{className:"flex items-center gap-2 text-muted-foreground",children:[n(S,{className:"h-5 w-5 animate-spin"}),n("span",{className:"text-sm",children:"Carregando documento..."})]})}),p&&n("div",{className:"absolute inset-0 flex items-center justify-center",children:n("p",{className:"text-sm text-destructive",children:p})}),n("div",{id:z,style:{height:"600px"}})]})}function H({documentKey:t,signerEmail:o,signerName:c,keySigner:l,environment:u,onSign:p,onError:_}){const h=s(null),[f,v]=i("loading"),[y,x]=i(null),w="production"===u?"https://secure.d4sign.com.br/embed/viewblob":"https://sandbox.d4sign.com.br/embed/viewblob",N=(()=>{const e=new URLSearchParams({email:o,display_name:c||"",disable_preview:"0"});return l&&e.set("key_signer",l),`${w}/${t}?${e.toString()}`})(),b=r(e=>"signed"===e.data?(v("ready"),void p?.()):"wrong-data"===e.data?(v("error"),x(j.t("sign_incorrect_data")),void _?.(new Error(j.t("sign_incorrect_data")))):void 0,[p,_]);a(()=>(window.addEventListener("message",b,!1),()=>{window.removeEventListener("message",b,!1)}),[b]);const E=r(()=>{"loading"===f&&v("ready")},[f]);return"error"===f?e(d,{variant:"danger",className:"my-4",children:[n(m,{children:j.t("sign_doc_load_error")}),n(g,{children:y||"Ocorreu um erro inesperado ao carregar o documento para assinatura. Tente novamente."})]}):e("div",{className:"relative h-full",children:["loading"===f&&n("div",{className:"absolute inset-0 flex items-center justify-center",children:e("div",{className:"flex items-center gap-2 text-muted-foreground",children:[n(S,{className:"h-5 w-5 animate-spin"}),n("span",{className:"text-sm",children:"Carregando documento..."})]})}),n("iframe",{ref:h,id:"d4sign-container",src:N,width:"100%",style:{height:"600px",border:0},allow:"geolocation",onLoad:E})]})}function M({file:o,onDocumentSigned:c,onError:l,showEventLog:d=!1}){const{user:m,alias:g}=t(),{config:f,isLoading:v}=I(),{t:y}=L(),[x,w]=i(null),[N,b]=i(!1),[E,k]=i(null),[P,T]=i("sandbox"),[q,B]=i("clicksign"),[F,R]=i(null),[U,z]=i(null),[M,V]=i(!1),[W,J]=i(0),[Y,G]=i(!1),[Q,X]=i([]),Z=s(null),ee=s(null),ne=r(e=>{d&&X(n=>[...n,`[${(new Date).toLocaleTimeString()}] ${e}`])},[d]),ie=r(async e=>{if(w(e),k(null),R(null),z(null),ne(`Arquivo selecionado: ${e.name}`),g&&m){b(!0);try{const n=f?.provider??"clicksign";B(n),ne(`Provedor resolvido: ${n}`);const i=new FileReader,a=await new Promise((n,a)=>{i.onload=()=>{const e=i.result;n(e)},i.onerror=a,i.readAsDataURL(e)});ne(`Criando envelope para assinatura via ${n}...`);const r=await O.createEnvelopeWithSigner({alias:g,contentBase64:a,filename:e.name,signerEmail:m.email||"",signerName:m.name||"",provider:n});ne(`Envelope criado: ${r.envelope_id}`),R({envelope_id:r.envelope_id,document_id:r.document_id,signer_email:r.signer_email,key_signer:r.signer_id}),T(r.environment),B(r.provider||n),"d4sign"===n?(ne("Documento enviado para D4Sign. Abrindo widget de assinatura..."),await new Promise(e=>setTimeout(e,2e3)),k(r.document_id),u.success(y("sign_doc_sent","Documento enviado! Assine abaixo."))):r.signer_id?(ne(`Signer ID obtido: ${r.signer_id}. Aguardando processamento (3s)...`),await new Promise(e=>setTimeout(e,3e3)),k(r.signer_id),u.success(y("sign_doc_sent","Documento enviado! Assine abaixo."))):(ne(j.t("sign_signer_unavailable")),u.error(y("sign_access_error","Não foi possível obter o acesso para assinatura. Tente novamente.")),l?.(new Error(y("sign_signer_unavailable"))))}catch(n){const e=n instanceof Error?n:new Error(y("sign_process_error",y("sign_doc_process_error"))),i=e.message||"";i.includes("MONTHLY_LIMIT_REACHED")?(ne(j.t("sign_monthly_limit")),u.error(y("sign_monthly_limit","Limite mensal de assinaturas atingido. Entre em contato com o administrador para ampliar seu plano."))):(ne(`Erro: ${i}`),u.error(i)),l?.(e)}finally{b(!1)}}},[g,m,ne,l,f]);a(()=>{o&&g&&m&&!v&&o!==ee.current&&(ee.current=o,ie(o))},[o,g,m,v,ie]);const ae=r(async()=>{if(!F||!g)return;V(!0),J(0),G(!1),ne("Buscando documento assinado...");for(let n=1;n<=6;n++){J(n),ne(`Tentativa ${n}/6...`);try{const e=await O.getSignedDocument({alias:g,envelopeId:F.envelope_id,documentId:F.document_id,provider:q});if(e.download_url)return ne(j.t("sign_doc_available")),z(e.download_url),void V(!1)}catch(e){ne(`Erro na tentativa ${n}: ${e instanceof Error?e.message:y("unknown_error")}`)}n<6&&(ne("Aguardando 10 segundos para próxima tentativa..."),await new Promise(e=>setTimeout(e,1e4)))}ne(j.t("sign_fetch_failed")),V(!1),G(!0)},[F,g,ne,q]),re=r(async()=>{ne("Documento assinado com sucesso!"),u.success(y("sign_signed_success","Documento assinado com sucesso!")),k(null),F&&g&&(c?.({success:!0,provider:q,envelope_id:F.envelope_id,document_id:F.document_id,signer_id:E||"",environment:P}),await ae())},[ne,c,F,E,g,P,q,ae]);if(!g)return n(p,{className:"border-amber-200 bg-amber-50",children:n(_,{className:"flex items-start gap-3 py-6",children:e("div",{children:[n("p",{className:"font-medium text-amber-800",children:y("sign_auth_required","Autenticação necessária")}),n("p",{className:"text-sm text-amber-700 mt-1",children:y("sign_login_required","Faça login para utilizar a assinatura digital.")})]})})});const se="d4sign"===q?"D4Sign":"Clicksign",te=()=>d&&Q.length>0?n("div",{className:"bg-muted p-3 rounded-md text-xs font-mono space-y-1 max-h-40 overflow-auto",children:Q.map((e,i)=>n("div",{children:e},i))}):null;return F&&!E&&(U||M||Y)?e("div",{className:"space-y-4",children:[n(p,{className:"border-green-200 bg-green-50",children:e(_,{className:"flex flex-col items-center gap-4 py-8",children:[n(C,{className:"h-12 w-12 text-green-600"}),e("div",{className:"text-center",children:[n("p",{className:"text-lg font-semibold text-green-800",children:y("sign_signed_success","Documento assinado com sucesso!")}),n("p",{className:"text-sm text-green-700 mt-1",children:x?.name})]}),M?e("div",{className:"flex flex-col items-center gap-2 text-sm text-muted-foreground",children:[e("div",{className:"flex items-center gap-2",children:[n(S,{className:"h-4 w-4 animate-spin"}),y("sign_preparing_doc","Preparando documento assinado...")," (",y("sign_attempt","tentativa")," ",W,"/6)"]}),n("p",{className:"text-xs text-muted-foreground",children:y("sign_waiting_provider",`Aguardando processamento pelo ${se}...`)})]}):U?n(h,{asChild:!0,variant:"default",className:"gap-2",children:e("a",{href:U,target:"_blank",rel:"noopener noreferrer",children:[n(D,{className:"h-4 w-4"}),y("sign_download_signed","Baixar documento assinado")]})}):Y?e("div",{className:"text-center space-y-3",children:[e("div",{className:"space-y-1",children:[n("p",{className:"text-sm text-muted-foreground",children:y("sign_fetch_failed","Não foi possível obter o documento assinado após 1 minuto.")}),n("p",{className:"text-xs text-muted-foreground",children:y("sign_email_fallback","O documento será enviado para o seu e-mail assim que estiver disponível.")})]}),e(h,{variant:"secondary",className:"gap-2",onClick:ae,children:[n($,{className:"h-4 w-4"}),y("sign_try_again","Tentar novamente")]})]}):null]})}),n(te,{})]}):E?e("div",{className:"space-y-4",children:["d4sign"===q?n(H,{documentKey:E,signerEmail:F?.signer_email||m?.email||"",signerName:m?.name,keySigner:F?.key_signer,environment:P,onSign:re,onError:l}):n(K,{signerId:E,environment:P,onSign:re,onError:l}),n(te,{})]}):o&&(N||v)?n(p,{children:e(_,{className:"flex items-center justify-center gap-3 py-10",children:[n(S,{className:"h-6 w-6 animate-spin text-primary"}),n("p",{className:"font-medium",children:y("sign_sending_doc","Enviando documento para assinatura...")})]})}):e("div",{className:"space-y-4",children:[n("input",{ref:Z,type:"file",accept:"application/pdf",className:"hidden",onChange:e=>{const n=e.target.files?.[0];n&&"application/pdf"===n.type?ie(n):u.error(y("sign_select_pdf","Selecione um arquivo PDF"))}}),n(p,N?{children:e(_,{className:"flex items-center justify-center gap-3 py-10",children:[n(S,{className:"h-6 w-6 animate-spin text-primary"}),n("p",{className:"font-medium",children:y("sign_sending_doc","Enviando documento para assinatura...")})]})}:{className:"border-dashed border-2 cursor-pointer hover:bg-muted/50 transition-colors",onClick:()=>Z.current?.click(),children:e(_,{className:"flex flex-col items-center justify-center py-10 gap-3",children:[n(A,{className:"h-8 w-8 text-muted-foreground"}),e("div",{className:"text-center",children:[n("p",{className:"font-medium",children:y("sign_select_pdf","Selecione um arquivo PDF")}),n("p",{className:"text-sm text-muted-foreground",children:y("sign_click_to_select","Clique para escolher o documento para assinatura")})]})]})}),n(te,{})]})}function V({onSaved:r}){const{config:s,isLoading:t,saveConfig:o}=I(),{t:c}=L(),[l,d]=i(""),[m,g]=i("sandbox"),[C,D]=i(!1);a(()=>{!t&&s&&(d(s.api_key),g(s.environment))},[s,t]);return t?n("div",{className:"flex items-center justify-center py-8",children:n(S,{className:"h-6 w-6 animate-spin text-muted-foreground"})}):e("div",{className:"space-y-4",children:[e("div",s?{className:"flex items-center gap-2 text-sm text-emerald-600",children:[n(P,{className:"h-4 w-4"}),n("span",{children:c("sign_configured",c("sign_configured_unit"))})]}:{className:"flex items-center gap-2 text-sm text-amber-600",children:[n(T,{className:"h-4 w-4"}),n("span",{children:c("sign_not_configured",c("sign_not_configured_unit"))})]}),e(p,{children:[n(f,{children:n(v,{className:"text-base",children:c("sign_digital_config")})}),n(_,{children:e("form",{onSubmit:async e=>{if(e.preventDefault(),l.trim()){D(!0);try{await o(l.trim(),m),u.success(c("sign_config_saved",c("sign_config_saved_success"))),r?.()}catch(n){u.error(c("sign_config_save_error",c("sign_config_save_err")))}finally{D(!1)}}else u.error(c("sign_api_key_required",c("sign_api_key_info")))},className:"space-y-4",children:[e("div",{className:"space-y-2",children:[n(y,{htmlFor:"sign-api-key",children:"API Key"}),n(x,{id:"sign-api-key",type:"password",placeholder:c("sign_api_key_placeholder",c("sign_api_key_input")),value:l,onChange:e=>d(e.target.value)})]}),e("div",{className:"space-y-2",children:[n(y,{children:c("sign_environment","Ambiente")}),e(w,{value:m,onValueChange:e=>g(e),children:[n(N,{children:n(b,{})}),e(E,{children:[n(k,{value:"sandbox",children:"Sandbox (Testes)"}),n(k,{value:"production",children:"Produção"})]})]})]}),e(h,{type:"submit",disabled:C,children:[C&&n(S,{className:"mr-2 h-4 w-4 animate-spin"}),s?c("sign_update_config",c("sign_update_config_btn")):c("sign_save_config",c("sign_save_config_btn"))]})]})})]})]})}export{H as D4SignWidget,M as DocumentSigner,V as SignConfigForm,K as SignWidget,U as loadClicksignScript,O as signService,I as useSignConfig};
1
+ import{jsxs as e,jsx as n}from"react/jsx-runtime";import{useState as i,useEffect as a,useCallback as r,useRef as s}from"react";import{useAuth as t,getSupabaseClient as o,Alert as c,AlertTitle as l,AlertDescription as d,toast as m,Card as g,CardContent as u,Button as p,CardHeader as _,CardTitle as h,Label as f,Input as v,Select as x,SelectTrigger as y,SelectValue as w,SelectContent as N,SelectItem as b}from"forlogic-core";import{Loader2 as E,CheckCircle2 as k,Download as S,RefreshCw as C,Upload as D,CheckCircle as $,AlertCircle as A}from"lucide-react";import{useTranslation as L}from"react-i18next";import P from"i18next";function I(){const{alias:e}=t(),[n,s]=i(null),[c,l]=i(!0);a(()=>{if(!e)return void l(!1);let n=!1;return(async()=>{l(!0);try{const i=o(),{data:a,error:r}=await i.schema("common").from("sign_configs").select("*").eq("alias",e).is("deleted_at",null).maybeSingle();n||s(a)}catch(i){n||s(null)}finally{n||l(!1)}})(),()=>{n=!0}},[e]);return{config:n,isLoading:c,saveConfig:r(async(n,i)=>{if(!e)throw new Error("Alias not available");const a=o(),{data:r,error:t}=await a.schema("common").from("sign_configs").upsert({alias:e,api_key:n,environment:i,updated_at:(new Date).toISOString()},{onConflict:"alias"}).select().maybeSingle();if(t)throw t;return s(r),r},[e])}}async function j(e,n,i){const a=o(),{data:r,error:s}=await a.functions.invoke(e,{body:{action:n,data:i}});if(s){const n=s.context;if(n&&"function"==typeof n.json){const i=await n.json().catch(()=>null),a=i?.error||i?.message||s.message;throw new Error(a||`Erro na requisição: ${e}`)}throw new Error(s.message||`Erro na requisição: ${e}`)}return r}const q={createEnvelopeWithSigner:async e=>j("d4sign"===e.provider?"d4sign":"clicksign","d4sign"===e.provider?"create_and_send":"create_envelope_with_signer",{content_base64:e.contentBase64,filename:e.filename,signer_email:e.signerEmail,signer_name:e.signerName}),getSignedDocument:async e=>j("d4sign"===e.provider?"d4sign":"clicksign","get_signed_document",{envelope_id:e.envelopeId,document_id:e.documentId})};let T=null;function F(){return window.Clicksign?Promise.resolve():T||(T=new Promise((e,n)=>{const i=document.createElement("script");i.src="https://cdn-public-library.clicksign.com/embedded/embedded.min-2.1.0.js",i.onload=()=>e(),i.onerror=()=>n(new Error("Falha ao carregar script do Clicksign")),document.head.appendChild(i)}),T)}const B="clicksign-container";function O({signerId:r,environment:t="sandbox",onSign:o,onError:c,onClose:l}){const{t:d}=L(),m=s(null),[g,u]=i(!0),[p,_]=i(null);return a(()=>{let e=!1;return m.current&&(m.current.unmount(),m.current=null),_(null),u(!0),F().then(()=>{if(e)return;const n=new window.Clicksign(r);n.endpoint="production"===t?"https://app.clicksign.com":"https://sandbox.clicksign.com",n.origin=window.origin,n.mount(B),n.on("loaded",function(){u(!1)}),n.on("signed",function(){o?.()}),n.on("resized",function(e){const n=e,i=document.getElementById(B);i&&n?.data?.height&&(i.style.height=n.data.height+"px")}),n.on("error",function(e){u(!1),c?.(e instanceof Error?e:new Error(d("sign_widget_error")))}),n.on("closed",function(){l?.()}),m.current=n}).catch(n=>{e||(_("Falha ao carregar o script de assinatura."),u(!1),c?.(n))}),()=>{e=!0,m.current&&(m.current.unmount(),m.current=null)}},[r,t]),e("div",{className:"relative h-full",children:[g&&n("div",{className:"absolute inset-0 flex items-center justify-center",children:e("div",{className:"flex items-center gap-2 text-muted-foreground",children:[n(E,{className:"h-5 w-5 animate-spin"}),n("span",{className:"text-sm",children:"Carregando documento..."})]})}),p&&n("div",{className:"absolute inset-0 flex items-center justify-center",children:n("p",{className:"text-sm text-destructive",children:p})}),n("div",{id:B,style:{height:"600px"}})]})}function R({documentKey:t,signerEmail:o,signerName:m,keySigner:g,environment:u,onSign:p,onError:_}){const h=s(null),[f,v]=i("loading"),[x,y]=i(null),w="production"===u?"https://secure.d4sign.com.br/embed/viewblob":"https://sandbox.d4sign.com.br/embed/viewblob",N=(()=>{const e=new URLSearchParams({email:o,display_name:m||"",disable_preview:"0"});return g&&e.set("key_signer",g),`${w}/${t}?${e.toString()}`})(),b=r(e=>"signed"===e.data?(v("ready"),void p?.()):"wrong-data"===e.data?(v("error"),y(P.t("sign_incorrect_data")),void _?.(new Error(P.t("sign_incorrect_data")))):void 0,[p,_]);a(()=>(window.addEventListener("message",b,!1),()=>{window.removeEventListener("message",b,!1)}),[b]);const k=r(()=>{"loading"===f&&v("ready")},[f]);return"error"===f?e(c,{variant:"danger",className:"my-4",children:[n(l,{children:P.t("sign_doc_load_error")}),n(d,{children:x||"Ocorreu um erro inesperado ao carregar o documento para assinatura. Tente novamente."})]}):e("div",{className:"relative h-full",children:["loading"===f&&n("div",{className:"absolute inset-0 flex items-center justify-center",children:e("div",{className:"flex items-center gap-2 text-muted-foreground",children:[n(E,{className:"h-5 w-5 animate-spin"}),n("span",{className:"text-sm",children:"Carregando documento..."})]})}),n("iframe",{ref:h,id:"d4sign-container",src:N,width:"100%",style:{height:"600px",border:0},allow:"geolocation",onLoad:k})]})}function K({file:o,onDocumentSigned:c,onError:l,showEventLog:d=!1}){const{user:_,alias:h}=t(),{config:f,isLoading:v}=I(),{t:x}=L(),[y,w]=i(null),[N,b]=i(!1),[$,A]=i(null),[j,T]=i("sandbox"),[F,B]=i("clicksign"),[K,z]=i(null),[H,M]=i(null),[U,W]=i(!1),[V,Y]=i(0),[G,J]=i(!1),[Q,X]=i([]),Z=s(null),ee=s(null),ne=r(e=>{d&&X(n=>[...n,`[${(new Date).toLocaleTimeString()}] ${e}`])},[d]),ie=r(async e=>{if(w(e),A(null),z(null),M(null),ne(`Arquivo selecionado: ${e.name}`),h&&_){b(!0);try{const n=f?.provider??"clicksign";B(n),ne(`Provedor resolvido: ${n}`);const i=new FileReader,a=await new Promise((n,a)=>{i.onload=()=>{const e=i.result;n(e)},i.onerror=a,i.readAsDataURL(e)});ne(`Criando envelope para assinatura via ${n}...`);const r=await q.createEnvelopeWithSigner({alias:h,contentBase64:a,filename:e.name,signerEmail:_.email||"",signerName:_.name||"",provider:n});ne(`Envelope criado: ${r.envelope_id}`),z({envelope_id:r.envelope_id,document_id:r.document_id,signer_email:r.signer_email,key_signer:r.signer_id}),T(r.environment),B(r.provider||n),"d4sign"===n?(ne("Documento enviado para D4Sign. Abrindo widget de assinatura..."),await new Promise(e=>setTimeout(e,2e3)),A(r.document_id),m.success(x("sign_doc_sent","Documento enviado! Assine abaixo."))):r.signer_id?(ne(`Signer ID obtido: ${r.signer_id}. Aguardando processamento (3s)...`),await new Promise(e=>setTimeout(e,3e3)),A(r.signer_id),m.success(x("sign_doc_sent","Documento enviado! Assine abaixo."))):(ne(P.t("sign_signer_unavailable")),m.error(x("sign_access_error","Não foi possível obter o acesso para assinatura. Tente novamente.")),l?.(new Error(x("sign_signer_unavailable"))))}catch(n){const e=n instanceof Error?n:new Error(x("sign_process_error",x("sign_doc_process_error"))),i=e.message||"";i.includes("MONTHLY_LIMIT_REACHED")?(ne(P.t("sign_monthly_limit")),m.error(x("sign_monthly_limit","Limite mensal de assinaturas atingido. Entre em contato com o administrador para ampliar seu plano."))):(ne(`Erro: ${i}`),m.error(i)),l?.(e)}finally{b(!1)}}},[h,_,ne,l,f]);a(()=>{o&&h&&_&&!v&&o!==ee.current&&(ee.current=o,ie(o))},[o,h,_,v,ie]);const ae=r(async()=>{if(!K||!h)return;W(!0),Y(0),J(!1),ne("Buscando documento assinado...");for(let n=1;n<=6;n++){Y(n),ne(`Tentativa ${n}/6...`);try{const e=await q.getSignedDocument({alias:h,envelopeId:K.envelope_id,documentId:K.document_id,provider:F});if(e.download_url)return ne(P.t("sign_doc_available")),M(e.download_url),void W(!1)}catch(e){ne(`Erro na tentativa ${n}: ${e instanceof Error?e.message:x("unknown_error")}`)}n<6&&(ne("Aguardando 10 segundos para próxima tentativa..."),await new Promise(e=>setTimeout(e,1e4)))}ne(P.t("sign_fetch_failed")),W(!1),J(!0)},[K,h,ne,F]),re=r(async()=>{ne("Documento assinado com sucesso!"),m.success(x("sign_signed_success","Documento assinado com sucesso!")),A(null),K&&h&&(c?.({success:!0,provider:F,envelope_id:K.envelope_id,document_id:K.document_id,signer_id:$||"",environment:j}),await ae())},[ne,c,K,$,h,j,F,ae]);if(!h)return n(g,{className:"border-amber-200 bg-amber-50",children:n(u,{className:"flex items-start gap-3 py-6",children:e("div",{children:[n("p",{className:"font-medium text-amber-800",children:x("sign_auth_required","Autenticação necessária")}),n("p",{className:"text-sm text-amber-700 mt-1",children:x("sign_login_required","Faça login para utilizar a assinatura digital.")})]})})});const se="d4sign"===F?"D4Sign":"Clicksign",te=()=>d&&Q.length>0?n("div",{className:"bg-muted p-3 rounded-md text-xs font-mono space-y-1 max-h-40 overflow-auto",children:Q.map((e,i)=>n("div",{children:e},i))}):null;return K&&!$&&(H||U||G)?e("div",{className:"space-y-4",children:[n(g,{className:"border-green-200 bg-green-50",children:e(u,{className:"flex flex-col items-center gap-4 py-8",children:[n(k,{className:"h-12 w-12 text-green-600"}),e("div",{className:"text-center",children:[n("p",{className:"text-lg font-semibold text-green-800",children:x("sign_signed_success","Documento assinado com sucesso!")}),n("p",{className:"text-sm text-green-700 mt-1",children:y?.name})]}),U?e("div",{className:"flex flex-col items-center gap-2 text-sm text-muted-foreground",children:[e("div",{className:"flex items-center gap-2",children:[n(E,{className:"h-4 w-4 animate-spin"}),x("sign_preparing_doc","Preparando documento assinado...")," (",x("sign_attempt","tentativa")," ",V,"/6)"]}),n("p",{className:"text-xs text-muted-foreground",children:x("sign_waiting_provider",`Aguardando processamento pelo ${se}...`)})]}):H?n(p,{asChild:!0,variant:"default",className:"gap-2",children:e("a",{href:H,target:"_blank",rel:"noopener noreferrer",children:[n(S,{className:"h-4 w-4"}),x("sign_download_signed","Baixar documento assinado")]})}):G?e("div",{className:"text-center space-y-3",children:[e("div",{className:"space-y-1",children:[n("p",{className:"text-sm text-muted-foreground",children:x("sign_fetch_failed","Não foi possível obter o documento assinado após 1 minuto.")}),n("p",{className:"text-xs text-muted-foreground",children:x("sign_email_fallback","O documento será enviado para o seu e-mail assim que estiver disponível.")})]}),e(p,{variant:"secondary",className:"gap-2",onClick:ae,children:[n(C,{className:"h-4 w-4"}),x("sign_try_again","Tentar novamente")]})]}):null]})}),n(te,{})]}):$?e("div",{className:"space-y-4",children:["d4sign"===F?n(R,{documentKey:$,signerEmail:K?.signer_email||_?.email||"",signerName:_?.name,keySigner:K?.key_signer,environment:j,onSign:re,onError:l}):n(O,{signerId:$,environment:j,onSign:re,onError:l}),n(te,{})]}):o&&(N||v)?n(g,{children:e(u,{className:"flex items-center justify-center gap-3 py-10",children:[n(E,{className:"h-6 w-6 animate-spin text-primary"}),n("p",{className:"font-medium",children:x("sign_sending_doc","Enviando documento para assinatura...")})]})}):e("div",{className:"space-y-4",children:[n("input",{ref:Z,type:"file",accept:"application/pdf",className:"hidden",onChange:e=>{const n=e.target.files?.[0];n&&"application/pdf"===n.type?ie(n):m.error(x("sign_select_pdf","Selecione um arquivo PDF"))}}),n(g,N?{children:e(u,{className:"flex items-center justify-center gap-3 py-10",children:[n(E,{className:"h-6 w-6 animate-spin text-primary"}),n("p",{className:"font-medium",children:x("sign_sending_doc","Enviando documento para assinatura...")})]})}:{className:"border-dashed border-2 cursor-pointer hover:bg-muted/50 transition-colors",onClick:()=>Z.current?.click(),children:e(u,{className:"flex flex-col items-center justify-center py-10 gap-3",children:[n(D,{className:"h-8 w-8 text-muted-foreground"}),e("div",{className:"text-center",children:[n("p",{className:"font-medium",children:x("sign_select_pdf","Selecione um arquivo PDF")}),n("p",{className:"text-sm text-muted-foreground",children:x("sign_click_to_select","Clique para escolher o documento para assinatura")})]})]})}),n(te,{})]})}function z({onSaved:r}){const{config:s,isLoading:t,saveConfig:o}=I(),{t:c}=L(),[l,d]=i(""),[k,S]=i("sandbox"),[C,D]=i(!1);a(()=>{!t&&s&&(d(s.api_key),S(s.environment))},[s,t]);return t?n("div",{className:"flex items-center justify-center py-8",children:n(E,{className:"h-6 w-6 animate-spin text-muted-foreground"})}):e("div",{className:"space-y-4",children:[e("div",s?{className:"flex items-center gap-2 text-sm text-emerald-600",children:[n($,{className:"h-4 w-4"}),n("span",{children:c("sign_configured",c("sign_configured_unit"))})]}:{className:"flex items-center gap-2 text-sm text-amber-600",children:[n(A,{className:"h-4 w-4"}),n("span",{children:c("sign_not_configured",c("sign_not_configured_unit"))})]}),e(g,{children:[n(_,{children:n(h,{className:"text-base",children:c("sign_digital_config")})}),n(u,{children:e("form",{onSubmit:async e=>{if(e.preventDefault(),l.trim()){D(!0);try{await o(l.trim(),k),m.success(c("sign_config_saved",c("sign_config_saved_success"))),r?.()}catch(n){m.error(c("sign_config_save_error",c("sign_config_save_err")))}finally{D(!1)}}else m.error(c("sign_api_key_required",c("sign_api_key_info")))},className:"space-y-4",children:[e("div",{className:"space-y-2",children:[n(f,{htmlFor:"sign-api-key",children:"API Key"}),n(v,{id:"sign-api-key",type:"password",placeholder:c("sign_api_key_placeholder",c("sign_api_key_input")),value:l,onChange:e=>d(e.target.value)})]}),e("div",{className:"space-y-2",children:[n(f,{children:c("sign_environment","Ambiente")}),e(x,{value:k,onValueChange:e=>S(e),children:[n(y,{children:n(w,{})}),e(N,{children:[n(b,{value:"sandbox",children:"Sandbox (Testes)"}),n(b,{value:"production",children:"Produção"})]})]})]}),e(p,{type:"submit",disabled:C,children:[C&&n(E,{className:"mr-2 h-4 w-4 animate-spin"}),s?c("sign_update_config",c("sign_update_config_btn")):c("sign_save_config",c("sign_save_config_btn"))]})]})})]})]})}export{R as D4SignWidget,K as DocumentSigner,z as SignConfigForm,O as SignWidget,F as loadClicksignScript,q as signService,I as useSignConfig};
@@ -1 +1 @@
1
- "use strict";var e=require("react/jsx-runtime"),n=require("react"),s=require("forlogic-core"),a=require("lucide-react"),i=require("react-i18next"),t=require("i18next");function r(){const{alias:e}=s.useAuth(),[a,i]=n.useState(null),[t,r]=n.useState(!0);n.useEffect(()=>{if(!e)return void r(!1);let n=!1;return(async()=>{r(!0);try{const a=s.getSupabaseClient(),{data:t,error:r}=await a.schema("common").from("sign_configs").select("*").eq("alias",e).is("deleted_at",null).maybeSingle();n||i(t)}catch(a){n||i(null)}finally{n||r(!1)}})(),()=>{n=!0}},[e]);return{config:a,isLoading:t,saveConfig:n.useCallback(async(n,a)=>{if(!e)throw new Error("Alias not available");const t=s.getSupabaseClient(),{data:r,error:o}=await t.schema("common").from("sign_configs").upsert({alias:e,api_key:n,environment:a,updated_at:(new Date).toISOString()},{onConflict:"alias"}).select().maybeSingle();if(o)throw o;return i(r),r},[e])}}const o=(void 0).VITE_SUPABASE_URL,c=s.resolvePublishableKey();async function l(e,n,a){const i=s.TokenManager.getSupabaseToken(),t={"Content-Type":"application/json",apikey:c};i&&(t.Authorization=`Bearer ${i}`);const r=await fetch(`${o}/functions/v1/${e}`,{method:"POST",headers:t,body:JSON.stringify({action:n,data:a})});if(!r.ok){const e=await r.json().catch(()=>({}));throw new Error(e.error||`Erro na requisição: ${r.status}`)}return r}const d={async createEnvelopeWithSigner(e){const n="d4sign"===e.provider?"d4sign":"clicksign",s="d4sign"===e.provider?"create_and_send":"create_envelope_with_signer";return(await l(n,s,{content_base64:e.contentBase64,filename:e.filename,signer_email:e.signerEmail,signer_name:e.signerName})).json()},async getSignedDocument(e){const n="d4sign"===e.provider?"d4sign":"clicksign";return(await l(n,"get_signed_document",{envelope_id:e.envelopeId,document_id:e.documentId})).json()}};let u=null;function m(){return window.Clicksign?Promise.resolve():u||(u=new Promise((e,n)=>{const s=document.createElement("script");s.src="https://cdn-public-library.clicksign.com/embedded/embedded.min-2.1.0.js",s.onload=()=>e(),s.onerror=()=>n(new Error("Falha ao carregar script do Clicksign")),document.head.appendChild(s)}),u)}const g="clicksign-container";function p({signerId:s,environment:t="sandbox",onSign:r,onError:o,onClose:c}){const{t:l}=i.useTranslation(),d=n.useRef(null),[u,p]=n.useState(!0),[x,_]=n.useState(null);return n.useEffect(()=>{let e=!1;return d.current&&(d.current.unmount(),d.current=null),_(null),p(!0),m().then(()=>{if(e)return;const n=new window.Clicksign(s);n.endpoint="production"===t?"https://app.clicksign.com":"https://sandbox.clicksign.com",n.origin=window.origin,n.mount(g),n.on("loaded",function(){p(!1)}),n.on("signed",function(){r?.()}),n.on("resized",function(e){const n=e,s=document.getElementById(g);s&&n?.data?.height&&(s.style.height=n.data.height+"px")}),n.on("error",function(e){p(!1),o?.(e instanceof Error?e:new Error(l("sign_widget_error")))}),n.on("closed",function(){c?.()}),d.current=n}).catch(n=>{e||(_("Falha ao carregar o script de assinatura."),p(!1),o?.(n))}),()=>{e=!0,d.current&&(d.current.unmount(),d.current=null)}},[s,t]),e.jsxs("div",{className:"relative h-full",children:[u&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground",children:[e.jsx(a.Loader2,{className:"h-5 w-5 animate-spin"}),e.jsx("span",{className:"text-sm",children:"Carregando documento..."})]})}),x&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsx("p",{className:"text-sm text-destructive",children:x})}),e.jsx("div",{id:g,style:{height:"600px"}})]})}function x({documentKey:i,signerEmail:r,signerName:o,keySigner:c,environment:l,onSign:d,onError:u}){const m=n.useRef(null),[g,p]=n.useState("loading"),[x,_]=n.useState(null),h="production"===l?"https://secure.d4sign.com.br/embed/viewblob":"https://sandbox.d4sign.com.br/embed/viewblob",f=(()=>{const e=new URLSearchParams({email:r,display_name:o||"",disable_preview:"0"});return c&&e.set("key_signer",c),`${h}/${i}?${e.toString()}`})(),v=n.useCallback(e=>"signed"===e.data?(p("ready"),void d?.()):"wrong-data"===e.data?(p("error"),_(t.t("sign_incorrect_data")),void u?.(new Error(t.t("sign_incorrect_data")))):void 0,[d,u]);n.useEffect(()=>(window.addEventListener("message",v,!1),()=>{window.removeEventListener("message",v,!1)}),[v]);const j=n.useCallback(()=>{"loading"===g&&p("ready")},[g]);return"error"===g?e.jsxs(s.Alert,{variant:"danger",className:"my-4",children:[e.jsx(s.AlertTitle,{children:t.t("sign_doc_load_error")}),e.jsx(s.AlertDescription,{children:x||"Ocorreu um erro inesperado ao carregar o documento para assinatura. Tente novamente."})]}):e.jsxs("div",{className:"relative h-full",children:["loading"===g&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground",children:[e.jsx(a.Loader2,{className:"h-5 w-5 animate-spin"}),e.jsx("span",{className:"text-sm",children:"Carregando documento..."})]})}),e.jsx("iframe",{ref:m,id:"d4sign-container",src:f,width:"100%",style:{height:"600px",border:0},allow:"geolocation",onLoad:j})]})}exports.D4SignWidget=x,exports.DocumentSigner=function({file:o,onDocumentSigned:c,onError:l,showEventLog:u=!1}){const{user:m,alias:g}=s.useAuth(),{config:_,isLoading:h}=r(),{t:f}=i.useTranslation(),[v,j]=n.useState(null),[y,w]=n.useState(!1),[b,N]=n.useState(null),[S,C]=n.useState("sandbox"),[k,E]=n.useState("clicksign"),[D,L]=n.useState(null),[A,T]=n.useState(null),[$,q]=n.useState(!1),[I,P]=n.useState(0),[B,R]=n.useState(!1),[F,O]=n.useState([]),U=n.useRef(null),K=n.useRef(null),W=n.useCallback(e=>{u&&O(n=>[...n,`[${(new Date).toLocaleTimeString()}] ${e}`])},[u]),z=n.useCallback(async e=>{if(j(e),N(null),L(null),T(null),W(`Arquivo selecionado: ${e.name}`),g&&m){w(!0);try{const n=_?.provider??"clicksign";E(n),W(`Provedor resolvido: ${n}`);const a=new FileReader,i=await new Promise((n,s)=>{a.onload=()=>{const e=a.result;n(e)},a.onerror=s,a.readAsDataURL(e)});W(`Criando envelope para assinatura via ${n}...`);const r=await d.createEnvelopeWithSigner({alias:g,contentBase64:i,filename:e.name,signerEmail:m.email||"",signerName:m.name||"",provider:n});W(`Envelope criado: ${r.envelope_id}`),L({envelope_id:r.envelope_id,document_id:r.document_id,signer_email:r.signer_email,key_signer:r.signer_id}),C(r.environment),E(r.provider||n),"d4sign"===n?(W("Documento enviado para D4Sign. Abrindo widget de assinatura..."),await new Promise(e=>setTimeout(e,2e3)),N(r.document_id),s.toast.success(f("sign_doc_sent","Documento enviado! Assine abaixo."))):r.signer_id?(W(`Signer ID obtido: ${r.signer_id}. Aguardando processamento (3s)...`),await new Promise(e=>setTimeout(e,3e3)),N(r.signer_id),s.toast.success(f("sign_doc_sent","Documento enviado! Assine abaixo."))):(W(t.t("sign_signer_unavailable")),s.toast.error(f("sign_access_error","Não foi possível obter o acesso para assinatura. Tente novamente.")),l?.(new Error(f("sign_signer_unavailable"))))}catch(n){const e=n instanceof Error?n:new Error(f("sign_process_error",f("sign_doc_process_error"))),a=e.message||"";a.includes("MONTHLY_LIMIT_REACHED")?(W(t.t("sign_monthly_limit")),s.toast.error(f("sign_monthly_limit","Limite mensal de assinaturas atingido. Entre em contato com o administrador para ampliar seu plano."))):(W(`Erro: ${a}`),s.toast.error(a)),l?.(e)}finally{w(!1)}}},[g,m,W,l,_]);n.useEffect(()=>{o&&g&&m&&!h&&o!==K.current&&(K.current=o,z(o))},[o,g,m,h,z]);const H=n.useCallback(async()=>{if(!D||!g)return;q(!0),P(0),R(!1),W("Buscando documento assinado...");for(let n=1;n<=6;n++){P(n),W(`Tentativa ${n}/6...`);try{const e=await d.getSignedDocument({alias:g,envelopeId:D.envelope_id,documentId:D.document_id,provider:k});if(e.download_url)return W(t.t("sign_doc_available")),T(e.download_url),void q(!1)}catch(e){W(`Erro na tentativa ${n}: ${e instanceof Error?e.message:f("unknown_error")}`)}n<6&&(W("Aguardando 10 segundos para próxima tentativa..."),await new Promise(e=>setTimeout(e,1e4)))}W(t.t("sign_fetch_failed")),q(!1),R(!0)},[D,g,W,k]),M=n.useCallback(async()=>{W("Documento assinado com sucesso!"),s.toast.success(f("sign_signed_success","Documento assinado com sucesso!")),N(null),D&&g&&(c?.({success:!0,provider:k,envelope_id:D.envelope_id,document_id:D.document_id,signer_id:b||"",environment:S}),await H())},[W,c,D,b,g,S,k,H]);if(!g)return e.jsx(s.Card,{className:"border-amber-200 bg-amber-50",children:e.jsx(s.CardContent,{className:"flex items-start gap-3 py-6",children:e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-amber-800",children:f("sign_auth_required","Autenticação necessária")}),e.jsx("p",{className:"text-sm text-amber-700 mt-1",children:f("sign_login_required","Faça login para utilizar a assinatura digital.")})]})})});const V="d4sign"===k?"D4Sign":"Clicksign",J=()=>u&&F.length>0?e.jsx("div",{className:"bg-muted p-3 rounded-md text-xs font-mono space-y-1 max-h-40 overflow-auto",children:F.map((n,s)=>e.jsx("div",{children:n},s))}):null;return D&&!b&&(A||$||B)?e.jsxs("div",{className:"space-y-4",children:[e.jsx(s.Card,{className:"border-green-200 bg-green-50",children:e.jsxs(s.CardContent,{className:"flex flex-col items-center gap-4 py-8",children:[e.jsx(a.CheckCircle2,{className:"h-12 w-12 text-green-600"}),e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"text-lg font-semibold text-green-800",children:f("sign_signed_success","Documento assinado com sucesso!")}),e.jsx("p",{className:"text-sm text-green-700 mt-1",children:v?.name})]}),$?e.jsxs("div",{className:"flex flex-col items-center gap-2 text-sm text-muted-foreground",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a.Loader2,{className:"h-4 w-4 animate-spin"}),f("sign_preparing_doc","Preparando documento assinado...")," (",f("sign_attempt","tentativa")," ",I,"/6)"]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:f("sign_waiting_provider",`Aguardando processamento pelo ${V}...`)})]}):A?e.jsx(s.Button,{asChild:!0,variant:"default",className:"gap-2",children:e.jsxs("a",{href:A,target:"_blank",rel:"noopener noreferrer",children:[e.jsx(a.Download,{className:"h-4 w-4"}),f("sign_download_signed","Baixar documento assinado")]})}):B?e.jsxs("div",{className:"text-center space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:f("sign_fetch_failed","Não foi possível obter o documento assinado após 1 minuto.")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:f("sign_email_fallback","O documento será enviado para o seu e-mail assim que estiver disponível.")})]}),e.jsxs(s.Button,{variant:"secondary",className:"gap-2",onClick:H,children:[e.jsx(a.RefreshCw,{className:"h-4 w-4"}),f("sign_try_again","Tentar novamente")]})]}):null]})}),e.jsx(J,{})]}):b?e.jsxs("div",{className:"space-y-4",children:["d4sign"===k?e.jsx(x,{documentKey:b,signerEmail:D?.signer_email||m?.email||"",signerName:m?.name,keySigner:D?.key_signer,environment:S,onSign:M,onError:l}):e.jsx(p,{signerId:b,environment:S,onSign:M,onError:l}),e.jsx(J,{})]}):o&&(y||h)?e.jsx(s.Card,{children:e.jsxs(s.CardContent,{className:"flex items-center justify-center gap-3 py-10",children:[e.jsx(a.Loader2,{className:"h-6 w-6 animate-spin text-primary"}),e.jsx("p",{className:"font-medium",children:f("sign_sending_doc","Enviando documento para assinatura...")})]})}):e.jsxs("div",{className:"space-y-4",children:[e.jsx("input",{ref:U,type:"file",accept:"application/pdf",className:"hidden",onChange:e=>{const n=e.target.files?.[0];n&&"application/pdf"===n.type?z(n):s.toast.error(f("sign_select_pdf","Selecione um arquivo PDF"))}}),y?e.jsx(s.Card,{children:e.jsxs(s.CardContent,{className:"flex items-center justify-center gap-3 py-10",children:[e.jsx(a.Loader2,{className:"h-6 w-6 animate-spin text-primary"}),e.jsx("p",{className:"font-medium",children:f("sign_sending_doc","Enviando documento para assinatura...")})]})}):e.jsx(s.Card,{className:"border-dashed border-2 cursor-pointer hover:bg-muted/50 transition-colors",onClick:()=>U.current?.click(),children:e.jsxs(s.CardContent,{className:"flex flex-col items-center justify-center py-10 gap-3",children:[e.jsx(a.Upload,{className:"h-8 w-8 text-muted-foreground"}),e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"font-medium",children:f("sign_select_pdf","Selecione um arquivo PDF")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:f("sign_click_to_select","Clique para escolher o documento para assinatura")})]})]})}),e.jsx(J,{})]})},exports.SignConfigForm=function({onSaved:t}){const{config:o,isLoading:c,saveConfig:l}=r(),{t:d}=i.useTranslation(),[u,m]=n.useState(""),[g,p]=n.useState("sandbox"),[x,_]=n.useState(!1);return n.useEffect(()=>{!c&&o&&(m(o.api_key),p(o.environment))},[o,c]),c?e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx(a.Loader2,{className:"h-6 w-6 animate-spin text-muted-foreground"})}):e.jsxs("div",{className:"space-y-4",children:[o?e.jsxs("div",{className:"flex items-center gap-2 text-sm text-emerald-600",children:[e.jsx(a.CheckCircle,{className:"h-4 w-4"}),e.jsx("span",{children:d("sign_configured",d("sign_configured_unit"))})]}):e.jsxs("div",{className:"flex items-center gap-2 text-sm text-amber-600",children:[e.jsx(a.AlertCircle,{className:"h-4 w-4"}),e.jsx("span",{children:d("sign_not_configured",d("sign_not_configured_unit"))})]}),e.jsxs(s.Card,{children:[e.jsx(s.CardHeader,{children:e.jsx(s.CardTitle,{className:"text-base",children:d("sign_digital_config")})}),e.jsx(s.CardContent,{children:e.jsxs("form",{onSubmit:async e=>{if(e.preventDefault(),u.trim()){_(!0);try{await l(u.trim(),g),s.toast.success(d("sign_config_saved",d("sign_config_saved_success"))),t?.()}catch(n){s.toast.error(d("sign_config_save_error",d("sign_config_save_err")))}finally{_(!1)}}else s.toast.error(d("sign_api_key_required",d("sign_api_key_info")))},className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(s.Label,{htmlFor:"sign-api-key",children:"API Key"}),e.jsx(s.Input,{id:"sign-api-key",type:"password",placeholder:d("sign_api_key_placeholder",d("sign_api_key_input")),value:u,onChange:e=>m(e.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(s.Label,{children:d("sign_environment","Ambiente")}),e.jsxs(s.Select,{value:g,onValueChange:e=>p(e),children:[e.jsx(s.SelectTrigger,{children:e.jsx(s.SelectValue,{})}),e.jsxs(s.SelectContent,{children:[e.jsx(s.SelectItem,{value:"sandbox",children:"Sandbox (Testes)"}),e.jsx(s.SelectItem,{value:"production",children:"Produção"})]})]})]}),e.jsxs(s.Button,{type:"submit",disabled:x,children:[x&&e.jsx(a.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),o?d("sign_update_config",d("sign_update_config_btn")):d("sign_save_config",d("sign_save_config_btn"))]})]})})]})]})},exports.SignWidget=p,exports.loadClicksignScript=m,exports.signService=d,exports.useSignConfig=r;
1
+ "use strict";var e=require("react/jsx-runtime"),n=require("react"),s=require("forlogic-core"),a=require("lucide-react"),i=require("react-i18next"),t=require("i18next");function r(){const{alias:e}=s.useAuth(),[a,i]=n.useState(null),[t,r]=n.useState(!0);n.useEffect(()=>{if(!e)return void r(!1);let n=!1;return(async()=>{r(!0);try{const a=s.getSupabaseClient(),{data:t,error:r}=await a.schema("common").from("sign_configs").select("*").eq("alias",e).is("deleted_at",null).maybeSingle();n||i(t)}catch(a){n||i(null)}finally{n||r(!1)}})(),()=>{n=!0}},[e]);return{config:a,isLoading:t,saveConfig:n.useCallback(async(n,a)=>{if(!e)throw new Error("Alias not available");const t=s.getSupabaseClient(),{data:r,error:o}=await t.schema("common").from("sign_configs").upsert({alias:e,api_key:n,environment:a,updated_at:(new Date).toISOString()},{onConflict:"alias"}).select().maybeSingle();if(o)throw o;return i(r),r},[e])}}async function o(e,n,a){const i=s.getSupabaseClient(),{data:t,error:r}=await i.functions.invoke(e,{body:{action:n,data:a}});if(r){const n=r.context;if(n&&"function"==typeof n.json){const s=await n.json().catch(()=>null),a=s?.error||s?.message||r.message;throw new Error(a||`Erro na requisição: ${e}`)}throw new Error(r.message||`Erro na requisição: ${e}`)}return t}const c={createEnvelopeWithSigner:async e=>o("d4sign"===e.provider?"d4sign":"clicksign","d4sign"===e.provider?"create_and_send":"create_envelope_with_signer",{content_base64:e.contentBase64,filename:e.filename,signer_email:e.signerEmail,signer_name:e.signerName}),getSignedDocument:async e=>o("d4sign"===e.provider?"d4sign":"clicksign","get_signed_document",{envelope_id:e.envelopeId,document_id:e.documentId})};let l=null;function d(){return window.Clicksign?Promise.resolve():l||(l=new Promise((e,n)=>{const s=document.createElement("script");s.src="https://cdn-public-library.clicksign.com/embedded/embedded.min-2.1.0.js",s.onload=()=>e(),s.onerror=()=>n(new Error("Falha ao carregar script do Clicksign")),document.head.appendChild(s)}),l)}const u="clicksign-container";function m({signerId:s,environment:t="sandbox",onSign:r,onError:o,onClose:c}){const{t:l}=i.useTranslation(),m=n.useRef(null),[g,p]=n.useState(!0),[x,_]=n.useState(null);return n.useEffect(()=>{let e=!1;return m.current&&(m.current.unmount(),m.current=null),_(null),p(!0),d().then(()=>{if(e)return;const n=new window.Clicksign(s);n.endpoint="production"===t?"https://app.clicksign.com":"https://sandbox.clicksign.com",n.origin=window.origin,n.mount(u),n.on("loaded",function(){p(!1)}),n.on("signed",function(){r?.()}),n.on("resized",function(e){const n=e,s=document.getElementById(u);s&&n?.data?.height&&(s.style.height=n.data.height+"px")}),n.on("error",function(e){p(!1),o?.(e instanceof Error?e:new Error(l("sign_widget_error")))}),n.on("closed",function(){c?.()}),m.current=n}).catch(n=>{e||(_("Falha ao carregar o script de assinatura."),p(!1),o?.(n))}),()=>{e=!0,m.current&&(m.current.unmount(),m.current=null)}},[s,t]),e.jsxs("div",{className:"relative h-full",children:[g&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground",children:[e.jsx(a.Loader2,{className:"h-5 w-5 animate-spin"}),e.jsx("span",{className:"text-sm",children:"Carregando documento..."})]})}),x&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsx("p",{className:"text-sm text-destructive",children:x})}),e.jsx("div",{id:u,style:{height:"600px"}})]})}function g({documentKey:i,signerEmail:r,signerName:o,keySigner:c,environment:l,onSign:d,onError:u}){const m=n.useRef(null),[g,p]=n.useState("loading"),[x,_]=n.useState(null),h="production"===l?"https://secure.d4sign.com.br/embed/viewblob":"https://sandbox.d4sign.com.br/embed/viewblob",f=(()=>{const e=new URLSearchParams({email:r,display_name:o||"",disable_preview:"0"});return c&&e.set("key_signer",c),`${h}/${i}?${e.toString()}`})(),v=n.useCallback(e=>"signed"===e.data?(p("ready"),void d?.()):"wrong-data"===e.data?(p("error"),_(t.t("sign_incorrect_data")),void u?.(new Error(t.t("sign_incorrect_data")))):void 0,[d,u]);n.useEffect(()=>(window.addEventListener("message",v,!1),()=>{window.removeEventListener("message",v,!1)}),[v]);const j=n.useCallback(()=>{"loading"===g&&p("ready")},[g]);return"error"===g?e.jsxs(s.Alert,{variant:"danger",className:"my-4",children:[e.jsx(s.AlertTitle,{children:t.t("sign_doc_load_error")}),e.jsx(s.AlertDescription,{children:x||"Ocorreu um erro inesperado ao carregar o documento para assinatura. Tente novamente."})]}):e.jsxs("div",{className:"relative h-full",children:["loading"===g&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground",children:[e.jsx(a.Loader2,{className:"h-5 w-5 animate-spin"}),e.jsx("span",{className:"text-sm",children:"Carregando documento..."})]})}),e.jsx("iframe",{ref:m,id:"d4sign-container",src:f,width:"100%",style:{height:"600px",border:0},allow:"geolocation",onLoad:j})]})}exports.D4SignWidget=g,exports.DocumentSigner=function({file:o,onDocumentSigned:l,onError:d,showEventLog:u=!1}){const{user:p,alias:x}=s.useAuth(),{config:_,isLoading:h}=r(),{t:f}=i.useTranslation(),[v,j]=n.useState(null),[y,w]=n.useState(!1),[b,N]=n.useState(null),[S,C]=n.useState("sandbox"),[k,E]=n.useState("clicksign"),[D,L]=n.useState(null),[A,q]=n.useState(null),[T,$]=n.useState(!1),[I,P]=n.useState(0),[R,B]=n.useState(!1),[F,O]=n.useState([]),W=n.useRef(null),H=n.useRef(null),K=n.useCallback(e=>{u&&O(n=>[...n,`[${(new Date).toLocaleTimeString()}] ${e}`])},[u]),U=n.useCallback(async e=>{if(j(e),N(null),L(null),q(null),K(`Arquivo selecionado: ${e.name}`),x&&p){w(!0);try{const n=_?.provider??"clicksign";E(n),K(`Provedor resolvido: ${n}`);const a=new FileReader,i=await new Promise((n,s)=>{a.onload=()=>{const e=a.result;n(e)},a.onerror=s,a.readAsDataURL(e)});K(`Criando envelope para assinatura via ${n}...`);const r=await c.createEnvelopeWithSigner({alias:x,contentBase64:i,filename:e.name,signerEmail:p.email||"",signerName:p.name||"",provider:n});K(`Envelope criado: ${r.envelope_id}`),L({envelope_id:r.envelope_id,document_id:r.document_id,signer_email:r.signer_email,key_signer:r.signer_id}),C(r.environment),E(r.provider||n),"d4sign"===n?(K("Documento enviado para D4Sign. Abrindo widget de assinatura..."),await new Promise(e=>setTimeout(e,2e3)),N(r.document_id),s.toast.success(f("sign_doc_sent","Documento enviado! Assine abaixo."))):r.signer_id?(K(`Signer ID obtido: ${r.signer_id}. Aguardando processamento (3s)...`),await new Promise(e=>setTimeout(e,3e3)),N(r.signer_id),s.toast.success(f("sign_doc_sent","Documento enviado! Assine abaixo."))):(K(t.t("sign_signer_unavailable")),s.toast.error(f("sign_access_error","Não foi possível obter o acesso para assinatura. Tente novamente.")),d?.(new Error(f("sign_signer_unavailable"))))}catch(n){const e=n instanceof Error?n:new Error(f("sign_process_error",f("sign_doc_process_error"))),a=e.message||"";a.includes("MONTHLY_LIMIT_REACHED")?(K(t.t("sign_monthly_limit")),s.toast.error(f("sign_monthly_limit","Limite mensal de assinaturas atingido. Entre em contato com o administrador para ampliar seu plano."))):(K(`Erro: ${a}`),s.toast.error(a)),d?.(e)}finally{w(!1)}}},[x,p,K,d,_]);n.useEffect(()=>{o&&x&&p&&!h&&o!==H.current&&(H.current=o,U(o))},[o,x,p,h,U]);const z=n.useCallback(async()=>{if(!D||!x)return;$(!0),P(0),B(!1),K("Buscando documento assinado...");for(let n=1;n<=6;n++){P(n),K(`Tentativa ${n}/6...`);try{const e=await c.getSignedDocument({alias:x,envelopeId:D.envelope_id,documentId:D.document_id,provider:k});if(e.download_url)return K(t.t("sign_doc_available")),q(e.download_url),void $(!1)}catch(e){K(`Erro na tentativa ${n}: ${e instanceof Error?e.message:f("unknown_error")}`)}n<6&&(K("Aguardando 10 segundos para próxima tentativa..."),await new Promise(e=>setTimeout(e,1e4)))}K(t.t("sign_fetch_failed")),$(!1),B(!0)},[D,x,K,k]),M=n.useCallback(async()=>{K("Documento assinado com sucesso!"),s.toast.success(f("sign_signed_success","Documento assinado com sucesso!")),N(null),D&&x&&(l?.({success:!0,provider:k,envelope_id:D.envelope_id,document_id:D.document_id,signer_id:b||"",environment:S}),await z())},[K,l,D,b,x,S,k,z]);if(!x)return e.jsx(s.Card,{className:"border-amber-200 bg-amber-50",children:e.jsx(s.CardContent,{className:"flex items-start gap-3 py-6",children:e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-amber-800",children:f("sign_auth_required","Autenticação necessária")}),e.jsx("p",{className:"text-sm text-amber-700 mt-1",children:f("sign_login_required","Faça login para utilizar a assinatura digital.")})]})})});const V="d4sign"===k?"D4Sign":"Clicksign",Y=()=>u&&F.length>0?e.jsx("div",{className:"bg-muted p-3 rounded-md text-xs font-mono space-y-1 max-h-40 overflow-auto",children:F.map((n,s)=>e.jsx("div",{children:n},s))}):null;return D&&!b&&(A||T||R)?e.jsxs("div",{className:"space-y-4",children:[e.jsx(s.Card,{className:"border-green-200 bg-green-50",children:e.jsxs(s.CardContent,{className:"flex flex-col items-center gap-4 py-8",children:[e.jsx(a.CheckCircle2,{className:"h-12 w-12 text-green-600"}),e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"text-lg font-semibold text-green-800",children:f("sign_signed_success","Documento assinado com sucesso!")}),e.jsx("p",{className:"text-sm text-green-700 mt-1",children:v?.name})]}),T?e.jsxs("div",{className:"flex flex-col items-center gap-2 text-sm text-muted-foreground",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(a.Loader2,{className:"h-4 w-4 animate-spin"}),f("sign_preparing_doc","Preparando documento assinado...")," (",f("sign_attempt","tentativa")," ",I,"/6)"]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:f("sign_waiting_provider",`Aguardando processamento pelo ${V}...`)})]}):A?e.jsx(s.Button,{asChild:!0,variant:"default",className:"gap-2",children:e.jsxs("a",{href:A,target:"_blank",rel:"noopener noreferrer",children:[e.jsx(a.Download,{className:"h-4 w-4"}),f("sign_download_signed","Baixar documento assinado")]})}):R?e.jsxs("div",{className:"text-center space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:f("sign_fetch_failed","Não foi possível obter o documento assinado após 1 minuto.")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:f("sign_email_fallback","O documento será enviado para o seu e-mail assim que estiver disponível.")})]}),e.jsxs(s.Button,{variant:"secondary",className:"gap-2",onClick:z,children:[e.jsx(a.RefreshCw,{className:"h-4 w-4"}),f("sign_try_again","Tentar novamente")]})]}):null]})}),e.jsx(Y,{})]}):b?e.jsxs("div",{className:"space-y-4",children:["d4sign"===k?e.jsx(g,{documentKey:b,signerEmail:D?.signer_email||p?.email||"",signerName:p?.name,keySigner:D?.key_signer,environment:S,onSign:M,onError:d}):e.jsx(m,{signerId:b,environment:S,onSign:M,onError:d}),e.jsx(Y,{})]}):o&&(y||h)?e.jsx(s.Card,{children:e.jsxs(s.CardContent,{className:"flex items-center justify-center gap-3 py-10",children:[e.jsx(a.Loader2,{className:"h-6 w-6 animate-spin text-primary"}),e.jsx("p",{className:"font-medium",children:f("sign_sending_doc","Enviando documento para assinatura...")})]})}):e.jsxs("div",{className:"space-y-4",children:[e.jsx("input",{ref:W,type:"file",accept:"application/pdf",className:"hidden",onChange:e=>{const n=e.target.files?.[0];n&&"application/pdf"===n.type?U(n):s.toast.error(f("sign_select_pdf","Selecione um arquivo PDF"))}}),y?e.jsx(s.Card,{children:e.jsxs(s.CardContent,{className:"flex items-center justify-center gap-3 py-10",children:[e.jsx(a.Loader2,{className:"h-6 w-6 animate-spin text-primary"}),e.jsx("p",{className:"font-medium",children:f("sign_sending_doc","Enviando documento para assinatura...")})]})}):e.jsx(s.Card,{className:"border-dashed border-2 cursor-pointer hover:bg-muted/50 transition-colors",onClick:()=>W.current?.click(),children:e.jsxs(s.CardContent,{className:"flex flex-col items-center justify-center py-10 gap-3",children:[e.jsx(a.Upload,{className:"h-8 w-8 text-muted-foreground"}),e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"font-medium",children:f("sign_select_pdf","Selecione um arquivo PDF")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:f("sign_click_to_select","Clique para escolher o documento para assinatura")})]})]})}),e.jsx(Y,{})]})},exports.SignConfigForm=function({onSaved:t}){const{config:o,isLoading:c,saveConfig:l}=r(),{t:d}=i.useTranslation(),[u,m]=n.useState(""),[g,p]=n.useState("sandbox"),[x,_]=n.useState(!1);return n.useEffect(()=>{!c&&o&&(m(o.api_key),p(o.environment))},[o,c]),c?e.jsx("div",{className:"flex items-center justify-center py-8",children:e.jsx(a.Loader2,{className:"h-6 w-6 animate-spin text-muted-foreground"})}):e.jsxs("div",{className:"space-y-4",children:[o?e.jsxs("div",{className:"flex items-center gap-2 text-sm text-emerald-600",children:[e.jsx(a.CheckCircle,{className:"h-4 w-4"}),e.jsx("span",{children:d("sign_configured",d("sign_configured_unit"))})]}):e.jsxs("div",{className:"flex items-center gap-2 text-sm text-amber-600",children:[e.jsx(a.AlertCircle,{className:"h-4 w-4"}),e.jsx("span",{children:d("sign_not_configured",d("sign_not_configured_unit"))})]}),e.jsxs(s.Card,{children:[e.jsx(s.CardHeader,{children:e.jsx(s.CardTitle,{className:"text-base",children:d("sign_digital_config")})}),e.jsx(s.CardContent,{children:e.jsxs("form",{onSubmit:async e=>{if(e.preventDefault(),u.trim()){_(!0);try{await l(u.trim(),g),s.toast.success(d("sign_config_saved",d("sign_config_saved_success"))),t?.()}catch(n){s.toast.error(d("sign_config_save_error",d("sign_config_save_err")))}finally{_(!1)}}else s.toast.error(d("sign_api_key_required",d("sign_api_key_info")))},className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(s.Label,{htmlFor:"sign-api-key",children:"API Key"}),e.jsx(s.Input,{id:"sign-api-key",type:"password",placeholder:d("sign_api_key_placeholder",d("sign_api_key_input")),value:u,onChange:e=>m(e.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(s.Label,{children:d("sign_environment","Ambiente")}),e.jsxs(s.Select,{value:g,onValueChange:e=>p(e),children:[e.jsx(s.SelectTrigger,{children:e.jsx(s.SelectValue,{})}),e.jsxs(s.SelectContent,{children:[e.jsx(s.SelectItem,{value:"sandbox",children:"Sandbox (Testes)"}),e.jsx(s.SelectItem,{value:"production",children:"Produção"})]})]})]}),e.jsxs(s.Button,{type:"submit",disabled:x,children:[x&&e.jsx(a.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),o?d("sign_update_config",d("sign_update_config_btn")):d("sign_save_config",d("sign_save_config_btn"))]})]})})]})]})},exports.SignWidget=m,exports.loadClicksignScript=d,exports.signService=c,exports.useSignConfig=r;