directus-brazilian-standards
Version:
Complete Brazilian formatting extensions for Directus - Currency (BRL), Postal Codes (CEP), Tax IDs (CPF/CNPJ), and Phone Numbers with interfaces and displays
2 lines (1 loc) • 37.4 kB
JavaScript
import{defineInterface as e,defineDisplay as a}from"@directus/extensions-sdk";import{defineComponent as n,ref as t,computed as l,watch as o,resolveComponent as r,openBlock as i,createElementBlock as d,Fragment as u,createVNode as s,normalizeClass as c,createSlots as p,withCtx as f,createElementVNode as v,toDisplayString as m,createCommentVNode as h,nextTick as g,inject as y,resolveDirective as b,withDirectives as _,createBlock as $,createTextVNode as w}from"vue";const k=e=>e?String(e).replace(/\D/g,""):"",X=e=>{if(!e)return"";const a=k(e);return a.length<=5?a:a.replace(/(\d{5})(\d{1,3})/,"$1-$2")},C=e=>{if(!e)return!1;const a=k(e);return 8===a.length&&/^\d{8}$/.test(a)};function P(e){if(!e)return"";const a=e.replace(/\D/g,"");return 0===a.length?"":a.length<=3?a:a.length<=6?a.replace(/(\d{3})(\d{1,3})/,"$1.$2"):a.length<=9?a.replace(/(\d{3})(\d{3})(\d{1,3})/,"$1.$2.$3"):a.slice(0,11).replace(/(\d{3})(\d{3})(\d{3})(\d{1,2})/,"$1.$2.$3-$4")}function x(e){return e?e.replace(/\D/g,""):""}function D(e){if(!e)return"";const a=e.replace(/\D/g,"");return 0===a.length?"":a.length<=2?a:a.length<=5?a.replace(/(\d{2})(\d{1,3})/,"$1.$2"):a.length<=8?a.replace(/(\d{2})(\d{3})(\d{1,3})/,"$1.$2.$3"):a.length<=12?a.replace(/(\d{2})(\d{3})(\d{3})(\d{1,4})/,"$1.$2.$3/$4"):a.slice(0,14).replace(/(\d{2})(\d{3})(\d{3})(\d{4})(\d{1,2})/,"$1.$2.$3/$4-$5")}function E(e){if(!e)return!1;const a=e.replace(/\D/g,"");if(14!==a.length||/^(\d)\1{13}$/.test(a))return!1;let n=a.length-2,t=a.substring(0,n);const l=a.substring(n);let o=0,r=n-7;for(let e=n;e>=1;e--)o+=parseInt(t.charAt(n-e))*r--,r<2&&(r=9);let i=o%11<2?0:11-o%11;if(i!==parseInt(l.charAt(0)))return!1;n+=1,t=a.substring(0,n),o=0,r=n-7;for(let e=n;e>=1;e--)o+=parseInt(t.charAt(n-e))*r--,r<2&&(r=9);return i=o%11<2?0:11-o%11,i===parseInt(l.charAt(1))}function B(e){return e?e.replace(/\D/g,""):""}function I(e){if(!e)return"";const a=e.replace(/\D/g,"");return 0===a.length?"":a.length<=2?`(${a}`:a.length<=6?a.replace(/(\d{2})(\d{1,4})/,"($1) $2"):a.length<=10?a.replace(/(\d{2})(\d{4})(\d{1,4})/,"($1) $2-$3"):a.slice(0,11).replace(/(\d{2})(\d{5})(\d{1,4})/,"($1) $2-$3")}function A(e){return e?e.replace(/\D/g,""):""}function F(e,a){return a.split(".").reduce(((e,a)=>e?.[a]),e)}function V(e,a){const n={};for(const[t,l]of Object.entries(a))try{let a;a=l.includes("+")?z(e,l):F(e,l),"string"==typeof a&&a.trim()&&(a=j(a)),null!=a&&""!==a?(n[t]=a,console.log(`✅ Mapped field: ${t} = ${a}`)):console.log(`⚠️ Empty/null value for field: ${t} (from ${l})`)}catch(e){console.error(`❌ Error mapping field ${t}:`,e)}return n}function z(e,a){return a.split("+").map((e=>e.trim())).map((a=>{const n=a.replace(/^['\"]|['\"]$/g,"");if(a.startsWith('"')||a.startsWith("'"))return n;const t=F(e,n);return"string"==typeof t&&t.trim()?j(t):t||""})).filter((e=>""!==e)).join("")}function j(e){if(!e)return"";const a=String(e).trim(),n=(a.match(/[A-ZÁÀÂÃÉÈÊÍÌÎÓÒÔÕÚÙÛÇ]/g)||[]).length,t=(a.match(/[A-Za-záàâãéèêíìîóòôõúùûç]/g)||[]).length;return t>0&&n/t>.7?function(e){if(!e)return"";const a=["a","as","o","os","e","de","da","das","do","dos","em","na","nas","no","nos","para","por","com","sem","sob","sobre","entre","até","desde","durante","contra"];return e.toLowerCase().split(" ").map(((e,n)=>0===n?e.charAt(0).toUpperCase()+e.slice(1):a.includes(e.toLowerCase())?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1))).join(" ")}(a):a}const S={key:0,class:"error-message"};var O=n({__name:"interface",props:{value:{default:null},placeholder:{default:"R$ 0,00"},disabled:{type:Boolean,default:!1},minValue:{default:void 0},maxValue:{default:void 0}},emits:["input"],setup(e,{emit:a}){const n=e=>new Intl.NumberFormat("pt-BR",{style:"currency",currency:"BRL",minimumFractionDigits:2,maximumFractionDigits:2}).format(e),y=e,b=a,_=t(!1),$=t(""),w=t(!1),k=t(""),X=l((()=>_.value?$.value:null!==y.value&&void 0!==y.value?n(y.value):"")),C=e=>(w.value=!1,k.value="",void 0!==y.minValue&&e<y.minValue?(w.value=!0,k.value=`Valor mínimo: ${n(y.minValue)}`,!1):!(void 0!==y.maxValue&&e>y.maxValue)||(w.value=!0,k.value=`Valor máximo: ${n(y.maxValue)}`,!1)),P=e=>{const a=function(e){const a=e.replace(/\D/g,"");if(!a)return"";const n=parseInt(a)/100;return new Intl.NumberFormat("pt-BR",{style:"currency",currency:"BRL",minimumFractionDigits:2,maximumFractionDigits:2}).format(n)}(e.replace(/\D/g,""));$.value=a;const n=function(e){const a=e.replace(/[^\d]/g,"");return a?parseFloat(a)/100:0}(a);n>0?C(n):(w.value=!1,k.value=""),b("input",n||null)},x=()=>{_.value=!0,null!==y.value&&void 0!==y.value?$.value=n(y.value):$.value=""},D=()=>{_.value=!1,null!==y.value&&void 0!==y.value&&C(y.value),g((()=>{$.value=""}))},E=e=>{-1!==[8,9,27,13,46].indexOf(e.keyCode)||65===e.keyCode&&!0===e.ctrlKey||67===e.keyCode&&!0===e.ctrlKey||86===e.keyCode&&!0===e.ctrlKey||88===e.keyCode&&!0===e.ctrlKey||(e.shiftKey||e.keyCode<48||e.keyCode>57)&&(e.keyCode<96||e.keyCode>105)&&e.preventDefault()};return o((()=>y.value),(e=>{_.value||null==e||C(e)})),(e,a)=>{const n=r("v-icon"),t=r("v-input");return i(),d(u,null,[s(t,{"model-value":X.value,placeholder:y.placeholder,disabled:y.disabled,class:c({"has-error":w.value}),"onUpdate:modelValue":P,onFocus:x,onBlur:D,onKeydown:E},p({prepend:f((()=>[a[0]||(a[0]=v("span",{class:"currency-symbol"},"R$",-1))])),_:2},[w.value?{name:"append",fn:f((()=>[s(n,{name:"error",class:"error-icon"})])),key:"0"}:void 0]),1032,["model-value","placeholder","disabled","class"]),w.value?(i(),d("div",S,m(k.value),1)):h("v-if",!0)],64)}}}),q=[],N=[];function R(e,a){if(e&&"undefined"!=typeof document){var n,t=!0===a.prepend?"prepend":"append",l=!0===a.singleTag,o="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(l){var r=q.indexOf(o);-1===r&&(r=q.push(o)-1,N[r]={}),n=N[r]&&N[r][t]?N[r][t]:N[r][t]=i()}else n=i();65279===e.charCodeAt(0)&&(e=e.substring(1)),n.styleSheet?n.styleSheet.cssText+=e:n.appendChild(document.createTextNode(e))}function i(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var n=Object.keys(a.attributes),l=0;l<n.length;l++)e.setAttribute(n[l],a.attributes[n[l]]);var r="prepend"===t?"afterbegin":"beforeend";return o.insertAdjacentElement(r,e),e}}R("\n.has-error[data-v-b33ef759] {\n\tborder-color: var(--danger) !important;\n}\n.currency-symbol[data-v-b33ef759] {\n\tfont-weight: 500;\n\tcolor: var(--foreground-subdued);\n}\n.error-icon[data-v-b33ef759] {\n\tcolor: var(--danger);\n}\n.success-icon[data-v-b33ef759] {\n\tcolor: var(--success);\n}\n.error-message[data-v-b33ef759],\n.success-message[data-v-b33ef759] {\n\tfont-size: 12px;\n\tmargin-top: 4px;\n}\n",{});var K=(e,a)=>{const n=e.__vccOpts||e;for(const[e,t]of a)n[e]=t;return n},M=e({id:"brazilian-currency",name:"Brazilian Currency",description:"With formatting (R$ 1.234,56)",icon:"attach_money",component:K(O,[["__scopeId","data-v-b33ef759"],["__file","interface.vue"]]),types:["decimal","float","integer"],group:"standard",options:[{field:"placeholder",name:"Placeholder",type:"string",meta:{width:"half",interface:"input"},schema:{default_value:"R$ 0,00"}},{field:"disabled",name:"Disabled",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!1}},{field:"min_value",name:"Minimum Value",type:"decimal",meta:{width:"half",interface:"input",note:"Minimum allowed value in BRL"}},{field:"max_value",name:"Maximum Value",type:"decimal",meta:{width:"half",interface:"input",note:"Maximum allowed value in BRL"}}]}),J=n({__name:"display",props:{value:{default:null},showSymbol:{type:Boolean,default:!0},precision:{default:2}},setup(e){const a=e,n=l((()=>null!==a.value&&void 0!==a.value&&!isNaN(a.value))),t=l((()=>{if(!n.value)return a.showSymbol?"R$ --":"--";return new Intl.NumberFormat("pt-BR",{style:a.showSymbol?"currency":"decimal",currency:"BRL",minimumFractionDigits:a.precision,maximumFractionDigits:a.precision}).format(a.value)}));return(e,a)=>(i(),d("span",{class:c({"currency-value":!0,"no-value":!n.value})},m(t.value),3))}});R("\n.currency-value[data-v-6a1ded98] {\n\tfont-family: var(--theme--fonts--monospace--font-family);\n\tfont-weight: 500;\n\tcolor: var(--foreground-normal);\n}\n.currency-value.no-value[data-v-6a1ded98] {\n\tcolor: var(--foreground-subdued);\n\tfont-style: italic;\n}\n",{});var T=a({id:"brazilian-currency-display",name:"Brazilian Currency (BRL)",description:"Display currency values in Brazilian Real format (R$ 1.234,56)",icon:"attach_money",component:K(J,[["__scopeId","data-v-6a1ded98"],["__file","display.vue"]]),types:["decimal","float","integer"],group:"standard",options:[{field:"show_symbol",name:"Show Currency Symbol",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!0}},{field:"precision",name:"Decimal Places",type:"integer",meta:{width:"half",interface:"input",note:"Number of decimal places to display"},schema:{default_value:2}}]});const L={class:"brazilian-cep-interface"},U={class:"cep-input-wrapper"},W={key:1,class:"error-message"};var Z=n({__name:"interface",props:{value:{},placeholder:{default:"XXXXX-XXX"},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},validate_cep:{type:Boolean,default:!0},enable_api_lookup:{type:Boolean,default:!1},auto_fill_mapping:{default:"{}"}},emits:["input"],setup(e,{emit:a}){const n=e,u=a,p=y("values",t({})),g=y("fieldsStore",null),w=y("primaryKey",t("+")),P=y("collection",t(null)),x=y("updateValues",null),D=t(!1),E=t(""),B=t(!1),I=t(null),A=l((()=>n.value?X(n.value):"")),F=l((()=>n.enable_api_lookup)),z=l((()=>{try{return"string"==typeof n.auto_fill_mapping?JSON.parse(n.auto_fill_mapping||"{}"):n.auto_fill_mapping||{}}catch{return{}}})),j=e=>{const a=k(e).slice(0,8);u("input",a),D.value=!1,E.value="",I.value=null,a&&8===a.length?B.value=C(a):B.value=!1},S=e=>{e.preventDefault();const a=e.clipboardData?.getData("text")||"",n=k(a),t=n.slice(0,8);j(t),console.log("CEP Paste:",{original:a,cleaned:n,limited:t,formatted:X(t)})},O=()=>{if(!n.validate_cep)return;const e=k(n.value||"");if(e){if(8!==e.length)return D.value=!0,E.value="CEP deve ter 8 dígitos",void(B.value=!1);if(!C(e))return D.value=!0,E.value="CEP inválido",void(B.value=!1);D.value=!1,E.value="",B.value=!0}},q=e=>{console.log("📡 Starting field updates simulation...",e),Object.entries(e).forEach((([a,n])=>{setTimeout((()=>{try{const e=[`input[name="${a}"]`,`[data-field="${a}"] input`,`[data-field="${a}"] .v-input input`,`.field-${a} input`,`#field-${a}`];let t=null;for(const a of e)if(t=document.querySelector(a),t)break;if(t){console.log(`🎯 Found field ${a}, updating...`),t.value="",t.value=String(n);["input","change","blur"].forEach((e=>{const a=new Event(e,{bubbles:!0});t.dispatchEvent(a)}));const e=new CustomEvent("update:modelValue",{detail:n,bubbles:!0});t.dispatchEvent(e),console.log(`✅ Field ${a} updated via DOM:`,n)}else console.warn(`❌ Could not find input for field: ${a}`),p&&p.value&&(p.value[a]=n,console.log(`🔄 Fallback: set ${a} via values context`))}catch(e){console.error(`❌ Error updating field ${a}:`,e)}}),100*Object.keys(e).indexOf(a))}))},N=async()=>{if(!F.value||!n.value)return;const e=k(n.value);if(e&&8===e.length&&C(e)){I.value={type:"loading",icon:"refresh",message:"Consultando endereço..."};try{const a=await async function(e){try{const a=k(e);if(!a||8!==a.length)throw new Error("CEP deve ter 8 dígitos");console.log("🔍 Looking up CEP:",a);const n=await fetch(`https://viacep.com.br/ws/${a}/json/`);if(!n.ok)throw new Error(`API Error: ${n.status}`);const t=await n.json();if(t.erro)throw new Error("CEP não encontrado");return console.log("✅ CEP data received:",t),t}catch(e){throw console.error("❌ CEP lookup error:",e),e}}(e);if(a){const e=V(a,z.value);console.log("🔍 CEP Debug Info:",{apiResponse:a,fieldMapping:z.value,mappedFields:e,valuesContext:p.value,updateValuesAvailable:!!x,fieldsStoreAvailable:!!g,collection:P?.value,primaryKey:w?.value});let n=0;try{x&&"function"==typeof x?(console.log("🎯 Using updateValues function..."),x(e),n=Object.keys(e).length,console.log("✅ Fields updated via updateValues:",e)):p.value&&(console.log("🎯 Fallback: updating values context..."),Object.entries(e).forEach((([e,a])=>{p.value[e]=a,n++,console.log(`✅ Field ${e} set:`,a)}))),q(e),I.value={type:"success",icon:"check",message:`✅ ${a.logradouro}, ${a.localidade} - ${n} campos encontrados`}}catch(n){console.error("❌ Error updating fields:",n),I.value={type:"success",icon:"info",message:`✅ Dados obtidos: ${a.logradouro}, ${a.localidade}. Verifique se os campos foram preenchidos.`},q(e)}setTimeout((()=>{I.value=null}),5e3)}}catch(e){console.error("❌ CEP API Error:",e),I.value={type:"error",icon:"warning",message:e instanceof Error?e.message:"Erro na consulta da API"},setTimeout((()=>{I.value=null}),5e3)}}};return o((()=>n.value),O),(e,a)=>{const n=r("v-input"),t=r("v-icon"),l=r("v-button"),o=b("tooltip");return i(),d("div",L,[v("div",U,[s(n,{"model-value":A.value,placeholder:e.placeholder||"XXXXX-XXX",disabled:e.disabled,required:e.required,class:c({"has-error":D.value}),"onUpdate:modelValue":j,onBlur:O,onPaste:S},null,8,["model-value","placeholder","disabled","required","class"]),h(" Search Button (only shown when API lookup is enabled) "),F.value&&A.value&&A.value.length>=9?_((i(),$(l,{key:0,class:"search-button",icon:"",secondary:"",loading:"loading"===I.value?.type,disabled:D.value||!B.value,onClick:N},{default:f((()=>[s(t,{name:"search"})])),_:1},8,["loading","disabled"])),[[o,"Consultar endereço"]]):h("v-if",!0)]),h(" API Lookup Status "),F.value&&I.value?(i(),d("div",{key:0,class:c(["api-status",I.value.type])},[s(t,{name:I.value.icon,small:""},null,8,["name"]),v("span",null,m(I.value.message),1)],2)):h("v-if",!0),h(" Validation Error "),D.value?(i(),d("div",W,[s(t,{name:"warning",small:""}),v("span",null,m(E.value),1)])):h("v-if",!0)])}}});R("\n.brazilian-cep-interface[data-v-7acdf367] {\n\tposition: relative;\n}\n.cep-input-wrapper[data-v-7acdf367] {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n}\n.cep-input-wrapper[data-v-7acdf367] .v-input {\n\tflex: 1;\n}\n.search-button[data-v-7acdf367] {\n\tflex-shrink: 0;\n\t--v-button-width: 44px;\n\t--v-button-height: 44px;\n}\n.search-button[data-v-7acdf367]:not(.loading):hover {\n\t--v-button-background-color: var(--primary);\n\t--v-button-color: var(--primary-foreground);\n}\n.has-error[data-v-7acdf367] .v-input input {\n\tborder-color: var(--danger) !important;\n}\n.loading-message[data-v-7acdf367],\n.success-message[data-v-7acdf367],\n.error-message[data-v-7acdf367] {\n\tfont-size: 12px;\n\tmargin-top: 4px;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 4px;\n}\n.spin[data-v-7acdf367] {\n\tanimation: spin-7acdf367 1s linear infinite;\n}\n@keyframes spin-7acdf367 {\nfrom { transform: rotate(0deg);\n}\nto { transform: rotate(360deg);\n}\n}\n",{});var G=e({id:"brazilian-cep",name:"Brazilian CEP",description:"With formatting, optional API lookup and field mapping",icon:"location_on",component:K(Z,[["__scopeId","data-v-7acdf367"],["__file","interface.vue"]]),types:["string"],group:"standard",options:[{field:"placeholder",name:"Placeholder",type:"string",meta:{width:"half",interface:"input"},schema:{default_value:"12.345-678"}},{field:"disabled",name:"Disabled",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!1}},{field:"required",name:"Required",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!1}},{field:"validate_cep",name:"Validate CEP Format",type:"boolean",meta:{width:"half",interface:"boolean",note:"Válido formato do CEP (8 dígitos)"},schema:{default_value:!0}},{field:"enable_api_lookup",name:"Enable API Lookup",type:"boolean",meta:{width:"half",interface:"boolean",note:"Busca automática de endereço via ViaCEP"},schema:{default_value:!1}},{field:"auto_fill_mapping",name:"Auto-fill Field Mapping",type:"json",meta:{width:"full",interface:"input-code",options:{language:"json",template:JSON.stringify({address:"logradouro + ', ' + complemento + ' ' + bairro",city:"localidade",state:"uf",neighborhood:"bairro",street:"logradouro",complement:"complemento"},null,2)},note:'Mapeamento de campos: {"campo_formulario": "campo_api"}'}}]}),H=n({__name:"display",props:{value:{default:null},showPlaceholder:{type:Boolean,default:!0}},setup(e){const a=e,n=l((()=>a.value&&a.value.trim().length>0)),t=l((()=>n.value?(e=>{const a=e.replace(/\D/g,"");return 0===a.length?"":a.length<=2?a:a.length<=5?a.replace(/(\d{2})(\d{1,3})/,"$1.$2"):a.slice(0,8).replace(/(\d{2})(\d{3})(\d{1,3})/,"$1.$2-$3")})(a.value):a.showPlaceholder?"---.---":""));return(e,a)=>(i(),d("span",{class:c({"cep-value":!0,"no-value":!n.value})},m(t.value),3))}});R("\n.cep-value[data-v-fe02d74e] {\n\tfont-family: var(--family-sans-serif);\n\tcolor: var(--foreground-normal);\n}\n.cep-value.no-value[data-v-fe02d74e] {\n\tcolor: var(--foreground-subdued);\n\tfont-style: italic;\n}\n",{});var Q=a({id:"brazilian-cep-display",name:"Brazilian CEP",description:"Display postal codes in Brazilian format (12.345-678)",icon:"location_on",component:K(H,[["__scopeId","data-v-fe02d74e"],["__file","display.vue"]]),types:["string"],group:"standard",options:[{field:"show_placeholder",name:"Show Placeholder for Empty",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!0}}]});const Y={key:0,class:"error-message"},ee={key:1,class:"success-message"};var ae=n({__name:"interface",props:{value:{default:null},placeholder:{default:"123.456.789-01"},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},validateCpf:{type:Boolean,default:!0}},emits:["input"],setup(e,{emit:a}){const n=e,v=a,g=t(!1),y=t(""),b=t(!1),_=l((()=>n.value?P(n.value):"")),$=e=>{if(g.value=!1,y.value="",b.value=!1,!e&&n.required)return g.value=!0,y.value="CPF é obrigatório",!1;if(e&&n.validateCpf){const a=x(e);if(a.length>0&&a.length<11)return g.value=!0,y.value="CPF deve ter 11 dígitos",!1;if(11===a.length){if(/^(\d)\1{10}$/.test(a))return g.value=!0,y.value="CPF inválido",!1;if(!function(e){if(!e)return!1;const a=e.replace(/\D/g,"");if(11!==a.length||/^(\d)\1{10}$/.test(a))return!1;let n=0;for(let e=0;e<9;e++)n+=parseInt(a.charAt(e))*(10-e);let t=11-n%11;t>9&&(t=0),n=0;for(let e=0;e<10;e++)n+=parseInt(a.charAt(e))*(11-e);let l=11-n%11;return l>9&&(l=0),t===parseInt(a.charAt(9))&&l===parseInt(a.charAt(10))}(e))return g.value=!0,y.value="CPF inválido",!1;b.value=!0}}return!0},k=e=>{if(!e||""===e.trim())return v("input",null),g.value=!1,y.value="",void(b.value=!1);const a=P(e),n=x(a);$(a),v("input",n||null)},X=()=>{if(n.value){const e=P(n.value);$(e)}},C=e=>{-1!==[8,9,27,13,46].indexOf(e.keyCode)||!0===e.ctrlKey&&-1!==[65,67,86,88,90].indexOf(e.keyCode)||!0===e.metaKey&&-1!==[65,67,86,88,90].indexOf(e.keyCode)||e.keyCode>=35&&e.keyCode<=40||(e.shiftKey||e.keyCode<48||e.keyCode>57)&&(e.keyCode<96||e.keyCode>105)&&e.preventDefault()};return o((()=>n.value),(e=>{if(e){const a=P(e);$(a)}else g.value=!1,y.value="",b.value=!1})),(e,a)=>{const t=r("v-icon"),l=r("v-input");return i(),d(u,null,[s(l,{"model-value":_.value,placeholder:n.placeholder,disabled:n.disabled,class:c({"has-error":g.value}),"onUpdate:modelValue":k,onBlur:X,onKeydown:C,maxlength:"14"},p({_:2},[g.value?{name:"append",fn:f((()=>[s(t,{name:"error",class:"error-icon"})])),key:"0"}:b.value&&e.value?{name:"append",fn:f((()=>[s(t,{name:"check_circle",class:"success-icon"})])),key:"1"}:void 0]),1032,["model-value","placeholder","disabled","class"]),g.value&&y.value?(i(),d("div",Y,[s(t,{name:"error"}),w(" "+m(y.value),1)])):b.value&&e.value?(i(),d("div",ee," CPF válido ")):h("v-if",!0)],64)}}});R("\n.has-error[data-v-25096888] {\n\tborder-color: var(--danger) !important;\n}\n.error-icon[data-v-25096888] {\n\tcolor: var(--danger);\n}\n.success-icon[data-v-25096888] {\n\tcolor: var(--success);\n}\n.error-message[data-v-25096888],\n.success-message[data-v-25096888] {\n\tfont-size: 12px;\n\tmargin-top: 4px;\n}\n",{});var ne=e({id:"brazilian-cpf",name:"Brazilian CPF",description:"With formatting and validation",icon:"person",component:K(ae,[["__scopeId","data-v-25096888"],["__file","interface.vue"]]),types:["string"],group:"standard",options:[{field:"placeholder",name:"Placeholder",type:"string",meta:{width:"half",interface:"input"},schema:{default_value:"123.456.789-01"}},{field:"disabled",name:"Disabled",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!1}},{field:"required",name:"Required",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!1}},{field:"validate_cpf",name:"Validate CPF Format",type:"boolean",meta:{width:"half",interface:"boolean",note:"Válido formato do CPF (11 dígitos)"},schema:{default_value:!0}}]}),te=n({__name:"display",props:{value:{default:null},showPlaceholder:{type:Boolean,default:!0},maskDigits:{type:Boolean,default:!1}},setup(e){const a=e,n=l((()=>a.value&&a.value.trim().length>0)),t=l((()=>n.value?a.maskDigits?"***.***.**-**":(e=>{const a=e.replace(/\D/g,"");return 0===a.length?"":a.length<=3?a:a.length<=6?a.replace(/(\d{3})(\d{1,3})/,"$1.$2"):a.length<=9?a.replace(/(\d{3})(\d{3})(\d{1,3})/,"$1.$2.$3"):a.slice(0,11).replace(/(\d{3})(\d{3})(\d{3})(\d{1,2})/,"$1.$2.$3-$4")})(a.value):a.showPlaceholder?"***.***.**-**":""));return(e,a)=>(i(),d("span",{class:c({"cpf-value":!0,"no-value":!n.value,masked:e.maskDigits})},m(t.value),3))}});R("\n.cpf-value[data-v-11686bcd] {\n\tfont-family: var(--family-sans-serif);\n\tcolor: var(--foreground-normal);\n}\n.cpf-value.no-value[data-v-11686bcd] {\n\tcolor: var(--foreground-subdued);\n\tfont-style: italic;\n}\n.cpf-value.masked[data-v-11686bcd] {\n\tcolor: var(--foreground-subdued);\n\tfont-weight: bold;\n}\n",{});var le=a({id:"brazilian-cpf-display",name:"Brazilian CPF",description:"Display tax IDs in Brazilian format (123.456.789-01)",icon:"person",component:K(te,[["__scopeId","data-v-11686bcd"],["__file","display.vue"]]),types:["string"],group:"standard",options:[{field:"show_placeholder",name:"Show Placeholder for Empty",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!0}},{field:"mask_digits",name:"Mask Digits for Privacy",type:"boolean",meta:{width:"half",interface:"boolean",note:"Show as ***.***.***-** for privacy"},schema:{default_value:!1}}]});const oe={class:"brazilian-cnpj-interface"},re={class:"cnpj-input-wrapper"},ie={key:1,class:"error-message"};var de=n({__name:"interface",props:{value:{},placeholder:{default:"XX.XXX.XXX/XXXX-XX"},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},validate_cnpj:{type:Boolean,default:!0},enable_api_lookup:{type:Boolean,default:!1},api_token:{default:""},auto_fill_mapping:{default:"{}"}},emits:["input"],setup(e,{emit:a}){const n=e,u=a,p=y("values",t({})),g=y("fieldsStore",null),w=y("primaryKey",t("+")),k=y("collection",t(null)),X=y("updateValues",null),C=t(!1),P=t(""),x=t(!1),I=t(null),A=l((()=>n.value?D(n.value):"")),F=l((()=>n.enable_api_lookup)),z=l((()=>{try{return"string"==typeof n.auto_fill_mapping?JSON.parse(n.auto_fill_mapping||"{}"):n.auto_fill_mapping||{}}catch{return{}}})),j=e=>{const a=B(e).slice(0,14);u("input",a),C.value=!1,P.value="",I.value=null,a&&14===a.length?x.value=E(a):x.value=!1},S=e=>{e.preventDefault();const a=e.clipboardData?.getData("text")||"",n=B(a),t=n.slice(0,14);j(t),console.log("CNPJ Paste:",{original:a,cleaned:n,limited:t,formatted:D(t)})},O=()=>{if(!n.validate_cnpj)return;const e=B(n.value||"");if(e){if(14!==e.length)return C.value=!0,P.value="CNPJ deve ter 14 dígitos",void(x.value=!1);if(!E(e))return C.value=!0,P.value="CNPJ inválido",void(x.value=!1);C.value=!1,P.value="",x.value=!0}},q=e=>{console.log("📡 Starting field updates simulation...",e),console.log("🔍 Available form inputs on page:");document.querySelectorAll("input, select, textarea").forEach(((e,a)=>{console.log(`Input ${a}:`,{type:e.tagName,name:e.getAttribute("name"),id:e.id,class:e.className,value:e.value})})),Object.entries(e).forEach((([a,n])=>{setTimeout((()=>{try{const e=[`input[name="${a}"]`,`[data-field="${a}"] input`,`[data-field="${a}"] .v-input input`,`.field-${a} input`,`#field-${a}`];let t=null;for(const a of e)if(t=document.querySelector(a),t)break;if(t){console.log(`🎯 Found field ${a}, updating...`),t.value="",t.value=String(n);["input","change","blur"].forEach((e=>{const a=new Event(e,{bubbles:!0});t.dispatchEvent(a)}));const e=new CustomEvent("update:modelValue",{detail:n,bubbles:!0});t.dispatchEvent(e),console.log(`✅ Field ${a} updated via DOM:`,n)}else console.warn(`❌ Could not find input for field: ${a}`),p&&p.value&&(p.value[a]=n,console.log(`🔄 Fallback: set ${a} via values context`))}catch(e){console.error(`❌ Error updating field ${a}:`,e)}}),100*Object.keys(e).indexOf(a))}))},N=async()=>{if(!F.value||!n.value)return;const e=B(n.value);if(e&&14===e.length&&E(e)){I.value={type:"loading",icon:"refresh",message:"Consultando dados da empresa..."};try{const a=await async function(e,a){try{const n=B(e);if(!n||14!==n.length)throw new Error("Invalid CNPJ format");const t="https://publica.cnpj.ws/cnpj",l={Accept:"application/json"};a&&(l.Authorization=`Bearer ${a}`);const o=await fetch(`${t}/${n}`,{method:"GET",headers:l});if(!o.ok){if(429===o.status)throw new Error("Rate limit exceeded. Please try again later.");if(404===o.status)throw new Error("CNPJ not found");throw new Error(`API Error: ${o.status}`)}return await o.json()}catch(e){throw console.error("CNPJ API lookup error:",e),e}}(e,n.api_token);if(a){const e=V(a,z.value);console.log("🔍 CNPJ Debug Info:",{apiResponse:a,fieldMapping:z.value,mappedFields:e,valuesContext:p.value,updateValuesAvailable:!!X,fieldsStoreAvailable:!!g,collection:k?.value,primaryKey:w?.value});let n=0;try{X&&"function"==typeof X?(console.log("🎯 Using updateValues function..."),X(e),n=Object.keys(e).length,console.log("✅ Fields updated via updateValues:",e)):p.value&&(console.log("🎯 Fallback: updating values context..."),Object.entries(e).forEach((([e,a])=>{p.value[e]=a,n++,console.log(`✅ Field ${e} set:`,a)}))),console.log("🎯 Attempting DOM field updates..."),q(e),I.value={type:"success",icon:"check",message:`✅ ${a.razao_social} - ${n} campos processados (verifique se foram preenchidos)`}}catch(n){console.error("❌ Error updating fields:",n),I.value={type:"success",icon:"info",message:`✅ Dados obtidos: ${a.razao_social}. Verifique se os campos foram preenchidos.`},q(e)}setTimeout((()=>{I.value=null}),5e3)}}catch(e){console.error("❌ CNPJ API Error:",e),I.value={type:"error",icon:"warning",message:e instanceof Error?e.message:"Erro na consulta da API"},setTimeout((()=>{I.value=null}),5e3)}}};return o((()=>n.value),O),(e,a)=>{const n=r("v-input"),t=r("v-icon"),l=r("v-button"),o=b("tooltip");return i(),d("div",oe,[v("div",re,[s(n,{"model-value":A.value,placeholder:e.placeholder||"XX.XXX.XXX/XXXX-XX",disabled:e.disabled,required:e.required,class:c({"has-error":C.value}),"onUpdate:modelValue":j,onBlur:O,onPaste:S},null,8,["model-value","placeholder","disabled","required","class"]),h(" Search Button (only shown when API lookup is enabled) "),F.value&&A.value&&A.value.length>=18?_((i(),$(l,{key:0,class:"search-button",icon:"",secondary:"",loading:"loading"===I.value?.type,disabled:C.value||!x.value,onClick:N},{default:f((()=>[s(t,{name:"search"})])),_:1},8,["loading","disabled"])),[[o,"Consultar dados da empresa"]]):h("v-if",!0)]),h(" API Lookup Status "),F.value&&I.value?(i(),d("div",{key:0,class:c(["api-status",I.value.type])},[s(t,{name:I.value.icon,small:""},null,8,["name"]),v("span",null,m(I.value.message),1)],2)):h("v-if",!0),h(" Validation Error "),C.value?(i(),d("div",ie,[s(t,{name:"warning",small:""}),v("span",null,m(P.value),1)])):h("v-if",!0)])}}});R("\n.brazilian-cnpj-interface[data-v-e9b9edd9] {\n\tposition: relative;\n}\n.cnpj-input-wrapper[data-v-e9b9edd9] {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n}\n.cnpj-input-wrapper[data-v-e9b9edd9] .v-input {\n\tflex: 1;\n}\n.search-button[data-v-e9b9edd9] {\n\tflex-shrink: 0;\n\t--v-button-width: 44px;\n\t--v-button-height: 44px;\n}\n.search-button[data-v-e9b9edd9]:not(.loading):hover {\n\t--v-button-background-color: var(--primary);\n\t--v-button-color: var(--primary-foreground);\n}\n.has-error[data-v-e9b9edd9] .v-input input {\n\tborder-color: var(--danger) !important;\n}\n.loading-message[data-v-e9b9edd9],\n.success-message[data-v-e9b9edd9],\n.error-message[data-v-e9b9edd9] {\n\tfont-size: 12px;\n\tmargin-top: 4px;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 4px;\n}\n.spin[data-v-e9b9edd9] {\n\tanimation: spin-e9b9edd9 1s linear infinite;\n}\n@keyframes spin-e9b9edd9 {\nfrom { transform: rotate(0deg);\n}\nto { transform: rotate(360deg);\n}\n}\n",{});var ue=e({id:"brazilian-cnpj",name:"Brazilian CNPJ",description:"With formatting, optional API lookup and field mapping",icon:"business",component:K(de,[["__scopeId","data-v-e9b9edd9"],["__file","interface.vue"]]),types:["string"],group:"standard",options:[{field:"placeholder",name:"Placeholder",type:"string",meta:{width:"half",interface:"input"},schema:{default_value:"12.345.678/0001-90"}},{field:"disabled",name:"Disabled",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!1}},{field:"required",name:"Required",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!1}},{field:"validate_cnpj",name:"Validate CNPJ Format",type:"boolean",meta:{width:"half",interface:"boolean",note:"Válido formato do CNPJ (14 dígitos)"},schema:{default_value:!0}},{field:"enable_api_lookup",name:"Enable API Lookup",type:"boolean",meta:{width:"half",interface:"boolean",note:"Busca automática de dados via ReceitaWS"},schema:{default_value:!1}},{field:"api_token",name:"API Token (Optional)",type:"string",meta:{width:"half",interface:"input",note:"Token da API CNPJ.ws (opcional)"}},{field:"auto_fill_mapping",name:"Auto-fill Field Mapping",type:"json",meta:{width:"full",interface:"input-code",options:{language:"json",template:JSON.stringify({company_name:"nome",fantasy_name:"fantasia",email:"email",phone:"telefone",address:"logradouro + ', ' + numero + ' - ' + bairro",city:"municipio",state:"uf",cep:"cep"},null,2)},note:'Mapeamento de campos: {"campo_formulario": "campo_api"}'}}]}),se=n({__name:"display",props:{value:{default:null},showPlaceholder:{type:Boolean,default:!0},maskDigits:{type:Boolean,default:!1}},setup(e){const a=e,n=l((()=>a.value&&a.value.trim().length>0)),t=l((()=>n.value?a.maskDigits?"**_.___.___/****-**":(e=>{const a=e.replace(/\D/g,"");return 0===a.length?"":a.length<=2?a:a.length<=5?a.replace(/(\d{2})(\d{1,3})/,"$1.$2"):a.length<=8?a.replace(/(\d{2})(\d{3})(\d{1,3})/,"$1.$2.$3"):a.length<=12?a.replace(/(\d{2})(\d{3})(\d{3})(\d{1,4})/,"$1.$2.$3/$4"):a.slice(0,14).replace(/(\d{2})(\d{3})(\d{3})(\d{4})(\d{1,2})/,"$1.$2.$3/$4-$5")})(a.value):a.showPlaceholder?"**_.___.___/****-**":""));return(e,a)=>(i(),d("span",{class:c({"cnpj-value":!0,"no-value":!n.value,masked:e.maskDigits})},m(t.value),3))}});R("\n.cnpj-value[data-v-efe13c6f] {\n\tfont-family: var(--family-sans-serif);\n\tcolor: var(--foreground-normal);\n}\n.cnpj-value.no-value[data-v-efe13c6f] {\n\tcolor: var(--foreground-subdued);\n\tfont-style: italic;\n}\n.cnpj-value.masked[data-v-efe13c6f] {\n\tcolor: var(--foreground-subdued);\n\tfont-weight: bold;\n}\n",{});var ce=a({id:"brazilian-cnpj-display",name:"Brazilian CNPJ",description:"Display tax IDs in Brazilian format (XX.XXX.XXX/XXXX-XX)",icon:"business",component:K(se,[["__scopeId","data-v-efe13c6f"],["__file","display.vue"]]),types:["string"],group:"standard",options:[{field:"show_placeholder",name:"Show Placeholder for Empty",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!0}},{field:"mask_digits",name:"Mask Digits for Privacy",type:"boolean",meta:{width:"half",interface:"boolean",note:"Show as **_.___.___/****-** for privacy"},schema:{default_value:!1}}]});const pe={key:0,class:"error-message"},fe={key:1,class:"success-message"};var ve=n({__name:"interface",props:{value:{default:null},placeholder:{default:"(11) 99999-9999"},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},validatePhone:{type:Boolean,default:!0}},emits:["input"],setup(e,{emit:a}){const n=e,v=a,g=t(!1),y=t(""),b=t(!1),_=l((()=>n.value?I(n.value):"")),$=e=>{if(g.value=!1,y.value="",b.value=!1,!e&&n.required)return g.value=!0,y.value="Telefone é obrigatório",!1;if(e&&n.validatePhone){const a=A(e);if(a.length>0&&a.length<10)return g.value=!0,y.value="Telefone deve ter pelo menos 10 dígitos",!1;if(a.length>11)return g.value=!0,y.value="Telefone deve ter no máximo 11 dígitos",!1;if(a.length>=10){if(!function(e){if(!e)return!1;const a=e.replace(/\D/g,"");if(a.length<10||a.length>11)return!1;const n=parseInt(a.substring(0,2));if(![11,12,13,14,15,16,17,18,19,21,22,24,27,28,31,32,33,34,35,37,38,41,42,43,44,45,46,47,48,49,51,53,54,55,61,62,64,63,65,66,67,68,69,71,73,74,75,77,79,81,87,82,83,84,85,88,86,89,91,93,94,92,97,95,96,98,99].includes(n))return!1;if(11===a.length&&9!==parseInt(a.charAt(2)))return!1;if(10===a.length){const e=parseInt(a.charAt(2));if(![2,3,4,5,6,7,8,9].includes(e))return!1}return!0}(e))return g.value=!0,y.value="Formato de telefone inválido",!1;b.value=!0}}return!0},k=e=>{if(!e||""===e.trim())return v("input",null),g.value=!1,y.value="",void(b.value=!1);const a=I(e),n=A(a);$(a),v("input",n||null)},X=()=>{if(n.value){const e=I(n.value);$(e)}},C=e=>{-1!==[8,9,27,13,46].indexOf(e.keyCode)||!0===e.ctrlKey&&-1!==[65,67,86,88,90].indexOf(e.keyCode)||!0===e.metaKey&&-1!==[65,67,86,88,90].indexOf(e.keyCode)||e.keyCode>=35&&e.keyCode<=40||(e.shiftKey||e.keyCode<48||e.keyCode>57)&&(e.keyCode<96||e.keyCode>105)&&e.preventDefault()};return o((()=>n.value),(e=>{if(e){const a=I(e);$(a)}else g.value=!1,y.value="",b.value=!1})),(e,a)=>{const t=r("v-icon"),l=r("v-input");return i(),d(u,null,[s(l,{"model-value":_.value,placeholder:n.placeholder,disabled:n.disabled,class:c({"has-error":g.value}),"onUpdate:modelValue":k,onBlur:X,onKeydown:C,maxlength:"15"},p({_:2},[g.value?{name:"append",fn:f((()=>[s(t,{name:"error",class:"error-icon"})])),key:"0"}:b.value&&e.value?{name:"append",fn:f((()=>[s(t,{name:"check_circle",class:"success-icon"})])),key:"1"}:void 0]),1032,["model-value","placeholder","disabled","class"]),h(" Validation Messages "),g.value&&y.value?(i(),d("div",pe,[s(t,{name:"error"}),w(" "+m(y.value),1)])):b.value&&e.value?(i(),d("div",fe," Telefone válido ")):h("v-if",!0)],64)}}});R("\n.has-error[data-v-1bf27b3a] {\n\tborder-color: var(--danger) !important;\n}\n.error-icon[data-v-1bf27b3a] {\n\tcolor: var(--danger);\n}\n.success-icon[data-v-1bf27b3a] {\n\tcolor: var(--success);\n}\n.error-message[data-v-1bf27b3a],\n.success-message[data-v-1bf27b3a] {\n\tfont-size: 12px;\n\tmargin-top: 4px;\n}\n",{});var me=e({id:"brazilian-phone",name:"Brazilian Phone",description:"With formatting and validation",icon:"phone",component:K(ve,[["__scopeId","data-v-1bf27b3a"],["__file","interface.vue"]]),types:["string"],group:"standard",options:[{field:"placeholder",name:"Placeholder",type:"string",meta:{width:"half",interface:"input"},schema:{default_value:"(11) 99999-9999"}},{field:"disabled",name:"Disabled",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!1}},{field:"required",name:"Required",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!1}},{field:"validate_phone",name:"Validate Phone Format",type:"boolean",meta:{width:"half",interface:"boolean",note:"Válido formato brasileiro"},schema:{default_value:!0}}]}),he=n({__name:"display",props:{value:{default:null},showPlaceholder:{type:Boolean,default:!0},maskDigits:{type:Boolean,default:!1}},setup(e){const a=e,n=l((()=>a.value&&a.value.trim().length>0)),t=l((()=>n.value?a.maskDigits?"(XX) XXXXX-XXXX":(e=>{const a=e.replace(/\D/g,"");return 0===a.length?"":a.length<=2?`(${a}`:a.length<=6?a.replace(/(\d{2})(\d{1,4})/,"($1) $2"):a.length<=10?a.replace(/(\d{2})(\d{4})(\d{1,4})/,"($1) $2-$3"):a.slice(0,11).replace(/(\d{2})(\d{5})(\d{1,4})/,"($1) $2-$3")})(a.value):a.showPlaceholder?"(XX) XXXXX-XXXX":""));return(e,a)=>(i(),d("span",{class:c({"phone-value":!0,"no-value":!n.value,masked:e.maskDigits})},m(t.value),3))}});R("\n.phone-value[data-v-d9dc9488] {\n\tfont-family: var(--family-sans-serif);\n\tcolor: var(--foreground-normal);\n}\n.phone-value.no-value[data-v-d9dc9488] {\n\tcolor: var(--foreground-subdued);\n\tfont-style: italic;\n}\n.phone-value.masked[data-v-d9dc9488] {\n\tcolor: var(--foreground-subdued);\n\tfont-weight: bold;\n}\n",{});const ge=[M,G,ne,ue,me],ye=[T,Q,le,ce,a({id:"brazilian-phone-display",name:"Brazilian Phone",description:"Display phone numbers in Brazilian format ((11) 99999-9999)",icon:"phone",component:K(he,[["__scopeId","data-v-d9dc9488"],["__file","display.vue"]]),types:["string"],group:"standard",options:[{field:"show_placeholder",name:"Show Placeholder for Empty",type:"boolean",meta:{width:"half",interface:"boolean"},schema:{default_value:!0}},{field:"mask_digits",name:"Mask Digits for Privacy",type:"boolean",meta:{width:"half",interface:"boolean",note:"Show as (XX) XXXXX-XXXX for privacy"},schema:{default_value:!1}}]})],be=[],_e=[],$e=[],we=[],ke=[];export{ye as displays,ge as interfaces,be as layouts,_e as modules,ke as operations,$e as panels,we as themes};