PageSourceSearch

https://www.graficacores.com.br/assets/js/Counters-DMzMTv08.js

js graficacores.com.br collected 2026-10-03 23:24:37 UTC 11,206 bytes, 178 lines download raw bytes

1import{d as n,m as L,j as t}from"./vendor-ui-BB8mXvqP.js";import{F as q}from"./FaqAccordionList-3czkf_hZ.js";import{a as s}from"./vendor-react-CJU79Ct-.js";import{f as J}from"./index-CQnsSYIT.js";import{o as z}from"./index-_5N6FtDc.js";import"./vendor-icons-DhsjgUZX.js";import"./vendor-redux-D1ajBEGU.js";import"./vendor-carousel-B7Xw1xVr.js";import"./vendor-forms-C8g3Xc13.js";import"./vendor-utils-CThTlkiW.js";const K="/assets/images/banner-counters-C2gd4_NK.jpg",U=L`to { transform: rotate(360deg); }`,P=L`
2  0%   { background-position: -468px 0; }
3  100% { background-position: 468px 0; }
4`,W=n.div`
5  max-width: 900px;
6  margin: 0 auto;
7  padding: 2rem 1rem;
8`,Q=n.div`
9  display: flex;
10  align-items: center;
11  background-color: #D9D9D9;
12  height: 250px;
13  border-radius: 8px;
14  border: 1px solid #ddd;
15  padding: 1.5rem;
16  margin-bottom: 20px;
17  background-image: url(${K});
18  background-size: cover;
19  background-position: center;
20
21  @media (max-width: 768px) {
22    flex-direction: column;
23    text-align: center;
24  }
25`,V=n.div`
26  display: flex;
27  flex-direction: column;
28  border: 1px solid #ddd;
29  padding: 1rem;
30  border-radius: 8px;
31  margin-bottom: 2rem;
32  gap: 0.75rem;
33`,X=n.label`
34  font-weight: bold;
35  font-size: 0.95rem;
36`,Y=n.div`
37  display: flex;
38  flex-wrap: wrap;
39  align-items: center;
40  gap: 0.75rem;
41`,R=n.select`
42  padding: 0.6rem 0.75rem;
43  max-width: 290px;
44  width: 100%;
45  border: 1px solid #ccc;
46  border-radius: 6px;
47  background-color: ${({disabled:e})=>e?"#eee":"#fff"};
48  cursor: ${({disabled:e})=>e?"not-allowed":"pointer"};
49`,Z=n.label`
50  display: flex;
51  align-items: flex-start;
52  gap: 0.5rem;
53  font-size: 0.8rem;
54`,ee=n.button`
55  padding: 0.6rem 1.2rem;
56  background: #152F4F;
57  color: #fff;
58  border: none;
59  cursor: pointer;
60  border-radius: 6px;
61  font-size: 0.9rem;
62  width: 120px;
63
64  &:hover {
65    opacity: 0.9;
66  }
67`,F=n.p`
68  font-size: 1rem;
69  text-align: center;
70  max-width: 700px;
71  height: 150px;
72  margin: 2rem auto;
73  align-content: center;
74
75  &.error {
76    color: #b91c1c;
77  }
78`,te=n.div`
79  display: flex;
80  flex-wrap: wrap;
81  gap: 2rem;
82  margin-top: 2rem;
83  justify-content: flex-start;
84`,G=n.div`
85  flex: 0 1 calc(50% - 1rem);
86  box-sizing: border-box;
87  border: 1px solid #CCCCCC;
88  border-radius: 8px;
89  padding: 1rem;
90  background-color: #F2F2F2;
91
92  @media (max-width: 1024px) {
93    flex: 0 1 calc(50% - 1rem);
94  }
95
96  @media (max-width: 600px) {
97    flex: 0 1 100%;
98  }
99`,ae=n.h3`
100  font-size: 14px;
101  font-weight: bold;
102  margin-bottom: 0.5rem;
103`,h=n.p`
104  font-size: 12px;
105  margin-bottom: 0.25rem;
106  color: #1D1D1D80;
107
108  .information-strong {
109    font-weight: bold;
110    font-size: 12px;
111  }
112
113  &.free {
114    font-weight: 500;
115    color: #059669;
116    font-size: 16px;
117  }
118`,re=n.div`
119  display: grid;
120  grid-template-columns: 1fr 1fr;
121  gap: 0.75rem 1rem;
122  margin-bottom: 0.5rem;
123
124  @media (max-width: 600px) {
125    grid-template-columns: 1fr;
126  }
127`,T=n.div`
128  min-width: 0;                
129`,oe=n.p`
130  grid-column: 1 / -1;
131  margin-top: 0.5rem;
132  font-size: 12px;
133  line-height: 1.4;
134  color: #6B7280;
135  text-transform: uppercase;
136`;n.span`
137  display: inline-block;
138  margin-top: 0.5rem;
139  font-size: 0.9rem;
140  font-weight: bold;
141  color: #0c9c1b;
142`;const se=n.div`
143  display: flex;
144  justify-content: space-between;
145  align-items: center;
146  margin-bottom: 0.5rem;
147`;n.span`
148  display: inline-block;
149  width: 14px;
150  height: 14px;
151  margin-right: 8px;
152  border: 2px solid rgba(255,255,255,.55);
153  border-top-color: #fff;
154  border-radius: 50%;
155  animation: ${U} .6s linear infinite;
156`;const ne=n(G)`
157  .sk {
158    height: 12px;
159    border-radius: 4px;
160    background: linear-gradient(90deg, #e6e6e6 0, #f3f3f3 40px, #e6e6e6 80px);
161    background-size: 600px 100%;
162    animation: ${P} 1.2s linear infinite;
163    margin: 6px 0;
164  }
165  .title { height: 16px; width: 80%; margin-bottom: 12px; }
166  .short { width: 60%; }
167  .tiny  { width: 40%; }
168
169  .row {
170    display: grid;
171    grid-template-columns: 1fr 1fr;
172    gap: .75rem 1rem;
173  }
174
175  @media (max-width: 600px) {
176    .row { grid-template-columns: 1fr; }
177  }
178`;function ie({c:e}){return t.jsxs(G,{children:[t.jsxs(se,{children:[t.jsx(ae,{children:e.nome}),t.jsx(J,{size:18,color:"#0B0E1B"})]}),t.jsxs(re,{children:[t.jsxs(T,{children:[t.jsx(h,{children:t.jsx("strong",{children:e.endereco})}),e.cep&&t.jsxs(h,{children:["CEP: ",e.cep]}),e.horario&&t.jsxs(h,{children:[t.jsx("span",{className:"information-strong",children:"HORÁRIO DE ATENDIMENTO: "}),t.jsx("br",{}),e.horario]})]}),t.jsxs(T,{children:[e.prazo_entrega&&t.jsx(h,{children:t.jsx("strong",{children:e.prazo_entrega})}),e.telefone&&t.jsxs(h,{children:["Fone: ",e.telefone]}),e.empresa&&t.jsx(h,{children:e.empresa})]}),e.observacao&&t.jsxs(oe,{children:["* ",e.observacao]})]}),e.tipo_preco_balcao&&t.jsx(h,{className:"free",children:e.tipo_preco_balcao})]})}function ce(e){const r=!e.selectedCity||e.loadingEstados||e.loadingCidades||e.loadingBalcoes;return t.jsxs(V,{children:[t.jsx(X,{children:"Encontre um balcão perto de você"}),t.jsxs(Y,{children:[t.jsxs(R,{value:e.selectedState,onChange:a=>e.onChangeState(a.target.value?Number(a.target.value):""),children:[t.jsx("option",{value:"",children:e.loadingEstados?"Carregando":"Selecione o Estado"}),e.estados.map(a=>t.jsxs("option",{value:a.id,children:[a.sigla," - ",a.nome]},a.id))]}),t.jsxs(R,{value:e.selectedCity,disabled:!e.selectedState||e.loadingCidades,onChange:a=>e.onChangeCity(a.target.value?Number(a.target.value):""),children:[t.jsx("option",{value:"",children:e.selectedState&&e.loadingCidades?"Carregando Cidades":"Selecione a Cidade"}),e.cidades.map(a=>t.jsx("option",{value:a.id,children:a.nome},a.id))]}),t.jsxs(Z,{children:[t.jsx("input",{type:"checkbox",checked:e.freteGratis,onChange:e.onToggleFreteGratis}),"Frete Grátis"]}),t.jsx(ee,{onClick:e.onSearch,disabled:r,children:e.loadingBalcoes?"Buscando":"Buscar"})]})]})}const de=({count:e=6,className:r})=>t.jsx(t.Fragment,{children:Array.from({length:e}).map((a,i)=>t.jsxs(ne,{className:r,"aria-hidden":"true",children:[t.jsx("div",{className:"sk title"}),t.jsxs("div",{className:"row",children:[t.jsxs("div",{children:[t.jsx("div",{className:"sk"}),t.jsx("div",{className:"sk short"}),t.jsx("div",{className:"sk tiny"}),t.jsx("div",{className:"sk tiny"})]}),t.jsxs("div",{children:[t.jsx("div",{className:"sk short"}),t.jsx("div",{className:"sk"}),t.jsx("div",{className:"sk tiny"})]})]}),t.jsx("div",{className:"sk short",style:{marginTop:8}})]},`sk-${i}`))}),$={ESTADOS:"/enderecos/estados",ESTADO:e=>`/enderecos/estados/${e}`,BALCOES:e=>`/endereco/cidade/${e}/balcoes`},le=e=>({id:Number(e?.id??e?.pk??e?.codigo??0),nome:String(e?.nome??e?.name??""),sigla:String(e?.sigla??e?.uf??"")}),me=e=>({id:Number(e?.id??e?.pk??e?.codigo??0),nome:String(e?.nome??e?.name??"")}),ue=e=>{const r=e?.logradouro_balcao??"",a=e?.nr_balcao?`, ${e.nr_balcao}`:"",i=e?.complemento_balcao?`, ${e.complemento_balcao}`:"",u=e?.bairro_balcao?` - ${e.bairro_balcao}`:"",c=e?.desc_cidade&&e?.uf_estado?` - ${e.desc_cidade}/${e.uf_estado}`:"";return`${r}${a}${i}${u}${c}`.trim()},pe=e=>String(e??"").normalize("NFD").replace(/[\u0300-\u036f]/g,"").toUpperCase().includes("GRATIS"),ge=e=>({id:Number(e?.id??e?.pk??e?.pk_balcao??0),nome:String(e?.nome??e?.name??e?.desc_balcao??""),endereco:ue(e),cep:e?.cep_balcao??e?.cep??void 0,telefone:e?.fone_balcao??e?.telefone??void 0,empresa:e?.empresa??void 0,prazo_entrega:e?.prazo_entrega??(e?.prazo_balcao?`Entrega em até ${e.prazo_balcao} dia util`:void 0),horario:e?.horario??e?.info_atendimento??void 0,observacao:e?.observacao??void 0,frete_gratis:pe(e?.tipo_preco_balcao)||!!e?.frete_gratis,tipo_preco_balcao:e?.tipo_preco_balcao??void 0});async function xe(e){const{data:r}=await z.customer.public.get($.ESTADOS,{signal:e});return(Array.isArray(r)?r:r?.data??[]).map(le).sort((u,c)=>u.sigla.localeCompare(c.sigla))}async function fe(e,r){const{data:a}=await z.customer.public.get($.ESTADO(e),{signal:r});return(a?.data?.cidades??a?.cidades??[]).map(me).sort((c,b)=>c.nome.localeCompare(b.nome,"pt-BR"))}async function he(e,r,a){const{data:i}=await z.customer.public.get($.BALCOES(e),{params:{frete_gratis:r?1:0},signal:a});return(Array.isArray(i)?i:i?.data??[]).map(ge)}const y={ESTADOS:"addr:estados",CIDADES:"addr:cidadesByEstado",BALCOES:"addr:balcoesByKey"},D=e=>{try{const r=sessionStorage.getItem(e);return r?JSON.parse(r):null}catch{return null}},O=(e,r)=>{try{sessionStorage.setItem(e,JSON.stringify(r))}catch{}},be=()=>{const[e,r]=s.useState([]),[a,i]=s.useState([]),[u,c]=s.useState([]),[b,E]=s.useState(!1),[A,k]=s.useState(!1),[N,C]=s.useState(!1),[_,p]=s.useState(null),w=s.useRef(null),g=s.useRef(new Map),x=s.useRef(new Map),B=(o,m)=>`${o}:${m?1:0}`,S=s.useRef(null),v=s.useRef(null),d=s.useRef(null);s.useEffect(()=>{const o=D(y.ESTADOS);o?.length&&(w.current=o,r(o));const m=D(y.CIDADES);
178m&&(g.current=new Map(Object.entries(m).map(([j,f])=>[Number(j),f])));const l=D(y.BALCOES);l&&(x.current=new Map(Object.entries(l)))},[]),s.useEffect(()=>{if(!w.current?.length)return(async()=>{E(!0),p(null),S.current?.abort(),S.current=new AbortController;try{const o=await xe(S.current.signal);w.current=o,r(o),O(y.ESTADOS,o)}catch(o){o?.name!=="CanceledError"&&p(o?.response?.data?.mensagem||"Falha ao carregar estados")}finally{E(!1)}})(),()=>S.current?.abort()},[]);const I=s.useCallback(async o=>{if(!o){i([]);return}const m=g.current.get(o);if(m){i(m);return}k(!0),p(null),v.current?.abort(),v.current=new AbortController;try{const l=await fe(o,v.current.signal);g.current.set(o,l),i(l);const j=Object.fromEntries(g.current);O(y.CIDADES,j)}catch(l){l?.name!=="CanceledError"&&(p(l?.response?.data?.mensagem||"Falha ao carregar cidades"),i([]))}finally{k(!1)}},[]),M=s.useCallback(async(o,m)=>{if(!o){c([]);return}const l=B(o,m),j=x.current.get(l);if(j){c(j);return}C(!0),p(null),d.current?.abort(),d.current=new AbortController;try{const f=await he(o,m,d.current.signal);x.current.set(l,f),c(f);const H=Object.fromEntries(x.current);O(y.BALCOES,H)}catch(f){f?.name!=="CanceledError"&&(p(f?.response?.data?.mensagem||"Falha ao carregar balcões"),c([]))}finally{C(!1)}},[]);return{estados:e,cidades:a,balcoes:u,loadingEstados:b,loadingCidades:A,loadingBalcoes:N,error:_,loadCidades:I,loadBalcoes:M}},Ne=()=>{const{estados:e,cidades:r,balcoes:a,loadingEstados:i,loadingCidades:u,loadingBalcoes:c,error:b,loadCidades:E,loadBalcoes:A}=be(),[k,N]=s.useState(""),[C,_]=s.useState(""),[p,w]=s.useState(!1),[g,x]=s.useState(!1),B=d=>{N(d),_(""),d&&E(Number(d))},S=d=>_(d),v=()=>{if(!C){x(!1);return}x(!0),A(Number(C),p)};return t.jsxs(W,{children:[t.jsx(Q,{}),t.jsx(ce,{estados:e,cidades:r,selectedState:k,selectedCity:C,freteGratis:p,loadingEstados:i,loadingCidades:u,loadingBalcoes:c,onChangeState:B,onChangeCity:S,onToggleFreteGratis:()=>w(d=>!d),onSearch:v}),!g&&t.jsx(F,{children:"Comprando na Gráfica Cores, além de qualidade e preço baixo, você tem mais facilidade na hora de selecionar a forma de entrega. Compre hoje mesmo e confira!"}),b&&t.jsx(F,{className:"error",children:b}),g&&t.jsx(te,{children:c?t.jsx(de,{count:6}):a.length===0?t.jsx(F,{children:"Nenhum balcão encontrado."}):a.map(d=>t.jsx(ie,{c:d},d.id))}),t.jsx(q,{})]})};export{Ne as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.