{"product_id":"2-in-1-20w-type-c-adapter-cable-combo","title":"ComboWala 2-in-1 Combo – 20W Type-C Fast Charger + C to C \/ C to iPhone Cable","description":"\u003cstyle data-omelette-injected=\"\"\u003ehtml,body{background:transparent}\u003c\/style\u003e\n\u003cp\u003e\u003cscript data-omelette-injected=\"\"\u003e(()=\u003e{{const n=new URLSearchParams(location.search).get(\"theme\");if(n===\"light\"||n===\"dark\"){document.documentElement.dataset.theme=n}}{if(new URLSearchParams(location.search).get(\"_omthumb\")===\"1\"){const n=(f)=\u003e{const g=f.focus;if(!g)return;f.focus=function(h){g.call(this,{...h,preventScroll:true})}};n(HTMLElement.prototype);n(SVGElement.prototype);if(typeof MathMLElement!==\"undefined\"){n(MathMLElement.prototype)}const d=(f)=\u003e{f.removeAttribute(\"autofocus\");f.inert=true;if(!(f instanceof HTMLElement))f.removeAttribute(\"tabindex\")};const p=(f)=\u003e{if(f.hasAttribute(\"autofocus\"))d(f);for(const g of f.querySelectorAll(\"[autofocus]\")){d(g)}};p(document.documentElement);new MutationObserver((f)=\u003e{for(const g of f){for(const h of g.addedNodes){if(h.nodeType===1)p(h)}}}).observe(document,{childList:true,subtree:true})}}{const n=()=\u003e{try{if(document.querySelector('meta[name=\"color-scheme\"]'))return;const d=getComputedStyle(document.documentElement).getPropertyValue(\"color-scheme\").trim();if(d\u0026\u0026d!==\"normal\")return;const p=(y)=\u003e{if(!y)return null;const m=getComputedStyle(y).backgroundColor.match(\/^rgba?\\(\\s*(\\d+)[,\\s]+(\\d+)[,\\s]+(\\d+)(?:[,\\s\/]+([\\d.]+%?))?\\s*\\)$\/);if(!m)return null;const w=m[4]==null?1:parseFloat(m[4])\/(m[4].endsWith(\"%\")?100:1);if(w\u003c0.99)return null;return[+m[1],+m[2],+m[3]]};const f=p(document.body)||p(document.documentElement);if(!f)return;const g=(y)=\u003e{const m=y\/255;return m\u003c=0.04045?m\/12.92:((m+0.055)\/1.055)**2.4};const h=0.2126*g(f[0])+0.7152*g(f[1])+0.0722*g(f[2]);document.documentElement.style.setProperty(\"color-scheme\",h\u003c0.4?\"dark\":\"light\")}catch{}};if(document.readyState===\"complete\")n();else window.addEventListener(\"load\",n)}var I=[\"https:\/\/claude.ai\",\"https:\/\/preview.claude.ai\",\"https:\/\/0a83cf4e-311f-44ce-9fa2-a5c87bbf53ae.claudeusercontent.com\"];var B=true;var K=false;var C=()=\u003e{};if(K===true){try{const n=setTimeout.bind(window);const d=1e4;const p=15;const f=1e4;const g=120000;const h=200;const y=(o)=\u003e{try{let r;if(typeof o===\"string\")r=o;else if(o instanceof URL)r=o.href;else if(typeof Request!==\"undefined\"\u0026\u0026o instanceof Request)r=o.url;else return null;if(!r)return null;const l=document.baseURI;const i=new URL(r,l);if(i.protocol!==\"http:\"\u0026\u0026i.protocol!==\"https:\")return null;if(i.origin!==new URL(l).origin)return null;return i.origin+i.pathname}catch{return null}};const m=new Map;const w=(o)=\u003e{let r=m.get(o);if(!r){if(m.size\u003e=h){const l=m.keys().next().value;if(l!==undefined)m.delete(l)}r={fails:[],until:0,cooldown:f,hard:false};m.set(o,r)}return r};const R=(o)=\u003e{const r=m.get(o);return r!==undefined\u0026\u0026r.until\u003eDate.now()};const O=(o,r)=\u003e{const l=Date.now();const i=w(o);if(r)i.hard=true;if(i.until\u003el)return;i.fails.push(l);while(i.fails.length\u003e0\u0026\u0026i.fails[0]\u003c=l-d)i.fails.shift();if(i.fails.length\u003e=p){i.until=l+i.cooldown;if(i.hard)i.cooldown=Math.min(i.cooldown*2,g);i.fails.length=0;try{n(()=\u003e{try{S(true)}catch{}},i.until-l+100)}catch{}console.warn(\"[omelette] asset circuit breaker: pausing requests to \"+o+\" for \"+Math.round((i.until-l)\/1000)+\"s after \"+p+\" failures in \"+d\/1000+\"s\")}};const e=(o)=\u003e{m.delete(o)};const t=100;const a=new WeakMap;const u=new Set;let s=null;const S=(o)=\u003e{for(const r of Array.from(u)){try{const l=a.get(r);if(l===undefined){u.delete(r);continue}if(o){const i=y(l);if(i!==null\u0026\u0026R(i))continue}a.delete(r);u.delete(r);if(s!==null)s.call(r,l)}catch{}}};C=()=\u003e{try{m.clear();S(false)}catch{}};document.addEventListener(\"visibilitychange\",()=\u003e{if(document.visibilityState===\"visible\")C()});const _=window.fetch;if(typeof _===\"function\"){const o=function(...r){let l=null;try{l=y(r[0])}catch{}if(l!==null\u0026\u0026R(l)){let c;try{if(r[1]\u0026\u0026r[1].signal!==undefined){c=r[1].signal||undefined}else if(typeof Request!==\"undefined\"\u0026\u0026r[0]instanceof Request){c=r[0].signal||undefined}}catch{c=undefined}return new Promise((k,b)=\u003e{const E=()=\u003e{try{return c.reason!==undefined?c.reason:new DOMException(\"The operation was aborted.\",\"AbortError\")}catch{return new DOMException(\"The operation was aborted.\",\"AbortError\")}};try{if(c\u0026\u0026c.aborted){b(E());return}}catch{}let T=false;const j=()=\u003e{if(T)return;T=true;b(E())};try{if(c)c.addEventListener(\"abort\",j,{once:true})}catch{}n(()=\u003e{if(T)return;T=true;try{if(c)c.removeEventListener(\"abort\",j)}catch{}let L;try{L=new Response(null,{status:429,statusText:\"Too Many Requests\",headers:{\"Retry-After\":\"10\"}})}catch{L={ok:false,status:429}}k(L)},250)})}const i=_.apply(window,r);if(l!==null){const c=l;i.then((k)=\u003e{try{if(k.ok)e(c);else if(k.status===401||k.status===403||k.status===404||k.status===429){O(c,k.status!==404)}}catch{}},()=\u003e{})}return i};window.fetch=o}const v=Object.getOwnPropertyDescriptor(HTMLImageElement.prototype,\"src\");if(v!==undefined\u0026\u0026v.set!==undefined\u0026\u0026v.get!==undefined){const o=v.set;s=o;Object.defineProperty(HTMLImageElement.prototype,\"src\",{configurable:true,enumerable:v.enumerable,get:v.get,set(r){const l=`${r}`;try{const i=y(l);if(i!==null\u0026\u0026R(i)){a.set(this,l);if(u.size\u003ct)u.add(this);return}}catch{}try{a.delete(this);u.delete(this)}catch{}o.call(this,l)}})}try{const o=HTMLImageElement.prototype.setAttribute;HTMLImageElement.prototype.setAttribute=function(r,l){if(arguments.length\u003c2){o.apply(this,arguments);return}if(typeof r===\"string\"\u0026\u0026r.toLowerCase()===\"src\"){const i=`${l}`;try{const c=y(i);if(c!==null\u0026\u0026R(c)){a.set(this,i);if(u.size\u003ct)u.add(this);return}a.delete(this);u.delete(this)}catch{}o.call(this,r,i);return}o.call(this,r,l)}}catch{}window.addEventListener(\"error\",(o)=\u003e{try{const r=o.target;if(r instanceof HTMLImageElement){const l=y(r.currentSrc||r.src||\"\");if(l!==null)O(l,true)}}catch{}},true);window.addEventListener(\"load\",(o)=\u003e{try{const r=o.target;if(r instanceof HTMLImageElement){const l=y(r.currentSrc||r.src||\"\");if(l!==null)e(l);const i=a.get(r);if(i!==undefined){let c=false;try{c=new URL(i,document.baseURI).href===new URL(r.currentSrc||r.src||\"\",document.baseURI).href}catch{c=false}if(c){a.delete(r);u.delete(r)}}}}catch{}},true)}catch{}}var J=30000;var G=3000;document.addEventListener(\"DOMContentLoaded\",()=\u003e{const n=window.Babel;const d=\"om-src-id\";if(n\u0026\u0026n.registerPlugin\u0026\u0026!(n.availablePlugins\u0026\u0026n.availablePlugins[d])){n.registerPlugin(d,({types:h})=\u003e({visitor:{JSXOpeningElement(y,m){const w=y.node;if(w.name\u0026\u0026w.name.type===\"JSXMemberExpression\")return;for(let t=0;t\u003cw.attributes.length;t++){const a=w.attributes[t];if(a.type===\"JSXAttribute\"\u0026\u0026a.name\u0026\u0026a.name.name===\"data-om-id\")return}const R=m.file\u0026\u0026m.file.opts\u0026\u0026m.file.opts.filename||\"?\";const O=w.loc\u0026\u0026w.loc.start;const e=`jsx:${R}:${w.start??0}:${O?O.line:0}:${O?O.column+1:0}`;w.attributes.push(h.jsxAttribute(h.jsxIdentifier(\"data-om-id\"),h.stringLiteral(e)))}}}))}const p=\"om-text-extract\";let f=false;if(B\u0026\u0026n\u0026\u0026n.registerPlugin\u0026\u0026!(n.availablePlugins\u0026\u0026n.availablePlugins[p])){const h=window.React;if(h\u0026\u0026h.useSyncExternalStore\u0026\u0026h.createElement){f=true;const y={};const m=new Set;let w=0;window.__omTextO=y;window.__omTextSet=(e)=\u003e{for(const t in e){const a=e[t];if(a==null)delete y[t];else y[t]=a}w++;m.forEach((t)=\u003et())};const R=(e)=\u003e{m.add(e);return()=\u003em.delete(e)};const O=()=\u003ew;window.__OmT=function e(t){h.useSyncExternalStore(R,O,O);return h.createElement(\"span\",{\"data-om-text\":t.i,className:\"__om-t\"},t.i in y?y[t.i]:t.children)};n.registerPlugin(p,({types:e})=\u003e{const t={style:1,script:1,noscript:1,textarea:1,title:1,option:1,text:1,tspan:1,textPath:1};const a={placeholder:1,alt:1,title:1,label:1,\"aria-label\":1,\"aria-description\":1,\"aria-placeholder\":1};const u=(o,r)=\u003ee.logicalExpression(\"??\",e.memberExpression(e.logicalExpression(\"||\",e.memberExpression(e.identifier(\"window\"),e.identifier(\"__omTextO\")),e.objectExpression([])),e.stringLiteral(o),true),r);const s=(o)=\u003eo.file\u0026\u0026o.file.opts\u0026\u0026o.file.opts.filename||\"?\";const S=(o)=\u003eo.file\u0026\u0026o.file.code||\"\";const _=(o,r)=\u003e{const l=(c)=\u003ec\u0026\u0026c.start!=null\u0026\u0026c.end!=null\u0026\u0026(c.type===\"StringLiteral\"||c.type===\"TemplateLiteral\"\u0026\u0026c.expressions.length===0)?[c.start,c.end]:null;const i=l(r);if(i)return i;if(r\u0026\u0026r.type===\"Identifier\"){const c=o.scope.getBinding(r.name);if(c\u0026\u0026c.constant\u0026\u0026c.path.node.type===\"VariableDeclarator\"){return l(c.path.node.init)}}return null};const v=(o,r,l)=\u003e{const i=o.node;let c=false;const k=(E,T)=\u003e{c=true;return e.jsxElement(e.jsxOpeningElement(e.jsxIdentifier(\"__OmT\"),[e.jsxAttribute(e.jsxIdentifier(\"i\"),e.stringLiteral(E))],false),e.jsxClosingElement(e.jsxIdentifier(\"__OmT\")),[T],false)};const b=i.children.map((E)=\u003e{if(E.type===\"JSXText\"){if(E.start==null||E.end==null)return E;const T=l.slice(E.start,E.end);const j=T.length-T.trimStart().length;const L=T.length-T.trimEnd().length;if(j+L\u003e=T.length)return E;return k(`txt:${r}:${E.start+j}:${E.end-L}`,E)}if(E.type===\"JSXExpressionContainer\"){const T=_(o,E.expression);if(T)return k(`str:${r}:${T[0]}:${T[1]}`,E)}return E});if(c)i.children=b};return{visitor:{JSXOpeningElement(o,r){const l=o.node;const i=s(r);const c={};for(let k=0;k\u003cl.attributes.length;k++){const b=l.attributes[k];if(b.type!==\"JSXAttribute\"||!b.name)continue;const E=b.name.name;if(!a[E])continue;if(!b.value||b.value.type!==\"StringLiteral\")continue;if(b.value.start==null||b.value.end==null)continue;const T=`txt:${i}:${b.value.start}:${b.value.end}`;c[E]=T;b.value=e.jsxExpressionContainer(u(T,e.stringLiteral(b.value.value)))}if(Object.keys(c).length){l.attributes.push(e.jsxAttribute(e.jsxIdentifier(\"data-om-text-attrs\"),e.stringLiteral(JSON.stringify(c))))}},JSXElement(o,r){const l=o.node.openingElement;const i=l\u0026\u0026l.name\u0026\u0026l.name.name;if(i===\"__OmT\")return;if(typeof i===\"string\"\u0026\u0026t[i])return;v(o,s(r),S(r))},JSXFragment(o,r){v(o,s(r),S(r))}}}})}}const g=f?[\"transform-react-jsx-source\",d,p]:[\"transform-react-jsx-source\",d];document.querySelectorAll('script[type=\"text\/babel\"],script[type=\"text\/jsx\"]').forEach((h,y)=\u003e{const m=h.getAttribute(\"data-plugins\")||\"\";const w=g.filter((R)=\u003em.indexOf(R)\u003c0);if(w.length){h.setAttribute(\"data-plugins\",m?`${m},${w.join(\",\")}`:w.join(\",\"))}if(!h.hasAttribute(\"data-filename\")){h.setAttribute(\"data-filename\",h.getAttribute(\"src\")||`inline-${y}`)}})});var A=window.parent;var U=\"not editable here — open the project in the Claude Design editor to save\";var W=()=\u003ePromise.resolve({persisted:false,noHost:true,reason:U});var H=W;var M=\"data\/storage.json\";var z=()=\u003e{try{const n=new URL(document.baseURI);const d=n.pathname.match(\/\\\/projects\\\/([^\/]+)\\\/serve\\\/\/);if(d)return d[1];return n.hostname.split(\".\")[0]||\"\"}catch{return location.hostname.split(\".\")[0]||\"\"}};var Z=()=\u003e{try{const n=new URL(document.baseURI);const d=n.pathname.indexOf(\"\/serve\/\");if(d\u003e=0)return n.origin+n.pathname.slice(0,d+\"\/serve\/\".length)+M}catch{}return\".\/\"+M};var x=null;var N=()=\u003e{if(!x){x=fetch(Z(),{cache:\"no-store\"}).then((n)=\u003e{if(n.ok)return n.text();return n.status===404?\"\":null}).catch(()=\u003enull).then((n)=\u003e{if(n===null){x=null;return null}const d=new Map;if(!n)return d;let p;try{p=JSON.parse(n)}catch{console.warn(\"[omelette.storage] \"+M+\" is not valid JSON; treating the store as unreadable so a save cannot overwrite the \"+\"hand-edited bytes. Fix the JSON (or delete the file) to re-enable persistence.\");x=null;return null}if(p===null||typeof p!==\"object\"||Array.isArray(p)){console.warn(\"[omelette.storage] \"+M+\" doesn't hold a JSON object; treating the store as unreadable so a save cannot \"+\"overwrite the hand-edited bytes. Make the top level a JSON object to re-enable persistence.\");x=null;return null}const f=p;if(\"data\"in f){const g=f.data;if(g===null||typeof g!==\"object\"||Array.isArray(g)){console.warn(\"[omelette.storage] \"+M+' has a \"data\" field that is not a JSON object; treating the store as unreadable so a '+'save cannot overwrite the hand-edited bytes. Make \"data\" a JSON object to re-enable persistence.');x=null;return null}const h=f._meta;const y=h!==null\u0026\u0026typeof h===\"object\"?h.project:undefined;if(typeof y===\"string\"\u0026\u0026y!==\"\"\u0026\u0026y!==z())return d;for(const m of Object.keys(g))d.set(m,g[m]);return d}for(const g of Object.keys(f)){if(g!==\"_meta\")d.set(g,f[g])}return d})}return x};var F=(n)=\u003eH(M,JSON.stringify({_meta:{project:z(),version:1},data:Object.fromEntries(n)},null,2));var D=Promise.resolve();var $=(n)=\u003e{const d=D.then(n);D=d.then(()=\u003e{return},()=\u003e{return});return d};var V=\/sk-(?:ant-)?[A-Za-z0-9_-]{16,}|AKIA[0-9A-Z]{16}|gh[pousr]_[A-Za-z0-9]{20,}|xox[a-z]-[A-Za-z0-9][A-Za-z0-9-]{9,}|AIza[0-9A-Za-z_-]{30,}|-----BEGIN [A-Z ]*PRIVATE KEY-----\/;var Y=\/password|passwd|secret|api[_-]?key|access[_-]?token|auth[_-]?token|credential\/i;var Q=(n,d,p)=\u003e{if(V.test(d)||Y.test(n)\u0026\u0026typeof p===\"string\"\u0026\u0026p.length\u003e=8){console.warn('[omelette.storage] the value for \"'+n+'\" looks like a credential. The storage file is a plaintext project file — visible to '+\"everyone with project access and copied when the project is duplicated. Do not store secrets here.\")}};var q={persisted:false,reason:\"could not load the existing store — not overwriting it\"};var X={persisted:false,reason:\"stored value changed since a failed read — re-read this key before saving\"};var P=new Set;var ee={get:(n)=\u003e{if(typeof n!==\"string\"){return Promise.reject(new TypeError(\"storage.get: key must be a string\"))}return $(N).then((d)=\u003e{if(d===null){P.add(n);return null}P.delete(n);if(!d.has(n))return null;const p=d.get(n);return p==null?null:JSON.parse(JSON.stringify(p))})},set:(n,d)=\u003e{if(typeof n!==\"string\"){return Promise.reject(new TypeError(\"storage.set: key must be a string\"))}let p;try{p=JSON.stringify(d)}catch(g){return Promise.reject(new TypeError(\"storage.set: value must be JSON-serializable (\"+String(g)+\")\"))}if(p===undefined){return Promise.reject(new TypeError(\"storage.set: value must be JSON-serializable\"))}Q(n,p,d);const f=JSON.parse(p);return $(()=\u003eN().then((g)=\u003e{if(g===null)return q;if(P.has(n)){if(g.has(n))return X;P.delete(n)}g.set(n,f);return F(g)}))},delete:(n)=\u003e{if(typeof n!==\"string\"){return Promise.reject(new TypeError(\"storage.delete: key must be a string\"))}return $(()=\u003eN().then((d)=\u003e{if(d===null)return q;if(P.has(n)){if(d.has(n))return X;P.delete(n)}d.delete(n);return F(d)}))},keys:()=\u003e$(N).then((n)=\u003en===null?[]:Array.from(n.keys()))};window.omelette={writeFile:(n,d)=\u003eH(n,d).then((p)=\u003e{if(!p.persisted\u0026\u0026!p.noHost){throw new Error(p.reason||\"write failed\")}}),storage:ee};if(A\u0026\u0026A!==window){const n=(e,t)=\u003e{try{A.postMessage({__omelette_log:true,type:e,data:t},\"*\")}catch{}};[\"log\",\"warn\",\"error\"].forEach((e)=\u003e{const t=console[e];console[e]=(...a)=\u003e{const u=a.map((s)=\u003e{try{return typeof s===\"object\"?JSON.stringify(s):String(s)}catch{try{return String(s)}catch{return\"[unstringifiable]\"}}}).join(\" \");n(e,u);t.apply(console,a)}});window.addEventListener(\"error\",(e)=\u003e{const t=e.target;if(t\u0026\u0026t!==window\u0026\u0026t.tagName){const a=t.src||t.href||\"\";n(\"resource_error\",`${t.tagName} failed to load: ${a}`)}else{n(\"error\",`${e.message||\"Unknown error\"} at ${e.filename||\"?\"}:${e.lineno||0}:${e.colno||0}`)}},true);window.addEventListener(\"unhandledrejection\",(e)=\u003e{const t=e.reason;const a=t instanceof Error?`${t.message} ${t.stack}`:String(t);n(\"error\",`Unhandled rejection: ${a}`)});window.addEventListener(\"click\",(e)=\u003e{if(e.defaultPrevented||e.button!==0)return;if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;const t=e.composedPath?e.composedPath():[];const a=[\"button\",\"input\",\"select\",\"textarea\",\"summary\",\"label\"];let u=null;for(const v of t){if(!(v instanceof Element))continue;if(v.localName===\"a\"){if(!(v instanceof HTMLAnchorElement))return;u=v;break}if(a.indexOf(v.localName)!==-1)return}if(!u)return;if(u.isContentEditable)return;const s=u.closest(\"[contenteditable]\");if(s\u0026\u0026s.getAttribute(\"contenteditable\")!==\"false\")return;const S=(u.getAttribute(\"target\")||\"_self\").toLowerCase();if(S!==\"_self\"\u0026\u0026S!==\"_top\"\u0026\u0026S!==\"_parent\")return;let _;try{_=new URL(u.href)}catch{return}if(_.protocol!==\"http:\"\u0026\u0026_.protocol!==\"https:\")return;if(location.origin===\"null\")return;if(_.origin===location.origin)return;e.preventDefault();window.open(_.href,\"_blank\",\"noopener,noreferrer\")});const d=()=\u003e{try{A.postMessage({type:\"omelette:height\",height:document.documentElement.scrollHeight},\"*\")}catch{}};if(window.ResizeObserver)new ResizeObserver(d).observe(document.documentElement);const p=()=\u003e{d();if(!document.querySelector('script[type=\"text\/babel\"],script[type=\"text\/jsx\"]'))return;const e=()=\u003edocument.getElementById(\"root\")||document.querySelector(\"body \u003e div[id]\");const t=e()?.firstElementChild??null;let a=0;const u=()=\u003e{const s=e();if(s\u0026\u0026s.firstElementChild!==t||++a\u003e30){d();return}setTimeout(u,100)};setTimeout(u,100)};if(document.readyState===\"complete\")p();else window.addEventListener(\"load\",p);const f={};let g=0;const h=(e)=\u003enew Promise((t,a)=\u003e{if(!I.length){a(new Error(\"claude.complete: no parent origin\"));return}const u=`c${++g}`;const s=()=\u003esetTimeout(()=\u003e{delete f[u];a(new Error(`claude.complete: no data for ${J\/1000}s`))},J);const S=s();f[u]={resolve:t,reject:a,text:\"\",t:S,arm:s};try{for(const _ of I){A.postMessage({__om_api:true,id:u,body:e},_)}}catch(_){clearTimeout(S);delete f[u];a(_)}});const y=8;const m=async(e,t)=\u003e{if(!Array.isArray(e.messages)){throw new Error(\"claude.complete: tools require a messages array\")}const a=e.messages.slice();const u={...e,tools:e.tools.map((_)=\u003e{if(_===null||typeof _!==\"object\")return _;const v={};for(const o of Object.keys(_)){if(typeof _[o]!==\"function\")v[o]=_[o]}return v})};const s=u.tool_choice;const S=s!=null\u0026\u0026(s.type===\"any\"||s.type===\"tool\")?{...u,tool_choice:s.disable_parallel_tool_use!==undefined?{type:\"auto\",disable_parallel_tool_use:s.disable_parallel_tool_use}:{type:\"auto\"}}:u;for(let _=0;_\u003cy;_++){const v=await h({..._===0?u:S,messages:a});const o=v.message;const r=o\u0026\u0026Array.isArray(o.content)?o.content:null;const l=r?r.filter((c)=\u003ec?.type===\"tool_use\"):[];if(o?.stop_reason!==\"tool_use\"||l.length===0){return v.text}const i=[];for(const c of l){const k=t.get(c.name);if(!k){i.push({type:\"tool_result\",tool_use_id:c.id,content:`no handler for tool \"${c.name}\"`,is_error:true});continue}try{const b=await k(c.input);const E=typeof b===\"string\"?b:O(b)??\"\";i.push({type:\"tool_result\",tool_use_id:c.id,content:E})}catch(b){i.push({type:\"tool_result\",tool_use_id:c.id,content:String(b?.message??b??\"tool handler failed\"),is_error:true})}}a.push({role:\"assistant\",content:r},{role:\"user\",content:i})}throw new Error(`claude.complete: exceeded ${y} tool turns`)};window.claude={complete(e){const t=e;if(t!==null\u0026\u0026typeof t===\"object\"\u0026\u0026Array.isArray(t.tools)\u0026\u0026t.tools.some((a)=\u003ea!==null\u0026\u0026typeof a===\"object\"\u0026\u0026typeof a.run===\"function\")){const a=new Map;for(const u of t.tools){if(u!==null\u0026\u0026typeof u===\"object\"\u0026\u0026typeof u.run===\"function\"){a.set(String(u.name),u.run)}}return m(t,a)}return h(e).then((a)=\u003ea.text)}};const w={};let R=0;H=(e,t)=\u003enew Promise((a)=\u003e{if(!I.length){a({persisted:false,noHost:true,reason:U});return}const u=`f${++R}`;const s=setTimeout(()=\u003e{delete w[u];a({persisted:false,noHost:true,reason:U})},G);w[u]={settle:a,t:s};try{for(const S of I){A.postMessage({__om_file:true,id:u,op:\"write\",path:e,content:t},S)}}catch{clearTimeout(s);delete w[u];a({persisted:false,noHost:true,reason:U})}});const O=(e)=\u003e{try{return JSON.stringify(e)}catch{return JSON.stringify(String(e))}};window.addEventListener(\"message\",(e)=\u003e{if(I.indexOf(e.origin)\u003c0)return;if(e.source!==A)return;const t=e.data;if(!t)return;if(t.type===\"omelette-preview-refresh\"){if(typeof t.token!==\"string\"||!\/^[0-9a-f.-]+(\\.(rc|pr-[0-9]+))?(\\.[0-9]+\\.[0-9a-f]{16})?$\/.test(t.token))return;const s=Math.max(1,Math.floor((t.expiresAt||0)-Date.now()\/1000));document.cookie=\"__Host-omelette-preview=\"+t.token+\"; Path=\/; Secure; SameSite=None; Partitioned; Max-Age=\"+s;C();return}if(t.__om_file_r){const s=w[t.id];if(!s)return;clearTimeout(s.t);delete w[t.id];s.settle(t.ok?{persisted:true}:{persisted:false,reason:t.error||\"write failed\"});return}if(t.__om_api_r){const s=f[t.id];if(!s)return;if(t.error!=null){clearTimeout(s.t);delete f[t.id];s.reject(new Error(t.error));return}if(t.chunk!=null){clearTimeout(s.t);s.t=s.arm();s.text+=t.chunk;return}if(t.done){clearTimeout(s.t);delete f[t.id];s.resolve({text:t.text!=null?t.text:s.text,message:t.message});return}return}if(!t.__om_eval)return;const a=t;const u=(s)=\u003e{e.source.postMessage({...s,__om_eval_r:1,id:a.id},e.origin)};try{const s=(0,eval)(a.code);if(s\u0026\u0026typeof s.then===\"function\"){s.then((S)=\u003eu({ok:1,v:O(S)}),(S)=\u003eu({ok:0,e:String(S)}))}else{u({ok:1,v:O(s)})}}catch(s){u({ok:0,e:String(s)})}})}})();\n\u003c\/script\u003e \u003clink rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/@tabler\/icons-webfont@latest\/dist\/tabler-icons.min.css\"\u003e\u003c\/p\u003e\n\u003cstyle\u003e\n  .cw3 *, .cw3 *::before, .cw3 *::after { box-sizing: border-box; margin: 0; padding: 0; }\n  .cw3 { max-width: 680px; margin: 0 auto; padding: 0 16px 20px; font-family: inherit; color: #1d2a24; }\n  .cw3-trust { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 18px; }\n  .cw3-tc { background: #fffaf2; border: 1px solid #eadfcd; border-radius: 14px; padding: 12px 8px; text-align: center; }\n  .cw3-tc i { font-size: 20px; color: #0b6e4f; display: block; margin-bottom: 5px; }\n  .cw3-tl { font-size: 12px; font-weight: 700; display: block; margin-bottom: 2px; }\n  .cw3-ts { font-size: 11px; color: #5c675f; display: block; line-height: 1.4; }\n  .cw3-sec { margin-bottom: 22px; }\n  .cw3-h { font-size: 19px; font-weight: 800; line-height: 1.3; margin-bottom: 8px; color: #0b6e4f; }\n  .cw3-p { font-size: 14px; line-height: 1.7; color: #4b5a51; }\n  .cw3-st { font-size: 15px; font-weight: 700; margin-bottom: 10px; }\n  .cw3-ben { display: flex; gap: 12px; align-items: flex-start; padding: 10px 0; border-bottom: 1px solid #f0e9dc; }\n  .cw3-ben:last-child { border-bottom: none; }\n  .cw3-bi { width: 36px; height: 36px; border-radius: 10px; background: #e9f7ef; display: flex; align-items: center; justify-content: center; flex: none; }\n  .cw3-bi i { font-size: 17px; color: #0b6e4f; }\n  .cw3-bt { font-size: 13.5px; line-height: 1.55; color: #4b5a51; padding-top: 7px; }\n  .cw3-bt strong { color: #1d2a24; font-weight: 700; }\n  .cw3-tabs input[type=\"radio\"] { display: none; }\n  .cw3-hint { font-size: 12px; color: #8a918b; margin-bottom: 8px; display: flex; align-items: center; gap: 5px; }\n  .cw3-tl2 { display: flex; margin-bottom: 14px; border: 1px solid #eadfcd; border-radius: 12px; overflow: hidden; }\n  .cw3-tab { flex: 1; text-align: center; padding: 10px 8px; font-size: 13px; font-weight: 700; color: #5c675f; background: #fffaf2; cursor: pointer; border-right: 1px solid #eadfcd; user-select: none; -webkit-tap-highlight-color: transparent; }\n  .cw3-tab:last-of-type { border-right: none; }\n  #cw3-a:checked ~ .cw3-tl2 label[for=\"cw3-a\"], #cw3-b:checked ~ .cw3-tl2 label[for=\"cw3-b\"] { background: #0b6e4f; color: #fff; }\n  .cw3-panel { display: none; }\n  #cw3-a:checked ~ .cw3-panels #cw3-pa, #cw3-b:checked ~ .cw3-panels #cw3-pb { display: block; }\n  .cw3-tbl { width: 100%; border-collapse: collapse; font-size: 13px; }\n  .cw3-tbl tr { border-bottom: 1px solid #f0e9dc; }\n  .cw3-tbl tr:last-child { border-bottom: none; }\n  .cw3-tbl td { padding: 9px 4px; vertical-align: top; }\n  .cw3-tbl td:first-child { color: #5c675f; width: 46%; padding-right: 10px; }\n  .cw3-tbl td:last-child { font-weight: 600; }\n  .cw3-box { display: flex; flex-direction: column; gap: 9px; }\n  .cw3-bx { display: flex; align-items: center; gap: 10px; font-size: 13.5px; color: #4b5a51; }\n  .cw3-bx i { font-size: 16px; color: #0b6e4f; flex: none; }\n  @media (max-width: 480px) {\n    .cw3 { padding: 0 10px 16px; }\n    .cw3-h { font-size: 17px; }\n    .cw3-p, .cw3-bt { font-size: 13px; }\n    .cw3-trust { gap: 6px; }\n    .cw3-tc { padding: 10px 4px; border-radius: 10px; }\n    .cw3-tl { font-size: 11px; }\n    .cw3-ts { font-size: 10px; }\n    .cw3-tab { font-size: 12px; padding: 9px 4px; }\n    .cw3-tbl { font-size: 12.5px; }\n  }\n\u003c\/style\u003e\n\u003cdiv class=\"cw3\"\u003e\n\u003cdiv class=\"cw3-trust\"\u003e\n\u003cdiv class=\"cw3-tc\"\u003e\n\u003ci class=\"ti ti-shield-check\"\u003e\u003c\/i\u003e\u003cspan class=\"cw3-tl\"\u003e6-month warranty\u003c\/span\u003e\u003cspan class=\"cw3-ts\"\u003eManufacturing defects covered\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"cw3-tc\"\u003e\n\u003ci class=\"ti ti-refresh\"\u003e\u003c\/i\u003e\u003cspan class=\"cw3-tl\"\u003e7-day return\u003c\/span\u003e\u003cspan class=\"cw3-ts\"\u003eAfter delivery\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"cw3-tc\"\u003e\n\u003ci class=\"ti ti-truck\"\u003e\u003c\/i\u003e\u003cspan class=\"cw3-tl\"\u003eFree shipping\u003c\/span\u003e\u003cspan class=\"cw3-ts\"\u003e3–5 days delivery\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"cw3-sec\"\u003e\n\u003cp class=\"cw3-h\"\u003e2-in-1 Combo: fast charging, sorted.\u003c\/p\u003e\n\u003cp class=\"cw3-p\"\u003eA 20W Type-C fast charger with the cable you need, C to C or C to iPhone. One combo, one price, works with Android and iPhone.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"cw3-sec\"\u003e\n\u003cp class=\"cw3-st\"\u003eWhy you'll love it\u003c\/p\u003e\n\u003cdiv class=\"cw3-ben\"\u003e\n\u003cdiv class=\"cw3-bi\"\u003e\n\u003ci class=\"ti ti-bolt\"\u003e\u003c\/i\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cp class=\"cw3-bt\"\u003e\u003cstrong\u003e20W fast charging\u003c\/strong\u003e. Power Delivery (PD) charges supported phones much faster than a normal 5W charger.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"cw3-ben\"\u003e\n\u003cdiv class=\"cw3-bi\"\u003e\n\u003ci class=\"ti ti-plug\"\u003e\u003c\/i\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cp class=\"cw3-bt\"\u003e\u003cstrong\u003eIndian plug\u003c\/strong\u003e. Fits standard Indian sockets, no converter needed.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"cw3-ben\"\u003e\n\u003cdiv class=\"cw3-bi\"\u003e\n\u003ci class=\"ti ti-shield-lock\"\u003e\u003c\/i\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cp class=\"cw3-bt\"\u003e\u003cstrong\u003eSafe charging\u003c\/strong\u003e. Built-in protection against over-heating, over-charging and short circuit.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"cw3-ben\"\u003e\n\u003cdiv class=\"cw3-bi\"\u003e\n\u003ci class=\"ti ti-device-mobile\"\u003e\u003c\/i\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cp class=\"cw3-bt\"\u003e\u003cstrong\u003ePick your cable\u003c\/strong\u003e. C to C for Android, newer iPhones and iPads. C to iPhone (8-pin) for older iPhones.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"cw3-ben\"\u003e\n\u003cdiv class=\"cw3-bi\"\u003e\n\u003ci class=\"ti ti-briefcase\"\u003e\u003c\/i\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cp class=\"cw3-bt\"\u003e\u003cstrong\u003eCompact \u0026amp; travel-ready\u003c\/strong\u003e. Small enough for your pocket or bag.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"cw3-sec cw3-tabs\"\u003e\n\u003cp class=\"cw3-st\"\u003eFull specs\u003c\/p\u003e\n\u003cinput checked id=\"cw3-a\" name=\"cw3-tab\" type=\"radio\"\u003e\u003cinput id=\"cw3-b\" name=\"cw3-tab\" type=\"radio\"\u003e\n\u003cdiv class=\"cw3-hint\"\u003e\n\u003ci class=\"ti ti-hand-finger\"\u003e\u003c\/i\u003e Tap a tab to switch product specs\u003c\/div\u003e\n\u003cdiv class=\"cw3-tl2\"\u003e\n\u003clabel for=\"cw3-a\" class=\"cw3-tab\"\u003e20W Adapter\u003c\/label\u003e\u003clabel for=\"cw3-b\" class=\"cw3-tab\"\u003eCable\u003c\/label\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"cw3-panels\"\u003e\n\u003cdiv id=\"cw3-pa\" class=\"cw3-panel\"\u003e\n\u003ctable class=\"cw3-tbl\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eType\u003c\/td\u003e\n\u003ctd\u003eType-C wall charger\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eOutput\u003c\/td\u003e\n\u003ctd\u003e20W USB-C Power Delivery\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ePort\u003c\/td\u003e\n\u003ctd\u003e1 × Type-C\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ePlug\u003c\/td\u003e\n\u003ctd\u003eIndian 2-pin\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eInput\u003c\/td\u003e\n\u003ctd\u003e100–240V AC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eProtection\u003c\/td\u003e\n\u003ctd\u003eOver-heat, over-charge, short circuit\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCompatibility\u003c\/td\u003e\n\u003ctd\u003eAndroid, iPhone, iPad, earbuds\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eColour\u003c\/td\u003e\n\u003ctd\u003eWhite\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eWarranty\u003c\/td\u003e\n\u003ctd\u003e6 months (excl. physical \u0026amp; water damage)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"cw3-pb\" class=\"cw3-panel\"\u003e\n\u003ctable class=\"cw3-tbl\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eOptions\u003c\/td\u003e\n\u003ctd\u003eC to C, or C to iPhone (8-pin)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSupports\u003c\/td\u003e\n\u003ctd\u003eFast charging up to 20W + data sync\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eC to C works with\u003c\/td\u003e\n\u003ctd\u003eAndroid, iPhone 15 and newer, iPad, laptops\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eC to iPhone works with\u003c\/td\u003e\n\u003ctd\u003eiPhone 5 to iPhone 14\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eLength\u003c\/td\u003e\n\u003ctd\u003e1 metre\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eColour\u003c\/td\u003e\n\u003ctd\u003eWhite\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eWarranty\u003c\/td\u003e\n\u003ctd\u003e6 months (excl. physical damage)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"cw3-sec\"\u003e\n\u003cp class=\"cw3-st\"\u003eWhat's in the box\u003c\/p\u003e\n\u003cdiv class=\"cw3-box\"\u003e\n\u003cdiv class=\"cw3-bx\"\u003e\n\u003ci class=\"ti ti-circle-check\"\u003e\u003c\/i\u003e20W Type-C adapter\u003c\/div\u003e\n\u003cdiv class=\"cw3-bx\"\u003e\n\u003ci class=\"ti ti-circle-check\"\u003e\u003c\/i\u003e1 cable (C to C or C to iPhone, as selected)\u003c\/div\u003e\n\u003cdiv class=\"cw3-bx\"\u003e\n\u003ci class=\"ti ti-circle-check\"\u003e\u003c\/i\u003eUser manual\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"ComboWala","offers":[{"title":"C to C","offer_id":67564423676152,"sku":null,"price":1099.0,"currency_code":"INR","in_stock":true},{"title":"C to iPhone","offer_id":67564423708920,"sku":null,"price":1099.0,"currency_code":"INR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0806\/1881\/5736\/files\/combowala-2in1-combo.png?v=1791037859","url":"https:\/\/getcombowala.in\/products\/2-in-1-20w-type-c-adapter-cable-combo","provider":"ComboWala","version":"1.0","type":"link"}