1import{c as K,O as $t,r as O,N as ve,f as ge,p as g,y as e,C as H,H as _,J as T,K as j,$ as Ct,F as A,S as L,u as f,x as C,D as dt,q as X,l as ie,E as me,n as v,_ as pe,I as Z,M as Oe,o as xt,G as St,t as ke,i as Je}from"./vue-_wPofmGe.js";import{e as mt,_ as fe}from"./index-AV4uJzyH.js";import{C as Ze}from"./ConfirmModal-BsG2Wolj.js";import{usePreviewStore as Ot}from"./preview-D-iFN_wX.js";import{u as Pt}from"./useToast-DMUvyE4w.js";import{E as Qe}from"./EditorDrawer-BshP4BmO.js";import{C as Dt}from"./ColorPicker-k_9jPY8H.js";import"./axios-C0Zqfgkc.js";const Tt={within_city:"Within city",city_to_city:"City to city",within_state:"Within state",inter_state:"Inter-state",within_country:"Within country",international:"International",importation:"Importation"},ut=[{id:"local",scope:"within_city",icon:'<path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/>',name:"Local / same city",desc:"Pickup and drop-off are in the same city.",namePlaceholder:"e.g. Lagos city delivery",hasPerKm:!0,hasPerKg:!1},{id:"statewide",scope:"within_state",icon:'<polygon points="1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6"/><line x1="8" y1="2" x2="8" y2="18"/><line x1="16" y1="6" x2="16" y2="22"/>',name:"State-wide",desc:"Anywhere within a state or region.",namePlaceholder:"e.g. Lagos State delivery",hasPerKm:!0,hasPerKg:!1},{id:"intercity",scope:"city_to_city",icon:'<rect x="1" y="3" width="15" height="13"/><polygon points="16 8 20 8 23 11 23 16 16 16 16 8"/><circle cx="5.5" cy="18.5" r="2.5"/><circle cx="18.5" cy="18.5" r="2.5"/>',name:"City to city",desc:"A fixed route between two specific cities.",namePlaceholder:"e.g. Lagos to Ibadan",hasPerKm:!1,hasPerKg:!1},{id:"nationwide",scope:"within_country",icon:'<circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/>',name:"Nationwide",desc:"Anywhere within a single country.",namePlaceholder:"e.g. Nigeria nationwide",hasPerKm:!0,hasPerKg:!1},{id:"international",scope:"international",icon:'<path d="M22 2L11 13"/><path d="M22 2L15 22 11 13 2 9l20-7z"/>',name:"International",desc:"Cross-border from one country to another.",namePlaceholder:"e.g. Nigeria to Ghana",hasPerKm:!1,hasPerKg:!0},{id:"importation",scope:"importation",icon:'<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/>',name:"Importation",desc:"Goods arriving from abroad into your country.",namePlaceholder:"e.g. Imports from China",hasPerKm:!1,hasPerKg:!0},{id:"weight",scope:"within_country",icon:'<line x1="12" y1="20" x2="12" y2="10"/><path d="M18 20V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16"/><path d="M2 20h20"/>',name:"By weight (kg)",desc:"Charge per kilogram â for parcels, cargo or freight.",namePlaceholder:"e.g. Standard parcel rate",hasPerKm:!1,hasPerKg:!0}],Xe=[{code:"pending",label:"Pending"},{code:"assigned",label:"Assigned"},{code:"picked_up",label:"Picked up"},{code:"in_transit",label:"In transit"},{code:"delivered",label:"Delivered"},{code:"cancelled",label:"Cancelled"},{code:"failed",label:"Failed"}];function At(s){return Tt[s]||s}function ct(s){return Xe.find($=>$.code===s)?.label||s}function vt(s,$){return Number.isFinite(s)?`${(s/100).toFixed(2)} ${$||"USD"}`:""}function Rt(s){return(s||"").split(/\s+/).filter(Boolean).slice(0,2).map($=>$[0].toUpperCase()).join("")||"?"}function pt(s,$){return s?s.length>$?s.slice(0,$)+"...":s:""}function gt(s){return s.scope==="within_city"?"local":s.scope==="city_to_city"?"intercity":s.scope==="within_state"?"statewide":s.scope==="international"?"international":s.scope==="importation"?"importation":s.scope==="within_country"&&(s.per_kg_minor>0||s.weight_min_kg||s.weight_max_kg)?"weight":"nationwide"}function Et(s){const $=[At(s.scope)];switch(s.scope){case"within_city":s.origin_city?$.push(s.origin_city):s.origin_state?$.push(s.origin_state):s.origin_country&&$.push(s.origin_country);break;case"city_to_city":$.push(`${s.origin_city||s.origin_country||"?"} to ${s.dest_city||s.dest_country||"?"}`);break;case"within_state":s.origin_state?$.push(s.origin_state):s.origin_country&&$.pu
1sh(s.origin_country);break;case"inter_state":case"within_country":s.origin_country&&$.push(s.origin_country);break;case"international":case"importation":$.push(`${s.origin_country||"?"} to ${s.dest_country||"?"}`);break}return $.join(" · ")}function jt(s,$){const x=$||"USD",i=s.base_fee_minor/100,y=s.per_km_minor/100,P=s.per_kg_minor/100,d=[];return(i>0||!y&&!P)&&d.push(`${i.toFixed(2)} ${x}`),y>0&&d.push(`+ ${y.toFixed(2)}/km`),P>0&&d.push(`+ ${P.toFixed(2)}/kg`),d.join(" ")||"â"}function Mt(s){const $=Ot(),x=mt(),{toast:i}=Pt();function y(){return{"X-Editor-Token":localStorage.getItem("editor_token")??"","Content-Type":"application/json"}}async function P(){const a=x.currentApp?.app_id;a&&await fetch(`/api/v2/editor/publish/bust-cache?app_id=${a}`,{headers:{"X-Editor-Token":localStorage.getItem("editor_token")??""}}).catch(()=>{}),$.refresh()}function d(){P()}const u=ve({feature_name:"Delivery",page_title:"Delivery",order_label:"Order",layout:"atlas",theme:"midnight",hero_text:"",hero_subtext:"",cta_text:"New delivery",empty_text:"No active deliveries",welcome_text:"",currency:"USD",enable_cod:!0,require_login:!0,push_enabled:!0,require_proof_photo:!0,require_otp:!1,require_signature:!1,enable_driver_apply:!0,driver_revenue_percent:70,platform_fee_percent:30,scheduling_enabled:!0,rating_enabled:!0,tipping_enabled:!0,default_distance_km:5,default_country:"",default_region:"",default_city:"",payout_threshold_minor:0,country_iso2:"",country_name:"",map_provider:"osm",map_provider_key:"",support_email:"",support_phone:""}),o=ve({bg:"",surface:"",text:"",sub:"",accent:"",accentEnd:"",headerBg:"",headerTitle:"",headerIcon:""}),c=O({total:0,pending:0,assigned:0,picked_up:0,in_transit:0,delivered:0,cancelled:0,failed:0,drivers_total:0,drivers_active:0,drivers_suspended:0,apps_pending:0,apps_approved:0,apps_rejected:0}),h=K(()=>(c.value.assigned||0)+(c.value.picked_up||0)+(c.value.in_transit||0)),k=O([]),N=new Map;async function ee(){if(!k.value.length)try{const n=await(await fetch("/api/v2/editor/delivery/locations",{headers:y()})).json();if(n.error)throw new Error(n.message);k.value=n.countries??[]}catch{}}async function J(a){if(!a)return null;const n=a.toUpperCase();if(N.has(n))return N.get(n);try{const R=await(await fetch(`/api/v2/editor/delivery/locations?iso2=${n}`,{headers:y()})).json();if(R.error)return null;const E=R.country;return N.set(n,E),E}catch{return null}}function I(a){const n=k.value.find(p=>p.iso2===a);n&&(u.country_iso2=n.iso2,u.country_name=n.name,n.currency&&(u.currency=n.currency),Ye(),J(n.iso2))}const z=K(()=>k.value.find(a=>a.iso2===u.country_iso2)?.symbol||""),q=25,b=O([]),t=O(!1),l=O(""),W=O(""),te=O(1),D=O(0),r=O(1),m=O(new Set),B=O(!1),V=O(null),de=K(()=>b.value.length>0&&b.value.every(a=>m.value.has(a.order_id)));function M(){de.value?m.value.clear():b.value.forEach(a=>m.value.add(a.order_id))}function Y(a){m.value.has(a)?m.value.delete(a):m.value.add(a)}function ye(a){V.value=a,B.value=!0}let ue=null;function we(){ue&&clearTimeout(ue),ue=setTimeout(()=>se(!0),350)}function Ae(a){const n=te.value+a;n<1||n>r.value||(te.value=n,se(!1))}async function se(a){if(!t.value){t.value=!0,a&&(te.value=1,m.value.clear());try{const n=(te.value-1)*q,p=new URLSearchParams({status:l.value,q:W.value,offset:String(n),limit:String(q)}),E=await(await fetch(`/api/v2/editor/delivery/${s()}/orders?${p}`,{headers:y()})).json();if(E.error)throw new Error(E.message);b.value=E.orders??[];const be=E.total??b.value.length;D.value=be,r.value=Math.max(1,Math.ceil(be/q))}catch(n){i(n?.message??"Failed to load orders","error")}finally{t.value=!1}}}async function Re(a,n){if(n!==a.status)try{const R=await(await fetch(`/api/v2/editor/delivery/${s()}/orders/${a.order_id}/status`,{method:"POST",headers:y(),body:JSON.stringify({status:n})})).json();if(R.error)throw new Error(R.message);a.status=n,d(),le(),i("Status updated")}catch(p){i(p?.message??"Failed","error")}}async function Ee(a,n){const p=n===""?0:Number(n);try{const E=await(await fetch(`/api/v2/editor/delivery/${s()}/orders/${a.order_id}/assign`,{method:"POST",headers:y(),body:JSON.stringify({rider_id:p})})).json();if(E.error)throw new Error(E.message);a.rider_id=p||null,p&&a.status==="pending"&&(a.status="assigned"),d(),i("Driver assigned")}catch(R){i(R?.message??"Failed","error")}}async function je(a){const n=V.value;!n||a===n.status||await Re(n,a)}async function Me(a){const n=V.value;n&&await Ee(n,a)}const U=O(null);function Fe(a){U.value={title:"Delete order",confirmText:"Delete",message:`Delete order #${a.tracking_code}? This cannot be undone.`,run:async()=>{try{const p=await(await fetch(`/api/v2/editor/delivery/${s()}/orders/${a.order_id}`,{method:"DELETE",headers:y()})).json();if(p.error)throw new Error(p.message);b.value=b.value.filter(R=>R.order_id!==a.order_id),U.value=null,le(),i("Order deleted")}catch(n){U.value=null,i(n?.message??"Failed","error")}}}}async function $e(){const a=[...m.value];if(!a.length||!confirm(`Delete ${a.length} order${a.length>
11?"s":""}? This cannot be undone.`))return;let n=0;for(const p of a)try{if((await(await fetch(`/api/v2/editor/delivery/${s()}/orders/${p}`,{method:"DELETE",headers:y()})).json()).error){n++;continue}b.value=b.value.filter(be=>be.order_id!==p),m.value.delete(p)}catch{n++}n?i(`${n} order(s) could not be deleted`,"error"):i("Orders deleted"),le(),se(!0)}const oe=O([]),he=O(!1),re=ve({rider_id:0,name:"",phone:"",email:"",vehicle_type:"",vehicle_plate:"",avatar:"",bio:"",city:"",country:"",is_active:!0,is_available:!0}),Ie=K(()=>oe.value.filter(a=>a.is_active));async function ce(){try{const n=await(await fetch(`/api/v2/editor/delivery/${s()}/drivers`,{headers:y()})).json();if(n.error)throw new Error(n.message);oe.value=n.drivers??[]}catch(a){i(a?.message??"Failed to load drivers","error")}}function Le(){Object.assign(re,{rider_id:0,name:"",phone:"",email:"",vehicle_type:"",vehicle_plate:"",avatar:"",bio:"",city:"",country:"",is_active:!0,is_available:!0}),he.value=!0}function Ce(a){Object.assign(re,{rider_id:a.rider_id,name:a.name,phone:a.phone,email:a.email,vehicle_type:a.vehicle_type,vehicle_plate:a.vehicle_plate,avatar:a.avatar,bio:a.bio,city:a.city,country:a.country,is_active:a.is_active,is_available:a.is_available}),he.value=!0}function Pe(){he.value=!1}async function Ne(){if(re.name.trim())try{const n=await(await fetch(`/api/v2/editor/delivery/${s()}/driver`,{method:"POST",headers:y(),body:JSON.stringify(re)})).json();if(n.error)throw new Error(n.message);Pe(),await ce(),le(),i(re.rider_id?"Driver updated":"Driver created")}catch(a){i(a?.message??"Failed","error")}}async function qe(a){if(a.name?.trim())try{const p=await(await fetch(`/api/v2/editor/delivery/${s()}/driver`,{method:"POST",headers:y(),body:JSON.stringify(a)})).json();if(p.error)throw new Error(p.message);await ce(),le(),i(a.rider_id?"Driver updated":"Driver created")}catch(n){i(n?.message??"Failed","error")}}async function Ve(a){try{const p=await(await fetch(`/api/v2/editor/delivery/${s()}/driver/${a.rider_id}/delete`,{method:"POST",headers:y()})).json();if(p.error)throw new Error(p.message);await ce(),le(),i("Driver suspended")}catch(n){i(n?.message??"Failed","error")}}function Be(a){U.value={title:"Suspend driver",confirmText:"Suspend",message:`Suspend ${a.name}? They will no longer receive new assignments.`,run:async()=>{try{const p=await(await fetch(`/api/v2/editor/delivery/${s()}/driver/${a.rider_id}/delete`,{method:"POST",headers:y()})).json();if(p.error)throw new Error(p.message);U.value=null,await ce(),le(),i("Driver suspended")}catch(n){U.value=null,i(n?.message??"Failed","error")}}}}const xe=O([]),_e=O(!1),F=ve({rule_id:0,name:"",delivery_type:"local",scope:"within_country",origin_country:"",origin_state:"",origin_city:"",dest_country:"",dest_state:"",dest_city:"",base_fee_minor:0,per_km_minor:0,per_kg_minor:0,weight_min_kg:null,weight_max_kg:null,min_fee_minor:0,max_fee_minor:0,is_active:!0,position:0,_preset:void 0,_usePerKm:!1,_useCap:!1});async function G(){try{const n=await(await fetch(`/api/v2/editor/delivery/${s()}/pricing`,{headers:y()})).json();if(n.error)throw new Error(n.message);xe.value=n.rules??[]}catch(a){i(a?.message??"Failed to load pricing rules","error")}}function Ue(){Object.assign(F,{rule_id:0,name:"",delivery_type:"local",scope:"within_country",origin_country:u.country_name||u.default_country||"",origin_state:u.default_region||"",origin_city:u.default_city||"",dest_country:"",dest_state:"",dest_city:"",base_fee_minor:0,per_km_minor:0,per_kg_minor:0,weight_min_kg:null,weight_max_kg:null,min_fee_minor:0,max_fee_minor:0,is_active:!0,position:xe.value.length,_preset:void 0,_usePerKm:!1,_useCap:!1}),_e.value=!0}function ae(a){Object.assign(F,a),F._preset=gt(a),F._usePerKm=a.per_km_minor>0,F._useCap=a.min_fee_minor>0||a.max_fee_minor>0,_e.value=!0}function De(){_e.value=!1}function Ge(a){a&&J(a)}function ne(a){a&&J(a)}async function S(){if(F.name.trim()){F._usePerKm||(F.per_km_minor=0),F._useCap||(F.min_fee_minor=0,F.max_fee_minor=0),F.delivery_type=F.scope==="international"?"international":F.scope==="importation"?"importation":"local";try{const n=await(await fetch(`/api/v2/editor/delivery/${s()}/pricing`,{method:"POST",headers:y(),body:JSON.stringify(F)})).json();if(n.error)throw new Error(n.message);De(),await G(),d(),i(F.rule_id?"Rule updated":"Rule created")}catch(a){i(a?.message??"Failed","error")}}}async function w(a){if(a.name?.trim()){a._usePerKm||(a.per_km_minor=0),a._useCap||(a.min_fee_minor=0,a.max_fee_minor=0),a.delivery_type=a.scope==="international"?"international":a.scope==="importation"?"importation":"local";try{const p=await(await fetch(`/api/v2/editor/delivery/${s()}/pricing`,{method:"POST",headers:y(),body:JSON.stringify(a)})).json();if(p.error)throw new Error(p.message);await G(),d(),i(a.rule_id?"Rule updated":"Rule created")}catch(n){i(n?.message??"Failed","error")}}}async function Q(a){try{const p=await(await fetch(`/api/v2/editor/delivery/${s()}/pricing/${a.rule_id}/delete`,{method:"POST",headers:y()})).json();if(p.error)throw new Error(p.message);await G(),d(),i("Rule deleted")}catch(n){i(n?.message??"Failed","error")}}function ft(a){U.value={title:"Delete pricing rule",confirmText:"Delete",message:`Delete "${a.name}"? Customers will no longer see this option.`,run:async()=>{try{const p=await(await fetch(`/api/v2/editor/delivery/${s()}/pricing/${a.rule_id}/delete`,{method:"POST",headers:y()})).json();if(p.error)throw new Error(p.message);U.value=null,await G(),d(),i("Rule deleted")}catch(n){U.value=null,i(n?.message??"Failed","error")}}}}const et=[{code:"stripe",name:"Stripe",initial:"S",color:"#635BFF",desc:"Cards globally. Best for international flows."},{code:"paypal",name:"PayPal",initial:"P",color:"#0070BA",desc:"PayPal balance + cards. Good buyer trust."},{code:"paystack",name:"Paystack",initial:"PS",color:"#011B33",desc:"Africa-focused. NGN, GHS, ZAR, KES."}],Se=ve({stripe:{status:"inactive",test_mode:!0,label_name:"Stripe",public_key:"",secret_key:"",paypal_client_id:"",paypal_client_secret:"",has_secret_key:!1,has_paypal_client_secret:!1},paypal:{status:"inactive",test_mode:!0,label_name:"PayPal",public_key:"",secret_key:"",paypal_client_id:"",paypal_client_secret:"",has_secret_key:!1,has_paypal_client_secret:!1},paystack:{status:"inactive",test_mode:!0,label_name:"Paystack",public_key:"",secret_key:"",paypal_client_id:"",paypal_client_secret:"",has_secret_key:!1,has_paypal_client_secret:!1}}),Ke=O(null);function yt(a){return Se[a]}const tt=O([]),He=O(!1),st=O(0);async function at(){He.value=!0;try{const n=await(await fetch(`/api/v2/editor/delivery/${s()}/payout-requests`,{headers:y()})).json();if(n.error)throw new Error(n.message);tt.value=n.requests??[],st.value=Number(n.pending_count??0)}catch(a){i(a?.message??"Failed to load payout requests","error")}finally{He.value=!1}}async function ht(a,n,p=""){try{const E=await(await fetch(`/api/v2/editor/delivery/${s()}/payout-requests/${a}/${n}`,{method:"POST",headers:y(),body:JSON.stringify({note:p})})).json();if(E.error)throw new Error(E.message);await at(),i("Payout request updated")}catch(R){i(R?.message??"Failed to update payout request","error")}}async function ot(){try{const n=await(await fetch(`/api/v2/editor/delivery/${s()}/gateways`,{headers:y()})).json();if(n.error)throw new Error(n.message);for(const p of n.gateways??[]){const R=Se[p.gateway_code];R&&Object.assign(R,{status:p.status,test_mode:p.test_mode,label_name:p.label_name||"",public_key:p.public_key||"",paypal_client_id:p.paypal_client_id||"",has_secret_key:!!p.has_secret_key,has_paypal_client_secret:!!p.has_paypal_client_secret,secret_key:"",paypal_client_secret:""})}}catch(a){i(a?.message??"Failed to load gateways","error")}}async function rt(a){const n=Se[a];if(n){Ke.value=a;try{const p={};
1(a==="stripe"||a==="paystack")&&(n.public_key&&(p.public_key=n.public_key),n.secret_key&&(p.secret_key=n.secret_key)),a==="paypal"&&(n.paypal_client_id&&(p.client_id=n.paypal_client_id),n.paypal_client_secret&&(p.client_secret=n.paypal_client_secret));const E=await(await fetch(`/api/v2/editor/delivery/${s()}/gateways`,{method:"POST",headers:y(),body:JSON.stringify({gateway_code:a,label_name:n.label_name,active:n.status==="active",test_mode:n.test_mode,credentials:p})})).json();if(E.error)throw new Error(E.message);n.secret_key="",n.paypal_client_secret="",await ot(),i(et.find(be=>be.code===a)?.name+" saved")}catch(p){i(p?.message??"Failed","error")}finally{Ke.value=null}}}function _t(a){const n=Se[a];n&&(n.status=n.status==="active"?"inactive":"active",rt(a))}const Te=O(!0),ze=O(!1);function nt(){if(Te.value)return;const a={};for(const[n,p]of Object.entries(o))p&&(a[n]=p);$.postToPreview("delivery-settings",{value_id:s(),layout:u.layout,theme:u.theme,customColors:a})}async function le(){Te.value=!0;try{const n=await(await fetch(`/api/v2/editor/delivery/${s()}`,{headers:y()})).json();if(n.error)throw new Error(n.message);const p=n.settings??{};Object.assign(u,{feature_name:p.feature_name??"Delivery",page_title:p.page_title??"Delivery",order_label:p.order_label??"Order",layout:p.layout??"atlas",theme:p.theme??"midnight",hero_text:p.hero_text??"",hero_subtext:p.hero_subtext??"",cta_text:p.cta_text??"New delivery",empty_text:p.empty_text??"No active deliveries",welcome_text:p.welcome_text??"",currency:p.currency??"USD",enable_cod:!!p.enable_cod,require_login:!!p.require_login,push_enabled:!!p.push_enabled,require_proof_photo:!!p.require_proof_photo,require_otp:!!p.require_otp,require_signature:!!p.require_signature,enable_driver_apply:!!p.enable_driver_apply,driver_revenue_percent:Number(p.driver_revenue_percent??70),platform_fee_percent:Number(p.platform_fee_percent??30),scheduling_enabled:!!p.scheduling_enabled,rating_enabled:!!p.rating_enabled,tipping_enabled:!!p.tipping_enabled,default_distance_km:Number(p.default_distance_km??5),payout_threshold_minor:Math.max(0,Number(p.payout_threshold_minor??0)),default_country:p.default_country??"",default_region:p.default_region??"",default_city:p.default_city??"",country_iso2:p.country_iso2??"",country_name:p.country_name??"",map_provider:p.map_provider??"osm",map_provider_key:p.map_provider_key??"",support_email:p.support_email??"",support_phone:p.support_phone??""});const R=p.custom_colors??{};for(const E of Object.keys(o))o[E]=R[E]??"";c.value=n.stats??c.value}catch(a){i(a?.message??"Failed to load delivery settings","error")}finally{Te.value=!1,$t(()=>nt())}}let We=null;function Ye(){lt(800)}function bt(){lt(50)}function lt(a){We&&clearTimeout(We),We=setTimeout(it,a)}async function it(){ze.value=!0;try{const a={};for(const[R,E]of Object.entries(o))E&&(a[R]=E);const p=await(await fetch(`/api/v2/editor/delivery/${s()}/settings`,{method:"POST",headers:y(),body:JSON.stringify({...u,custom_colors:a})})).json();if(p.error)throw new Error(p.message);d()}catch(a){i(a?.message??"Save failed.","error")}finally{ze.value=!1}}function kt(){const a=Math.max(0,Math.min(100,Number(u.driver_revenue_percent)||0));u.driver_revenue_percent=a,u.platform_fee_percent=+(100-a).toFixed(2),Ye()}function wt(a){return a?oe.value.find(n=>n.rider_id===a)?.name||String(a):""}return{settings:u,customColors:o,stats:c,activeCount:h,loading:Te,autoSaving:ze,countriesList:k,orders:b,ordersLoading:t,orderFilter:l,orderSearch:W,orderPage:te,orderTotalCount:D,orderTotalPages:r,selectedOrderIds:m,allOrdersSelected:de,orderDrawerOpen:B,drawerOrder:V,drivers:oe,activeDrivers:Ie,driverModalOpen:he,driverForm:re,rules:xe,ruleModalOpen:_e,ruleForm:F,gatewayStates:Se,savingGateway:Ke,payoutRequests:tt,payoutRequestsLoading:He,payoutPendingCount:st,confirmAction:U,load:le,loadOrders:se,loadDrivers:ce,loadRules:G,loadGateways:ot,ensureCountriesLoaded:ee,loadCountryDetail:J,pickCountry:I,operatorCurrencySymbol:z,refreshPreview:d,pushSettingsToPreview:nt,debouncedSave:Ye,debouncedSaveFast:bt,saveSettings:it,onRevenueChange:kt,toggleOrdersSelectAll:M,toggleOrderSelected:Y,openOrderDrawer:ye,onDrawerStatusChange:je,onDrawerAssignRider:Me,bulkDeleteOrders:$e,debouncedReloadOrdersSearch:we,changeOrderPage:Ae,confirmDeleteOrder:Fe,startAddDriver:Le,startEditDriver:Ce,closeDriverModal:Pe,saveDriver:Ne,confirmDeleteDriver:Be,saveDriverPayload:qe,suspendDriver:Ve,startAddRule:Ue,startEditRule:ae,closeRuleModal:De,onRuleOriginIso:Ge,onRuleDestIso:ne,saveRule:S,confirmDeleteRule:ft,saveRulePayload:w,deleteRule:Q,GATEWAYS:et,gatewayState:yt,saveGateway:rt,toggleGatewayActive:_t,loadPayoutRequests:at,updatePayoutRequestStatus:ht,driverName:wt,headers:y}}const Ft={class:"dl-tab"},It={class:"ed-card"},Lt={class:"stats-strip"},Nt={class:"stat-pill"},qt={class:"stat-val"},Vt={class:"stat-pill stat-pill--warn"},Bt={class:"stat-val"},Ut={class:"stat-pill stat-pill--info"},Gt={class:"stat-val"},Kt={class:"stat-pill stat-pill--ok"},Ht={class:"stat-val"},zt={class:"ed-card"},Wt={class:"toolbar"},Yt=["value"],Jt={key:0,class:"bulk-bar"},Xt={class:"table-scroll"},Zt={class:"data-table"},Qt={class:"select-col"},es=["checked"],ts={key:0},ss={key:1},as=["onClick"],os=["checked","onChange"],rs={class:"route-cell"},ns={class:"route-line"},ls={class:"route-line"},is={class:"num"},ds={class:"num"},us=["onClick"],cs={key:1,class:"pager"},vs=["disabled"],ps=["disabled"],ms={class:"form-group"},gs={class:"route-block"},fs={class:"route-line"},ys={class:"route-line"},hs={class:"form-group"},_s={class:"value"},bs={key:0,class:"muted"},ks={class:"form-row form-row--2"},ws={class:"form-group"},$s={class:"value"},Cs={class:"form-group"},xs={class:"value"},Ss={class:"form-group"},Os=["value"],Ps=["value"],Ds={class:"form-group"},Ts=["value"],As=["value"],Rs=ge({__name:"OrdersTab",props:{stats:{},activeCount:{},orders:{},ordersLoading:{type:Boolean},orderFilter:{},orderSearch:{},orderPage:{},orderTotalCount:{},orderTotalPages:{},selectedOrderIds:{},allOrdersSelected:{type:Boolean},orderDrawerOpen:{type:Boolean},drawerOrder:{},activeDrivers:{}},emits:["update:orderFilter","update:orderSearch","update:orderDrawerOpen","loadOrders","toggleSelectAll","toggleSelected","openDrawer","drawerStatusChange","drawerAssignRider","bulkDelete","confirmDelete","debouncedSearch","changePage"],setup(s,{emit:$}){const x=s,i=$,y=K({get:()=>x.orderFilter,set:b=>i("update:orderFilter",b)}),P=K({get:()=>x.orderSearch,set:b=>i("update:orderSearch",b)}),d=K({get:()=>x.orderDrawerOpen,set:b=>i("update:orderDrawerOpen",b)});function u(b){i("loadOrders",b)}function o(){i("toggleSelectAll")}function c(b){i("toggleSelected",b)}function h(b){i("openDrawer",b)}function k(b){i("drawerStatusChange",b)}function N(b){i("drawerAssignRider",b)}function ee(){i("bulkDelete")}function J(b){i("confirmDelete",b)}function I(){i("debouncedSearch")}function z(b){i("changePage",b)}function q(b){return b?x.activeDrivers.find(l=>l.rider_id===b)?.name||String(b):""}return(b,t)=>(v(),g("div",Ft,[e("div",It,[t[17]||(t[17]=H('<div class="ed-card-header" data-v-90169d07>
1<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-90169d07><rect x="2" y="3" width="20" height="14" rx="2" data-v-90169d07></rect><path d="M8 21h8" data-v-90169d07></path><path d="M12 17v4" data-v-90169d07></path></svg><span data-v-90169d07>Overview</span></div>',1)),e("div",Lt,[e("div",Nt,[e("div",qt,_(s.stats.total),1),t[13]||(t[13]=e("div",{class:"stat-lab"},"Total",-1))]),e("div",Vt,[e("div",Bt,_(s.stats.pending),1),t[14]||(t[14]=e("div",{class:"stat-lab"},"Pending",-1))]),e("div",Ut,[e("div",Gt,_(s.activeCount),1),t[15]||(t[15]=e("div",{class:"stat-lab"},"Active",-1))]),e("div",Kt,[e("div",Ht,_(s.stats.delivered),1),t[16]||(t[16]=e("div",{class:"stat-lab"},"Delivered",-1))])])]),e("div",zt,[t[31]||(t[31]=e("div",{class:"ed-card-header"},[e("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"})]),e("span",null,"Orders")],-1)),t[32]||(t[32]=e("p",{class:"ed-card-desc"},"Search, filter, assign drivers, update status or delete orders. Click a row to open the detail drawer.",-1)),e("div",Wt,[T(e("input",{class:"form-input",type:"search","onUpdate:modelValue":t[0]||(t[0]=l=>P.value=l),placeholder:"Search tracking code, customer, address...",onInput:I},null,544),[[j,P.value]]),T(e("select",{class:"form-input form-input--narrow","onUpdate:modelValue":t[1]||(t[1]=l=>y.value=l),onChange:t[2]||(t[2]=l=>u(!0))},[t[18]||(t[18]=e("option",{value:""},"All statuses",-1)),(v(!0),g(A,null,L(f(Xe),l=>(v(),g("option",{key:l.code,value:l.code},_(l.label),9,Yt))),128))],544),[[Ct,y.value]])]),s.selectedOrderIds.size?(v(),g("div",Jt,[e("span",null,_(s.selectedOrderIds.size)+" selected",1),e("button",{class:"ed-btn-primary",type:"button",style:{background:"var(--ui-surface-2)",color:"var(--ed-color-title)","margin-left":"auto"},onClick:t[3]||(t[3]=l=>s.selectedOrderIds.clear())},"Clear"),e("button",{class:"ed-btn-danger",type:"button",onClick:ee},"Delete selected")])):C("",!0),e("div",Xt,[e("table",Zt,[e("thead",null,[e("tr",null,[e("th",Qt,[e("input",{type:"checkbox",checked:s.allOrdersSelected,onChange:o},null,40,es)]),t[19]||(t[19]=e("th",null,"Code",-1)),t[20]||(t[20]=e("th",null,"Route",-1)),t[21]||(t[21]=e("th",null,"Customer",-1)),t[22]||(t[22]=e("th",{class:"num"},"Fee",-1)),t[23]||(t[23]=e("th",{class:"num"},"Distance",-1)),t[24]||(t[24]=e("th",null,"Status",-1)),t[25]||(t[25]=e("th",null,"Driver",-1)),t[26]||(t[26]=e("th",null,null,-1))])]),e("tbody",null,[s.ordersLoading&&!s.orders.length?(v(),g("tr",ts,[...t[27]||(t[27]=[e("td",{colspan:"9",class:"empty-row"},"Loading...",-1)])])):s.orders.length?C("",!0):(v(),g("tr",ss,[...t[28]||(t[28]=[e("td",{colspan:"9",class:"empty-row"},"No orders found.",-1)])])),(v(!0),g(A,null,L(s.orders,l=>(v(),g("tr",{key:l.order_id,class:"data-row",onClick:W=>h(l)},[e("td",{class:"select-col",onClick:t[4]||(t[4]=dt(()=>{},["stop"]))},[e("input",{type:"checkbox",checked:s.selectedOrderIds.has(l.order_id),onChange:W=>c(l.order_id)},null,40,os)]),e("td",null,[e("code",null,"#"+_(l.tracking_code),1)]),e("td",rs,[e("div",ns,[t[29]||(t[29]=e("span",{class:"rt-dot rt-dot--from"},null,-1)),e("span",null,_(f(pt)(l.pickup_address,30)),1)]),e("div",ls,[t[30]||(t[30]=e("span",{class:"rt-dot rt-dot--to"},null,-1)),e("span",null,_(f(pt)(l.dropoff_address,30)),1)])]),e("td",null,[e("strong",null,_(l.customer?.name||"Guest"),1)]),e("td",is,_(l.delivery_fee_minor?f(vt)(l.delivery_fee_minor,l.currency):"â"),1),e("td",ds,_(l.distance_km?l.distance_km+" km":"â"),1),e("td",null,[e("span",{class:X(["status-pill",`status-pill--${l.status}`])},_(f(ct)(l.status)),3)]),e("td",null,_(q(l.rider_id)||"â"),1),e("td",{class:"row-actions",onClick:t[5]||(t[5]=dt(()=>{},["stop"]))},[e("button",{class:"ed-btn-primary",type:"button",onClick:W=>h(l)},"Open",8,us)])],8,as))),128))])])]),s.orderTotalCount>0?(v(),g("div",cs,[e("button",{class:"ed-btn-primary",disabled:s.orderPage<=1,onClick:t[6]||(t[6]=l=>z(-1)),type:"button",style:{background:"var(--ui-surface-2)",color:"var(--ed-color-title)"}},"â¹ Prev",8,vs),e("span",null,"Page "+_(s.orderPage)+" of "+_(s.orderTotalPages)+" · "+_(s.orderTotalCount)+" orders",1),e("button",{class:"ed-btn-primary",disabled:s.orderPage>=s.orderTotalPages,onClick:t[7]||(t[7]=l=>z(1)),type:"button",style:{background:"var(--ui-surface-2)",color:"var(--ed-color-title)"}},"Next âº",8,ps)])):C("",!0)]),ie(Qe,{visible:d.value,title:`Order #${s.drawerOrder?.tracking_code??""}`,subtitle:s.drawerOrder?f(ct)(s.drawerOrder.status):"","max-width":"560px",onClose:t[12]||(t[12]=l=>d.value=!1)},{actions:me(()=>
1[e("button",{class:"ed-btn-primary",type:"button",onClick:t[10]||(t[10]=l=>d.value=!1),style:{background:"var(--ui-surface-2)",color:"var(--ed-color-title)"}},"Close"),e("button",{class:"ed-btn-danger",type:"button",onClick:t[11]||(t[11]=l=>s.drawerOrder&&J(s.drawerOrder))},"Delete order")]),default:me(()=>[s.drawerOrder?(v(),g(A,{key:0},[e("div",ms,[t[35]||(t[35]=e("label",{class:"form-label"},"Route",-1)),e("div",gs,[e("div",fs,[t[33]||(t[33]=e("span",{class:"rt-dot rt-dot--from"},null,-1)),e("span",null,_(s.drawerOrder.pickup_address||"â"),1)]),e("div",ys,[t[34]||(t[34]=e("span",{class:"rt-dot rt-dot--to"},null,-1)),e("span",null,_(s.drawerOrder.dropoff_address||"â"),1)])])]),e("div",hs,[t[36]||(t[36]=e("label",{class:"form-label"},"Customer",-1)),e("strong",_s,_(s.drawerOrder.customer?.name||"Guest"),1),s.drawerOrder.customer?.email?(v(),g("small",bs,_(s.drawerOrder.customer.email),1)):C("",!0)]),e("div",ks,[e("div",ws,[t[37]||(t[37]=e("label",{class:"form-label"},"Fee",-1)),e("strong",$s,_(s.drawerOrder.delivery_fee_minor?f(vt)(s.drawerOrder.delivery_fee_minor,s.drawerOrder.currency):"â"),1)]),e("div",Cs,[t[38]||(t[38]=e("label",{class:"form-label"},"Distance",-1)),e("strong",xs,_(s.drawerOrder.distance_km?s.drawerOrder.distance_km+" km":"â"),1)])]),e("div",Ss,[t[39]||(t[39]=e("label",{class:"form-label"},"Status",-1)),e("select",{class:"form-input",value:s.drawerOrder.status,onChange:t[8]||(t[8]=l=>k(l.target.value))},[(v(!0),g(A,null,L(f(Xe),l=>(v(),g("option",{key:l.code,value:l.code},_(l.label),9,Ps))),128))],40,Os)]),e("div",Ds,[t[41]||(t[41]=e("label",{class:"form-label"},"Assigned driver",-1)),e("select",{class:"form-input",value:s.drawerOrder.rider_id??"",onChange:t[9]||(t[9]=l=>N(l.target.value))},[t[40]||(t[40]=e("option",{value:""},"No driver",-1)),(v(!0),g(A,null,L(s.activeDrivers,l=>(v(),g("option",{key:l.rider_id,value:l.rider_id},_(l.name),9,As))),128))],40,Ts)])],64)):C("",!0)]),_:1}
1,8,["visible","title","subtitle"])]))}}),Es=fe(Rs,[["__scopeId","data-v-90169d07"]]),js={class:"dl-tab"},Ms={class:"ed-card"},Fs={class:"stats-strip"},Is={class:"stat-pill"},Ls={class:"stat-val"},Ns={class:"stat-pill stat-pill--ok"},qs={class:"stat-val"},Vs={class:"stat-pill stat-pill--warn"},Bs={class:"stat-val"},Us={key:0,class:"ed-empty"},Gs={key:1,class:"row-list"},Ks={key:0},Hs={class:"driver-meta"},zs={key:0,class:"muted-pill"},Ws={class:"muted"},Ys={key:0},Js={key:1},Xs={key:2},Zs={class:"muted"},Qs={key:0},ea={class:"row-actions"},ta=["onClick"],sa=["onClick"],aa={class:"ed-card"},oa={class:"form-group"},ra=["value"],na={class:"form-group"},la=["value"],ia={class:"form-row form-row--2"},da={class:"form-group"},ua={class:"form-group"},ca={class:"form-group"},va={class:"form-row form-row--2"},pa={class:"form-group"},ma=["value"],ga=["value"],fa={key:0,class:"form-group"},ya={class:"form-row form-row--2"},ha={class:"form-group"},_a={class:"form-group"},ba={class:"form-group"},ka={class:"form-row form-row--2"},wa={class:"check-row"},$a={class:"check-row"},Ca=["disabled"],xa=ge({__name:"DriversTab",props:{stats:{},drivers:{},driverRevenue:{},platformRevenue:{}},emits:["save","suspend","revenueChange"],setup(s,{emit:$}){const x=$,i=O(!1),y=O(!1),P=O("motorcycle"),d=O(""),u=[{value:"motorcycle",label:"Motorcycle"},{value:"scooter",label:"Scooter"},{value:"bicycle",label:"Bicycle"},{value:"car",label:"Car"},{value:"van",label:"Van"},{value:"truck",label:"Truck"}],o=ve({rider_id:0,name:"",phone:"",email:"",vehicle_type:"",vehicle_plate:"",city:"",country:"",bio:"",is_active:!0,is_available:!0});function c(){Object.assign(o,{rider_id:0,name:"",phone:"",email:"",vehicle_type:"motorcycle",vehicle_plate:"",city:"",country:"",bio:"",is_active:!0,is_available:!0}),k("motorcycle"),i.value=!0}function h(b){Object.assign(o,{rider_id:b.rider_id,name:b.name,phone:b.phone,email:b.email,vehicle_type:b.vehicle_type,vehicle_plate:b.vehicle_plate,city:b.city,country:b.country,bio:b.bio,is_active:b.is_active,is_available:b.is_available}),k((b.vehicle_type||"").trim()),i.value=!0}function k(b){const t=b.trim().toLowerCase(),l=u.find(W=>W.value===t);if(l){P.value=l.value,d.value="",o.vehicle_type=l.value;return}P.value="custom",d.value=b,o.vehicle_type=b}function N(b){const t=b.target.value;P.value=t,t==="custom"?o.vehicle_type=d.value.trim():(d.value="",o.vehicle_type=t)}function ee(){P.value==="custom"&&(o.vehicle_type=d.value.trim())}async function J(){!o.name.trim()||!o.email.trim()||(y.value=!0,x("save",{...o}),i.value=!1,y.value=!1)}const I=O(null);function z(b){I.value=b}function q(){I.value&&(x("suspend",I.value),I.value=null)}return(b,t)=>(v(),g("div",js,[e("div",Ms,[e("div",{class:"ed-card-header"},[t[14]||(t[14]=e("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("path",{d:"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}),e("circle",{cx:"12",cy:"7",r:"4"})],-1)),t[15]||(t[15]=e("span",null,"Drivers",-1)),e("button",{class:"ed-btn-primary",onClick:c,type:"button"},"+ Add driver")]),t[19]||(t[19]=e("p",{class:"ed-card-desc"},"Create driver profiles. Drivers log into the same app with the email below; they see the driver area instead of the customer flow.",-1)),e("div",Fs,[e("div",Is,[e("div",Ls,_(s.stats.drivers_total||0),1),t[16]||(t[16]=e("div",{class:"stat-lab"},"Total",-1))]),e("div",Ns,[e("div",qs,_(s.stats.drivers_active||0),1),t[17]||(t[17]=e("div",{class:"stat-lab"},"Active",-1))]),e("div",Vs,[e("div",Bs,_(s.stats.drivers_suspended||0),1),t[18]||(t[18]=e("div",{class:"stat-lab"},"Suspended",-1))])]),s.drivers.length?(v(),g("div",Gs,[(v(!0),g(A,null,L(s.drivers,l=>(v(),g("div",{class:"driver-row",key:l.rider_id},[e("div",{class:"driver-avatar",style:pe(l.avatar?`background-image:url('${l.avatar}')`:"")},[l.avatar?C("",!0):(v(),g("span",Ks,_(f(Rt)(l.name)),1))],4),e("div",Hs,[e("strong",null,[Z(_(l.name),1),l.is_active?C("",!0):(v(),g("span",zs,"Suspended"))]),e("span",Ws,[l.vehicle_type?(v(),g("span",Ys,_(l.vehicle_type),1)):C("",!0),l.vehicle_plate?(v(),g("span",Js," · "+_(l.vehicle_plate),1)):C("",!0),l.email?(v(),g("span",Xs," · "+_(l.email),1)):C("",!0)]),e("span",Zs,[Z(_(l.active_orders)+" active · "+_(l.completed)+" completed",1),l.rating>0?(v(),g("span",Qs," · "+_(l.rating.toFixed(1))+" rated",1)):C("",!0)])]),e("div",ea,[e("button",{class:"ed-btn-primary",onClick:W=>h(l),type:"button"},"Edit",8,ta),e("button",{class:"ed-btn-danger",onClick:W=>z(l),type:"button"},"Suspend",8,sa)])]))),128))])):(v(),g("div",Us,'No drivers yet. Click "Add driver" to create your first one.'))]),e("div",aa,[t[24]||(t[24]=H('<div class="ed-card-header" data-v-f9a49111>
1<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-f9a49111><line x1="12" y1="1" x2="12" y2="23" data-v-f9a49111></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6" data-v-f9a49111></path></svg><span data-v-f9a49111>Revenue split</span></div><p class="ed-card-desc" data-v-f9a49111>How delivery fees are shared between the driver and your business.</p>',2)),e("div",oa,[t[20]||(t[20]=e("label",{class:"form-label"},"Driver share (%)",-1)),e("input",{class:"form-input",type:"number",min:"0",max:"100",step:"0.5",value:s.driverRevenue,onInput:t[0]||(t[0]=l=>x("revenueChange",Number(l.target.value)))},null,40,ra),t[21]||(t[21]=e("span",{class:"form-label-hint"},"Percentage of each delivery fee credited to the driver's earnings.",-1))]),e("div",na,[t[22]||(t[22]=e("label",{class:"form-label"},"Platform share (%)",-1)),e("input",{class:"form-input",type:"number",value:s.platformRevenue,disabled:""},null,8,la),t[23]||(t[23]=e("span",{class:"form-label-hint"},"Auto-calculated as 100 minus driver share.",-1))])]),ie(Qe,{visible:i.value,title:o.rider_id?"Edit driver":"Add driver",subtitle:"Driver profile + login email",onClose:t[12]||(t[12]=l=>i.value=!1)},{actions:me(()=>[e("button",{class:"ed-btn-primary",onClick:t[11]||(t[11]=l=>i.value=!1),type:"button",style:{background:"var(--ui-surface-2)",color:"var(--ed-color-title)"}},"Cancel"),e("button",{class:"ed-btn-primary",onClick:J,disabled:y.value||!o.name.trim()||!o.email.trim(),type:"button"},_(o.rider_id?"Save changes":"Add driver"),9,Ca)]),default:me(()=>[e("div",ia,[e("div",da,[t[25]||(t[25]=e("label",{class:"form-label"},"Full name *",-1)),T(e("input",{class:"form-input",type:"text","onUpdate:modelValue":t[1]||(t[1]=l=>o.name=l),placeholder:"e.g. James Okafor",maxlength:"120"},null,512),[[j,o.name]])]),e("div",ua,[t[26]||(t[26]=e("label",{class:"form-label"},"Phone *",-1)),T(e("input",{class:"form-input",type:"tel","onUpdate:modelValue":t[2]||(t[2]=l=>o.phone=l),placeholder:"+234 800 000 0000",maxlength:"40"},null,512),[[j,o.phone]])])]),e("div",ca,[t[27]||(t[27]=e("label",{class:"form-label"},"Email *",-1)),T(e("input",{class:"form-input",type:"email","onUpdate:modelValue":t[3]||(t[3]=l=>o.email=l),placeholder:"[email protected]",maxlength:"255"},null,512),[[j,o.email]]),t[28]||(t[28]=e("span",{class:"form-label-hint"},"The driver logs in with this email and sees the driver dashboard instead of the customer flow.",-1))]),e("div",va,[e("div",pa,[t[30]||(t[30]=e("label",{class:"form-label"},"Vehicle type *",-1)),e("select",{class:"form-input",value:P.value,onChange:N},[(v(),g(A,null,L(u,l=>e("option",{key:l.value,value:l.value},_(l.label),9,ga)),64)),t[29]||(t[29]=e("option",{value:"custom"},"Custom",-1))],40,ma)]),P.value==="custom"?(v(),g("div",fa,[t[31]||(t[31]=e("label",{class:"form-label"},"Custom vehicle type",-1)),T(e("input",{class:"form-input",type:"text","onUpdate:modelValue":t[4]||(t[4]=l=>d.value=l),placeholder:"e.g. Cargo bike, Tricycle",maxlength:"60",onInput:ee},null,544),[[j,d.value]])])):C("",!0),e("div",{class:X(["form-group",{"form-group--full":P.value==="custom"}])},[t[32]||(t[32]=e("label",{class:"form-label"},"Vehicle plate *",-1)),T(e("input",{class:"form-input",type:"text","onUpdate:modelValue":t[5]||(t[5]=l=>o.vehicle_plate=l),placeholder:"e.g. ABC-123XY",maxlength:"40"},null,512),[[j,o.vehicle_plate]])],2)]),e("div",ya,[e("div",ha,[t[33]||(t[33]=e("label",{class:"form-label"},"City",-1)),T(e("input",{class:"form-input",type:"text","onUpdate:modelValue":t[6]||(t[6]=l=>o.city=l),placeholder:"e.g. Lagos",maxlength:"80"},null,512),[[j,o.city]])]),e("div",_a,[t[34]||(t[34]=e("label",{class:"form-label"},"Country",-1)),T(e("input",{class:"form-input",type:"text","onUpdate:modelValue":t[7]||(t[7]=l=>o.country=l),placeholder:"e.g. Nigeria",maxlength:"80"},null,512),[[j,o.country]])])]),e("div",ba,[t[35]||(t[35]=e("label",{class:"form-label"},"Bio / notes",-1)),T(e("textarea",{class:"form-input",rows:"2","onUpdate:modelValue":t[8]||(t[8]=l=>o.bio=l),placeholder:"Optional driver bio or internal notes"},null,512),[[j,o.bio]])]),e("div",ka,[e("label",wa,[T(e("input",{type:"checkbox","onUpdate:modelValue":t[9]||(t[9]=l=>o.is_active=l)},null,512),[[Oe,o.is_active]]),t[36]||(t[36]=e("span",null,"Active",-1))]),e("label",$a,[T(e("input",{type:"checkbox","onUpdate:modelValue":t[10]||(t[10]=l=>o.is_available=l)},null,512),[[Oe,o.is_available]]),t[37]||(t[37]=e("span",null,"Available for assignments",-1))])])]),_:1}
1,8,["visible","title"]),ie(Ze,{visible:!!I.value,title:"Suspend driver?",message:I.value?`${I.value.name} will no longer receive new assignments. You can re-activate them later by editing their profile.`:"","confirm-label":"Suspend",variant:"danger",onCancel:t[13]||(t[13]=l=>I.value=null),onConfirm:q},null,8,["visible","message"])]))}}),Sa=fe(xa,[["__scopeId","data-v-f9a49111"]]),Oa={class:"dl-tab"},Pa={class:"ed-card"},Da={key:0,class:"ed-empty"},Ta={key:1,class:"row-list"},Aa={class:"rule-meta"},Ra={class:"muted"},Ea={class:"muted accent"},ja={class:"row-actions"},Ma=["onClick"],Fa=["onClick"],Ia={class:"preset-grid"},La=["onClick"],Na=["innerHTML"],qa={class:"form-group"},Va=["placeholder"],Ba={key:0,class:"form-group"},Ua={key:1,class:"form-group"},Ga={key:2,class:"form-row form-row--2"},Ka={class:"form-group"},Ha={class:"form-group"},za={key:3,class:"form-group"},Wa={key:4,class:"form-row form-row--2"},Ya={class:"form-group"},Ja={class:"form-group"},Xa={key:5,class:"form-row form-row--2"},Za={class:"form-group"},Qa={class:"form-group"},eo={class:"fee-block"},to={class:"form-group"},so={class:"form-label"},ao={class:"currency-badge"},oo=["value"],ro={key:0},no={class:"check-row"},lo={key:0,class:"form-group",style:{"margin-top":"8px"}},io={class:"form-label"},uo={class:"currency-badge"},co=["value"],vo={key:1},po={class:"form-group"},mo={class:"form-label"},go={class:"currency-badge"},fo=["value"],yo={class:"form-row form-row--2"},ho={class:"form-group"},_o=["value"],bo={class:"form-group"},ko=["value"],wo={class:"check-row"},$o={key:0,class:"form-row form-row--2",style:{"margin-top":"8px"}},Co={class:"form-group"},xo={class:"form-label"},So={class:"currency-badge"},Oo=["value"],Po={class:"form-group"},Do={class:"form-label"},To={class:"currency-badge"},Ao=["value"],Ro={key:6,class:"fee-preview"},Eo={class:"fee-preview-val"},jo={class:"check-row"},Mo=["disabled"],Fo=ge({__name:"PricingTab",props:{rules:{},currency:{}},emits:["save","delete"],setup(s,{emit:$}){const x=s,i=$,y=O(!1),P=O(!1),d=ve(u());function u(){return{rule_id:0,name:"",delivery_type:"local",scope:"within_country",origin_country:"",origin_state:"",origin_city:"",dest_country:"",dest_state:"",dest_city:"",base_fee_minor:0,per_km_minor:0,per_kg_minor:0,weight_min_kg:null,weight_max_kg:null,min_fee_minor:0,max_fee_minor:0,is_active:!0,position:0,_preset:void 0,_usePerKm:!1,_useCap:!1}}function o(){Object.assign(d,u()),d.position=x.rules.length,y.value=!0}function c(D){Object.assign(d,D),d._preset=gt(D),d._usePerKm=D.per_km_minor>0,d._useCap=D.min_fee_minor>0||D.max_fee_minor>0,y.value=!0}function h(D){d._preset=D.id,d.scope=D.scope,d._usePerKm=D.hasPerKm,D.hasPerKg||(d.per_kg_minor=0)}const k=K(()=>ut.find(D=>D.id===d._preset)??null),N=K(()=>k.value?.scope??null),ee=K(()=>k.value?.hasPerKm??!1),J=K(()=>k.value?.hasPerKg??!1),I=K(()=>k.value?.namePlaceholder??"Rule name"),z=K(()=>{const D=x.currency||"USD",r=(d.base_fee_minor||0)/100,m=d._usePerKm?(d.per_km_minor||0)/100:0,B=(d.per_kg_minor||0)/100,V=[];return(r>0||!m&&!B)&&V.push(`${r.toFixed(2)} ${D}`),m>0&&V.push(`+ ${m.toFixed(2)} per km`),B>0&&V.push(`+ ${B.toFixed(2)} per kg`),d._useCap&&d.min_fee_minor>0&&V.push(`(min ${(d.min_fee_minor/100).toFixed(2)} ${D})`),d._useCap&&d.max_fee_minor>0&&V.push(`(max ${(d.max_fee_minor/100).toFixed(2)} ${D})`),V.join(" ")});function q(D){return!D&&D!==0?"":(D/100).toFixed(2)}function b(D){const r=String(D??"").trim();if(!r)return 0;let m=r.replace(/\s/g,"");const B=m.includes(","),V=m.includes(".");if(B&&V){const M=m.lastIndexOf(","),Y=m.lastIndexOf("."),ye=M>Y?",":".",ue=ye===","?".":",";m=m.split(ue).join(""),ye===","&&(m=m.replace(",","."))}else if(B){const M=m.split(",");if(M.length>2)m=M.join("");else{const Y=M[1]??"";Y.length===3&&M[0].length>=1?m=M.join(""):m=M[0]+"."+Y}}else if(V){const M=m.split(".");if(M.length>2){const Y=M.pop()||"";m=M.join("")+"."+Y}else if(M.length===2){const Y=M[1]??"";Y.length===3&&M[0].length>=1?m=M.join(""):m=M[0]+"."+Y}}const de=parseFloat(m);return Number.isFinite(de)?Math.round(de*100):0}async function t(){!d._preset||!d.name.trim()||(P.value=!0,i("save",{...d}),y.value=!1,P.value=!1)}const l=O(null);function W(D){l.value=D}function te(){l.value&&(i("delete",l.value),l.value=null)}return(D,r)=>(v(),g("div",Oa,[e("div",Pa,[e("div",{class:"ed-card-header"},[r[23]||(r[23]=e("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("line",{x1:"12",y1:"1",x2:"12",y2:"23"}),e("path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"})],-1)),r[24]||(r[24]=e("span",null,"Pricing rules",-1)),e("button",{class:"ed-btn-primary",onClick:o,type:"button"},"+ Add rule")]),r[25]||(r[25]=e("p",{class:"ed-card-desc"}," Each rule tells customers how much a delivery costs for a specific route or service type. You can have multiple rules; the app picks the best match for the customer's pickup and drop-off. ",-1)),s.rules.length?(v(),g("div",Ta,[(v(!0),g(A,null,L(s.rules,m=>(v(),g("div",{key:m.rule_id,class:"rule-row"},[e("div",Aa,[e("strong",null,[Z(_(m.name)+" ",1),e("span",{class:X(["status-pill",m.is_active?"status-pill--ok":"status-pill--off"])},_(m.is_active?"Active":"Off"),3)]),e("span",Ra,_(f(Et)(m)),1),e("span",Ea,_(f(jt)(m,s.currency)),1)]),e("div",ja,[e("button",{class:"ed-btn-primary",onClick:B=>c(m),type:"button"},"Edit",8,Ma),e("button",{class:"ed-btn-danger",onClick:B=>W(m),type:"button"},"Delete",8,Fa)])]))),128))])):(v(),g("div",Da,'No pricing rules yet. Click "Add rule" to create your first one.'))]),ie(Qe,{visible:y.value,title:d.rule_id?"Edit pricing rule":"New pricing rule",subt
1itle:"Pick a preset, set the price","max-width":"600px",onClose:r[21]||(r[21]=m=>y.value=!1)},{actions:me(()=>[e("button",{class:"ed-btn-primary",onClick:r[20]||(r[20]=m=>y.value=!1),type:"button",style:{background:"var(--ui-surface-2)",color:"var(--ed-color-title)"}},"Cancel"),e("button",{class:"ed-btn-primary",onClick:t,disabled:P.value||!d._preset||!d.name.trim(),type:"button"},_(d.rule_id?"Save changes":"Add rule"),9,Mo)]),default:me(()=>[r[54]||(r[54]=e("div",{class:"step-label"},"Step 1 - What kind of delivery is this?",-1)),e("div",Ia,[(v(!0),g(A,null,L(f(ut),m=>(v(),g("button",{key:m.id,class:X(["preset-card",{"preset-card--active":d._preset===m.id}]),type:"button",onClick:B=>h(m)},[(v(),g("svg",{class:"preset-icon",width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round",innerHTML:m.icon},null,8,Na)),e("strong",null,_(m.name),1),e("small",null,_(m.desc),1)],10,La))),128))]),d._preset?(v(),g(A,{key:0},[r[51]||(r[51]=e("div",{class:"step-label"},"Step 2 - Give this rule a name",-1)),e("div",qa,[T(e("input",{class:"form-input",type:"text",placeholder:I.value,"onUpdate:modelValue":r[0]||(r[0]=m=>d.name=m),maxlength:"120"},null,8,Va),[[j,d.name]])]),r[52]||(r[52]=e("div",{class:"step-label"},"Step 3 - Where does it apply?",-1)),N.value==="within_city"?(v(),g("div",Ba,[r[26]||(r[26]=e("label",{class:"form-label"},"City",-1)),T(e("input",{class:"form-input",type:"text",placeholder:"e.g. Lagos","onUpdate:modelValue":r[1]||(r[1]=m=>d.origin_city=m)},null,512),[[j,d.origin_city]]),r[27]||(r[27]=e("span",{class:"form-label-hint"},"Leave blank to match any city in your country.",-1))])):N.value==="within_state"?(v(),g("div",Ua,[r[28]||(r[28]=e("label",{class:"form-label"},"State / region",-1)),T(e("input",{class:"form-input",type:"text",placeholder:"e.g. Lagos State","onUpdate:modelValue":r[2]||(r[2]=m=>d.origin_state=m)},null,512),[[j,d.origin_state]]),r[29]||(r[29]=e("span",{class:"form-label-hint"},"Leave blank to match any state.",-1))])):N.value==="city_to_city"?(v(),g("div",Ga,[e("div",Ka,[r[30]||(r[30]=e("label",{class:"form-label"},"From city",-1)),T(e("input",{class:"form-input",type:"text",placeholder:"e.g. Lagos","onUpdate:modelValue":r[3]||(r[3]=m=>d.origin_city=m)},null,512),[[j,d.origin_city]])]),e("div",Ha,[r[31]||(r[31]=e("label",{class:"form-label"},"To city",-1)),T(e("input",{class:"form-input",type:"text",placeholder:"e.g. Ibadan","onUpdate:modelValue":r[4]||(r[4]=m=>d.dest_city=m)},null,512),[[j,d.dest_city]])])])):N.value==="within_country"?(v(),g("div",za,[r[32]||(r[32]=e("label",{class:"form-label"},"Country",-1)),T(e("input",{class:"form-input",type:"text",placeholder:"e.g. Nigeria","onUpdate:modelValue":r[5]||(r[5]=m=>d.origin_country=m)},null,512),[[j,d.origin_country]])])):N.value==="international"?(v(),g("div",Wa,[e("div",Ya,[r[33]||(r[33]=e("label",{class:"form-label"},"From country",-1)),T(e("input",{class:"form-input",type:"text",placeholder:"e.g. Nigeria","onUpdate:modelValue":r[6]||(r[6]=m=>d.origin_country=m)},null,512),[[j,d.origin_country]])]),e("div",Ja,[r[34]||(r[34]=e("label",{class:"form-label"},"To country",-1)),T(e("input",{class:"form-input",type:"text",placeholder:"e.g. Ghana","onUpdate:modelValue":r[7]||(r[7]=m=>d.dest_country=m)},null,512),[[j,d.dest_country]])])])):N.value==="importation"?(v(),g("div",Xa,[e("div",Za,[r[35]||(r[35]=e("label",{class:"form-label"},"Origin country (abroad)",-1)),T(e("input",{class:"form-input",type:"text",placeholder:"e.g. China","onUpdate:modelValue":r[8]||(r[8]=m=>d.origin_country=m)},null,512),[[j,d.origin_country]])]),e("div",Qa,[r[36]||(r[36]=e("label",{class:"form-label"},"Destination country",-1)),T(e("input",{class:"form-input",type:"text",placeholder:"e.g. Nigeria","onUpdate:modelValue":r[9]||(r[9]=m=>d.dest_country=m)},null,512),[[j,d.dest_country]])])])):C("",!0),r[53]||(r[53]=e("div",{class:"step-label"},"Step 4 - Set the price",-1)),e("div",eo,[e("div",to,[e("label",so,[r[37]||(r[37]=Z("Base fee ",-1)),e("span",ao,_(s.currency),1)]),e("input",{class:"form-input",type:"text",inputmode:"decimal",placeholder:"0.00",value:q(d.base_fee_minor),onInput:r[10]||(r[10]=m=>d.base_fee_minor=b(m.target.value))},null,40,oo),r[38]||(r[38]=e("span",{class:"form-label-hint"},"Charged on every order regardless of distance or weight.",-1))]),ee.value?(v(),g("div",ro,[e("label",no,[T(e("input",{type:"checkbox","onUpdate:modelValue":r[11]||(r[11]=m=>d._usePerKm=m)},null,512),[[Oe,d._usePerKm]]),r[39]||(r[39]=e("span",null,"Charge extra per kilometer",-1))]),d._usePerKm?(v(),g("div",lo,[e("label",io,[r[40]||(r[40]=Z("Per km rate ",-1)),e("span",uo,_(s.currency),1)]),e("input",{class:"form-input",type:"text",inputmode:"decimal",placeholder:"0.00",value:q(d.per_km_minor),onInput:r[12]||(r[12]=m=>d.per_km_minor=b(m.target.value))},null,40,co)])):C("",!0)])):C("",!0),J.value?(v(),g("div",vo,[e("div",po,[e("label",mo,[r[41]||(r[41]=Z("Per kg rate ",-1)),e("span",go,_(s.currency),1)]),e("input",{class:"form-input",type:"text",inputmode:"decimal",placeholder:"0.00",value:q(d.per_kg_minor),onInput:r[13]||(r[13]=m=>d.per_kg_minor=b(m.target.value))},null,40,fo),r[42]||(r[42]=e("span",{class:"form-label-hint"},"Applied to the package weight the customer enters at checkout.",-1))]),e("div",yo,[e("div",ho,[r[43]||(r[43]=e("label",{class:"form-label"},"Min weight (kg)",-1)),e("input",{class:"form-input",type:"number",min:"0",step:"0.1",placeholder:"e.g. 0",value:d.weight_min_kg??"",onInput:r[14]||(r[14]=m=>d.weight_min_kg=m.target.value?Number(m.target.value):null)},null,40,_o)]),e("div",bo,[r[44]||(r[44]=e("label",{class:"form-label"},"Max weight (kg)",-1)),e("input",{class:"form-input",type:"number",min:"0",step:"0.1",placeholder:"e.g. 50",value:d.weight_max_kg??"",onInput:r[15]||(r[15]=m=>d.weight_max_kg=m.target.value?Number(m.target.value):null)}
1,null,40,ko)])]),r[45]||(r[45]=e("span",{class:"form-label-hint"},"Rule only shows for orders within this weight range. Leave blank for no limit.",-1))])):C("",!0),e("div",null,[e("label",wo,[T(e("input",{type:"checkbox","onUpdate:modelValue":r[16]||(r[16]=m=>d._useCap=m)},null,512),[[Oe,d._useCap]]),r[46]||(r[46]=e("span",null,"Set minimum / maximum fee",-1))]),d._useCap?(v(),g("div",$o,[e("div",Co,[e("label",xo,[r[47]||(r[47]=Z("Minimum fee ",-1)),e("span",So,_(s.currency),1)]),e("input",{class:"form-input",type:"text",inputmode:"decimal",placeholder:"0.00",value:q(d.min_fee_minor),onInput:r[17]||(r[17]=m=>d.min_fee_minor=b(m.target.value))},null,40,Oo)]),e("div",Po,[e("label",Do,[r[48]||(r[48]=Z("Maximum fee ",-1)),e("span",To,_(s.currency),1)]),e("input",{class:"form-input",type:"text",inputmode:"decimal",placeholder:"0.00",value:q(d.max_fee_minor),onInput:r[18]||(r[18]=m=>d.max_fee_minor=b(m.target.value))},null,40,Ao)])])):C("",!0)])]),z.value?(v(),g("div",Ro,[r[49]||(r[49]=e("span",{class:"fee-preview-label"},"Live estimate",-1)),e("span",Eo,_(z.value),1)])):C("",!0),e("label",jo,[T(e("input",{type:"checkbox","onUpdate:modelValue":r[19]||(r[19]=m=>d.is_active=m)},null,512),[[Oe,d.is_active]]),r[50]||(r[50]=e("span",null,"Rule is active (visible to customers)",-1))])],64)):C("",!0)]),_:1}
1,8,["visible","title"]),ie(Ze,{visible:!!l.value,title:"Delete pricing rule?",message:l.value?`Delete "${l.value.name}"? Customers will no longer see this option at checkout.`:"","confirm-label":"Delete",variant:"danger",onCancel:r[22]||(r[22]=m=>l.value=null),onConfirm:te},null,8,["visible","message"])]))}}),Io=fe(Fo,[["__scopeId","data-v-d4e83984"]]),Lo={class:"dl-tab"},No={class:"ed-card"},qo={class:"row-list"},Vo={class:"gw-head"},Bo={class:"gw-info"},Uo={class:"gw-toggle"},Go=["onClick"],Ko={class:"gw-status"},Ho={class:"gw-fields"},zo={class:"check-row"},Wo=["checked","onChange"],Yo={class:"form-group"},Jo=["onUpdate:modelValue"],Xo={class:"form-group"},Zo={class:"form-label"},Qo={key:0,class:"saved-tag"},er=["onUpdate:modelValue"],tr={class:"form-group"},sr=["onUpdate:modelValue"],ar={class:"form-group"},or={class:"form-label"},rr={key:0,class:"saved-tag"},nr=["onUpdate:modelValue"],lr=["disabled","onClick"],ir={class:"ed-card"},dr={class:"ed-toggle-row"},ur={class:"ed-card"},cr={class:"form-group"},vr=["value"],pr={class:"gw-help"},mr={class:"ed-card"},gr={key:0,class:"gw-help"},fr={key:1,class:"gw-help"},yr={key:2,class:"row-list"},hr={class:"gw-head"},_r={class:"gw-info"},br={key:0},kr={class:"gw-toggle"},wr={class:"gw-status"},$r={class:"gw-fields"},Cr={key:0,class:"gw-help"},xr={key:1,class:"gw-help"},Sr={class:"gw-actions"},Or=["onClick"],Pr=["onClick"],Dr=["onClick"],Tr=ge({__name:"PaymentsTab",props:{GATEWAYS:{},gatewayStates:{},savingGateway:{},enableCod:{type:Boolean},payoutThresholdMinor:{},currency:{},payoutRequests:{},payoutRequestsLoading:{type:Boolean}},emits:["toggleGateway","saveGateway","toggleCod","thresholdChange","approveRequest","rejectRequest","payRequest"],setup(s,{emit:$}){const x=s,i=$;function y(o){return x.gatewayStates[o]}function P(o){return`${(Number(o||0)/100).toFixed(2)} ${x.currency||"USD"}`}function d(o){const c=Number(String(o||"0").replace(/[^\d.-]/g,""));i("thresholdChange",Number.isFinite(c)?Math.max(0,Math.round(c)):0)}function u(o){const c=o.payout_details||{};if(o.payout_method==="paypal")return c.paypal_email?[{label:"PayPal email",value:String(c.paypal_email)}]:[];if(o.payout_method==="bank"){const h=[];return c.bank_account_name&&h.push({label:"Account name",value:String(c.bank_account_name)}),c.bank_name&&h.push({label:"Bank name",value:String(c.bank_name)}),c.bank_account_number&&h.push({label:"Account number",value:String(c.bank_account_number)}),c.bank_routing&&h.push({label:"Routing",value:String(c.bank_routing)}),c.bank_swift&&h.push({label:"SWIFT/BIC",value:String(c.bank_swift)}),c.bank_country&&h.push({label:"Bank country",value:String(c.bank_country)}),h}return Object.entries(c).filter(([,h])=>String(h??"").trim()!=="").map(([h,k])=>({label:h.replace(/_/g," "),value:String(k)}))}return(o,c)=>(v(),g("div",Lo,[e("div",No,[c[8]||(c[8]=H('<div class="ed-card-header" data-v-4ffca372><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-4ffca372><rect x="1" y="4" width="22" height="16" rx="2" ry="2" data-v-4ffca372></rect><line x1="1" y1="10" x2="23" y2="10" data-v-4ffca372></line></svg><span data-v-4ffca372>Payment gateways</span></div><p class="ed-card-desc" data-v-4ffca372>Connect a payment provider so customers can pay online. You can activate multiple gateways at once.</p>',2)),e("div",qo,[(v(!0),g(A,null,L(s.GATEWAYS,h=>(v(),g("div",{key:h.code,class:"gw-card"},[e("div",Vo,[e("div",{class:"gw-logo",style:pe(`background:${h.color}`)},_(h.initial),5),e("div",Bo,[e("strong",null,_(h.name),1),e("small",null,_(h.desc),1)]),e("div",Uo,[e("button",{class:X(["ed-toggle-btn",{on:y(h.code).status==="active"}]),type:"button",onClick:k=>i("toggleGateway",h.code)},[...c[2]||(c[2]=[e("span",{class:"ed-toggle-thumb"},null,-1)])],10,Go),e("span",Ko,_(y(h.code).status==="active"?"Active":"Off"),1)])]),e("div",Ho,[e("label",zo,[e("input",{type:"checkbox",checked:y(h.code).test_mode,onChange:k=>y(h.code).test_mode=k.target.checked},null,40,Wo),c[3]||(c[3]=e("span",null,"Test mode (sandbox keys)",-1))]),h.code==="stripe"||h.code==="paystack"?(v(),g(A,{key:0},[e("div",Yo,[c[4]||(c[4]=e("label",{class:"form-label"},"Public key",-1)),T(e("input",{class:"form-input",type:"text",placeholder:"pk_...","onUpdate:modelValue":k=>y(h.code).public_key=k},null,8,Jo),[[j,y(h.code).public_key]])]),e("div",Xo,[e("label",Zo,[c[5]||(c[5]=Z(" Secret key ",-1)),y(h.code).has_secret_key?(v(),g("span",Qo,"saved")):C("",!0)]),T(e("input",{class:"form-input",type:"password",placeholder:"Leave blank to keep existing","onUpdate:modelValue":k=>y(h.code).secret_key=k},null,8,er),[[j,y(h.code).secret_key]])])],64)):C("",!0),h.code==="paypal"?(v(),g(A,{key:1}
1,[e("div",tr,[c[6]||(c[6]=e("label",{class:"form-label"},"Client ID",-1)),T(e("input",{class:"form-input",type:"text",placeholder:"Client ID","onUpdate:modelValue":k=>y(h.code).paypal_client_id=k},null,8,sr),[[j,y(h.code).paypal_client_id]])]),e("div",ar,[e("label",or,[c[7]||(c[7]=Z(" Client secret ",-1)),y(h.code).has_paypal_client_secret?(v(),g("span",rr,"saved")):C("",!0)]),T(e("input",{class:"form-input",type:"password",placeholder:"Leave blank to keep existing","onUpdate:modelValue":k=>y(h.code).paypal_client_secret=k},null,8,nr),[[j,y(h.code).paypal_client_secret]])])],64)):C("",!0),e("button",{class:"ed-btn-primary gw-save",type:"button",disabled:s.savingGateway===h.code,onClick:k=>i("saveGateway",h.code)},_(s.savingGateway===h.code?"Saving...":"Save"),9,lr)])]))),128))])]),e("div",ir,[c[11]||(c[11]=e("div",{class:"ed-card-header"},[e("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("circle",{cx:"12",cy:"12",r:"10"}),e("path",{d:"M12 6v6l4 2"})]),e("span",null,"Cash on delivery")],-1)),e("div",dr,[c[10]||(c[10]=e("div",null,[e("div",{class:"ed-toggle-label"},"Allow cash on delivery"),e("div",{class:"ed-toggle-hint"},"Customer can choose pay-on-pickup at checkout instead of paying online.")],-1)),e("button",{class:X(["ed-toggle-btn",{on:s.enableCod}]),type:"button",onClick:c[0]||(c[0]=h=>i("toggleCod",!s.enableCod))},[...c[9]||(c[9]=[e("span",{class:"ed-toggle-thumb"},null,-1)])],2)])]),e("div",ur,[c[13]||(c[13]=H('<div class="ed-card-header" data-v-4ffca372><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-4ffca372><path d="M12 1v22" data-v-4ffca372></path><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6" data-v-4ffca372></path></svg><span data-v-4ffca372>Driver payouts</span></div><p class="ed-card-desc" data-v-4ffca372>Set the minimum available amount a driver must reach before they can request payout.</p>',2)),e("div",cr,[c[12]||(c[12]=e("label",{class:"form-label"},"Payout threshold (minor unit)",-1)),e("input",{class:"form-input",type:"number",min:"0",step:"1",value:s.payoutThresholdMinor,onInput:c[1]||(c[1]=h=>d(h.target.value))},null,40,vr),e("small",pr,"Current threshold: "+_(P(s.payoutThresholdMinor)),1)])]),e("div",mr,[c[14]||(c[14]=H('<div class="ed-card-header" data-v-4ffca372><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-4ffca372><path d="M3 12h18" data-v-4ffca372></path><path d="M12 3v18" data-v-4ffca372></path></svg><span data-v-4ffca372>Payout requests</span></div><p class="ed-card-desc" data-v-4ffca372>Review driver payout requests and move them through approval to paid.</p>',2)),s.payoutRequestsLoading?(v(),g("div",gr,"Loading requests...")):s.payoutRequests.length?(v(),g("div",yr,[(v(!0),g(A,null,L(s.payoutRequests,h=>(v(),g("div",{key:h.id,class:"gw-card"},[e("div",hr,[e("div",_r,[e("strong",null,"#"+_(h.id)+" · "+_(h.rider_name||`Driver ${h.rider_id}`),1),e("small",null,_(P(h.amount_minor))+" · "+_(h.status),1),h.rider_email?(v(),g("small",br,_(h.rider_email),1)):C("",!0)]),e("div",kr,[e("span",wr,_(h.status),1)])]),e("div",$r,[h.note?(v(),g("div",Cr,"Driver note: "+_(h.note),1)):C("",!0),h.decision_note?(v(),g("div",xr,"Decision note: "+_(h.decision_note),1)):C("",!0),(v(!0),g(A,null,L(u(h),k=>(v(),g("div",{key:`${h.id}-${k.label}`,class:"gw-help"},_(k.label)+": "+_(k.value),1))),128)),e("div",Sr,[h.status==="pending"?(v(),g("button",{key:0,class:"ed-btn-secondary",type:"button",onClick:k=>i("rejectRequest",h.id)}," Reject ",8,Or)):C("",!0),h.status==="pending"?(v(),g("button",{key:1,class:"ed-btn-primary",type:"button",onClick:k=>i("approveRequest",h.id)}," Approve ",8,Pr)):C("",!0),h.status==="approved"?(v(),g("button",{key:2,class:"ed-btn-primary",type:"button",onClick:k=>i("payRequest",h.id)}," Mark paid ",8,Dr)):C("",!0)])])]))),128))])):(v(),g("div",fr,"No payout requests yet."))])]))}}),Ar=fe(Tr,[["__scopeId","data-v-4ffca372"]]),Rr={class:"dl-tab"},Er={class:"ed-card"},jr={class:"layout-grid"},Mr=["onClick"],Fr={class:"layout-preview"},Ir=["data-code"],Lr={class:"layout-meta"},Nr={key:0,class:"layout-check"},qr={class:"layout-name"},Vr={class:"layout-tagline"},Br={class:"ed-card"},Ur={class:"theme-grid"},Gr=["onClick"],Kr={class:"theme-meta"},Hr={key:0,class:"theme-check"},zr={class:"theme-name"},Wr={class:"theme-tagline"},Yr={class:"theme-swatches"},Jr={class:"ed-card"},Xr={class:"color-grid"},Zr={class:"color-group-label"},Qr={class:"color-picker-row"},en=["onClick"],tn={class:"ed-card"},sn={class:"form-row form-row--2"},an={class:"form-group"},on=["value"],rn={class:"form-group"},nn=["value"],ln={class:"form-group"},dn=["value"],un={class:"form-group"},cn=["value"],vn={class:"form-group"},pn=["value"],mn=ge({__name:"AppearanceTab",props:{layout:{},theme:{},customColors:{},featureName:{},heroText:{},heroSubtext:{},ctaText:{},emptyText:{}},emits:["layoutChange","themeChange","colorChange","textChange"],setup(s,{emit:$}){const x=$,i=[{code:"atlas",name:"Atlas",tagline:"Hero + side-by-side rails"},{code:"stage",name:"Stage",tagline:"Big focus card with status"},{code:"pulse",name:"Pulse",tagline:"Stacked timeline list"}
1],y=[{code:"midnight",name:"Midnight",tagline:"Deep blue · default",bg:"#0f172a",surface:"#1e293b",gradient:"linear-gradient(135deg,#3b82f6,#06b6d4)",swatches:["#0f172a","#1e293b","#3b82f6","#06b6d4"]},{code:"arctic",name:"Arctic",tagline:"Light, calm",bg:"#e0f2fe",surface:"#ffffff",gradient:"linear-gradient(135deg,#0ea5e9,#22d3ee)",swatches:["#e0f2fe","#ffffff","#0ea5e9","#22d3ee"]},{code:"ember",name:"Ember",tagline:"Warm, food-friendly",bg:"#1c1917",surface:"#292524",gradient:"linear-gradient(135deg,#f97316,#ef4444)",swatches:["#1c1917","#292524","#f97316","#ef4444"]},{code:"forest",name:"Forest",tagline:"Green, eco brands",bg:"#052e16",surface:"#14532d",gradient:"linear-gradient(135deg,#10b981,#84cc16)",swatches:["#052e16","#14532d","#10b981","#84cc16"]},{code:"prism",name:"Prism",tagline:"Vibrant purple",bg:"#1e1b4b",surface:"#312e81",gradient:"linear-gradient(135deg,#7c3aed,#ec4899)",swatches:["#1e1b4b","#312e81","#7c3aed","#ec4899"]},{code:"solar",name:"Solar",tagline:"Yellow, sunny",bg:"#1c1917",surface:"#292524",gradient:"linear-gradient(135deg,#eab308,#f59e0b)",swatches:["#1c1917","#292524","#eab308","#f59e0b"]}],P=[{key:"bg",label:"Background"},{key:"surface",label:"Card surface"},{key:"text",label:"Primary text"},{key:"sub",label:"Secondary text"},{key:"accent",label:"Accent (start)"},{key:"accentEnd",label:"Accent (end)"},{key:"headerBg",label:"Header background"},{key:"headerTitle",label:"Header title"},{key:"headerIcon",label:"Header icon"}];function d(u,o){x("colorChange",u,o||"")}return(u,o)=>(v(),g("div",Rr,[e("div",Er,[o[15]||(o[15]=H('<div class="ed-card-header" data-v-15b67091><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-15b67091><rect x="3" y="3" width="18" height="18" rx="2" data-v-15b67091></rect><path d="M3 9h18" data-v-15b67091></path><path d="M9 21V9" data-v-15b67091></path></svg><span data-v-15b67091>Layout</span></div><p class="ed-card-desc" data-v-15b67091>Pick the home screen shape. Each layout ships with a distinct customer experience.</p>',2)),e("div",jr,[(v(),g(A,null,L(i,c=>e("div",{key:c.code,class:X(["layout-card",{active:s.layout===c.code}]),onClick:h=>x("layoutChange",c.code)},[e("div",Fr,[e("div",{class:"layout-mock","data-code":c.code},[c.code==="atlas"?(v(),g(A,{key:0},[o[5]||(o[5]=e("div",{class:"mock-hero"},null,-1)),o[6]||(o[6]=e("div",{class:"mock-tiles"},[e("div"),e("div")],-1))],64)):c.code==="stage"?(v(),g(A,{key:1},[o[7]||(o[7]=e("div",{class:"mock-stage"},null,-1)),o[8]||(o[8]=e("div",{class:"mock-row"},null,-1)),o[9]||(o[9]=e("div",{class:"mock-row"},null,-1))],64)):(v(),g(A,{key:2},[o[10]||(o[10]=e("div",{class:"mock-row"},null,-1)),o[11]||(o[11]=e("div",{class:"mock-row"},null,-1)),o[12]||(o[12]=e("div",{class:"mock-row"},null,-1)),o[13]||(o[13]=e("div",{class:"mock-row tiny"},null,-1))],64))],8,Ir)]),e("div",Lr,[s.layout===c.code?(v(),g("span",Nr,[...o[14]||(o[14]=[e("svg",{width:"14",height:"14",viewBox:"0 0 16 16"},[e("path",{d:"M6.5 12.5L2 8l1.4-1.4 3.1 3.1 6.1-6.1L14 5z",fill:"#3b7eff"})],-1)])])):C("",!0),e("span",qr,_(c.name),1),e("span",Vr,_(c.tagline),1)])],10,Mr)),64))])]),e("div",Br,[o[17]||(o[17]=e("div",{class:"ed-card-header"},[e("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("circle",{cx:"12",cy:"12",r:"10"})]),e("span",null,"Theme")],-1)),o[18]||(o[18]=e("p",{class:"ed-card-desc"},"6 production-ready palettes. Override any colour below.",-1)),e("div",Ur,[(v(),g(A,null,L(y,c=>e("div",{key:c.code,class:X(["theme-card",{active:s.theme===c.code}]),onClick:h=>x("themeChange",c.code)},[e("div",{class:"theme-preview",style:pe({background:c.bg})},[e("div",{class:"theme-card-mini",style:pe({background:c.surface})},[e("div",{class:"theme-bar",style:pe({background:c.gradient})},null,4)],4),e("div",{class:"theme-btn",style:pe({background:c.gradient})},null,4)],4),e("div",Kr,[s.theme===c.code?(v(),g("span",Hr,[...o[16]||(o[16]=[e("svg",{width:"14",height:"14",viewBox:"0 0 16 16"},[e("path",{d:"M6.5 12.5L2 8l1.4-1.4 3.1 3.1 6.1-6.1L14 5z",fill:"#3b7eff"})],-1)])])):C("",!0),e("span",zr,_(c.name),1),e("span",Wr,_(c.tagline),1)]),e("div",Yr,[(v(!0),g(A,null,L(c.swatches,(h,k)=>(v(),g("span",{key:k,style:pe({background:h})},null,4))),128))])],10,Gr)),64))])]),e("div",Jr,[o[19]||(o[19]=H('<div class="ed-card-header" data-v-15b67091>
1<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-15b67091><circle cx="12" cy="12" r="10" data-v-15b67091></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" data-v-15b67091></path><path d="M2 12h20" data-v-15b67091></path></svg><span data-v-15b67091>Custom colours</span></div><p class="ed-card-desc" data-v-15b67091>Override any palette colour. Leave blank to inherit from the theme.</p>',2)),e("div",Xr,[(v(),g(A,null,L(P,c=>e("div",{key:c.key,class:"color-group"},[e("span",Zr,_(c.label),1),e("div",Qr,[ie(Dt,{"model-value":s.customColors[c.key]||"","onUpdate:modelValue":h=>d(c.key,h)},null,8,["model-value","onUpdate:modelValue"]),s.customColors[c.key]?(v(),g("button",{key:0,type:"button",class:"btn-reset-color",onClick:h=>d(c.key,"")},"Reset",8,en)):C("",!0)])])),64))])]),e("div",tn,[o[25]||(o[25]=H('<div class="ed-card-header" data-v-15b67091><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-15b67091><polyline points="4 7 4 4 20 4 20 7" data-v-15b67091></polyline><line x1="9" y1="20" x2="15" y2="20" data-v-15b67091></line><line x1="12" y1="4" x2="12" y2="20" data-v-15b67091></line></svg><span data-v-15b67091>Labels & text</span></div><p class="ed-card-desc" data-v-15b67091>Customise the words customers see on the delivery screen.</p>',2)),e("div",sn,[e("div",an,[o[20]||(o[20]=e("label",{class:"form-label"},"Feature name",-1)),e("input",{class:"form-input",type:"text",placeholder:"Delivery",value:s.featureName,onInput:o[0]||(o[0]=c=>x("textChange","feature_name",c.target.value)),maxlength:"60"},null,40,on)]),e("div",rn,[o[21]||(o[21]=e("label",{class:"form-label"},"CTA button label",-1)),e("input",{class:"form-input",type:"text",placeholder:"New delivery",value:s.ctaText,onInput:o[1]||(o[1]=c=>x("textChange","cta_text",c.target.value)),maxlength:"40"},null,40,nn)])]),e("div",ln,[o[22]||(o[22]=e("label",{class:"form-label"},"Hero headline",-1)),e("input",{class:"form-input",type:"text",placeholder:"Fast, reliable delivery",value:s.heroText,onInput:o[2]||(o[2]=c=>x("textChange","hero_text",c.target.value)),maxlength:"120"},null,40,dn)]),e("div",un,[o[23]||(o[23]=e("label",{class:"form-label"},"Hero subtext",-1)),e("input",{class:"form-input",type:"text",placeholder:"Track your order in real time",value:s.heroSubtext,onInput:o[3]||(o[3]=c=>x("textChange","hero_subtext",c.target.value)),maxlength:"200"},null,40,cn)]),e("div",vn,[o[24]||(o[24]=e("label",{class:"form-label"},"Empty state text",-1)),e("input",{class:"form-input",type:"text",placeholder:"No active deliveries",value:s.emptyText,onInput:o[4]||(o[4]=c=>x("textChange","empty_text",c.target.value)),maxlength:"120"},null,40,pn)])])]))}}),gn=fe(mn,[["__scopeId","data-v-15b67091"]]),fn={class:"dl-tab"},yn={class:"ed-card"},hn={class:"form-row form-row--2"},_n={class:"form-group"},bn=["value"],kn={class:"form-group"},wn=["value"],$n=["value"],Cn={class:"form-row form-row--2"},xn={class:"form-group"},Sn=["value"],On={class:"form-group"},Pn=["value"],Dn={class:"ed-card"},Tn={class:"ed-toggle-label"},An={class:"ed-toggle-hint"},Rn=["onClick"],En={class:"ed-card"},jn={class:"ed-toggle-label"},Mn={class:"ed-toggle-hint"},Fn=["onClick"],In={class:"ed-card"},Ln={class:"ed-toggle-row"},Nn={class:"form-group",style:{"margin-top":"4px"}},qn={class:"revenue-row"},Vn=["value"],Bn={class:"revenue-platform"},Un={class:"ed-card"},Gn={class:"form-group"},Kn=["value"],Hn={key:0,class:"form-group"},zn=["value"],Wn={class:"ed-card"},Yn={class:"form-row form-row--2"},Jn={class:"form-group"},Xn=["value"],Zn={class:"form-group"},Qn=["value"],el=ge({__name:"SettingsTab",props:{settings:{},countriesList:{}},emits:["settingChange","pickCountry","revenueChange"],setup(s,{emit:$}){const x=$;function i(d,u){x("settingChange",d,u)}const y=[{key:"require_login",label:"Require login to place order",hint:"Customer must be signed in before booking a delivery."},{key:"scheduling_enabled",label:"Scheduled deliveries",hint:"Customer can pick a future date/time for the pickup."},{key:"rating_enabled",label:"Driver ratings",hint:"Customer can rate the driver after delivery."},{key:"tipping_enabled",label:"Tipping",hint:"Customer can add an optional tip at checkout."},{key:"push_enabled",label:"Push notifications",hint:"Notify customers and drivers on status changes."}],P=[{key:"require_proof_photo",label:"Require photo on delivery",hint:"Driver must upload a photo of the handoff to mark an order delivered."},{key:"require_otp",label:"Require OTP confirmation",hint:"Customer receives a one-time code; driver must enter it to complete delivery."},{key:"require_signature",label:"Require e-signature",hint:"Customer signs on the driver's device at handoff."}];return(d,u)=>(v(),g("div",fn,[e("div",yn,[u[18]||(u[18]=H('<div class="ed-card-header" data-v-c703e23f>
1<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-c703e23f><circle cx="12" cy="12" r="3" data-v-c703e23f></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z" data-v-c703e23f></path></svg><span data-v-c703e23f>General</span></div><p class="ed-card-desc" data-v-c703e23f>Currency, country and basic delivery defaults.</p>',2)),e("div",hn,[e("div",_n,[u[10]||(u[10]=e("label",{class:"form-label"},"Currency",-1)),e("input",{class:"form-input",type:"text",placeholder:"USD",value:s.settings.currency,onInput:u[0]||(u[0]=o=>i("currency",o.target.value)),maxlength:"3"},null,40,bn),u[11]||(u[11]=e("span",{class:"form-label-hint"},"3-letter ISO code (USD, NGN, GBP). All prices show in this currency.",-1))]),e("div",kn,[u[13]||(u[13]=e("label",{class:"form-label"},"Default country",-1)),e("select",{class:"form-input",value:s.settings.country_iso2,onChange:u[1]||(u[1]=o=>x("pickCountry",o.target.value))},[u[12]||(u[12]=e("option",{value:""},"Select country",-1)),(v(!0),g(A,null,L(s.countriesList,o=>(v(),g("option",{key:o.iso2,value:o.iso2},_(o.flag)+" "+_(o.name),9,$n))),128))],40,wn)])]),e("div",Cn,[e("div",xn,[u[14]||(u[14]=e("label",{class:"form-label"},"Order label",-1)),e("input",{class:"form-input",type:"text",placeholder:"Order",value:s.settings.order_label,onInput:u[2]||(u[2]=o=>i("order_label",o.target.value)),maxlength:"40"},null,40,Sn),u[15]||(u[15]=e("span",{class:"form-label-hint"},'Shown to customers e.g. "Order #1234".',-1))]),e("div",On,[u[16]||(u[16]=e("label",{class:"form-label"},"Default estimate distance (km)",-1)),e("input",{class:"form-input",type:"number",min:"1",step:"1",value:s.settings.default_distance_km,onInput:u[3]||(u[3]=o=>i("default_distance_km",Number(o.target.value)))},null,40,Pn),u[17]||(u[17]=e("span",{class:"form-label-hint"},"Used on the pricing preview when no address is entered yet.",-1))])])]),e("div",Dn,[u[20]||(u[20]=H('<div class="ed-card-header" data-v-c703e23f><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-c703e23f><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" data-v-c703e23f></path><polyline points="14 2 14 8 20 8" data-v-c703e23f></polyline><line x1="16" y1="13" x2="8" y2="13" data-v-c703e23f></line><line x1="16" y1="17" x2="8" y2="17" data-v-c703e23f></line></svg><span data-v-c703e23f>Order options</span></div>',1)),(v(),g(A,null,L(y,o=>e("div",{class:"ed-toggle-row",key:o.key},[e("div",null,[e("div",Tn,_(o.label),1),e("div",An,_(o.hint),1)]),e("button",{class:X(["ed-toggle-btn",{on:s.settings[o.key]}]),type:"button",onClick:c=>i(o.key,!s.settings[o.key])},[...u[19]||(u[19]=[e("span",{class:"ed-toggle-thumb"},null,-1)])],10,Rn)])),64))]),e("div",En,[u[22]||(u[22]=e("div",{class:"ed-card-header"},[e("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"})]),e("span",null,"Proof of delivery")],-1)),(v(),g(A,null,L(P,o=>e("div",{class:"ed-toggle-row",key:o.key},[e("div",null,[e("div",jn,_(o.label),1),e("div",Mn,_(o.hint),1)]),e("button",{class:X(["ed-toggle-btn",{on:s.settings[o.key]}]),type:"button",onClick:c=>i(o.key,!s.settings[o.key])},[...u[21]||(u[21]=[e("span",{class:"ed-toggle-thumb"},null,-1)])],10,Fn)])),64))]),e("div",In,[u[28]||(u[28]=H('<div class="ed-card-header" data-v-c703e23f>
1<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-c703e23f><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" data-v-c703e23f></path><circle cx="9" cy="7" r="4" data-v-c703e23f></circle><line x1="19" y1="8" x2="19" y2="14" data-v-c703e23f></line><line x1="22" y1="11" x2="16" y2="11" data-v-c703e23f></line></svg><span data-v-c703e23f>Driver onboarding</span></div>',1)),e("div",Ln,[u[24]||(u[24]=e("div",null,[e("div",{class:"ed-toggle-label"},"Allow driver applications in-app"),e("div",{class:"ed-toggle-hint"},'Show an "Apply to drive" button so anyone can submit a driver application from within the app.')],-1)),e("button",{class:X(["ed-toggle-btn",{on:s.settings.enable_driver_apply}]),type:"button",onClick:u[4]||(u[4]=o=>i("enable_driver_apply",!s.settings.enable_driver_apply))},[...u[23]||(u[23]=[e("span",{class:"ed-toggle-thumb"},null,-1)])],2)]),e("div",Nn,[u[26]||(u[26]=e("label",{class:"form-label"},"Driver revenue share (%)",-1)),e("div",qn,[e("input",{class:"form-input revenue-input",type:"number",min:"0",max:"100",step:"1",value:s.settings.driver_revenue_percent,onInput:u[5]||(u[5]=o=>x("revenueChange",Number(o.target.value)))},null,40,Vn),u[25]||(u[25]=e("span",{class:"revenue-sep"},"Driver keeps",-1)),e("span",Bn,"Platform gets "+_(s.settings.platform_fee_percent)+"%",1)]),u[27]||(u[27]=e("span",{class:"form-label-hint"},"How much of each delivery fee goes to the driver. The remainder stays as platform revenue.",-1))])]),e("div",Un,[u[32]||(u[32]=H('<div class="ed-card-header" data-v-c703e23f><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-c703e23f><polygon points="1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6" data-v-c703e23f></polygon><line x1="8" y1="2" x2="8" y2="18" data-v-c703e23f></line><line x1="16" y1="6" x2="16" y2="22" data-v-c703e23f></line></svg><span data-v-c703e23f>Maps & geocoding</span></div><p class="ed-card-desc" data-v-c703e23f>OSM works for free with no key. Other providers need an API key.</p>',2)),e("div",Gn,[u[30]||(u[30]=e("label",{class:"form-label"},"Map provider",-1)),e("select",{class:"form-input",value:s.settings.map_provider,onChange:u[6]||(u[6]=o=>i("map_provider",o.target.value))},[...u[29]||(u[29]=[H('<option value="osm" data-v-c703e23f>OpenStreetMap (free, no key needed)</option><option value="mapbox" data-v-c703e23f>Mapbox</option><option value="google" data-v-c703e23f>Google Maps</option><option value="geoapify" data-v-c703e23f>Geoapify</option><option value="here" data-v-c703e23f>HERE Maps</option><option value="maptiler" data-v-c703e23f>MapTiler</option>',6)])],40,Kn)]),s.settings.map_provider!=="osm"?(v(),g("div",Hn,[u[31]||(u[31]=e("label",{class:"form-label"},"API key",-1)),e("input",{class:"form-input",type:"text",placeholder:"Your map provider API key",value:s.settings.map_provider_key,onInput:u[7]||(u[7]=o=>i("map_provider_key",o.target.value))},null,40,zn)])):C("",!0)]),e("div",Wn,[u[35]||(u[35]=e("div",{class:"ed-card-header"},[e("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07A19.5 19.5 0 0 1 4.69 13a19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 3.6 2.18h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"})]),e("span",null,"Support contact")],-1)),u[36]||(u[36]=e("p",{class:"ed-card-desc"},"Shown to customers in the app when they need help with an order.",-1)),e("div",Yn,[e("div",Jn,[u[33]||(u[33]=e("label",{class:"form-label"},"Support email",-1)),e("input",{class:"form-input",type:"email",placeholder:"[email protected]",value:s.settings.support_email,onInput:u[8]||(u[8]=o=>i("support_email",o.target.value)),maxlength:"255"},null,40,Xn)]),e("div",Zn,[u[34]||(u[34]=e("label",{class:"form-label"},"Support phone",-1)),e("input",{class:"form-input",type:"tel",placeholder:"+1 555 000 0000",value:s.settings.support_phone,onInput:u[9]||(u[9]=o=>i("support_phone",o.target.value)),maxlength:"40"},null,40,Qn)])])])]))}}),tl=fe(el,[["__scopeId","data-v-c703e23f"]]),sl={class:"delivery-editor"},al={key:0,class:"dl-loading"},ol={key:0,class:"auto-save-badge"},rl={class:"ed-sub-nav"},nl=["onClick"],ll={key:0,class:"dl-tab-badge"},il=ge({__name:"DeliveryEditor",setup(s){const $=mt();function x(){return $.currentValueId??0}const i=Mt(x),{settings:y,customColors:P,gatewayStates:d,GATEWAYS:u,load:o,loadOrders:c,loadDrivers:h,loadRules:k,loadGateways:N,ensureCountriesLoaded:ee,pickCountry:J,debouncedSave:I,debouncedSaveFast:z,onRevenueChange:q,toggleOrdersSelectAll:b,toggleOrderSelected:t,openOrderDrawer:l,onDrawerStatusChange:W,onDrawerAssignRider:te,bulkDeleteOrders:D,debouncedReloadOrdersSearch:r,changeOrderPage:m,saveDriverPayload:B,suspendDriver:V,saveRulePayload:de,deleteRule:M,toggleGatewayActive:Y,saveGateway:ye,loadPayoutRequests:ue,updatePayoutRequestStatus:we,headers:Ae}=i,se=i.stats,Re=i.activeCount,Ee=i.loading,je=i.autoSaving,Me=i.countriesList,U=i.orders,Fe=i.ordersLoading,$e=i.orderFilter,oe=i.orderSearch,he=i.orderPage,re=i.orderTotalCount,Ie=i.orderTotalPages,ce=i.selectedOrderIds,Le=i.allOrdersSelected,Ce=i.orderDrawerOpen,Pe=i.drawerOrder,Ne=i.drivers,qe=i.activeDrivers,Ve=i.rules,Be=i.savingGateway,xe=i.payoutRequests,_e=i.payoutRequestsLoading,F=i.payoutPendingCount,G=O("orders"),Ue=K(()=>[{id:"orders",label:"Orders",badge:se.value.pending>0?String(se.value.pending):""},{id:"drivers",label:"Drivers",badge:""},{id:"pricing",label:"Pricing",badge:""},{id:"payments",label:"Payments",badge:F.value>0?String(F.value):""},{id:"appearance",label:"Appearance",badge:""},{id:"settings",label:"Settings",badge:""}]),ae=O(null);function De(ne){ae.value=ne}async function Ge(){const ne=ae.value;if(ae.value=null,!!ne)try{const w=await(await fetch(`/api/v2/editor/delivery/${x()}/orders/${ne.order_id}`,{method:"DELETE",headers:Ae()})).json();if(w.error)throw new Error(w.message);U.value=U.value.filter(Q=>Q.order_id!==ne.order_id),o()}catch{}}return xt(async()=>{await o(),await Promise.all([c(!0),h(),k(),N(),ue(),ee()])}),(ne,S)=>(v(),g("div",sl,[f(Ee)?(v(),g("div",al,[...S[14]||(S[14]=[H('<div class="dl-shimmer-card" data-v-5e311030><div class="dl-sh-row dl-sh-title" data-v-5e311030></div><div class="dl-sh-row dl-sh-theme" data-v-5e311030></div><div class="dl-sh-row dl-sh-theme" data-v-5e311030></div></div><div class="dl-shimmer-card" data-v-5e311030><div class="dl-sh-row dl-sh-title" data-v-5e311030></div><div class="dl-sh-row dl-sh-field" data-v-5e311030></div><div class="dl-sh-row dl-sh-field" data-v-5e311030></div></div>',2)])])):(v(),g(A,{key:1},[ie(St,{name:"fade"},{default:me(()=>[f(je)?(v(),g("div",ol,"Saving...")):C("",!0)]),_:1}),e("div",rl,[(v(!0),g(A,null,L(Ue.value,w=>(v(),g("button",{key:w.id,class:X(["ed-sub-nav-item",{active:G.value===w.id}]),onClick:Q=>G.value=w.id}
1,[Z(_(w.label)+" ",1),w.badge?(v(),g("span",ll,_(w.badge),1)):C("",!0)],10,nl))),128))]),G.value==="orders"?(v(),ke(Es,{key:0,orders:f(U),"orders-loading":f(Fe),"order-filter":f($e),"onUpdate:orderFilter":S[0]||(S[0]=w=>Je($e)?$e.value=w:null),"order-search":f(oe),"onUpdate:orderSearch":S[1]||(S[1]=w=>Je(oe)?oe.value=w:null),"order-page":f(he),"order-total-count":f(re),"order-total-pages":f(Ie),"selected-order-ids":f(ce),"all-orders-selected":f(Le),"order-drawer-open":f(Ce),"onUpdate:orderDrawerOpen":S[2]||(S[2]=w=>Je(Ce)?Ce.value=w:null),"drawer-order":f(Pe),"active-drivers":f(qe),stats:f(se),"active-count":f(Re),onLoadOrders:f(c),onToggleSelectAll:f(b),onToggleSelected:f(t),onOpenDrawer:f(l),onDrawerStatusChange:f(W),onDrawerAssignRider:f(te),onBulkDelete:f(D),onConfirmDelete:De,onDebouncedSearch:f(r),onChangePage:f(m)},null,8,["orders","orders-loading","order-filter","order-search","order-page","order-total-count","order-total-pages","selected-order-ids","all-orders-selected","order-drawer-open","drawer-order","active-drivers","stats","active-count","onLoadOrders","onToggleSelectAll","onToggleSelected","onOpenDrawer","onDrawerStatusChange","onDrawerAssignRider","onBulkDelete","onDebouncedSearch","onChangePage"])):G.value==="drivers"?(v(),ke(Sa,{key:1,drivers:f(Ne),stats:f(se),"driver-revenue":f(y).driver_revenue_percent,"platform-revenue":f(y).platform_fee_percent,onSave:f(B),onSuspend:f(V),onRevenueChange:f(q)},null,8,["drivers","stats","driver-revenue","platform-revenue","onSave","onSuspend","onRevenueChange"])):G.value==="pricing"?(v(),ke(Io,{key:2,rules:f(Ve),currency:f(y).currency,onSave:f(de),onDelete:f(M)},null,8,["rules","currency","onSave","onDelete"])):G.value==="payments"?(v(),ke(Ar,{key:3,GATEWAYS:f(u),"gateway-states":f(d),"saving-gateway":f(Be),"enable-cod":f(y).enable_cod,"payout-threshold-minor":f(y).payout_threshold_minor,currency:f(y).currency,"payout-requests":f(xe),"payout-requests-loading":f(_e),onToggleGateway:f(Y),onSaveGateway:f(ye),onToggleCod:S[3]||(S[3]=w=>{f(y).enable_cod=w,f(I)()}),onThresholdChange:S[4]||(S[4]=w=>{f(y).payout_threshold_minor=w,f(I)()}),onApproveRequest:S[5]||(S[5]=w=>f(we)(w,"approve")),onRejectRequest:S[6]||(S[6]=w=>f(we)(w,"reject")),onPayRequest:S[7]||(S[7]=w=>f(we)(w,"pay"))},null,8,["GATEWAYS","gateway-states","saving-gateway","enable-cod","payout-threshold-minor","currency","payout-requests","payout-requests-loading","onToggleGateway","onSaveGateway"])):G.value==="appearance"?(v(),ke(gn,{key:4,layout:f(y).layout,theme:f(y).theme,"custom-colors":f(P),"feature-name":f(y).feature_name,"hero-text":f(y).hero_text,"hero-subtext":f(y).hero_subtext,"cta-text":f(y).cta_text,"empty-text":f(y).empty_text,onLayoutChange:S[8]||(S[8]=w=>{f(y).layout=w,f(z)()}),onThemeChange:S[9]||(S[9]=w=>{f(y).theme=w,f(z)()}),onColorChange:S[10]||(S[10]=(w,Q)=>{f(P)[w]=Q,f(z)()}),onTextChange:S[11]||(S[11]=(w,Q)=>{f(y)[w]=Q,f(I)()})},null,8,["layout","theme","custom-colors","feature-name","hero-text","hero-subtext","cta-text","empty-text"])):G.value==="settings"?(v(),ke(tl,{key:5,settings:f(y),"countries-list":f(Me),onSettingChange:S[12]||(S[12]=(w,Q)=>{f(y)[w]=Q,f(I)()}),onPickCountry:f(J),onRevenueChange:f(q)},null,8,["settings","countries-list","onPickCountry","onRevenueChange"])):C("",!0)],64)),ie(Ze,{visible:!!ae.value,title:"Delete order?",message:ae.value?`Delete order #${ae.value.tracking_code}? This cannot be undone.`:"","confirm-label":"Delete",variant:"danger",onCancel:S[13]||(S[13]=w=>ae.value=null),onConfirm:Ge},null,8,["visible","message"])]))}}),yl=fe(il,[["__scopeId","data-v-5e311030"]]);export{yl 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.