UNPKG

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) 35.4 kB
import{defineInterface as e,defineDisplay as a,useApi as t}from"@directus/extensions-sdk";import{defineComponent as n,ref as l,computed as o,watch as r,resolveComponent as i,createElementBlock as d,openBlock as u,Fragment as s,createVNode as c,createCommentVNode as p,normalizeClass as v,createSlots as f,withCtx as m,createElementVNode as h,toDisplayString as g,nextTick as y,inject as b,resolveDirective as _,withDirectives as w,createBlock as k,createTextVNode as $}from"vue";const C=e=>e?String(e).replace(/\D/g,""):"",B=e=>{if(!e)return!1;const a=C(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!1;const a=e.replace(/\D/g,"");if(14!==a.length||/^(\d)\1{13}$/.test(a))return!1;let t=a.length-2,n=a.substring(0,t);const l=a.substring(t);let o=0,r=t-7;for(let e=t;e>=1;e--)o+=Number.parseInt(n.charAt(t-e),10)*r--,r<2&&(r=9);let i=o%11<2?0:11-o%11;if(i!==Number.parseInt(l.charAt(0),10))return!1;t+=1,n=a.substring(0,t),o=0,r=t-7;for(let e=t;e>=1;e--)o+=Number.parseInt(n.charAt(t-e),10)*r--,r<2&&(r=9);return i=o%11<2?0:11-o%11,i===Number.parseInt(l.charAt(1),10)}function X(e){return e?e.replace(/\D/g,""):""}function z(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,""):""}const I="/brazilian-standards-proxy",N=(e,a)=>{const t=e;return t?.response?.data?.error?t.response.data.error:t?.response?.data?.message?t.response.data.message:t?.message?t.message:a};function j(e,a){if(e&&a)return a.split(".").reduce(((e,a)=>{if(e&&"object"==typeof e)return e[a]}),e)}function E(e,a){const t={};for(const[n,l]of Object.entries(a))try{let a;a=l.includes("+")?F(e,l):j(e,l),"string"==typeof a&&a.trim()&&(a=V(a)),null!=a&&""!==a&&(t[n]=a)}catch{}return t}function F(e,a){return a.split("+").map((e=>e.trim())).map((a=>{const t=a.replace(/^['\"]|['\"]$/g,"");if(a.startsWith('"')||a.startsWith("'"))return t;const n=j(e,t);return"string"==typeof n&&n.trim()?V(n):n?String(n):""})).filter((e=>""!==e)).join("")}function V(e){if(!e)return"";const a=String(e).trim(),t=(a.match(/[A-ZÁÀÂÃÉÈÊÍÌÎÓÒÔÕÚÙÛÇ]/g)||[]).length,n=(a.match(/[A-Za-záàâãéèêíìîóòôõúùûç]/g)||[]).length;return n>0&&t/n>.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,t)=>0===t?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 q=n({__name:"interface",props:{value:{default:null},placeholder:{default:"R$ 0,00"},disabled:{type:Boolean,default:!1},min_value:{default:void 0},max_value:{default:void 0},minValue:{default:void 0},maxValue:{default:void 0}},emits:["input"],setup(e,{emit:a}){const t=e=>new Intl.NumberFormat("pt-BR",{style:"currency",currency:"BRL",minimumFractionDigits:2,maximumFractionDigits:2}).format(e),n=e,b=a,_=l(!1),w=l(""),k=l(!1),$=l(""),C=o((()=>"number"==typeof n.min_value?n.min_value:"number"==typeof n.minValue?n.minValue:void 0)),B=o((()=>"number"==typeof n.max_value?n.max_value:"number"==typeof n.maxValue?n.maxValue:void 0)),P=o((()=>_.value?w.value:null!==n.value&&void 0!==n.value?t(n.value):"")),x=e=>(k.value=!1,$.value="",void 0!==C.value&&e<C.value?(k.value=!0,$.value=`Valor mínimo: ${t(C.value)}`,!1):!(void 0!==B.value&&e>B.value)||(k.value=!0,$.value=`Valor máximo: ${t(B.value)}`,!1)),D=e=>{const a=e.replace(/\D/g,"");if(!a)return w.value="",k.value=!1,$.value="",void b("input",null);const t=function(e){const a=e.replace(/\D/g,"");if(!a)return"";const t=Number.parseInt(a,10)/100;return new Intl.NumberFormat("pt-BR",{style:"currency",currency:"BRL",minimumFractionDigits:2,maximumFractionDigits:2}).format(t)}(a);w.value=t;const n=function(e){const a=e.replace(/[^\d]/g,"");return a?Number.parseFloat(a)/100:0}(t);x(n),b("input",n)},X=()=>{_.value=!0,null!==n.value&&void 0!==n.value?w.value=t(n.value):w.value=""},z=()=>{_.value=!1,null!==n.value&&void 0!==n.value&&x(n.value),y((()=>{w.value=""}))},A=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 r((()=>n.value),(e=>{_.value||null==e||x(e)})),(e,a)=>{const t=i("v-icon"),l=i("v-input");return u(),d(s,null,[c(l,{"model-value":P.value,placeholder:n.placeholder,disabled:n.disabled,class:v({"has-error":k.value}),"onUpdate:modelValue":D,onFocus:X,onBlur:z,onKeydown:A},f({prepend:m((()=>[a[0]||(a[0]=h("span",{class:"currency-symbol"},"R$",-1))])),_:2},[k.value?{name:"append",fn:m((()=>[c(t,{name:"error",class:"error-icon"})])),key:"0"}:void 0]),1032,["model-value","placeholder","disabled","class"]),k.value?(u(),d("div",S,g($.value),1)):p("v-if",!0)],64)}}}),R=[],O=[];function J(e,a){if(e&&"undefined"!=typeof document){var t,n=!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=R.indexOf(o);-1===r&&(r=R.push(o)-1,O[r]={}),t=O[r]&&O[r][n]?O[r][n]:O[r][n]=i()}else t=i();65279===e.charCodeAt(0)&&(e=e.substring(1)),t.styleSheet?t.styleSheet.cssText+=e:t.appendChild(document.createTextNode(e))}function i(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var t=Object.keys(a.attributes),l=0;l<t.length;l++)e.setAttribute(t[l],a.attributes[t[l]]);var r="prepend"===n?"afterbegin":"beforeend";return o.insertAdjacentElement(r,e),e}}J("\n.has-error[data-v-5ce257db] {\n\tborder-color: var(--danger) !important;\n}\n.currency-symbol[data-v-5ce257db] {\n\tfont-weight: 500;\n\tcolor: var(--foreground-subdued);\n}\n.error-icon[data-v-5ce257db] {\n\tcolor: var(--danger);\n}\n.success-icon[data-v-5ce257db] {\n\tcolor: var(--success);\n}\n.error-message[data-v-5ce257db],\n.success-message[data-v-5ce257db] {\n\tfont-size: 12px;\n\tmargin-top: 4px;\n}\n",{});var K=(e,a)=>{const t=e.__vccOpts||e;for(const[e,n]of a)t[e]=n;return t},T=e({id:"brazilian-currency",name:"Brazilian Currency",description:"With formatting (R$ 1.234,56)",icon:"attach_money",component:K(q,[["__scopeId","data-v-5ce257db"]]),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"}}]}),L=n({__name:"display",props:{value:{default:null},show_symbol:{type:Boolean,default:!0},showSymbol:{type:Boolean,default:void 0},precision:{default:2}},setup(e){const a=e,t=o((()=>"boolean"==typeof a.show_symbol?a.show_symbol:"boolean"!=typeof a.showSymbol||a.showSymbol)),n=o((()=>null!==a.value&&void 0!==a.value&&!Number.isNaN(a.value))),l=o((()=>{if(!n.value)return t.value?"R$ --":"--";return new Intl.NumberFormat("pt-BR",{style:t.value?"currency":"decimal",currency:"BRL",minimumFractionDigits:a.precision,maximumFractionDigits:a.precision}).format(a.value)}));return(e,a)=>(u(),d("span",{class:v({"currency-value":!0,"no-value":!n.value})},g(l.value),3))}});J("\n.currency-value[data-v-368c01a2] {\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-368c01a2] {\n\tcolor: var(--foreground-subdued);\n\tfont-style: italic;\n}\n",{});var M=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(L,[["__scopeId","data-v-368c01a2"]]),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 U={class:"brazilian-cep-interface"},W={class:"cep-input-wrapper"},Z={key:1,class:"error-message"};var G=n({__name:"interface",props:{value:{},placeholder:{default:"12345-678"},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,s=a,f=t(),y=b("values",l({})),$=b("updateValues",null),P=l(!1),x=l(""),D=l(!1),X=l(null),z=o((()=>n.value?(e=>{if(!e)return"";const a=C(e);return a.length<=5?a:a.replace(/(\d{5})(\d{1,3})/,"$1-$2")})(n.value):"")),A=o((()=>n.enable_api_lookup)),j=o((()=>{try{if("string"==typeof n.auto_fill_mapping){const e=JSON.parse(n.auto_fill_mapping||"{}");return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}return n.auto_fill_mapping&&"object"==typeof n.auto_fill_mapping&&!Array.isArray(n.auto_fill_mapping)?n.auto_fill_mapping:{}}catch{return{}}})),F=e=>{const a=C(e).slice(0,8);s("input",a||null),P.value=!1,x.value="",X.value=null,a&&8===a.length?D.value=B(a):D.value=!1},V=e=>{e.preventDefault();const a=e.clipboardData?.getData("text")||"";F(a)},S=()=>{if(!n.validate_cep)return;const e=C(n.value||"");if(e){if(8!==e.length)return P.value=!0,x.value="CEP deve ter 8 dígitos",void(D.value=!1);if(!B(e))return P.value=!0,x.value="CEP inválido",void(D.value=!1);P.value=!1,x.value="",D.value=!0}},q=async()=>{if(!A.value||!n.value)return;const e=C(n.value);if(e&&8===e.length&&B(e)){X.value={type:"loading",icon:"refresh",message:"Consultando endereço..."};try{const a=await async function(e,a){const t=C(a);if(!t||8!==t.length)throw new Error("CEP deve ter 8 dígitos.");try{return(await e.get(`${I}/cep/${t}`)).data}catch(e){throw new Error(N(e,"Erro ao consultar CEP no proxy interno."))}}(f,e),t=(e=>{const a=Object.entries(e);if(0===a.length)return 0;if("function"==typeof $)return $(e),a.length;if(y?.value&&"object"==typeof y.value){for(const[e,t]of a)y.value[e]=t;return a.length}return 0})(E(a,j.value));X.value={type:"success",icon:"check",message:t>0?`Endereço localizado (${t} campos atualizados).`:"Endereço localizado, mas sem campos mapeados."}}catch(e){X.value={type:"error",icon:"warning",message:e instanceof Error?e.message:"Erro na consulta da API"}}finally{setTimeout((()=>{X.value=null}),5e3)}}};return r((()=>n.value),(()=>S())),(a,t)=>{const n=i("v-input"),l=i("v-icon"),o=i("v-button"),r=_("tooltip");return u(),d("div",U,[h("div",W,[c(n,{"model-value":z.value,placeholder:e.placeholder||"12345-678",disabled:e.disabled,required:e.required,class:v({"has-error":P.value}),"onUpdate:modelValue":F,onBlur:S,onPaste:V},null,8,["model-value","placeholder","disabled","required","class"]),A.value&&z.value&&z.value.length>=9?w((u(),k(o,{key:0,class:"search-button",icon:"",secondary:"",loading:"loading"===X.value?.type,disabled:P.value||!D.value,onClick:q},{default:m((()=>[c(l,{name:"search"})])),_:1},8,["loading","disabled"])),[[r,"Consultar endereço"]]):p("v-if",!0)]),A.value&&X.value?(u(),d("div",{key:0,class:v(["api-status",X.value.type])},[c(l,{name:X.value.icon,small:""},null,8,["name"]),h("span",null,g(X.value.message),1)],2)):p("v-if",!0),P.value?(u(),d("div",Z,[c(l,{name:"warning",small:""}),h("span",null,g(x.value),1)])):p("v-if",!0)])}}});J("\n.brazilian-cep-interface[data-v-2590016c] {\n\tposition: relative;\n}\n.cep-input-wrapper[data-v-2590016c] {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n}\n.cep-input-wrapper[data-v-2590016c] .v-input {\n\tflex: 1;\n}\n.search-button[data-v-2590016c] {\n\tflex-shrink: 0;\n\t--v-button-width: 44px;\n\t--v-button-height: 44px;\n}\n.search-button[data-v-2590016c]: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-2590016c] .v-input input {\n\tborder-color: var(--danger) !important;\n}\n.loading-message[data-v-2590016c],\n.success-message[data-v-2590016c],\n.error-message[data-v-2590016c] {\n\tfont-size: 12px;\n\tmargin-top: 4px;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 4px;\n}\n.spin[data-v-2590016c] {\n\tanimation: spin-2590016c 1s linear infinite;\n}\n@keyframes spin-2590016c {\nfrom {\n\t\ttransform: rotate(0deg);\n}\nto {\n\t\ttransform: rotate(360deg);\n}\n}\n",{});var H=e({id:"brazilian-cep",name:"Brazilian CEP",description:"With formatting, optional API lookup and field mapping",icon:"location_on",component:K(G,[["__scopeId","data-v-2590016c"]]),types:["string"],group:"standard",options:[{field:"placeholder",name:"Placeholder",type:"string",meta:{width:"half",interface:"input"},schema:{default_value:"12345-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:"Valida 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 + ', ' + bairro",city:"localidade",state:"uf",neighborhood:"bairro",street:"logradouro",complement:"complemento"},null,2)},note:'Mapeamento de campos: {"campo_formulario": "campo_api"}'}}]}),Q=n({__name:"display",props:{value:{default:null},show_placeholder:{type:Boolean,default:!0},showPlaceholder:{type:Boolean,default:void 0}},setup(e){const a=e,t=o((()=>"boolean"==typeof a.show_placeholder?a.show_placeholder:"boolean"!=typeof a.showPlaceholder||a.showPlaceholder)),n=o((()=>Boolean(a.value&&a.value.trim().length>0))),l=o((()=>n.value?(e=>{const a=e.replace(/\D/g,"");return 0===a.length?"":a.length<=5?a:a.slice(0,8).replace(/(\d{5})(\d{1,3})/,"$1-$2")})(a.value):t.value?"#####-###":""));return(e,a)=>(u(),d("span",{class:v({"cep-value":!0,"no-value":!n.value})},g(l.value),3))}});J("\n.cep-value[data-v-7d4f52f9] {\n\tfont-family: var(--family-sans-serif);\n\tcolor: var(--foreground-normal);\n}\n.cep-value.no-value[data-v-7d4f52f9] {\n\tcolor: var(--foreground-subdued);\n\tfont-style: italic;\n}\n",{});var Y=a({id:"brazilian-cep-display",name:"Brazilian CEP",description:"Display postal codes in Brazilian format (12345-678)",icon:"location_on",component:K(Q,[["__scopeId","data-v-7d4f52f9"]]),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 ee={key:0,class:"error-message"},ae={key:1,class:"success-message"};var te=n({__name:"interface",props:{value:{default:null},placeholder:{default:"123.456.789-01"},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},validate_cpf:{type:Boolean,default:!0},validateCpf:{type:Boolean,default:void 0}},emits:["input"],setup(e,{emit:a}){const t=e,n=a,h=l(!1),y=l(""),b=l(!1),_=o((()=>"boolean"==typeof t.validate_cpf?t.validate_cpf:"boolean"!=typeof t.validateCpf||t.validateCpf)),w=o((()=>t.value?P(t.value):"")),k=e=>{if(h.value=!1,y.value="",b.value=!1,!e&&t.required)return h.value=!0,y.value="CPF é obrigatório",!1;if(e&&_.value){const a=x(e);if(a.length>0&&a.length<11)return h.value=!0,y.value="CPF deve ter 11 dígitos",!1;if(11===a.length){if(/^(\d)\1{10}$/.test(a))return h.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 t=0;for(let e=0;e<9;e++)t+=Number.parseInt(a.charAt(e),10)*(10-e);let n=11-t%11;n>9&&(n=0),t=0;for(let e=0;e<10;e++)t+=Number.parseInt(a.charAt(e),10)*(11-e);let l=11-t%11;return l>9&&(l=0),n===Number.parseInt(a.charAt(9),10)&&l===Number.parseInt(a.charAt(10),10)}(e))return h.value=!0,y.value="CPF inválido",!1;b.value=!0}}return!0},C=e=>{if(!e||""===e.trim())return n("input",null),h.value=!1,y.value="",void(b.value=!1);const a=P(e),t=x(a);k(a),n("input",t||null)},B=()=>{if(t.value){const e=P(t.value);k(e)}},D=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 r((()=>t.value),(e=>{if(e){const a=P(e);k(a)}else h.value=!1,y.value="",b.value=!1})),(e,a)=>{const n=i("v-icon"),l=i("v-input");return u(),d(s,null,[c(l,{"model-value":w.value,placeholder:t.placeholder,disabled:t.disabled,class:v({"has-error":h.value}),"onUpdate:modelValue":C,onBlur:B,onKeydown:D,maxlength:"14"},f({_:2},[h.value?{name:"append",fn:m((()=>[c(n,{name:"error",class:"error-icon"})])),key:"0"}:b.value&&t.value?{name:"append",fn:m((()=>[c(n,{name:"check_circle",class:"success-icon"})])),key:"1"}:void 0]),1032,["model-value","placeholder","disabled","class"]),h.value&&y.value?(u(),d("div",ee,[c(n,{name:"error"}),$(" "+g(y.value),1)])):b.value&&t.value?(u(),d("div",ae," CPF válido ")):p("v-if",!0)],64)}}});J("\n.has-error[data-v-2cf85187] {\n\tborder-color: var(--danger) !important;\n}\n.error-icon[data-v-2cf85187] {\n\tcolor: var(--danger);\n}\n.success-icon[data-v-2cf85187] {\n\tcolor: var(--success);\n}\n.error-message[data-v-2cf85187],\n.success-message[data-v-2cf85187] {\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(te,[["__scopeId","data-v-2cf85187"]]),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:"Valida formato do CPF (11 dígitos)"},schema:{default_value:!0}}]}),le=n({__name:"display",props:{value:{default:null},show_placeholder:{type:Boolean,default:!0},showPlaceholder:{type:Boolean,default:void 0},mask_digits:{type:Boolean,default:!1},maskDigits:{type:Boolean,default:void 0}},setup(e){const a=e,t=o((()=>"boolean"==typeof a.show_placeholder?a.show_placeholder:"boolean"!=typeof a.showPlaceholder||a.showPlaceholder)),n=o((()=>"boolean"==typeof a.mask_digits?a.mask_digits:"boolean"==typeof a.maskDigits&&a.maskDigits)),l=o((()=>Boolean(a.value&&a.value.trim().length>0))),r=o((()=>l.value?n.value?"***.***.***-**":(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):t.value?"***.***.***-**":""));return(e,a)=>(u(),d("span",{class:v({"cpf-value":!0,"no-value":!l.value,masked:n.value})},g(r.value),3))}});J("\n.cpf-value[data-v-f9fc18f2] {\n\tfont-family: var(--family-sans-serif);\n\tcolor: var(--foreground-normal);\n}\n.cpf-value.no-value[data-v-f9fc18f2] {\n\tcolor: var(--foreground-subdued);\n\tfont-style: italic;\n}\n.cpf-value.masked[data-v-f9fc18f2] {\n\tcolor: var(--foreground-subdued);\n\tfont-weight: bold;\n}\n",{});var oe=a({id:"brazilian-cpf-display",name:"Brazilian CPF",description:"Display tax IDs in Brazilian format (123.456.789-01)",icon:"person",component:K(le,[["__scopeId","data-v-f9fc18f2"]]),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 re={class:"brazilian-cnpj-interface"},ie={class:"cnpj-input-wrapper"},de={key:1,class:"error-message"};var ue=n({__name:"interface",props:{value:{},placeholder:{default:"12.345.678/0001-90"},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,s=a,f=t(),y=b("values",l({})),$=b("updateValues",null),C=l(!1),B=l(""),P=l(!1),x=l(null),z=o((()=>n.value?function(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")}(n.value):"")),A=o((()=>n.enable_api_lookup)),j=o((()=>{try{if("string"==typeof n.auto_fill_mapping){const e=JSON.parse(n.auto_fill_mapping||"{}");return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}return n.auto_fill_mapping&&"object"==typeof n.auto_fill_mapping&&!Array.isArray(n.auto_fill_mapping)?n.auto_fill_mapping:{}}catch{return{}}})),F=e=>{const a=X(e).slice(0,14);s("input",a||null),C.value=!1,B.value="",x.value=null,a&&14===a.length?P.value=D(a):P.value=!1},V=e=>{e.preventDefault();const a=e.clipboardData?.getData("text")||"";F(a)},S=()=>{if(!n.validate_cnpj)return;const e=X(n.value||"");if(e){if(14!==e.length)return C.value=!0,B.value="CNPJ deve ter 14 dígitos",void(P.value=!1);if(!D(e))return C.value=!0,B.value="CNPJ inválido",void(P.value=!1);C.value=!1,B.value="",P.value=!0}},q=async()=>{if(!A.value||!n.value)return;const e=X(n.value);if(e&&14===e.length&&D(e)){x.value={type:"loading",icon:"refresh",message:"Consultando dados da empresa..."};try{const a=await async function(e,a,t){const n=X(a);if(!n||14!==n.length)throw new Error("CNPJ inválido. Informe 14 dígitos.");try{return(await e.get(`${I}/cnpj/${n}`,t?{params:{token:t}}:void 0)).data}catch(e){throw new Error(N(e,"Erro ao consultar CNPJ no proxy interno."))}}(f,e,n.api_token),t=(e=>{const a=Object.entries(e);if(0===a.length)return 0;if("function"==typeof $)return $(e),a.length;if(y?.value&&"object"==typeof y.value){for(const[e,t]of a)y.value[e]=t;return a.length}return 0})(E(a,j.value));x.value={type:"success",icon:"check",message:t>0?`Dados carregados para ${a.razao_social} (${t} campos atualizados).`:`Dados carregados para ${a.razao_social}, mas sem campos mapeados.`}}catch(e){x.value={type:"error",icon:"warning",message:e instanceof Error?e.message:"Erro na consulta da API"}}finally{setTimeout((()=>{x.value=null}),5e3)}}};return r((()=>n.value),(()=>S())),(a,t)=>{const n=i("v-input"),l=i("v-icon"),o=i("v-button"),r=_("tooltip");return u(),d("div",re,[h("div",ie,[c(n,{"model-value":z.value,placeholder:e.placeholder||"12.345.678/0001-90",disabled:e.disabled,required:e.required,class:v({"has-error":C.value}),"onUpdate:modelValue":F,onBlur:S,onPaste:V},null,8,["model-value","placeholder","disabled","required","class"]),A.value&&z.value&&z.value.length>=18?w((u(),k(o,{key:0,class:"search-button",icon:"",secondary:"",loading:"loading"===x.value?.type,disabled:C.value||!P.value,onClick:q},{default:m((()=>[c(l,{name:"search"})])),_:1},8,["loading","disabled"])),[[r,"Consultar dados da empresa"]]):p("v-if",!0)]),A.value&&x.value?(u(),d("div",{key:0,class:v(["api-status",x.value.type])},[c(l,{name:x.value.icon,small:""},null,8,["name"]),h("span",null,g(x.value.message),1)],2)):p("v-if",!0),C.value?(u(),d("div",de,[c(l,{name:"warning",small:""}),h("span",null,g(B.value),1)])):p("v-if",!0)])}}});J("\n.brazilian-cnpj-interface[data-v-d8902909] {\n\tposition: relative;\n}\n.cnpj-input-wrapper[data-v-d8902909] {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n}\n.cnpj-input-wrapper[data-v-d8902909] .v-input {\n\tflex: 1;\n}\n.search-button[data-v-d8902909] {\n\tflex-shrink: 0;\n\t--v-button-width: 44px;\n\t--v-button-height: 44px;\n}\n.search-button[data-v-d8902909]: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-d8902909] .v-input input {\n\tborder-color: var(--danger) !important;\n}\n.loading-message[data-v-d8902909],\n.success-message[data-v-d8902909],\n.error-message[data-v-d8902909] {\n\tfont-size: 12px;\n\tmargin-top: 4px;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 4px;\n}\n.spin[data-v-d8902909] {\n\tanimation: spin-d8902909 1s linear infinite;\n}\n@keyframes spin-d8902909 {\nfrom {\n\t\ttransform: rotate(0deg);\n}\nto {\n\t\ttransform: rotate(360deg);\n}\n}\n",{});var se=e({id:"brazilian-cnpj",name:"Brazilian CNPJ",description:"With formatting, optional API lookup and field mapping",icon:"business",component:K(ue,[["__scopeId","data-v-d8902909"]]),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:"Valida 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 da empresa via CNPJ.ws"},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:"razao_social",fantasy_name:"estabelecimento.nome_fantasia",email:"estabelecimento.email",phone:"estabelecimento.telefone1",address:"estabelecimento.tipo_logradouro + ' ' + estabelecimento.logradouro + ', ' + estabelecimento.numero + ' - ' + estabelecimento.bairro",city:"estabelecimento.cidade.nome",state:"estabelecimento.estado.sigla",cep:"estabelecimento.cep"},null,2)},note:'Mapeamento de campos: {"campo_formulario": "campo_api"}'}}]}),ce=n({__name:"display",props:{value:{default:null},show_placeholder:{type:Boolean,default:!0},showPlaceholder:{type:Boolean,default:void 0},mask_digits:{type:Boolean,default:!1},maskDigits:{type:Boolean,default:void 0}},setup(e){const a=e,t=o((()=>"boolean"==typeof a.show_placeholder?a.show_placeholder:"boolean"!=typeof a.showPlaceholder||a.showPlaceholder)),n=o((()=>"boolean"==typeof a.mask_digits?a.mask_digits:"boolean"==typeof a.maskDigits&&a.maskDigits)),l=o((()=>Boolean(a.value&&a.value.trim().length>0))),r=o((()=>l.value?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.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):t.value?"**.***.***/****-**":""));return(e,a)=>(u(),d("span",{class:v({"cnpj-value":!0,"no-value":!l.value,masked:n.value})},g(r.value),3))}});J("\n.cnpj-value[data-v-5a49ca32] {\n\tfont-family: var(--family-sans-serif);\n\tcolor: var(--foreground-normal);\n}\n.cnpj-value.no-value[data-v-5a49ca32] {\n\tcolor: var(--foreground-subdued);\n\tfont-style: italic;\n}\n.cnpj-value.masked[data-v-5a49ca32] {\n\tcolor: var(--foreground-subdued);\n\tfont-weight: bold;\n}\n",{});var pe=a({id:"brazilian-cnpj-display",name:"Brazilian CNPJ",description:"Display tax IDs in Brazilian format (XX.XXX.XXX/XXXX-XX)",icon:"business",component:K(ce,[["__scopeId","data-v-5a49ca32"]]),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 ve={key:0,class:"error-message"},fe={key:1,class:"success-message"};var me=n({__name:"interface",props:{value:{default:null},placeholder:{default:"(11) 99999-9999"},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},validate_phone:{type:Boolean,default:!0},validatePhone:{type:Boolean,default:void 0}},emits:["input"],setup(e,{emit:a}){const t=e,n=a,h=l(!1),y=l(""),b=l(!1),_=o((()=>"boolean"==typeof t.validate_phone?t.validate_phone:"boolean"!=typeof t.validatePhone||t.validatePhone)),w=o((()=>t.value?z(t.value):"")),k=e=>{if(h.value=!1,y.value="",b.value=!1,!e&&t.required)return h.value=!0,y.value="Telefone é obrigatório",!1;if(e&&_.value){const a=A(e);if(a.length>0&&a.length<10)return h.value=!0,y.value="Telefone deve ter pelo menos 10 dígitos",!1;if(a.length>11)return h.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 t=Number.parseInt(a.substring(0,2),10);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,63,64,65,66,67,68,69,71,73,74,75,77,79,81,82,83,84,85,86,87,88,89,91,92,93,94,95,96,97,98,99].includes(t))return!1;if(11===a.length&&9!==Number.parseInt(a.charAt(2),10))return!1;if(10===a.length){const e=Number.parseInt(a.charAt(2),10);if(![2,3,4,5,6,7,8,9].includes(e))return!1}return!0}(e))return h.value=!0,y.value="Formato de telefone inválido",!1;b.value=!0}}return!0},C=e=>{if(!e||""===e.trim())return n("input",null),h.value=!1,y.value="",void(b.value=!1);const a=z(e),t=A(a);k(a),n("input",t||null)},B=()=>{if(t.value){const e=z(t.value);k(e)}},P=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 r((()=>t.value),(e=>{if(e){const a=z(e);k(a)}else h.value=!1,y.value="",b.value=!1})),(e,a)=>{const n=i("v-icon"),l=i("v-input");return u(),d(s,null,[c(l,{"model-value":w.value,placeholder:t.placeholder,disabled:t.disabled,class:v({"has-error":h.value}),"onUpdate:modelValue":C,onBlur:B,onKeydown:P,maxlength:"15"},f({_:2},[h.value?{name:"append",fn:m((()=>[c(n,{name:"error",class:"error-icon"})])),key:"0"}:b.value&&t.value?{name:"append",fn:m((()=>[c(n,{name:"check_circle",class:"success-icon"})])),key:"1"}:void 0]),1032,["model-value","placeholder","disabled","class"]),h.value&&y.value?(u(),d("div",ve,[c(n,{name:"error"}),$(" "+g(y.value),1)])):b.value&&t.value?(u(),d("div",fe," Telefone válido ")):p("v-if",!0)],64)}}});J("\n.has-error[data-v-e96436f3] {\n\tborder-color: var(--danger) !important;\n}\n.error-icon[data-v-e96436f3] {\n\tcolor: var(--danger);\n}\n.success-icon[data-v-e96436f3] {\n\tcolor: var(--success);\n}\n.error-message[data-v-e96436f3],\n.success-message[data-v-e96436f3] {\n\tfont-size: 12px;\n\tmargin-top: 4px;\n}\n",{});var he=e({id:"brazilian-phone",name:"Brazilian Phone",description:"With formatting and validation",icon:"phone",component:K(me,[["__scopeId","data-v-e96436f3"]]),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:"Valida formato brasileiro"},schema:{default_value:!0}}]}),ge=n({__name:"display",props:{value:{default:null},show_placeholder:{type:Boolean,default:!0},showPlaceholder:{type:Boolean,default:void 0},mask_digits:{type:Boolean,default:!1},maskDigits:{type:Boolean,default:void 0}},setup(e){const a=e,t=o((()=>"boolean"==typeof a.show_placeholder?a.show_placeholder:"boolean"!=typeof a.showPlaceholder||a.showPlaceholder)),n=o((()=>"boolean"==typeof a.mask_digits?a.mask_digits:"boolean"==typeof a.maskDigits&&a.maskDigits)),l=o((()=>Boolean(a.value&&a.value.trim().length>0))),r=o((()=>l.value?n.value?"(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):t.value?"(XX) XXXXX-XXXX":""));return(e,a)=>(u(),d("span",{class:v({"phone-value":!0,"no-value":!l.value,masked:n.value})},g(r.value),3))}});J("\n.phone-value[data-v-c6dde6a2] {\n\tfont-family: var(--family-sans-serif);\n\tcolor: var(--foreground-normal);\n}\n.phone-value.no-value[data-v-c6dde6a2] {\n\tcolor: var(--foreground-subdued);\n\tfont-style: italic;\n}\n.phone-value.masked[data-v-c6dde6a2] {\n\tcolor: var(--foreground-subdued);\n\tfont-weight: bold;\n}\n",{});const ye=[T,H,ne,se,he],be=[M,Y,oe,pe,a({id:"brazilian-phone-display",name:"Brazilian Phone",description:"Display phone numbers in Brazilian format ((11) 99999-9999)",icon:"phone",component:K(ge,[["__scopeId","data-v-c6dde6a2"]]),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}}]})],_e=[],we=[],ke=[],$e=[],Ce=[];export{be as displays,ye as interfaces,_e as layouts,we as modules,Ce as operations,ke as panels,$e as themes};