biaiiTiT%Accept-Encoding,User-Agent+l13<`% KEY: https://www.blockultra.com.br/_astro/Products.D4xxKCJ3.js HTTP/1.1 200 OK Date: Sat, 14 Mar 2026 07:27:19 GMT Server: Apache Last-Modified: Thu, 26 Feb 2026 15:40:17 GMT Accept-Ranges: bytes Content-Length: 17933 Vary: Accept-Encoding,User-Agent Connection: close Content-Type: application/javascript import{c as M,j as u}from"./createLucideIcon.EVWAhPkv.js";import{r as s,R as S,a as B}from"./index.BGzeIQFi.js";import{r as ge}from"./index.Dk9TJwOG.js";/** * @license lucide-react v0.552.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const xe=[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]],be=M("house",xe);/** * @license lucide-react v0.552.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const ye=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]],Ce=M("shield-alert",ye);/** * @license lucide-react v0.552.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const we=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],Ne=M("shield-check",we);/** * @license lucide-react v0.552.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const Re=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],Ie=M("sun",Re);/** * @license lucide-react v0.552.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const Se=[["path",{d:"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"knzxuh"}],["path",{d:"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"2jd2cc"}],["path",{d:"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1",key:"rd2r6e"}]],Te=M("waves",Se);ge();function W(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function z(...e){return t=>{let o=!1;const n=e.map(r=>{const c=W(r,t);return!o&&typeof c=="function"&&(o=!0),c});if(o)return()=>{for(let r=0;r{const{children:c,...i}=n,a=s.Children.toArray(c),m=a.find(Me);if(m){const f=m.props.children,l=a.map(d=>d===m?s.Children.count(f)>1?s.Children.only(null):s.isValidElement(f)?f.props.children:null:d);return u.jsx(t,{...i,ref:r,children:s.isValidElement(f)?s.cloneElement(f,void 0,l):null})}return u.jsx(t,{...i,ref:r,children:c})});return o.displayName=`${e}.Slot`,o}function Ee(e){const t=s.forwardRef((o,n)=>{const{children:r,...c}=o;if(s.isValidElement(r)){const i=je(r),a=_e(c,r.props);return r.type!==s.Fragment&&(a.ref=n?z(n,i):i),s.cloneElement(r,a)}return s.Children.count(r)>1?s.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Ae=Symbol("radix.slottable");function Me(e){return s.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===Ae}function _e(e,t){const o={...t};for(const n in t){const r=e[n],c=t[n];/^on[A-Z]/.test(n)?r&&c?o[n]=(...a)=>{const m=c(...a);return r(...a),m}:r&&(o[n]=r):n==="style"?o[n]={...r,...c}:n==="className"&&(o[n]=[r,c].filter(Boolean).join(" "))}return{...e,...o}}function je(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,o=t&&"isReactWarning"in t&&t.isReactWarning;return o?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,o=t&&"isReactWarning"in t&&t.isReactWarning,o?e.props.ref:e.props.ref||e.ref)}var Pe=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],A=Pe.reduce((e,t)=>{const o=$(`Primitive.${t}`),n=s.forwardRef((r,c)=>{const{asChild:i,...a}=r,m=i?o:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),u.jsx(m,{...a,ref:c})});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});function V(e,t=[]){let o=[];function n(c,i){const a=s.createContext(i),m=o.length;o=[...o,i];const f=d=>{const{scope:v,children:h,...C}=d,x=v?.[e]?.[m]||a,p=s.useMemo(()=>C,Object.values(C));return u.jsx(x.Provider,{value:p,children:h})};f.displayName=c+"Provider";function l(d,v){const h=v?.[e]?.[m]||a,C=s.useContext(h);if(C)return C;if(i!==void 0)return i;throw new Error(`\`${d}\` must be used within \`${c}\``)}return[f,l]}const r=()=>{const c=o.map(i=>s.createContext(i));return function(a){const m=a?.[e]||c;return s.useMemo(()=>({[`__scope${e}`]:{...a,[e]:m}}),[a,m])}};return r.scopeName=e,[n,Fe(r,...t)]}function Fe(...e){const t=e[0];if(e.length===1)return t;const o=()=>{const n=e.map(r=>({useScope:r(),scopeName:r.scopeName}));return function(c){const i=n.reduce((a,{useScope:m,scopeName:f})=>{const d=m(c)[`__scope${f}`];return{...a,...d}},{});return s.useMemo(()=>({[`__scope${t.scopeName}`]:i}),[i])}};return o.scopeName=t.scopeName,o}function ke(e){const t=e+"CollectionProvider",[o,n]=V(t),[r,c]=o(t,{collectionRef:{current:null},itemMap:new Map}),i=x=>{const{scope:p,children:y}=x,N=S.useRef(null),g=S.useRef(new Map).current;return u.jsx(r,{scope:p,itemMap:g,collectionRef:N,children:y})};i.displayName=t;const a=e+"CollectionSlot",m=$(a),f=S.forwardRef((x,p)=>{const{scope:y,children:N}=x,g=c(a,y),b=F(p,g.collectionRef);return u.jsx(m,{ref:b,children:N})});f.displayName=a;const l=e+"CollectionItemSlot",d="data-radix-collection-item",v=$(l),h=S.forwardRef((x,p)=>{const{scope:y,children:N,...g}=x,b=S.useRef(null),T=F(p,b),E=c(l,y);return S.useEffect(()=>(E.itemMap.set(b,{ref:b,...g}),()=>void E.itemMap.delete(b))),u.jsx(v,{[d]:"",ref:T,children:N})});h.displayName=l;function C(x){const p=c(e+"CollectionConsumer",x);return S.useCallback(()=>{const N=p.collectionRef.current;if(!N)return[];const g=Array.from(N.querySelectorAll(`[${d}]`));return Array.from(p.itemMap.values()).sort((E,j)=>g.indexOf(E.ref.current)-g.indexOf(j.ref.current))},[p.collectionRef,p.itemMap])}return[{Provider:i,Slot:f,ItemSlot:h},C,n]}function R(e,t,{checkForDefaultPrevented:o=!0}={}){return function(r){if(e?.(r),o===!1||!r.defaultPrevented)return t?.(r)}}var k=globalThis?.document?s.useLayoutEffect:()=>{},Oe=B[" useInsertionEffect ".trim().toString()]||k;function H({prop:e,defaultProp:t,onChange:o=()=>{},caller:n}){const[r,c,i]=De({defaultProp:t,onChange:o}),a=e!==void 0,m=a?e:r;{const l=s.useRef(e!==void 0);s.useEffect(()=>{const d=l.current;d!==a&&console.warn(`${n} is changing from ${d?"controlled":"uncontrolled"} to ${a?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),l.current=a},[a,n])}const f=s.useCallback(l=>{if(a){const d=Le(l)?l(e):l;d!==e&&i.current?.(d)}else c(l)},[a,e,c,i]);return[m,f]}function De({defaultProp:e,onChange:t}){const[o,n]=s.useState(e),r=s.useRef(o),c=s.useRef(t);return Oe(()=>{c.current=t},[t]),s.useEffect(()=>{r.current!==o&&(c.current?.(o),r.current=o)},[o,r]),[o,n,c]}function Le(e){return typeof e=="function"}function $e(e,t){return s.useReducer((o,n)=>t[o][n]??o,e)}var q=e=>{const{present:t,children:o}=e,n=Ue(t),r=typeof o=="function"?o({present:n.isPresent}):s.Children.only(o),c=F(n.ref,Ve(r));return typeof o=="function"||n.isPresent?s.cloneElement(r,{ref:c}):null};q.displayName="Presence";function Ue(e){const[t,o]=s.useState(),n=s.useRef(null),r=s.useRef(e),c=s.useRef("none"),i=e?"mounted":"unmounted",[a,m]=$e(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return s.useEffect(()=>{const f=P(n.current);c.current=a==="mounted"?f:"none"},[a]),k(()=>{const f=n.current,l=r.current;if(l!==e){const v=c.current,h=P(f);e?m("MOUNT"):h==="none"||f?.display==="none"?m("UNMOUNT"):m(l&&v!==h?"ANIMATION_OUT":"UNMOUNT"),r.current=e}},[e,m]),k(()=>{if(t){let f;const l=t.ownerDocument.defaultView??window,d=h=>{const x=P(n.current).includes(CSS.escape(h.animationName));if(h.target===t&&x&&(m("ANIMATION_END"),!r.current)){const p=t.style.animationFillMode;t.style.animationFillMode="forwards",f=l.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=p)})}},v=h=>{h.target===t&&(c.current=P(n.current))};return t.addEventListener("animationstart",v),t.addEventListener("animationcancel",d),t.addEventListener("animationend",d),()=>{l.clearTimeout(f),t.removeEventListener("animationstart",v),t.removeEventListener("animationcancel",d),t.removeEventListener("animationend",d)}}else m("ANIMATION_END")},[t,m]),{isPresent:["mounted","unmountSuspended"].includes(a),ref:s.useCallback(f=>{n.current=f?getComputedStyle(f):null,o(f)},[])}}function P(e){return e?.animationName||"none"}function Ve(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,o=t&&"isReactWarning"in t&&t.isReactWarning;return o?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,o=t&&"isReactWarning"in t&&t.isReactWarning,o?e.props.ref:e.props.ref||e.ref)}var Ge=B[" useId ".trim().toString()]||(()=>{}),Ke=0;function Y(e){const[t,o]=s.useState(Ge());return k(()=>{o(n=>n??String(Ke++))},[e]),e||(t?`radix-${t}`:"")}var We=s.createContext(void 0);function Z(e){const t=s.useContext(We);return e||t||"ltr"}function Be(e){const t=s.useRef(e);return s.useEffect(()=>{t.current=e}),s.useMemo(()=>(...o)=>t.current?.(...o),[])}var L="rovingFocusGroup.onEntryFocus",ze={bubbles:!1,cancelable:!0},_="RovingFocusGroup",[U,J,He]=ke(_),[qe,Q]=V(_,[He]),[Ye,Ze]=qe(_),X=s.forwardRef((e,t)=>u.jsx(U.Provider,{scope:e.__scopeRovingFocusGroup,children:u.jsx(U.Slot,{scope:e.__scopeRovingFocusGroup,children:u.jsx(Je,{...e,ref:t})})}));X.displayName=_;var Je=s.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:o,orientation:n,loop:r=!1,dir:c,currentTabStopId:i,defaultCurrentTabStopId:a,onCurrentTabStopIdChange:m,onEntryFocus:f,preventScrollOnEntryFocus:l=!1,...d}=e,v=s.useRef(null),h=F(t,v),C=Z(c),[x,p]=H({prop:i,defaultProp:a??null,onChange:m,caller:_}),[y,N]=s.useState(!1),g=Be(f),b=J(o),T=s.useRef(!1),[E,j]=s.useState(0);return s.useEffect(()=>{const w=v.current;if(w)return w.addEventListener(L,g),()=>w.removeEventListener(L,g)},[g]),u.jsx(Ye,{scope:o,orientation:n,dir:C,loop:r,currentTabStopId:x,onItemFocus:s.useCallback(w=>p(w),[p]),onItemShiftTab:s.useCallback(()=>N(!0),[]),onFocusableItemAdd:s.useCallback(()=>j(w=>w+1),[]),onFocusableItemRemove:s.useCallback(()=>j(w=>w-1),[]),children:u.jsx(A.div,{tabIndex:y||E===0?-1:0,"data-orientation":n,...d,ref:h,style:{outline:"none",...e.style},onMouseDown:R(e.onMouseDown,()=>{T.current=!0}),onFocus:R(e.onFocus,w=>{const me=!T.current;if(w.target===w.currentTarget&&me&&!y){const K=new CustomEvent(L,ze);if(w.currentTarget.dispatchEvent(K),!K.defaultPrevented){const D=b().filter(I=>I.focusable),pe=D.find(I=>I.active),ve=D.find(I=>I.id===x),he=[pe,ve,...D].filter(Boolean).map(I=>I.ref.current);ne(he,l)}}T.current=!1}),onBlur:R(e.onBlur,()=>N(!1))})})}),ee="RovingFocusGroupItem",te=s.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:o,focusable:n=!0,active:r=!1,tabStopId:c,children:i,...a}=e,m=Y(),f=c||m,l=Ze(ee,o),d=l.currentTabStopId===f,v=J(o),{onFocusableItemAdd:h,onFocusableItemRemove:C,currentTabStopId:x}=l;return s.useEffect(()=>{if(n)return h(),()=>C()},[n,h,C]),u.jsx(U.ItemSlot,{scope:o,id:f,focusable:n,active:r,children:u.jsx(A.span,{tabIndex:d?0:-1,"data-orientation":l.orientation,...a,ref:t,onMouseDown:R(e.onMouseDown,p=>{n?l.onItemFocus(f):p.preventDefault()}),onFocus:R(e.onFocus,()=>l.onItemFocus(f)),onKeyDown:R(e.onKeyDown,p=>{if(p.key==="Tab"&&p.shiftKey){l.onItemShiftTab();return}if(p.target!==p.currentTarget)return;const y=et(p,l.orientation,l.dir);if(y!==void 0){if(p.metaKey||p.ctrlKey||p.altKey||p.shiftKey)return;p.preventDefault();let g=v().filter(b=>b.focusable).map(b=>b.ref.current);if(y==="last")g.reverse();else if(y==="prev"||y==="next"){y==="prev"&&g.reverse();const b=g.indexOf(p.currentTarget);g=l.loop?tt(g,b+1):g.slice(b+1)}setTimeout(()=>ne(g))}}),children:typeof i=="function"?i({isCurrentTabStop:d,hasTabStop:x!=null}):i})})});te.displayName=ee;var Qe={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Xe(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function et(e,t,o){const n=Xe(e.key,o);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(n))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(n)))return Qe[n]}function ne(e,t=!1){const o=document.activeElement;for(const n of e)if(n===o||(n.focus({preventScroll:t}),document.activeElement!==o))return}function tt(e,t){return e.map((o,n)=>e[(t+n)%e.length])}var nt=X,ot=te,O="Tabs",[rt]=V(O,[Q]),oe=Q(),[st,G]=rt(O),re=s.forwardRef((e,t)=>{const{__scopeTabs:o,value:n,onValueChange:r,defaultValue:c,orientation:i="horizontal",dir:a,activationMode:m="automatic",...f}=e,l=Z(a),[d,v]=H({prop:n,onChange:r,defaultProp:c??"",caller:O});return u.jsx(st,{scope:o,baseId:Y(),value:d,onValueChange:v,orientation:i,dir:l,activationMode:m,children:u.jsx(A.div,{dir:l,"data-orientation":i,...f,ref:t})})});re.displayName=O;var se="TabsList",ce=s.forwardRef((e,t)=>{const{__scopeTabs:o,loop:n=!0,...r}=e,c=G(se,o),i=oe(o);return u.jsx(nt,{asChild:!0,...i,orientation:c.orientation,dir:c.dir,loop:n,children:u.jsx(A.div,{role:"tablist","aria-orientation":c.orientation,...r,ref:t})})});ce.displayName=se;var ie="TabsTrigger",ae=s.forwardRef((e,t)=>{const{__scopeTabs:o,value:n,disabled:r=!1,...c}=e,i=G(ie,o),a=oe(o),m=de(i.baseId,n),f=fe(i.baseId,n),l=n===i.value;return u.jsx(ot,{asChild:!0,...a,focusable:!r,active:l,children:u.jsx(A.button,{type:"button",role:"tab","aria-selected":l,"aria-controls":f,"data-state":l?"active":"inactive","data-disabled":r?"":void 0,disabled:r,id:m,...c,ref:t,onMouseDown:R(e.onMouseDown,d=>{!r&&d.button===0&&d.ctrlKey===!1?i.onValueChange(n):d.preventDefault()}),onKeyDown:R(e.onKeyDown,d=>{[" ","Enter"].includes(d.key)&&i.onValueChange(n)}),onFocus:R(e.onFocus,()=>{const d=i.activationMode!=="manual";!l&&!r&&d&&i.onValueChange(n)})})})});ae.displayName=ie;var le="TabsContent",ue=s.forwardRef((e,t)=>{const{__scopeTabs:o,value:n,forceMount:r,children:c,...i}=e,a=G(le,o),m=de(a.baseId,n),f=fe(a.baseId,n),l=n===a.value,d=s.useRef(l);return s.useEffect(()=>{const v=requestAnimationFrame(()=>d.current=!1);return()=>cancelAnimationFrame(v)},[]),u.jsx(q,{present:r||l,children:({present:v})=>u.jsx(A.div,{"data-state":l?"active":"inactive","data-orientation":a.orientation,role:"tabpanel","aria-labelledby":m,hidden:!v,id:f,tabIndex:0,...i,ref:t,style:{...e.style,animationDuration:d.current?"0s":void 0},children:v&&c})})});ue.displayName=le;function de(e,t){return`${e}-trigger-${t}`}function fe(e,t){return`${e}-content-${t}`}var ct=re,it=ce,at=ae,lt=ue;const ut={Antifúngicas:u.jsx(Ne,{className:"w-4 h-4"}),Antibacteriana:u.jsx(Ce,{className:"w-4 h-4"}),Piscinas:u.jsx(Te,{className:"w-4 h-4"}),"Proteção térmica":u.jsx(Ie,{className:"w-4 h-4"}),"Telhados e coberturas":u.jsx(be,{className:"w-4 h-4"})};function vt({items:e}){const t=[...new Set(e.flatMap(n=>n.data.category))].filter(n=>n!="Antibacteriana"),o=n=>e.filter(r=>r.data.category.includes(n));return u.jsx("div",{className:"text-white space-y-4",children:u.jsxs(ct,{defaultValue:t[0],className:"space-y-3 py-2",children:[u.jsxs("div",{className:"p-8 flex lg:flex-row flex-col items-center justify-between gap-4 py-3 border-b border-neutral-200/10",children:[u.jsx("div",{className:"md:text-center text-left font-semibold text-xl",children:"Nossos Produtos"}),u.jsx(it,{className:"*:shrink-0 flex-row inline-flex flex-nowrap overflow-x-auto md:flex-wrap md:justify-center items-center gap-2 max-w-full",children:t.map(n=>u.jsxs(at,{value:n,className:"*:shrink-0 transition-all flex items-center gap-2 cursor-pointer data-[state=inactive]:bg-green-800 data-[state=active]:bg-green-500 data-[state=active]:text-white data-[state=inactive]:text-white/80 ring-green-300 px-4 py-1.5 rounded-full font-medium",children:[ut[n],u.jsx("div",{children:n})]},n))})]}),t.map(n=>u.jsx(lt,{value:n,className:"px-4 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 py-2",children:o(n).map(({data:r})=>u.jsxs("a",{href:`/produto/${r.id}`,className:"transition-all hover:bg-white/5 space-y-3 p-4 rounded-2xl",children:[u.jsx("div",{className:"aspect-square rounded-lg overflow-hidden",children:u.jsx("img",{src:r.cover[0]?.src,className:"aspect-square object-cover object-center"})}),u.jsxs("div",{className:"flex flex-row items-center gap-2 justify-between py-1",children:[u.jsx("div",{className:"font-medium text-lg truncate",children:r.name}),u.jsxs("svg",{className:"w-5 text-white/70",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",children:[u.jsx("rect",{width:"256",height:"256",fill:"none"}),u.jsx("line",{x1:"40",y1:"128",x2:"216",y2:"128",fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"24"}),u.jsx("polyline",{points:"144 56 216 128 144 200",fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"24"})]})]})]}))},n))]})})}export{vt as Products};